Cross platform GUI project (debugger for FreeBASIC)

User projects written in or related to FreeBASIC.
TJF
Posts: 3604
Joined: Dec 06, 2009 22:27
Location: N47°, E15°
Contact:

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby TJF » Feb 01, 2015 8:50

Hi!

SARG wrote:hi TJF,

Not a lot of time today :-(

A wise man said: no problem it's not a race ... (= thanks for sending a status message ;-)

SARG wrote:The only binary I have found : mingw32-gtksourceview3-3.4.1-1.fc17.noarch.rpm

There're much more versions of that binary at the build systems at RedHat, Suse or Mandriva. I couldn't find a matching for the original GTK+ bundle (3.6) yet.

SARG wrote:I can't open it. Pls upload a zip file version.

7-Zip is reported to be able to handle rpm and deb packages.

BR
SARG
Posts: 1160
Joined: May 27, 2005 7:15
Location: FRANCE

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby SARG » Feb 01, 2015 11:45

Hi TJF,

A philosopher and a wise man ; maybe we could change the world. AGS has to find his quality ;-)

TJF wrote:7-Zip is reported to be able to handle rpm and deb packages.

Ok, my own version was too old. Update and I got the dll. No problem to compile nor when executing.

More to come.

BR
TJF
Posts: 3604
Joined: Dec 06, 2009 22:27
Location: N47°, E15°
Contact:

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby TJF » Feb 01, 2015 13:31

Hi all!

A philosopher and a wise man ; maybe we could change the world. AGS has to find his quality ;-)

For me, AGS is still the guardian angel. (I must take care that I don't run faster than he can fly ;-)

In this post I'd like to enlight the point of classic coding and XML a bit.

Most GTK+ examples are based on the GTK function families, provided for the related widget. Ie. for the task to create and open an new window, you'll find code like:

Code: Select all

VAR win = gtk_window_new(GTK_WINDOW_TOPLEVEL)

gtk_widget_set_size_request(GTK_WIDGET(win), 300, 200)
gtk_widget_show_all(GTK_WIDGET(win))

That code creates a new window widget, sets its size request and makes the window visible. Downsides: the code isn't very readable, you have to know a lot of function names and you have to cast between several object levels, using prepared cast macros like GTK_WIDGET(). (In this snippet the GTK_WIDGET cast isn't necessary, because the GtkWindow is a GtkWidget.)

Alternatively, it's possible to operate on the level of the GObject directly (without the above mentioned cast)

Code: Select all

VAR win = gtk_window_new(GTK_WINDOW_TOPLEVEL)

g_object_set(win _
  ,  "width-request", 300 _
  , "height-request", 200 _
  ,        "visible", TRUE _
  , NULL)

Both snippet do the same, the later passes all properties in a single function call with variable arguments.

IMHO the later is more readable, since you can easy bring the properties in a table like format. But it's more risky, since the compiler cannot do type checking in the variable parameter list. Fancy things may happen when you forget the parameter list terminator NULL, or you pass the wrong parameter type (so it's safer to cast the properties, ie. CAST(gint, 300), which makes it less readable again).

In contrast, XML code parsed by GtkBuilder is a combination of both snippets. Multiple object properties can be set at once. And the GtkBuilder takes care of the matching types. The related XML code looks like

<object class="GtkWindow" id="MyWindow">
<property name="width-request">300</property>
<property name="height-request">200</property>
<property name="visible">True</property>
</object>

and it's also possible to use that XML in FB code (without using Glade3)

Code: Select all

VAR t = _
    "<interface>" _
  &   "<object class='GtkWindow' id='MyWindow'>" _
  &     "<property name='width-request'>300</property>" _
  &     "<property name='height-request'>200</property>" _
  &     "<property name='visible'>True</property>" _
  &   "</object>" _
  & "</interface>"

VAR build = gtk_builder_new()
gtk_builder_add_from_string(build, t, -1, NULL)

You can mix the coding styles, as I did in snippet 2.


Note:

To make the snippets run, you've to enclose the code by

Code: Select all

#LIBPATH "C:/YourPathToGtk/lib"
#INCLUDE ONCE "Gir/Gtk-3.0.bi"

gtk_init(@__FB_ARGC__, @__FB_ARGV__)

' snippet [123]

gtk_main()


BR
TJF
Posts: 3604
Joined: Dec 06, 2009 22:27
Location: N47°, E15°
Contact:

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby TJF » Feb 01, 2015 18:36

Hi again!

@SARG: I've a help request:

The below code block contains the XML code of the actions I currently use. An action contains different context, depending on the proxied widget(s)

  • toolbar button: label, icon, tooltip
  • button: short-label, tooltip (, optional icon)
  • menu item: label (???, icon, tooltip ???)
(They do not contain a shortcut (=accelerator). Shortcuts gets specified during initialization.)

Can you please

  • check if an action is missing
  • check / edit the texts in short-label, label and tooltip
  • replace in the signal tag the attribute handler="act_ToDo" by meaningful names (case-sensitive)? The signal handler name will be the name of the callback function in the FB source code. Ie. when you replace in a certain action the handler name 'act_ToDo' by 'act_FirstTry', then you'll find a file named act_FirstTry.bas in the tobac folder containing the code

    Code: Select all

    SUB act_FirstTry CDECL ALIAS "act_FirstTry" ( _
      BYVAL action AS GtkAction PTR, _
      BYVAL user_data AS gpointer) EXPORT

    ?*__("callback act_FirstTry")

    END SUB

    This callback gets called when the user triggers the action (by shortcut, by toolbar button, by menu or by normal button).

    Signal handler names should be unique. Otherwise they both trigger the same callback. This shouldn't happen here, since you already checked for double-tee. If you still find doubles, please list them separately.

Here's the actions specification

