Can`t get gtkDialog3 version of app. to work. [Solved]

For discussions about programming, programming questions/advice, and projects that don't really have anything to do with Puppy.
Message
Author
User avatar
8-bit
Posts: 3406
Joined: Wed 04 Apr 2007, 03:37
Location: Oregon

#31 Post by 8-bit »

potong,
If I may be so bold as to ask, where are you getting this info from?
Is it from examining the source code or is their a site we can access to see more?

User avatar
trio
Posts: 2076
Joined: Sun 21 Dec 2008, 15:50
Location: अनà¥￾मोदना

#32 Post by trio »

haha, potong is "the guru" of gtkdialog..he's the one responsible that make Zigbert ditched "ptooltips" after potong told him that gtkdialog has inbuilt 'tooltips'...many hidden things inside gtkdialog were introduced to us by him...

potong
Posts: 88
Joined: Fri 06 Mar 2009, 04:01

#33 Post by potong »

8-bit:
You can find a lot of information here http://library.gnome.org/devel/gtk/stable
Also see my original post http://murga-linux.com/puppy/viewtopic.php?t=38608
For instance: see the the window widget here http://library.gnome.org/devel/gtk/stab ... indow.html and look in particular at its properties

Code: Select all

Properties

  "accept-focus"             gboolean              : Read / Write
  "allow-grow"               gboolean              : Read / Write
  "allow-shrink"             gboolean              : Read / Write
  "decorated"                gboolean              : Read / Write
  "default-height"           gint                  : Read / Write
  "default-width"            gint                  : Read / Write
  "deletable"                gboolean              : Read / Write
  "destroy-with-parent"      gboolean              : Read / Write
  "focus-on-map"             gboolean              : Read / Write
  "gravity"                  GdkGravity            : Read / Write
  "has-toplevel-focus"       gboolean              : Read
  "icon"                     GdkPixbuf*            : Read / Write
  "icon-name"                gchar*                : Read / Write
  "is-active"                gboolean              : Read
  "modal"                    gboolean              : Read / Write
  "opacity"                  gdouble               : Read / Write
  "resizable"                gboolean              : Read / Write
  "role"                     gchar*                : Read / Write
  "screen"                   GdkScreen*            : Read / Write
  "skip-pager-hint"          gboolean              : Read / Write
  "skip-taskbar-hint"        gboolean              : Read / Write
  "startup-id"               gchar*                : Write
  "title"                    gchar*                : Read / Write
  "transient-for"            GtkWindow*            : Read / Write / Construct
  "type"                     GtkWindowType         : Read / Write / Construct Only
  "type-hint"                GdkWindowTypeHint     : Read / Write
  "urgency-hint"             gboolean              : Read / Write
  "window-position"          GtkWindowPosition     : Read / Write
Remember most widgets have hierarchy

Code: Select all

GObject
   +----GInitiallyUnowned
         +----GtkObject
               +----GtkWidget
                     +----GtkContainer
                           +----GtkBin
                                 +----GtkWindow
                                       +----GtkDialog
                                       +----GtkAssistant
                                       +----GtkPlug
and so their properties can be used too.
To get a list of widgets used by gtkdialog you'll have to inspect the source code. It's pretty old now so some of the widgets are deprecated.

HTH

Potong

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#34 Post by sunburnt »

Hope It Helps ??? Big time..!!!
This is more info about gtkDialog than I`ve seen in the 4 years I`ve been trying to use it!

potong; If you would be so kind...

-f, --file=filename Get the GUI description from a regular file.
Use like this: gtkdialog3 -f /path/file.gtk -G "$WIDTH"x"$HEIGHT"+"$LEFT"+"$TOP" &
And the body of the gtkDialog code is in: /path/file.gtk ( "kinda" like your example showed ).

-e, --event-driven=filename Execute the file as an event driven program.
This I have no idea where to begin with how to use it...

potong
Posts: 88
Joined: Fri 06 Mar 2009, 04:01

#35 Post by potong »

sunburnt:
Here's a program written in two ways to show the different options.

First the --file=filename and a shell wrapper script to run it

Code: Select all

#!/bin/sh -a
display(){ echo "Display: ${!1}"; }
cat <<EOV >/tmp/gui_file
<window>
 <vbox>
  <text label="Run from a terminal and monitor the messages"></text>
  <entry>
   <variable>ENTRY</variable>
   <default>Here is some text</default>
  </entry>
  <button use-underline="true" label="_Display">
   <action>display ENTRY</action>
  </button>
  <button cancel></button>
 </vbox>
</window>
EOV
gtkdialog3 -f /tmp/gui_file
now highlight the code above and in a terminal type:

Code: Select all

xclip -o >/tmp/a; chmod +x /tmp/a; /tmp/a
Observe the messages when you click Display.
Also type:

Code: Select all

cat /tmp/gui_file
and see the gui description.

Secondly --event-driven=filename

Code: Select all

#!/usr/sbin/gtkdialog3 -e
display(){ echo "Display: ${!1}"; }
export MAIN_DIALOG='
<window>
 <vbox>
  <text label="Run from a terminal and monitor the messages"></text>
  <entry>
   <variable>ENTRY</variable>
   <default>Here is some text</default>
  </entry>
  <button use-underline="true" label="_Display">
   <action>display ENTRY</action>
  </button>
  <button cancel></button>
 </vbox>
</window>
'
now highlight the code above and in a terminal type:

Code: Select all

xclip -o >/tmp/b; chmod +x /tmp/b; /tmp/b
You'll see the same program but run using the gtkdialog3 program directly.

HTH

Potong

User avatar
zigbert
Posts: 6621
Joined: Wed 29 Mar 2006, 18:13
Location: Valåmoen, Norway
Contact:

#36 Post by zigbert »

Thank you potong. Great stuff here.
I have updated tips and tricks.
I have not added your wild progressbar examples...... I need a newer gtk to get it working.


Sigmund

User avatar
8-bit
Posts: 3406
Joined: Wed 04 Apr 2007, 03:37
Location: Oregon

#37 Post by 8-bit »

After reading some of the options for a gtkdialog window, trying them and not having them work, I begin to wonder if those options are even in GTK-2.0 that is included with Puppy.
Or is it a matter of not structuring the code line right for the option to work.
It is frustrating to have a list of window options that are supposed to let you do something with a window and then not have it work.
Also, they seem to be geared for writing a GUI in C rather than just a script.
As an example, Zigbert's size and position script lets you resize a window to it's original size. But using the same code segments in another script for the position and resize with save, takes the new size as the minimum window size and will not let you resize the window to it's original size.
Show me a short script that will let me shrink a window to it's original size and I will be happy.
I already tried "min_height=[height]" as an option along with "allow_shrink="true"" and I still cannot get a window back to it's original size using the mouse.

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#38 Post by sunburnt »

8-bit; try this:

Code: Select all

export GUI="<window title=\"GUI\" allow_shrink=\"true\"><vbox>
  <button><label>Exit</label><action type=\"Exit\">exit</action></button></vbox></window>"
gtkdialog3 -p GUI -G 200x200+20+40
It will shrink all the way down to almost nothing for me... :wink:

User avatar
8-bit
Posts: 3406
Joined: Wed 04 Apr 2007, 03:37
Location: Oregon

#39 Post by 8-bit »

sunburnt wrote:8-bit; try this:

Code: Select all

export GUI="<window title="GUI" allow_shrink="true"><vbox>
  <button><label>Exit</label><action type="Exit">exit</action></button></vbox></window>"
gtkdialog3 -p GUI -G 200x200+20+40
It will shrink all the way down to almost nothing for me... :wink:
Thank you, it works! My mistake was including a default_height and default_width in the <window .....> line.
But I also noticed in the docs potong gave links to that on can supposedly set a min-width and min-height for the window.
I tried those, with your allow_shrink and they do not stop me from shrinking the window to a very small size.
Again, it may just be a matter of how to phrase those options.
But I guess we learn as we go along.

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#40 Post by sunburnt »

I made a small gtkDialog tester to check the Tags in large files.
Now it needs to be expanded to check other parts of the syntax.
The file: /root/my-applications/bin/gtkdialog.test

Code: Select all

#!/bin/sh
#####		Test gtkDialog file for errors.
N=0
FILE=`Xdialog --stdout --title "  Select gtkDialog file." --fselect /mnt/home/apps/driveman 0 0`
[ $? -gt 0 ]&& exit
echo "    ###   NO Tag problems found.  ###" > /tmp/gtk-test.results ; GTK=$(<$FILE)

for TAG in vbox hbox pix note list edit text tree menu label input entry radio check table frame combo width height action button window variable progress @
do																															#####		Read the entire file each loop looking for the Tag.
	[ $TAG = '@' ]&& break
	PLUS=`echo "$GTK" |grep -o '<'$TAG | wc -w`
	MINUS=`echo "$GTK" |grep -o '</'$TAG | wc -w`
	N=$(($PLUS - $MINUS)) ; [ $N -eq 0 ]&& continue
	errTAG='' ; [ $N -gt 0 ]&& errTAG='/' ; N=`echo $N |sed 's/^-//'`
	echo "    ###   $errTAG$TAG = $N" >> /tmp/gtk-test.results
done
xmessage -title "  gtkDialog Test" "
    $FILE    

    ( Tag Type ) = ( Number Missing )    

`cat /tmp/gtk-test.results`
	" &
rm -f /tmp/gtk-test.results
### Revised gtkDialog tester... Does most of the tags.

### If you have more Tags to add, please post them below...
### Also any suggestions on how to make it check more... ( Tags out of place, Etc...)
.
Last edited by sunburnt on Thu 18 Mar 2010, 05:06, edited 16 times in total.

User avatar
8-bit
Posts: 3406
Joined: Wed 04 Apr 2007, 03:37
Location: Oregon

#41 Post by 8-bit »

Sunburnt,
Kudos on that checker start.
I can see that it checks vbox and hbox currently but I see also what you mean about the fact that it could be expanded to check action, button, frame, combobox, etc.
The possibilities are there.
I tried it on the /root/my-applications/driveman/driveman file and it worked fine. And showed zero for both hbox and vbox.

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#42 Post by sunburnt »

I`m reworking the settings GUI for driveman and it`s got an "unhelpful" error.

** ERROR **: gtkdialog: Error in line 31, near token '</hbox>': syntax error

There`s only 2 </hbox> tags in the script, line 31 is the bottom tag:

Code: Select all

#! /bin/sh
export SETTINGS="
<window title=\".  DM   Settings\">
<hbox><vbox>
  <frame  Max. Drive List Height ><vbox>
    <text><label>Set Maximum Number of</label></text>
    <text><label>Drives to Show in Drive List.</label></text>
    <hbox>
    <button><label>Increase</label><action>$1/driveman lstHEIGHT up</action>
      <action type=\"clear\">HEIGHT</action><action type=\"refresh\">HEIGHT</action></button>
    <button><label>Decrease</label><action>$1/driveman lstHEIGHT dn</action>
      <action type=\"clear\">HEIGHT</action><action type=\"refresh\">HEIGHT</action></button>
    <entry><variable>HEIGHT</variable><input>cat $1/lstHEIGHT.set</input>
      <width>40</width><height>25</height></entry>
    </hbox></vbox></frame>
  <frame  Bootup Control><vbox>
    <checkbox><label>Run DriveMan at Bootup.</label>
      <variable>DMBOOT</variable><action>$1/driveman dmBOOT</action></checkbox>
    <checkbox><label>Run Auto-Drive at Bootup.</label>
      <variable>AUTOBOOT</variable><action>$1/driveman autoBOOT</action></checkbox>
  </vbox></frame>  
</vbox><vbox>  
  <frame  Auto-Drive Control ><vbox>
    <checkbox><label>Start or Stop Auto-Drive.</label>
      <variable>AUTODRV</variable><action>$1/driveman autoDRV</action></checkbox>
    <checkbox><label>Auto-Drive Pops up ROX.</label>
      <variable>AUTOROX</variable><action>$1/driveman autoROX</action></checkbox>
  </vbox></frame>
    <button><label>Exit</label><action>exit</action></button>