Code: Select all

  <object class="GtkAccelGroup" id="accelgroup1"/>
  <object class="GtkActionGroup" id="actiongroup1">
    <property name="accel_group">accelgroup1</property>
    <child>
      <object class="GtkAction" id="action001">
        <property name="label" translatable="yes">Run to Cursor</property>
        <property name="tooltip" translatable="yes">Execute the debuggee up to the cursor position</property>
        <property name="stock_id">dbg-runto</property>
        <signal name="activate" handler="act_runto" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action002">
        <property name="label" translatable="yes">Next step</property>
        <property name="tooltip" translatable="yes">Execute the debuggee step by step</property>
        <property name="stock_id">dbg-step</property>
        <signal name="activate" handler="act_step" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action003">
        <property name="label" translatable="yes">Step over procs</property>
        <property name="tooltip" translatable="yes">Step over a SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_over</property>
        <signal name="activate" handler="act_step_over" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action004">
        <property name="label" translatable="yes">Step out current proc</property>
        <property name="tooltip" translatable="yes">Exit the current SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_out</property>
        <signal name="activate" handler="act_step_out" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action005">
        <property name="label" translatable="yes">Step top called proc</property>
        <property name="tooltip" translatable="yes">Top the next called SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_start</property>
        <signal name="activate" handler="act_step_start" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action006">
        <property name="label" translatable="yes">Step bottom current proc</property>
        <property name="tooltip" translatable="yes">Bottom the current SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_end</property>
        <signal name="activate" handler="act_step_end" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action007">
        <property name="label" translatable="yes">Run</property>
        <property name="tooltip" translatable="yes">Run until halt</property>
        <property name="stock_id">dbg-run</property>
        <signal name="activate" handler="act_run" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action008">
        <property name="label" translatable="yes">Fast Run</property>
        <property name="tooltip" translatable="yes">Caution fast run to cursor</property>
        <property name="stock_id">dbg-fastrun</property>
        <signal name="activate" handler="act_fastrun" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action009">
        <property name="label" translatable="yes">Halt running debuggee</property>
        <property name="tooltip" translatable="yes">Halt running program</property>
        <property name="stock_id">dbg-stop</property>
        <signal name="activate" handler="act_stop" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action010">
        <property name="label" translatable="yes">Kill debuggee</property>
        <property name="tooltip" translatable="yes">Caution kill process</property>
        <property name="stock_id">dbg-kill</property>
        <signal name="activate" handler="act_kill" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action011">
        <property name="label" translatable="yes">Step auto</property>
        <property name="tooltip" translatable="yes">Step automatically, stopped by halt</property>
        <property name="stock_id">dbg-auto</property>
        <signal name="activate" handler="act_auto" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action012">
        <property name="label" translatable="yes">Step auto multi threads</property>
        <property name="stock_id">dbg-run</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action013">
        <property name="label" translatable="yes">Modify execution</property>
        <property name="tooltip" translatable="yes">CAUTION: modify execution, continue with line under cursor</property>
        <property name="stock_id">dbg-exemod</property>
        <signal name="activate" handler="act_exemod" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action020">
        <property name="label" translatable="yes">Variable Dump</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action021">
        <property name="label" translatable="yes">Edit var value</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action022">
        <property name="label" translatable="yes">Show/Expand variable</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action023">
        <property name="label" translatable="yes">Show z/w/string</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action024">
        <property name="short-label" translatable="yes">Shortcuts ...</property>
        <property name="label" translatable="yes">Shortcut key list ...</property>
        <signal name="activate" handler="act_Shortcut" object="dialog600" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action1001">
        <property name="label" translatable="yes">Set watched</property>
        <property name="tooltip" translatable="yes">Set watched ???</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action1002">
        <property name="label" translatable="yes">Set watched+trace</property>
        <property name="tooltip" translatable="yes">Set watched+trace on ???</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action99">
        <property name="tooltip" translatable="yes">Information about this application</property>
        <property name="stock_id">gtk-about</property>
        <signal name="activate" handler="gtk_dialog_run" object="aboutdialog1" swapped="yes"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action100">
        <property name="label" translatable="yes">Break on var value</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action101">
        <property name="label" translatable="yes">Select index</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action106">
        <property name="label" translatable="yes">Change byte &lt;&gt; zstring type</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action050">
        <property name="label" translatable="yes">Show proc in source</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action108">
        <property name="label" translatable="yes">Locate calling line</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action109">
        <property name="label" translatable="yes">Collaps calling line</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action110">
        <property name="label" translatable="yes">Expand proc/var</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action111">
        <property name="label" translatable="yes">List all proc/var (log)</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action112">
        <property name="label" translatable="yes">List selected proc/var (log)</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action201">
        <property name="label" translatable="yes">ASM code of proc</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action202">
        <property name="label" translatable="yes">Toggle sort by module or by proc</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action203">
        <property name="label" translatable="yes">All procs followed</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action204">
        <property name="label" translatable="yes">No procs followed</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action300">
        <property name="label" translatable="yes">Show in var window</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action305">
        <property name="label" translatable="yes">Toggle Tracing</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action306">
        <property name="label" translatable="yes">Cancel all Tracing</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action307">
        <property name="label" translatable="yes">Switch watch1</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action308">
        <property name="label" translatable="yes">Switch watch2</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action309">
        <property name="label" translatable="yes">Switch watch3</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action310">
        <property name="label" translatable="yes">Switch watch4</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action311">
        <property name="label" translatable="yes">Delete</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action312">
        <property name="label" translatable="yes">Delete all</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action414">
        <property name="label" translatable="yes">Set/Clear Breakpoint</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action415">
        <property name="label" translatable="yes">Set/Clear tempo Breakpoint</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action416">
        <property name="label" translatable="yes">Enable/Disable Breakpoint</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action417">
        <property name="label" translatable="yes">Manage Breakpoints</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action418">
        <property name="label" translatable="yes">Show var</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action419">
        <property name="label" translatable="yes">Set watched var</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action420">
        <property name="label" translatable="yes">Find text</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action421">
        <property name="label" translatable="yes">Toggle bookmark</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action422">
        <property name="label" translatable="yes">Next bookmark</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action423">
        <property name="label" translatable="yes">Previous bookmark</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action424">
        <property name="label" translatable="yes">Goto Line</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action426">
        <property name="label" translatable="yes">Line Address</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action427">
        <property name="label" translatable="yes">ASM code of line</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action428">
        <property name="label" translatable="yes">ASM code of proc (from line)</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action429">
        <property name="label" translatable="yes">Mark no executable lines</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action430">
        <property name="label" translatable="yes">Focus lines</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action431">
        <property name="label" translatable="yes">Add notes</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action460">
        <property name="label" translatable="yes">Release debugged programm</property>
        <property name="tooltip" translatable="yes">Release debugged programm</property>
        <property name="stock_id">dbg-free</property>
        <signal name="activate" handler="act_free" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action461">
        <property name="label" translatable="yes">Mini command window</property>
        <property name="tooltip" translatable="yes">Mini command window</property>
        <property name="stock_id">dbg-minicmd</property>
        <signal name="activate" handler="act_minicmd" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action462">
        <property name="label" translatable="yes">Restart debugging</property>
        <property name="tooltip" translatable="yes">Restart debugging</property>
        <property name="stock_id">dbg-restart</property>
        <signal name="activate" handler="act_restart" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action463">
        <property name="label" translatable="yes">Last 10 exe</property>
        <property name="tooltip" translatable="yes">Last 10 executable(s)</property>
        <property name="stock_id">dbg-multiexe</property>
        <signal name="activate" handler="act_multiexe" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action464">
        <property name="label" translatable="yes">Attach program</property>
        <property name="tooltip" translatable="yes">Attach running program</property>
        <property name="stock_id">dbg-attachexe</property>
        <signal name="activate" handler="act_attachexe" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action465">
        <property name="label" translatable="yes">Select EXE/BAS</property>
        <property name="tooltip" translatable="yes">Select EXE/BAS file</property>
        <property name="stock_id">dbg-files</property>
        <signal name="activate" handler="act_files" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action466">
        <property name="label" translatable="yes">Tools</property>
        <property name="tooltip" translatable="yes">Some usefull....Tools</property>
        <property name="stock_id">dbg-tools</property>
        <signal name="activate" handler="act_tools" object="menu900" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action467">
        <property name="label" translatable="yes">Open/close notes</property>
        <property name="tooltip" translatable="yes">Open or close the notes ???</property>
        <property name="stock_id">dbg-notes</property>
        <signal name="activate" handler="act_notes" object="textview1" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action468">
        <property name="label" translatable="yes">Enlarge/reduce source</property>
        <property name="tooltip" translatable="yes">Enlarge/reduce source</property>
        <property name="stock_id">dbg-source</property>
        <signal name="activate" handler="act_source" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action469">
        <property name="label" translatable="yes">Enlarge/reduce proc/var</property>
        <property name="tooltip" translatable="yes">Enlarge/reduce proc/var</property>
        <property name="stock_id">dbg-varproc</property>
        <signal name="activate" handler="act_varproc" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action470">
        <property name="label" translatable="yes">Enlarge/reduce memory dump</property>
        <property name="tooltip" translatable="yes">Enlarge/reduce memory dump</property>
        <property name="stock_id">dbg-memory</property>
        <signal name="activate" handler="act_memory" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action500">
        <property name="label" translatable="yes">Select next thread to be executed</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action501">
        <property name="label" translatable="yes">Show next executed line (source)</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action502">
        <property name="label" translatable="yes">Show line creating thread (source) </property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action503">
        <property name="label" translatable="yes">Show first proc of thread (suorce)</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action504">
        <property name="label" translatable="yes">Show proc (proc/var)</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action506">
        <property name="label" translatable="yes">Proc call Backtracking</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action507">
        <property name="label" translatable="yes">Proc call Chaining</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action508">
        <property name="label" translatable="yes">Proc Adress</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action509">
        <property name="label" translatable="yes">Kill thread</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action510">
        <property name="label" translatable="yes">Expand one thread</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action511">
        <property name="label" translatable="yes">Collapse all threads</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action512">
        <property name="label" translatable="yes">List all threads</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action900">
        <property name="label" translatable="yes">Settings ...</property>
        <signal name="activate" handler="act_Settings" object="dialog500" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action902">
        <property name="label" translatable="yes">Compile info</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action903">
        <property name="label" translatable="yes">Help</property>
        <signal name="activate" handler="act_help" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action904">
        <property name="label" translatable="yes">Launch tutorial</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action905">
        <property name="label" translatable="yes">Launch IDE</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action906">
        <property name="label" translatable="yes">Quick edit</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action907">
        <property name="label" translatable="yes">Compile and run</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action908">
        <property name="label" translatable="yes">Copy note to clipboard</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action909">
        <property name="label" translatable="yes">Show log file</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action910">
        <property name="label" translatable="yes">Hide log file</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action911">
        <property name="label" translatable="yes">Delete log file</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action912">
        <property name="label" translatable="yes">List enum</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action913">
        <property name="label" translatable="yes">Process list</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action914">
        <property name="label" translatable="yes">DLLs list</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action916">
        <property name="label" translatable="yes">Translate Win Message</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action917">
        <property name="label" translatable="yes">Bin/Dec/Hex</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action918">
        <property name="label" translatable="yes">Show fast run timer</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action919">
        <property name="label" translatable="yes">Set JIT debugger</property>
        <signal name="activate" handler="act_ToDo" swapped="no"/>
      </object>
    </child>
  </object>


Thank you.
SARG
Posts: 1160
Joined: May 27, 2005 7:15
Location: FRANCE

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby SARG » Feb 01, 2015 22:18

Good evening (or morning),

TJF wrote:
A philosopher and a wise man ; maybe we could change the world. AGS has to find his quality ;-)

For me, AGS is still the guardian angel. (I must take care that I don't run faster than he can fly ;-)

Lol.
TJF wrote:In this post I'd like to enlight the point of classic coding and XML a bit.

Thanks that's a bit clearer.
You had to be negotiator in hostage-takings. ;-) So ok I follow your way to do.
To get an idea, how many functions in GTK ?

TJF wrote:@SARG: I've a help request:

The below code block contains the XML code of the actions I currently use. An action contains different context, depending on the proxied widget(s)
Can you please
check if an action is missing
check / edit the texts in short-label, label and tooltip
replace in the signal tag the attribute handler="act_ToDo" by meaningful names (case-sensitive)? The signal handler name will be the name of the callback function in the FB source code. Ie. when you replace in a certain action the handler name 'act_ToDo' by 'act_FirstTry', then you'll find a file named act_FirstTry.bas in the tobac folder containing the code

At last, a bit of work. I'll try to do it at the latest for tuesday.

TJF wrote:menu item: label (???, icon, tooltip ???)

What are the first question marks ?
SARG
Posts: 1160
Joined: May 27, 2005 7:15
Location: FRANCE

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby SARG » Feb 03, 2015 12:56

Hi TJF,

Work done : some texts changed or fixed, names for handler created and no double found. Hoping nothing forgotten.

I need some explanations :
- "<property name="stock_id">dbg-runto</property>" what is the use ?

- swapped="no" ?

- diff between short-label (found only 1 time) and label ?

- in the extract below there is a tooltip for a menu entry (no corresponding button). I found this case only 2 times.
Why ?

<object class="GtkAction" id="action1002">
<property name="label" translatable="yes">Set watched+trace</property>
<property name="tooltip" translatable="yes">Set watched+trace on ???</property>
<signal name="activate" handler="act_varwtchtrace" swapped="no"/>
</object>
</child>

- missing sub entries copy to clipboard like "list proc/var"

Code: Select all

 <child>
      <object class="GtkAction" id="actionxxx">
        <property name="label" translatable="yes">Copy to Clipboard all proc/var (log)</property>
        <signal name="activate" handler="act_varcopyall" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="actionxxx">
        <property name="label" translatable="yes">Copy to Clipboard selected proc/var (log)</property>
        <signal name="activate" handler="act_varcopysel" swapped="no"/>
      </object>
    </child>


Edit : an other missing

Code: Select all

<child>
      <object class="GtkAction" id="actionxxx">
        <property name="label" translatable="yes">Pointed data dump</property>
        <signal name="activate" handler="act_varderefdump" swapped="no"/>
      </object>
    </child>


Modified code block.

Code: Select all