</vbox></hbox>"
gtkdialog3 -p SETTINGS &

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#43 Post by sunburnt »

.
### NOTE: I posted a " revised " gtkDialog tester above that does most of the Tags...

seaside
Posts: 934
Joined: Thu 12 Apr 2007, 00:19

#44 Post by seaside »

potong wrote:sunburnt:
Here's a program written in two ways to show the different options.


Secondly --event-driven=filename

Code: Select all

#!/usr/sbin/gtkdialog3 -e
display(){ echo "Display: ${!1}"; }
...............
Just wanted to add that using the "#!/usr/sbin/gtkdialog3" event form requires that gtkdialog3 is symlinked to gtkdialog, otherwise it errs. I ran into this earlier using the "event driven" form of gtkdialog - no matter from a file or on the command line.

Potong, thanks for supplying all this great information on Gtkdialog. It is immensely helpful.

Regards,
s

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#45 Post by sunburnt »

seaside; Yep, I ran into that problem awhile back using gtkDialog that way.
I had marginal luck with it. But with potong`s help it may bare fruit yet...

potong
Posts: 88
Joined: Fri 06 Mar 2009, 04:01

#46 Post by potong »

sunburnt: You forgot a closing <./window> directive in your gui.

Here are some tips I use when building a gui.

1) Every time you write an opening directive, copy and edit it into closing one. Then go back and continue

Code: Select all

<window>

Code: Select all

<window>
</window>

Code: Select all

<window title="GUI">
 <vbox>
</window>

Code: Select all

<window title="GUI">
 <vbox>
 </vbox>
</window>
etc

2) Use indentation for clarity and self checking. This is your code formated with indentation.

Code: Select all

#!/bin/sh
export SETTINGS="
<window title=\".  DM   Settings\">
 <hbox>
  <vbox>
   <frame  Max. Drive List Height >
    <vbox>
     <text>
      <label>Set Maximum Number of</label>
     </text>
     <text>
      <label>Drives to Show in Drive List.</label>
     </text>
     <hbox>
      <button>
       <label>Increase</label>
       <action>$1/driveman lstHEIGHT up</action>
       <action type=\"clear\">HEIGHT</action>
       <action type=\"refresh\">HEIGHT</action>
      </button>
      <button>
       <label>Decrease</label>
       <action>$1/driveman lstHEIGHT dn</action>
       <action type=\"clear\">HEIGHT</action>
       <action type=\"refresh\">HEIGHT</action>
      </button>
      <entry>
       <variable>HEIGHT</variable>
       <input>cat $1/lstHEIGHT.set</input>
       <width>40</width>
       <height>25</height>
      </entry>
     </hbox>
    </vbox>
   </frame>
   <frame  Bootup Control>
    <vbox>
     <checkbox>
      <label>Run DriveMan at Bootup.</label>
      <variable>DMBOOT</variable>
      <action>$1/driveman dmBOOT</action>
     </checkbox>
     <checkbox>
      <label>Run Auto-Drive at Bootup.</label>
      <variable>AUTOBOOT</variable>
      <action>$1/driveman autoBOOT</action>
     </checkbox>
    </vbox>
   </frame> 
  </vbox>
  <vbox> 
   <frame  Auto-Drive Control >
    <vbox>
     <checkbox>
      <label>Start or Stop Auto-Drive.</label>
      <variable>AUTODRV</variable>
      <action>$1/driveman autoDRV</action>
     </checkbox>
     <checkbox>
      <label>Auto-Drive Pops up ROX.</label>
      <variable>AUTOROX</variable>
      <action>$1/driveman autoROX</action>
     </checkbox>
    </vbox>
   </frame>
   <button>
    <label>Exit</label>
    <action>exit</action>
   </button>
  </vbox>
 </hbox>
</window>
"
gtkdialog3 -d -p SETTINGS
it is long winded, I know but you can shorten it later after everything is working. Notice how every container is aligned, you can run a cursor up and down and check all are closed off. Also you know everyting is in its place when you finish the gui at the column you started.

3) Use the construct GUI=$(cat <<EOV|sed 's/#.*//'...EOV) This allows you to comment your gui and can greatly speed up those tweaks

Code: Select all

GUI=$(cat <<EOV|sed 's/#.*//'
<window title="gui">
 <vbox>
   <text label="Use This></text>
   #<text label="Do Not Use This"></text>
 </vbox>
</window>
EOV)
another side effect of uing the here document (cat <<EOV...EOV) is you don't need to escape your double-quotes (") in the directive tags BUT remember interpolation is a double edged sword and code you intend gtkdialog to pass through to bash will need escaping. This leads on to the fourth tip..

4)KISS I try to divorce the gui from the actions of the gui. By this I mean when you have an action rather than writing the code into your gui, perform a subroutine instead e.g

Code: Select all

<action>display ENTRY</action>
and in the script

Code: Select all

display(){ echo "${!1}"; }
instead of

Code: Select all

<action>echo \$ENTRY</action>
This has several benefits
  • Testing: you can get the gui working without having to worry about your bash code working
    Reuse: You can use a function anywhere, inside another script or even on the command line
    Looks: Funnily enough using functions and variables indirectly as parameters ( ${!1} in a function means use the literal of the first parameter as a variable) fits right in in with the look and feel of the xml(ish) gui
5) Use the debug option in gtkdialog

Code: Select all

gtkdialog3 -d -p GUI
HTH

Potong

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#47 Post by sunburnt »

Thanks again potong; Yep... You`re right, the main GUI had </window> but not the Settings.
Much of what you said is things I learned writing Visual Basic apps., Linux is a whole new bag.