<object class="GtkAccelGroup" id="accelgroup1"/>
  <object class="GtkActionGroup" id="actiongroup1">
    <property name="accel_group">accelgroup1</property>
    <child>
      <object class="GtkAction" id="action001">
        <property name="label" translatable="yes">Run to Cursor</property>
        <property name="tooltip" translatable="yes">Execute the debuggee up to the line under cursor</property>
        <property name="stock_id">dbg-runto</property>
        <signal name="activate" handler="act_runto" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action002">
        <property name="label" translatable="yes">Next step</property>
        <property name="tooltip" translatable="yes">Execute the debuggee step by step</property>
        <property name="stock_id">dbg-step</property>
        <signal name="activate" handler="act_step" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action003">
        <property name="label" translatable="yes">Step over procs</property>
        <property name="tooltip" translatable="yes">Step over a SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_over</property>
        <signal name="activate" handler="act_step_over" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action004">
        <property name="label" translatable="yes">Step out current proc</property>
        <property name="tooltip" translatable="yes">Exit the current SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_out</property>
        <signal name="activate" handler="act_step_out" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action005">
        <property name="label" translatable="yes">Step top called proc</property>
        <property name="tooltip" translatable="yes">Top of the next called SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_start</property>
        <signal name="activate" handler="act_step_start" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action006">
        <property name="label" translatable="yes">Step bottom current proc</property>
        <property name="tooltip" translatable="yes">Bottom of the current SUB or FUNCTION</property>
        <property name="stock_id">dbg-step_end</property>
        <signal name="activate" handler="act_step_end" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action007">
        <property name="label" translatable="yes">Run</property>
        <property name="tooltip" translatable="yes">Run until halt by user or by breakpoint</property>
        <property name="stock_id">dbg-run</property>
        <signal name="activate" handler="act_run" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action008">
        <property name="label" translatable="yes">Fast Run</property>
        <property name="tooltip" translatable="yes">Fast run up to the line under cursor, CAUTION : some errors could arise</property>
        <property name="stock_id">dbg-fastrun</property>
        <signal name="activate" handler="act_fastrun" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action009">
        <property name="label" translatable="yes">Halt running debuggee</property>
        <property name="tooltip" translatable="yes">Halt running program</property>
        <property name="stock_id">dbg-stop</property>
        <signal name="activate" handler="act_stop" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action010">
        <property name="label" translatable="yes">Kill debuggee</property>
        <property name="tooltip" translatable="yes">Kill program, CAUTION : hard termination</property>
        <property name="stock_id">dbg-kill</property>
        <signal name="activate" handler="act_kill" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action011">
        <property name="label" translatable="yes">Step auto current thread</property>
        <property name="tooltip" translatable="yes">Step automatically the current thread, stopped by halt</property>
        <property name="stock_id">dbg-auto</property>
        <signal name="activate" handler="act_auto" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action012">
        <property name="label" translatable="yes">Step auto every thread</property>
        <property name="stock_id">dbg-run</property>
        <signal name="activate" handler="act_automulti" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action013">
        <property name="label" translatable="yes">Modify execution</property>
        <property name="tooltip" translatable="yes">CAUTION: modify execution, the line under cursor will be the next executed line</property>
        <property name="stock_id">dbg-exemod</property>
        <signal name="activate" handler="act_exemod" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action020">
        <property name="label" translatable="yes">Variable Dump</property>
        <signal name="activate" handler="act_vardump" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action021">
        <property name="label" translatable="yes">Edit var value</property>
        <signal name="activate" handler="act_varedit" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action022">
        <property name="label" translatable="yes">Show/Expand variable</property>
        <signal name="activate" handler="act_varexpand" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action023">
        <property name="label" translatable="yes">Show z/w/string</property>
        <signal name="activate" handler="act_stringshow" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action024">
        <property name="short-label" translatable="yes">Shortcuts ...</property>
        <property name="label" translatable="yes">Shortcut key list ...</property>
        <signal name="activate" handler="act_Shortcut" object="dialog600" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action1001">
        <property name="label" translatable="yes">Set watched</property>
        <property name="tooltip" translatable="yes">Set watched ???</property>
        <signal name="activate" handler="act_varwatched" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action1002">
        <property name="label" translatable="yes">Set watched+trace</property>
        <property name="tooltip" translatable="yes">Set watched+trace on ???</property>
        <signal name="activate" handler="act_varwtchtrace" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action99">
        <property name="tooltip" translatable="yes">Information about this application</property>
        <property name="stock_id">gtk-about</property>
        <signal name="activate" handler="gtk_dialog_run" object="aboutdialog1" swapped="yes"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action100">
        <property name="label" translatable="yes">Break on var value</property>
        <signal name="activate" handler="act_varbrk" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action101">
        <property name="label" translatable="yes">Select index</property>
        <signal name="activate" handler="act_varindex" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action106">
        <property name="label" translatable="yes">Change byte &lt;&gt; zstring type</property>
        <signal name="activate" handler="act_bzexchange" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action050">
        <property name="label" translatable="yes">Show proc in source</property>
        <signal name="activate" handler="act_procinsource" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action108">
        <property name="label" translatable="yes">Locate calling line</property>
        <signal name="activate" handler="act_proccall" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action109">
        <property name="label" translatable="yes">Collapse proc/var</property>
        <signal name="activate" handler="act_varcollapse" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action110">
        <property name="label" translatable="yes">Expand proc/var</property>
        <signal name="activate" handler="act_varexpand" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action111">
        <property name="label" translatable="yes">List all proc/var (log)</property>
        <signal name="activate" handler="act_varlistall" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action112">
        <property name="label" translatable="yes">List selected proc/var (log)</property>
        <signal name="activate" handler="act_varlistsel" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action201">
        <property name="label" translatable="yes">ASM code of proc</property>
        <signal name="activate" handler="act_procasm" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action202">
        <property name="label" translatable="yes">Toggle sort by module or by proc</property>
        <signal name="activate" handler="act_procsort" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action203">
        <property name="label" translatable="yes">All procs followed</property>
        <signal name="activate" handler="act_procfollow" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action204">
        <property name="label" translatable="yes">No procs followed</property>
        <signal name="activate" handler="act_procnofollow" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action300">
        <property name="label" translatable="yes">Show in var window</property>
        <signal name="activate" handler="act_procinvar" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action305">
        <property name="label" translatable="yes">Toggle Tracing</property>
        <signal name="activate" handler="act_wtchtrace" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action306">
        <property name="label" translatable="yes">Cancel all Tracing</property>
        <signal name="activate" handler="act_wtchnotrace" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action307">
        <property name="label" translatable="yes">Switch watch1</property>
        <signal name="activate" handler="act_wtch1" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action308">
        <property name="label" translatable="yes">Switch watch2</property>
        <signal name="activate" handler="act_wtch2" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action309">
        <property name="label" translatable="yes">Switch watch3</property>
        <signal name="activate" handler="act_wtch3" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action310">
        <property name="label" translatable="yes">Switch watch4</property>
        <signal name="activate" handler="act_wtch4" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action311">
        <property name="label" translatable="yes">Delete</property>
        <signal name="activate" handler="act_wtchdel" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action312">
        <property name="label" translatable="yes">Delete all</property>
        <signal name="activate" handler="act_wtchdellall" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action414">
        <property name="label" translatable="yes">Set/Clear Breakpoint</property>
        <signal name="activate" handler="act_brkset" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action415">
        <property name="label" translatable="yes">Set/Clear tempo Breakpoint</property>
        <signal name="activate" handler="act_brktempset" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action416">
        <property name="label" translatable="yes">Enable/Disable Breakpoint</property>
        <signal name="activate" handler="act_brkenable" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action417">
        <property name="label" translatable="yes">Manage Breakpoints</property>
        <signal name="activate" handler="act_brkmanage" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action418">
        <property name="label" translatable="yes">Show var</property>
        <signal name="activate" handler="act_varsrcshow" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action419">
        <property name="label" translatable="yes">Set watched var</property>
        <signal name="activate" handler="act_varsrcwtch" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action420">
        <property name="label" translatable="yes">Find text</property>
        <signal name="activate" handler="act_textfind" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action421">
        <property name="label" translatable="yes">Toggle bookmark</property>
        <signal name="activate" handler="act_bmktoogle" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action422">
        <property name="label" translatable="yes">Next bookmark</property>
        <signal name="activate" handler="act_bmknext" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action423">
        <property name="label" translatable="yes">Previous bookmark</property>
        <signal name="activate" handler="act_bmkprev" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action424">
        <property name="label" translatable="yes">Goto Line</property>
        <signal name="activate" handler="act_linegoto" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action426">
        <property name="label" translatable="yes">Line Address</property>
        <signal name="activate" handler="act_lineaddress" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action427">
        <property name="label" translatable="yes">ASM code of line</property>
        <signal name="activate" handler="act_lineasm" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action428">
        <property name="label" translatable="yes">ASM code of proc (from line)</property>
        <signal name="activate" handler="act_procsrcasm" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action429">
        <property name="label" translatable="yes">Mark no executable lines</property>
        <signal name="activate" handler="act_linenoexec" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action430">
        <property name="label" translatable="yes">Focus lines</property>
        <signal name="activate" handler="act_linefocus" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action431">
        <property name="label" translatable="yes">Add notes</property>
        <signal name="activate" handler="act_notesadd" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action460">
        <property name="label" translatable="yes">Release debugged programm</property>
        <property name="tooltip" translatable="yes">Release debugged programm</property>
        <property name="stock_id">dbg-free</property>
        <signal name="activate" handler="act_free" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action461">
        <property name="label" translatable="yes">Mini command window</property>
        <property name="tooltip" translatable="yes">Mini command window</property>
        <property name="stock_id">dbg-minicmd</property>
        <signal name="activate" handler="act_minicmd" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action462">
        <property name="label" translatable="yes">Restart debugging</property>
        <property name="tooltip" translatable="yes">Restart debugging</property>
        <property name="stock_id">dbg-restart</property>
        <signal name="activate" handler="act_restart" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action463">
        <property name="label" translatable="yes">Last 10 exe</property>
        <property name="tooltip" translatable="yes">Show last 10 executable(s), select one</property>
        <property name="stock_id">dbg-multiexe</property>
        <signal name="activate" handler="act_multiexe" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action464">
        <property name="label" translatable="yes">Attach program</property>
        <property name="tooltip" translatable="yes">Attach running program</property>
        <property name="stock_id">dbg-attachexe</property>
        <signal name="activate" handler="act_attachexe" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action465">
        <property name="label" translatable="yes">Select EXE/BAS</property>
        <property name="tooltip" translatable="yes">Select EXE/BAS file</property>
        <property name="stock_id">dbg-files</property>
        <signal name="activate" handler="act_files" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action466">
        <property name="label" translatable="yes">Tools</property>
        <property name="tooltip" translatable="yes">Some usefull....Tools</property>
        <property name="stock_id">dbg-tools</property>
        <signal name="activate" handler="act_tools" object="menu900" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action467">
        <property name="label" translatable="yes">Open/close notes</property>
        <property name="tooltip" translatable="yes">Open or close the notes window</property>
        <property name="stock_id">dbg-notes</property>
        <signal name="activate" handler="act_notes" object="textview1" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action468">
        <property name="label" translatable="yes">Enlarge/reduce source</property>
        <property name="tooltip" translatable="yes">Enlarge/reduce source</property>
        <property name="stock_id">dbg-source</property>
        <signal name="activate" handler="act_source" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action469">
        <property name="label" translatable="yes">Enlarge/reduce treview</property>
        <property name="tooltip" translatable="yes">Enlarge/reduce teh current trrview : proc/var, procs, threads, watched vars</property>
        <property name="stock_id">dbg-varproc</property>
        <signal name="activate" handler="act_varproc" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action470">
        <property name="label" translatable="yes">Enlarge/reduce memory dump</property>
        <property name="tooltip" translatable="yes">Enlarge/reduce memory dump</property>
        <property name="stock_id">dbg-memory</property>
        <signal name="activate" handler="act_memory" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action500">
        <property name="label" translatable="yes">Select next thread to be executed</property>
        <signal name="activate" handler="act_threadselect" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action501">
        <property name="label" translatable="yes">Show next executed line (source)</property>
        <signal name="activate" handler="act_threadline" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action502">
        <property name="label" translatable="yes">Show line creating thread (source) </property>
        <signal name="activate" handler="act_threadcreate" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action503">
        <property name="label" translatable="yes">Show first proc of thread (source)</property>
        <signal name="activate" handler="act_threadproc" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action504">
        <property name="label" translatable="yes">Show proc (proc/var)</property>
        <signal name="activate" handler="act_threadvar" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action506">
        <property name="label" translatable="yes">Proc call Backtracking</property>
        <signal name="activate" handler="act_procbacktrack" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action507">
        <property name="label" translatable="yes">Proc call Chaining</property>
        <signal name="activate" handler="act_procchain" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action508">
        <property name="label" translatable="yes">Proc Adresses</property>
        <signal name="activate" handler="act_procaddresses" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action509">
        <property name="label" translatable="yes">Kill thread</property>
        <signal name="activate" handler="act_threadkill" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action510">
        <property name="label" translatable="yes">Expand one thread</property>
        <signal name="activate" handler="act_threadexpand" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action511">
        <property name="label" translatable="yes">Collapse all threads</property>
        <signal name="activate" handler="act_threadcollapse" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action512">
        <property name="label" translatable="yes">List all threads</property>
        <signal name="activate" handler="act_threadlist" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action900">
        <property name="label" translatable="yes">Settings ...</property>
        <signal name="activate" handler="act_Settings" object="dialog500" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action902">
        <property name="label" translatable="yes">Compile info</property>
        <signal name="activate" handler="act_compinfo" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action903">
        <property name="label" translatable="yes">Help</property>
        <signal name="activate" handler="act_help" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action904">
        <property name="label" translatable="yes">Launch tutorial</property>
        <signal name="activate" handler="act_tuto" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action905">
        <property name="label" translatable="yes">Launch IDE</property>
        <signal name="activate" handler="act_idelaunch" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action906">
        <property name="label" translatable="yes">Quick edit</property>
        <signal name="activate" handler="act_quickedit" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action907">
        <property name="label" translatable="yes">Compile and run</property>
        <signal name="activate" handler="act_compnrun" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action908">
        <property name="label" translatable="yes">Copy note to clipboard</property>
        <signal name="activate" handler="act_notescopy" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action909">
        <property name="label" translatable="yes">Show log file</property>
        <signal name="activate" handler="act_logshow" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action910">
        <property name="label" translatable="yes">Hide log file</property>
        <signal name="activate" handler="act_loghide" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action911">
        <property name="label" translatable="yes">Delete log file</property>
        <signal name="activate" handler="act_logdel" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action912">
        <property name="label" translatable="yes">List enum</property>
        <signal name="activate" handler="act_enumlist" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action913">
        <property name="label" translatable="yes">Process list</property>
        <signal name="activate" handler="act_processlist" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action914">
        <property name="label" translatable="yes">DLLs list</property>
        <signal name="activate" handler="act_dlllist" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action916">
        <property name="label" translatable="yes">Translate Win Message</property>
        <signal name="activate" handler="act_winmsg" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action917">
        <property name="label" translatable="yes">Bin/Dec/Hex</property>
        <signal name="activate" handler="act_bdhtrans" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action918">
        <property name="label" translatable="yes">Show fast run timer</property>
        <signal name="activate" handler="act_fasttimer" swapped="no"/>
      </object>
    </child>
    <child>
      <object class="GtkAction" id="action919">
        <property name="label" translatable="yes">Set JIT debugger</property>
        <signal name="activate" handler="act_jitset" swapped="no"/>
      </object>
    </child>
  </object>
TJF
Posts: 3604
Joined: Dec 06, 2009 22:27
Location: N47°, E15°
Contact:

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby TJF » Feb 03, 2015 18:16

SARG wrote:Work done

Thanks, I'll check soon. Aren't the missing menu items double-tees, we removed before? I'm unsure, ATM.

SARG wrote:- "<property name="stock_id">dbg-runto</property>" what is the use ?

The name of the icon used for buttons. GTK+ provides a number of standard icons (stock). I extended this set by a GtkIconFactory and added the fbdbg buttons (identifiers starting with dbg-...). So 'dbg-runto' means a widget of type GtkIcon, based on your runto.bmp image.

SARG wrote:- swapped="no" ?

A property, that I'll explain later when I come to signals.

SARG wrote:- diff between short-label (found only 1 time) and label ?

An action can proxxy different widgets. In a menu item the label is used. This text may be too long for a button, especially for a button in the toolbar. Therefor the short-label is used, when present (button Shortcuts in Settings dialog in our case).

SARG wrote:- in the extract below there is a tooltip for a menu entry (no corresponding button). I found this case only 2 times.
Why ?

I've overseen to delete the tooltips.

SARG wrote:What are the first question marks ?

I try to balance the load on my keyboard keys. I recently wrote some C code with a lot of semicolons and I had some questionmarks left ;-)