# Writing the Tags in pairs: This is how I setup my GUI builder that makes gtkDialog GUIs.
# Indentation: Always good for readability, except in Python... Then it`s required.!
... How about a " gtkDialog code compressor and decompressor " ? And one for script code too.
# Using the gtkDialog code as a string input makes sense. Or just calling a file with the code (-f).
... So instead of running a script with gtkDialog code, you just run the gtkDialog command.
# And what you say about separating the GUI and the support code I`ve been saying for years.
... It`s sooo much easier to read and maintain it that way. Very long files should be broken up.
... Either the GUI file or the script code file can be replaced, even with another GUI or language!

User avatar
8-bit
Posts: 3406
Joined: Wed 04 Apr 2007, 03:37
Location: Oregon

#48 Post by 8-bit »

I just tried your settings file after adding the missing </window> and I found it would not exit.
If you are just wanting it to exit, delete the action line for the exit button.
The way I used it, I saw in another script.

But I am just a dumb farm boy trying to make sense of this gtkdialog3 scripting language.
Now an old retired one that has had various occupations.

Remember when programming was fun? :)

Just got back with an exit button code from my Floppy Formatter program.
Try this instead.

Code: Select all

   <button>
   <input file icon=\"gtk-quit\"></input>
        <label>EXIT</label>
        <action type=\"exit\">EXIT_NOW</action>
      </button>
It includes an icon and icons can be added to any button.

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#49 Post by sunburnt »

8-bit; Try this: <button><label>Exit</label><action>$appPATH/driveman saveGUI</action><action type=\"exit\">exit</action></button>

I`ve rewritten all of the driveman files and tested all but the Settings GUI.
All 5 separate settings files are now in one file, and the smaller Settings GUI has 4 CheckBoxes.
Attachments
000_DriveMan_+_Settings.png
Both GUIs are smaller, I like that...
(28.24 KiB) Downloaded 531 times

User avatar
8-bit
Posts: 3406
Joined: Wed 04 Apr 2007, 03:37
Location: Oregon

#50 Post by 8-bit »

It looks like it is coming along nicely!
I like the looks of it.

I do not know if the settings window comes up as you have it shown.
But you can have it do so by utilizing the position and size settings from the Driveman window.

Post Reply