It's to show that on menu items both, icons and tooltips, should get considered. IMHO tooltips on menus are overkill. But icons may be nice-to-have (ie. as in Geany).

SARG wrote:To get an idea, how many functions in GTK ?

Gir/Gtk-3.0.bi

  • 1687 SUBs
  • 2089 FUNCTIONs
But when scanning inclusive dependency headers, I get

  • 3221 SUBs
  • 5673 FUNCTIONs

SARG wrote:So ok I follow your way to do.

In your role, I'd say 'I'll give it a try and decide after testing". (= That's how I interpret your statement.)

SARG wrote:Thanks that's a bit clearer.

Some more clarification:

All above snippets-[123] create a new widget. Once created, the widget can only get manipulated in the snippet-[12] style.

Ie. to make the window invisible again, one would use in snippet-1

Code: Select all

gtk_widget_hide(win)

or in snippet-2

Code: Select all

g_object_set(win _
  , "visible", FALSE _
  , NULL)

But there's no way to access an existing widget with a GtkBuilder. The GtkBuilder is only designed to build a new widget. So in this case you have no choise, you have to do classic coding. Therefor you'll need a reference to the widgets build by the GtkBuilder (the variable called 'win' in the above snippets).

When GtkBuilder creates the widgets, it requires an unique identifier (id="...") specified for each class member. This ID is used to get the GObject PTRs out of the built widgets (or objects)

Code: Select all

VAR win = gtk_builder_get_object(build, "MyWindow")
g_object_set(win _
  , "visible", FALSE _
  , NULL)

That GObject PTR has to get CASTed to the correct class level for snippet-1 syntax. (Be careful: don't get confused by deprecated libglade examples. libglade provides a GtkWidget PTR here. So never use libglade, it's confusing. And transform example code.)

Code: Select all

VAR win = gtk_builder_get_object(build, "MyWindow")
gtk_widget_hide(GTK_WIDGET(win))

SARG wrote:- Some windows/dialogs could be modal (settings) and other ones non-modal (memory parameters). Possible ?
- I didn't give you all the simple dialog boxes (messages or questions yes/no). Could they be created on fly without be defined before ? Even if they contains several lines of text.

That's an other case where GtkBuilder is limited. It doesn't really make sense to create each little message window with the designer. (You'll have to handle variable text sections for each, which is a lot of code.) Instead there's a convenience function family gtk_message_... to generate such small dialogs in a single call (and a more complex family named gtk_dialog_...).

Ie. the dialog from accessviol.jpg may look like (ignore the German button texts)

Image
which will get generated by the function call

Code: Select all

  VAR dia = gtk_message_dialog_new_with_markup(GTK_WINDOW(GUI.window1) _
    , GTK_DIALOG_MODAL OR GTK_DIALOG_DESTROY_WITH_PARENT _
    , GTK_MESSAGE_WARNING _
    , GTK_BUTTONS_YES_NO _
    , __(!"TRYING TO WRITE AT ADR: <b>%d</b>\n") _
    & __(!"Possible error on this line but not SURE\n\n") _
    & __(!"<i>File</i>: <b>%s</b>\n") _
    & __(!"<i>Proc</i>: <b>%s</b>\n") _
    & __(!"<i>Line</i>: <b>%d</b> (selected and put in red)\n") _
    & __(!"<b>%s</b>\n\n") _
    & __(!"Try to continue ? (if yes change value and/or use [M]odify execution)\n") _
    , 222 _
    , "D:\a\b\c\d\debuggee.bas" _
    , "TEST" _
    , 279 _
    , "Print ""Line with crash"": Poke testa, 10 'for access violation" _
    , NULL)

Here, the pango markup language is used to highlight the core informations in bold characters. The window is specified as modal dialog. And the final output text gets generated using a C format string. (You can also use FB formating by passing an empty C format string and adding the FB formated markup string later.)

Note the macros __("..."). This is an abreviation for a call to function gettext from libintl. When you want a string literal (from source code) to be translated, you've to enclose it by this function call:

Code: Select all

?"A normal string literal, no translation."
?*__("A translated string, gets extracted from source code for the translators.")

At this point the FB formating of the message text is disadvantageous. It will cut the text in to a bunch of fragments and the translators (all) have to figure out how the final message has to get build from the segments. In contrast, the C format string contains the complete message at one place.

SARG wrote:i.e. Some actions like "step" can be done also by pressing a key.

In my code the user can specify a shortcut for any action. If you want to limit to a certain set of actions, it needs an additional filter.

SARG wrote:- How are handled the keypresses (out of menu) ?

Here's an issue to discuss. When the notes text view is located in the main window (as in notes.jpg), the keyboard shortcuts may interfere with the 'normal' keys, used to edit the notes.

I could de-activate the shortcuts when the keyboard focus is in the notes text view. IMHO that's a second class solution, since the user may wonder why shortcuts sometimes wont work. I'd prefer to open a separate (non-modal) window to edit the notes (in its own accellerators group).

BR
SARG
Posts: 1160
Joined: May 27, 2005 7:15
Location: FRANCE

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby SARG » Feb 04, 2015 23:46

Hi,

Thanks for all that information about my questions and how gtk works. Everything is clear.
By the way, I like your small touchs of humor.

TJF wrote: Aren't the missing menu items double-tees, we removed before? I'm unsure, ATM.

No, you can found these NEW items in the images of the menus in the first zip file.

TJF wrote:icons may be nice-to-have (ie. as in Geany).

Adding (existing) icons to some menu entries : no problem.

TJF wrote:
SARG wrote:So ok I follow your way to do.

In your role, I'd say 'I'll give it a try and decide after testing". (= That's how I interpret your statement.)

I don't discuss any more about getting a bit of your work to evaluate the level of difficulty for me.
The purpose was to avoid a lot of work from your side, lost if I did not agree. let's GO, I'll see later.

TJF wrote:
  • 3221 SUBs
  • 5673 FUNCTIONs

I guess you know each of them. ;-)

TJF wrote:
SARG wrote:- How are handled the keypresses (out of menu) ?

Here's an issue to discuss. When the notes text view is located in the main window (as in notes.jpg), the keyboard shortcuts may interfere with the 'normal' keys, used to edit the notes.

I could de-activate the shortcuts when the keyboard focus is in the notes text view. IMHO that's a second class solution, since the user may wonder why shortcuts sometimes wont work. I'd prefer to open a separate (non-modal) window to edit the notes (in its own accellerators group).

Effectively the "notes function" can/should be a non-modal window.

I have thought about log screen/file :
- For the log on screen : an entry (tools menu) to open window and an entry to reset. Automatically opened if new contents. The red cross just to hide, no need to close. Easy to copy something from the log to the notes window.
- For the log file : an entry (tools menu) to open window (load file, etc) and one to delete file. The red cross to close.
TJF
Posts: 3604
Joined: Dec 06, 2009 22:27
Location: N47°, E15°
Contact:

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby TJF » Feb 05, 2015 22:02

Hi everybody!

SARG wrote:Everything is clear.

I wrote about how to generate widgets and how to manipulate them. An important point is missing: How to get the user actions? Too much for today.

SARG wrote:No, you can found these NEW items in the images of the menus in the first zip file.

I implemented your enhanced actions. And I implemented the three new (missing). But I cannot find them in the zip file images (and also not in the manual pages), sorry. Please tell me where you want them (menu/position).

SARG wrote:I have thought about log screen/file :
- For the log on screen : an entry (tools menu) to open window and an entry to reset. Automatically opened if new contents. The red cross just to hide, no need to close. Easy to copy something from the log to the notes window.
- For the log file : an entry (tools menu) to open window (load file, etc) and one to delete file. The red cross to close.

We already have three menu items for the log file. Should I re-use them for the screen log and add two new items for file log?

SARG wrote:Effectively the "notes function" can/should be a non-modal window.

Done!

SARG wrote:I don't discuss any more about getting a bit of your work to evaluate the level of difficulty for me.
The purpose was to avoid a lot of work from your side, lost if I did not agree. let's GO, I'll see later.

I'm sure you'll find your way through my code. But you're right, you should start ASAP. I'm prepared to upload in a few minutes, once I get the GIT repo URL.

BR

PS:
Today I made the double-tee checks for the shortcuts (had some trouble to get all toolbuttons work). It's OK now. But there's a problem: I prepared the tree views in the right notebook for searching, so that the user can find an entry by typing some starting characters. When a shortcut is defined without modifiers (<shift>, <control>, ...), it interferes with the search function. So I made a message dialog with a warning, that shows up when the user defines a shortcut without modifier. Try it out and make your mind.

And: for testing I use a new shortcut file (handled by gtk_accel_map_[save|load] functions). You should make your mind if you still want to handle 104 keyboard shortcuts in the ini file or instead, use my existing solution.
SARG
Posts: 1160
Joined: May 27, 2005 7:15
Location: FRANCE

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby SARG » Feb 05, 2015 23:50

Hi,

TJF wrote:I wrote about how to generate widgets and how to manipulate them. An important point is missing: How to get the user actions? Too much for today.

I can't wait ;-)

TJF wrote:
SARG wrote:No, you can found these NEW items in the images of the menus in the first zip file.

I implemented your enhanced actions. And I implemented the three new (missing). But I cannot find them in the zip file images (and also not in the manual pages), sorry. Please tell me where you want them (menu/position).

Search the file named "new options" in screenshots4TJF. The manual is not up to date, too lazy.....

TJF wrote:
SARG wrote:I have thought about log screen/file :
- For the log on screen : an entry (tools menu) to open window and an entry to reset. Automatically opened if new contents. The red cross just to hide, no need to close. Easy to copy something from the log to the notes window.
- For the log file : an entry (tools menu) to open window (load file, etc) and one to delete file. The red cross to close.

We already have three menu items for the log file. Should I re-use them for the screen log and add two new items for file log?

We only need 4 items :
    - open log screen (new)
    - reset [or clear] log screen (new)
    - open log file <short name>(add file short name as the log file name is defined by user)
    - delete log file <short name>
Remove (or replace) "hide log file".

TJF wrote: once I get the GIT repo URL.

@Pls, AGS give us some news.


TJF wrote:Today I made the double-tee checks for the shortcuts (had some trouble to get all toolbuttons work). It's OK now. But there's a problem: I prepared the tree views in the right notebook for searching, so that the user can find an entry by typing some starting characters. When a shortcut is defined without modifiers (<shift>, <control>, ...), it interferes with the search function. So I made a message dialog with a warning, that shows up when the user defines a shortcut without modifier. Try it out and make your mind.

In fbdebugger the shortcuts work only when the code window has the focus (except F1). Otherwise if a treeview has the focus the keypress is used to find items. OS handle : the treview eats the key press for its own use.

TJF wrote:And: for testing I use a new shortcut file (handled by gtk_accel_map_[save|load] functions). You should make your mind if you still want to handle 104 keyboard shortcuts in the ini file or instead, use my existing solution.

In Fbdebugger shortcuts are effectuvely saved in the ini file. see below [SCK]
Using your solution means 2 "ini" files but, I guess, an easy way to handle shortcuts. I really don't know which is better. ???

Code: Select all

[FBC]=D:\Laurent divers\FreeBASIC\fbc.exe
[FCD]=essai
[EXE]=D:\laurent divers\fb dev\En-cours\FBDEBUG NEW\Tests fbdebugger\testmain.exe
[CMD]=essai bis
[EXE]=D:\laurent divers\fb dev\En-cours\FBDEBUG NEW\test comlink.exe
[CMD]=essai bis
[BRK]=UWORDDICT.BAS,249,1
[EXE]=C:\Users\AllomerusG75\Downloads\vanya\vanya_test.exe
[CMD]=essai bis
[WTC]=main/SL99EE3P____W99IN__DOW__9,Integer/0/0
[EXE]=D:\laurent divers\fb dev\En-cours\FBDEBUG NEW\testgcc.exe
[CMD]=essai bis
[EXE]=D:\laurent divers\fb dev\En-cours\FBDEBUG NEW\demangling.exe
[CMD]=essai bis
[EXE]=D:\laurent divers\fb dev\En-cours\FBDEBUG NEW\tobedeleted.exe
[CMD]=essai bis
[EXE]=D:\laurent divers\fb dev\En-cours\FBDEBUG NEW\fbdebug2.exe
[CMD]=essai bis
[BRK]=fbdebug2.bas,251,1
[EXE]=D:\laurent divers\fb dev\En-cours\FBDEBUG NEW\fltk04.exe
[CMD]=essai bis
[EXE]=D:\laurent divers\FreeBASIC\unicode.exe
[CMD]=essai bis
[TTP]=TRUE
[HLK]=TRUE
[FTN]=Courier New
[FTS]=8
[DPO]=4
[CRE]=16310193
[CHK]=16744512
[CCL]=16711680
[CTB]=4227327
[CPB]=255
[JIT]=drwtsn32 -p %ld -e %ld -g
[LOG]=3
[PST]=0
[FLT]=0
[SCK]=503,15728707
[SCK]=101,83
[SCK]=102,79
[SCK]=103,69
[SCK]=119,84
[SCK]=118,66
[SCK]=105,82
[SCK]=116,70
[SCK]=106,72
[SCK]=113,75
[SCK]=104,65
[SCK]=516,68
[SCK]=117,77
[SCK]=500,114
[SCK]=501,15728754
[SCK]=515,61554
[SCK]=504,61510
[SCK]=505,61553
[SCK]=506,113
[SCK]=507,15728753
[SCK]=509,61511
[SCK]=513,76
[SCK]=581,112
[SCK]=584,121
[SCK]=585,122
[SCK]=586,120
TJF
Posts: 3604
Joined: Dec 06, 2009 22:27
Location: N47°, E15°
Contact:

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby TJF » Feb 06, 2015 15:31

Hi everybody!

SARG wrote:Using your solution means 2 "ini" files but, I guess, an easy way to handle shortcuts. I really don't know which is better. ???

Using the effective ini file means updating the related code everytime when an action (menu item or toolbar button) gets added or removed. It seems that your ini file is based on the correct order of the [SCK] tags, which doesn't make that easy. The separate GTK+ solution auto-adapts and the user can easy switch between shortcut sets.

I'd prefer the separate file.

SARG wrote:In fbdebugger the shortcuts work only when the code window has the focus (except F1). Otherwise if a treeview has the focus the keypress is used to find items. OS handle : the treview eats the key press for its own use.

That's different in GTK+. The global accelgroup 'eats' the keystrokes and provides only the filter-passing keys to the tree view search function. I could set a private (empty) accelgroup for the tree views as a workaround. But I don't like that solution, because it's hard to understand that the shortcuts may or may not work, depending on the keyboard focus or the mouse position.

I'd prefer a clearer concept: shortcuts work everytime, everywhere (in a certain window). It's recommended to apply at least one modifier to them.

SARG wrote:Search the file named "new options" in screenshots4TJF.

OK, got them now in the submenu 'Copy to clipboard' (sorry). There're some other menuitems missing, please provide signal handler function names (like act_XYZ) for

  • Pointed data dump
  • Show char at position
  • Proc call backtracking
  • Proc call chaining
  • ASM code of proc
And the items of the submenu 'List to log' are not visible. Please list them and their signal handler function names (if you want me to implement them).

BR
SARG
Posts: 1160
Joined: May 27, 2005 7:15
Location: FRANCE

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby SARG » Feb 07, 2015 20:26

Hi,

TJF wrote:
SARG wrote:Using your solution means 2 "ini" files but, I guess, an easy way to handle shortcuts. I really don't know which is better. ???


Using the effective ini file means updating the related code everytime when an action (menu item or toolbar button) gets added or removed. It seems that your ini file is based on the correct order of the [SCK] tags, which doesn't make that easy. The separate GTK+ solution auto-adapts and the user can easy switch between shortcut sets.

I'd prefer the separate file.

Why I'm not surprised ;-). Ok one more point where I let you do as you want.

TJF wrote:
SARG wrote:In fbdebugger the shortcuts work only when the code window has the focus (except F1). Otherwise if a treeview has the focus the keypress is used to find items. OS handle : the treview eats the key press for its own use.


That's different in GTK+. The global accelgroup 'eats' the keystrokes and provides only the filter-passing keys to the tree view search function. I could set a private (empty) accelgroup for the tree views as a workaround. But I don't like that solution, because it's hard to understand that the shortcuts may or may not work, depending on the keyboard focus or the mouse position.

I'd prefer a clearer concept: shortcuts work everytime, everywhere (in a certain window). It's recommended to apply at least one modifier to them.

It's a bit annoying : It's more user-friendly to just press one key (eg "S" for stepping) than 2 keys.
I would prefer to keep this behaviour.

TJF wrote:There're some other menuitems missing, please provide signal handler function names (like act_XYZ) for

Pointed data dump
Show char at position
Proc call backtracking
Proc call chaining
ASM code of proc
And the items of the submenu 'List to log' are not visible. Please list them and their signal handler function names (if you want me to implement them).

Pointed data dump, already in one of my previous posts :

Code: Select all

<child>
      <object class="GtkAction" id="actionxxx">
        <property name="label" translatable="yes">Pointed data dump</property>
        <signal name="activate" handler="act_varderefdump" swapped="no"/>
      </object>
    </child>

same for :
Proc call backtracking 506
Proc call chaining 507
ASM code of proc 201

'List to log' between "Expand proc/var" and "Copy to clipboard" = action111 and action112

Show char at position :

Code: Select all

<child>
      <object class="GtkAction" id="actionxxx">
        <property name="label" translatable="yes">Show char at position</property>
        <signal name="activate" handler="act_varcharpos" swapped="no"/>
      </object>
    </child>


BR.
TJF
Posts: 3604
Joined: Dec 06, 2009 22:27
Location: N47°, E15°
Contact:

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby TJF » Feb 08, 2015 8:04

Good morning!

SARG wrote:It's a bit annoying : It's more user-friendly to just press one key (eg "S" for stepping) than 2 keys.
I would prefer to keep this behaviour.

In my solution the user is free to define any shortcut. He gets a warning when he defines an unmodified key, which he has to confirm. (It's just a proposal, we can change it later. I'll mark it as ToDo.)

SARG wrote:Pointed data dump, already in one of my previous posts :
...
same for :
Proc call backtracking 506
Proc call chaining 507
ASM code of proc 201

...

Show char at position :

OK (I saw the doubles, but I wanted to be sure). I think I got those now. But there're still questions:

SARG wrote:'List to log' between "Expand proc/var" and "Copy to clipboard" = action111 and action112

In new_options.jpg this menu entry has a triangle at the right. This usualy means that it pops up a submenu, containing more than one item. Do you want that popup (which entries), or should I remove the triangle?

And I miss your signal handler names (act_XYZ) for

  • Copy all proc/var
  • Copy selected proc/var

BR
SARG
Posts: 1160
Joined: May 27, 2005 7:15
Location: FRANCE

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby SARG » Feb 08, 2015 9:52

Good morning too,

TJF wrote:
SARG wrote:'List to log' between "Expand proc/var" and "Copy to clipboard" = action111 and action112

In new_options.jpg this menu entry has a triangle at the right. This usualy means that it pops up a submenu, containing more than one item. Do you want that popup (which entries), or should I remove the triangle?

Menu entry : List to log
With 2 "sub-entries" :
    List all procs (111)
    List selected proc (112)
It's the same for "Copy to clipboard"
AGS
Posts: 1284
Joined: Sep 25, 2007 0:26
Location: the Netherlands

Re: Cross platform GUI project (debugger for FreeBASIC)

Postby AGS » Feb 08, 2015 10:31

I was unaware that I was the one to 'set up' access to a git repository. I have created a user account and a repository at github.com
I have sent both of you (SARG and TJF) a mail with more information regarding this account. Title of that mail is fbdebugger@github.com

Looking forward to seeing the fbdebugger code at github.com.

Return to “Projects”

Who is online

Users browsing this forum: No registered users and 5 guests