GtkDialog - tips

For discussions about programming, programming questions/advice, and projects that don't really have anything to do with Puppy.
Message
Author
User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1461 Post by MochiMoppel »

smokey01 wrote:I'm still trying to find a way to enable/disable a button depending if a file exists or not
Argolance asked the same question here in this forum about 2 months ago.
Basically 2 ways to achieve this: Either with a timer widget or with file-monitor attribute.
I thought the <input file> option might work but apparently it only seems to display graphic files on the button widget, if they exist. I also tried it with tag attributes file-monitor and auto-refresh, no joy.
You were close. <input file> is supposed to display the button icon but even if the file is no image file file-monitor can still monitor it. In Argolance's thread I gave an example with 2 buttons, but it can be done with only 1 button. Hold your breath, this is going to be weird.

I thought that this would not work, but it does (I use leafpad since I don't have psip).
The script starts by creating an empty file (> /tmp/leafpad-file).
The function removes any tmp file that may exist, then runs the application. After the application finished, an empty string is written to the empty file. Apart from the filedate nothing changed, right?. Normally I would expect that this does not trigger a file-changed signal, but apparently it does.

Code: Select all

#!/bin/bash
> /tmp/leafpad-file

run_leafpad() {  
	leafpad
	> /tmp/leafpad-file
} 
export -f run_leafpad
 
echo -n '<window>
<vbox>
	<button label="run_leafpad" file-monitor="true"> 
		<variable>BUT</variable>
		<input file>/tmp/leafpad-file</input> 
		<action signal="file-changed">enable:BUT</action> 
		<action signal="file-changed">break:</action> 
 		<action>disable:BUT</action>
		<action>run_leafpad &</action>
	</button>
</vbox>
</window>' | gtkdialog -s
rm /tmp/leafpad-file
Note that in above code the button has no icon but it would be no problem to add one in the usual manner.

Using a timer would be more efficient as the timer monitors the file only as long as leafpad is running and not continuously as in above example:

Code: Select all

#!/bin/bash
run_leafpad() { 
	> /tmp/leafpad-file 
	leafpad
	rm /tmp/leafpad-file
} 
export -f run_leafpad
 
echo -n '<window>
<vbox>
	<button label="run_leafpad"> 
		<variable>BUT</variable>
		<action>disable:BUT</action>
		<action>enable:TIMER</action>
		<action>run_leafpad &</action>
	</button>
	<timer visible="false" sensitive="false">
		<variable>TIMER</variable>
		<action condition="command_is_true( [ -e /tmp/leafpad-file ] && echo true )">break:</action> 
		<action>disable:TIMER</action> 
		<action>enable:BUT</action> 
	</timer>
</vbox>
</window>' | gtkdialog -s

User avatar
smokey01
Posts: 2813
Joined: Sat 30 Dec 2006, 23:15
Location: South Australia :-(
Contact:

#1462 Post by smokey01 »

@MochiMoppel,

Two excellent examples. I prefer the second as it only creates the test file when the external app is running instead of the parent GUI. I was very close but no cigar, as they say.

I was using a timer widget at one stage but was unaware of the break command. I pretty sure this code will do the job nicely.

Thanks again.

User avatar
TwoPuppies
Posts: 77
Joined: Wed 29 Dec 2010, 05:13
Location: Melbourne, Australia

GtkDialog Progress Bar in script

#1463 Post by TwoPuppies »

I have a script here that installs VLC Media Player 2.2.2 from a collection of DEB packages that are archived in a directory. It runs in conjunction with a slightly modified version of Petget such that it installs the packages automatically and silently (without questions). Because there are 56 packages here, I would like to add a small GtkDialog window with a Progress Bar so that I can see how things are going. Can someone help me with this?

Code: Select all

#!/bin/sh

mv /usr/local/petget/{petget,petget_original}
cp /root/my-applications/"Install multiple packages"/Files/petget /usr/local/petget/

petget +fonts-freefont-ttf_20120503-4_all.deb
petget +libbasicusageenvironment1_2016.02.09-1_i386.deb
petget +libchromaprint0_1.3-1_i386.deb
petget +libfreerdp-cache1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-client1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-codec1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-common1.1.0_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-core1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-crypto1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-gdi1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-locale1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-primitives1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-utils1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libgroupsock8_2016.02.09-1_i386.deb
petget +libkate1_0.4.1-7_i386.deb
petget +liblivemedia50_2016.02.09-1_i386.deb
petget +libmatroska6v5_1.4.4-1_i386.deb
petget +libmtp9_1.1.10-2ubuntu1_i386.deb
petget +libmtp-common_1.1.10-2ubuntu1_all.deb
petget +libproxy-tools_0.4.11-5ubuntu1_i386.deb
petget +libqt5core5a_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5dbus5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5gui5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5network5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5widgets5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5x11extras5_5.5.1-3build1_i386.deb
petget +libresid-builder0c2a_2.1.1-14ubuntu2_i386.deb
petget +libshout3_2.3.1-3_i386.deb
petget +libsidplay2v5_2.1.1-14ubuntu2_i386.deb
petget +libssh2-1_1.5.0-2ubuntu0.1_i386.deb
petget +libupnp6_1.6.19+git20160116-1_i386.deb
petget +libusageenvironment3_2016.02.09-1_i386.deb
petget +libvlc5_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +libvlccore8_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +libvncclient1_0.9.10+dfsg-3ubuntu0.16.04.3_i386.deb
petget +libwinpr-crt0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-dsparse0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-environment0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-file0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-handle0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-heap0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-input0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-interlocked0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-library0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-path0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-pool0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-registry0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-rpc0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-sspi0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-synch0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-sysinfo0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-thread0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-utils0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +vlc_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +vlc-data_2.2.2-5ubuntu0.16.04.4_all.deb
petget +vlc-nox_2.2.2-5ubuntu0.16.04.4_i386.deb

rm -fR /usr/local/petget/petget
mv /usr/local/petget/{petget_original,petget}

/usr/sbin/fixmenus
 [ "`pidof jwm`" != "" ] && { jwm -reload || jwm -restart ; }

export MAIN_DIALOG='
<window window_position="3" title="Installation complete" width_request="300" icon-name="gtk-info">
<vbox>   
       <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>
<hbox homogeneous="true"> 
<text use-markup="true" width_request="0"><label>"<b><big>Installation is complete</big></b>"</label></text>    
</hbox>  
       <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>       
          <hbox homogeneous="True">
  <button ok></button>
      </hbox>   
      <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>
</vbox>
  </window>
'
  gtkdialog --program=MAIN_DIALOG &
[color=#006699]What you really need is two puppies:
Puppy Linux, and the sort with four legs and a tail.[/color]

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1464 Post by MochiMoppel »

My first progressbar...
May even work, but treat with caution and adapt as needed:

Code: Select all

#!/bin/bash
export PACKAGELIST='
libservice ubuntu1.3_i386.deb
libwinwin-psych0.1_1.1.0.deb
another sillyly named1.2.3.deb
'

function progress {
    IFS=$'\n'
    array=($PACKAGELIST)
    cnt=${#array[@]}
    step=$((100/cnt))
    bar=$step
    for ((c=0;c<$cnt;c++));do
        file=${array[$c]}
        echo $bar                #progress indicator (MUST be number)
        echo $file               #text within progress bar (MUST NOT start with number)
        gxmessage  petget +$file #run executable (remove gxmessage after testing)
        bar=$((bar+step))        #increase progress indicator
    done; 
    echo 100                     #bar value may not have reached 100; force 100 to trigger progress bar action
}; export -f progress

export MAIN_DIALOG='
<window>
    <vbox>
        <text label="Packages are being installed..."></text>
        <progressbar>
            <input>progress</input>
            <action>exit:</action>
        </progressbar>
    </vbox>
</window>
'
gtkdialog

User avatar
TwoPuppies
Posts: 77
Joined: Wed 29 Dec 2010, 05:13
Location: Melbourne, Australia

#1465 Post by TwoPuppies »

Hi MochiMoppel. Thanks for your Progress Bar script.

Firstly, is the following the correct way to integrate your script with mine?:

Code: Select all

#!/bin/sh

mv /usr/local/petget/{petget,petget_original}
cp /root/my-applications/"Install multiple packages"/Files/petget /usr/local/petget/

petget +fonts-freefont-ttf_20120503-4_all.deb
petget +libbasicusageenvironment1_2016.02.09-1_i386.deb
petget +libchromaprint0_1.3-1_i386.deb
petget +libfreerdp-cache1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-client1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-codec1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-common1.1.0_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-core1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-crypto1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-gdi1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-locale1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-primitives1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-utils1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libgroupsock8_2016.02.09-1_i386.deb
petget +libkate1_0.4.1-7_i386.deb
petget +liblivemedia50_2016.02.09-1_i386.deb
petget +libmatroska6v5_1.4.4-1_i386.deb
petget +libmtp9_1.1.10-2ubuntu1_i386.deb
petget +libmtp-common_1.1.10-2ubuntu1_all.deb
petget +libproxy-tools_0.4.11-5ubuntu1_i386.deb
petget +libqt5core5a_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5dbus5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5gui5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5network5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5widgets5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5x11extras5_5.5.1-3build1_i386.deb
petget +libresid-builder0c2a_2.1.1-14ubuntu2_i386.deb
petget +libshout3_2.3.1-3_i386.deb
petget +libsidplay2v5_2.1.1-14ubuntu2_i386.deb
petget +libssh2-1_1.5.0-2ubuntu0.1_i386.deb
petget +libupnp6_1.6.19+git20160116-1_i386.deb
petget +libusageenvironment3_2016.02.09-1_i386.deb
petget +libvlc5_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +libvlccore8_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +libvncclient1_0.9.10+dfsg-3ubuntu0.16.04.3_i386.deb
petget +libwinpr-crt0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-dsparse0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-environment0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-file0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-handle0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-heap0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-input0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-interlocked0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-library0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-path0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-pool0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-registry0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-rpc0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-sspi0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-synch0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-sysinfo0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-thread0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-utils0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +vlc_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +vlc-data_2.2.2-5ubuntu0.16.04.4_all.deb
petget +vlc-nox_2.2.2-5ubuntu0.16.04.4_i386.deb

export PACKAGELIST='
petget +fonts-freefont-ttf_20120503-4_all.deb
petget +libbasicusageenvironment1_2016.02.09-1_i386.deb
petget +libchromaprint0_1.3-1_i386.deb
petget +libfreerdp-cache1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-client1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-codec1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-common1.1.0_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-core1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-crypto1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-gdi1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-locale1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-primitives1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libfreerdp-utils1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libgroupsock8_2016.02.09-1_i386.deb
petget +libkate1_0.4.1-7_i386.deb
petget +liblivemedia50_2016.02.09-1_i386.deb
petget +libmatroska6v5_1.4.4-1_i386.deb
petget +libmtp9_1.1.10-2ubuntu1_i386.deb
petget +libmtp-common_1.1.10-2ubuntu1_all.deb
petget +libproxy-tools_0.4.11-5ubuntu1_i386.deb
petget +libqt5core5a_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5dbus5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5gui5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5network5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5widgets5_5.5.1+dfsg-16ubuntu7.6_i386.deb
petget +libqt5x11extras5_5.5.1-3build1_i386.deb
petget +libresid-builder0c2a_2.1.1-14ubuntu2_i386.deb
petget +libshout3_2.3.1-3_i386.deb
petget +libsidplay2v5_2.1.1-14ubuntu2_i386.deb
petget +libssh2-1_1.5.0-2ubuntu0.1_i386.deb
petget +libupnp6_1.6.19+git20160116-1_i386.deb
petget +libusageenvironment3_2016.02.09-1_i386.deb
petget +libvlc5_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +libvlccore8_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +libvncclient1_0.9.10+dfsg-3ubuntu0.16.04.3_i386.deb
petget +libwinpr-crt0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-dsparse0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-environment0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-file0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-handle0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-heap0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-input0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-interlocked0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-library0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-path0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-pool0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-registry0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-rpc0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-sspi0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-synch0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-sysinfo0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-thread0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +libwinpr-utils0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
petget +vlc_2.2.2-5ubuntu0.16.04.4_i386.deb
petget +vlc-data_2.2.2-5ubuntu0.16.04.4_all.deb
petget +vlc-nox_2.2.2-5ubuntu0.16.04.4_i386.deb
'

function progress {
    IFS=$'\n'
    array=($PACKAGELIST)
    cnt=${#array[@]}
    step=$((100/cnt))
    bar=$step
    for ((c=0;c<$cnt;c++));do
        file=${array[$c]}
        echo $bar                #progress indicator (MUST be number)
        echo $file               #text within progress bar (MUST NOT start with number)
        gxmessage  petget +$file #run executable (remove gxmessage after testing)
        bar=$((bar+step))        #increase progress indicator
    done;
    echo 100                     #bar value may not have reached 100; force 100 to trigger progress bar action
}; export -f progress

export MAIN_DIALOG='
<window>
    <vbox>
        <text label="Packages are being installed..."></text>
        <progressbar>
            <input>progress</input>
            <action>exit:</action>
        </progressbar>
    </vbox>
</window>
'
gtkdialog

rm -fR /usr/local/petget/petget
mv /usr/local/petget/{petget_original,petget}

/usr/sbin/fixmenus
 [ "`pidof jwm`" != "" ] && { jwm -reload || jwm -restart ; }

export MAIN_DIALOG='
<window window_position="3" title="Installation complete" width_request="300" icon-name="gtk-info">
<vbox>   
       <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>
<hbox homogeneous="true"> 
<text use-markup="true" width_request="0"><label>"<b><big>Installation is complete</big></b>"</label></text>    
</hbox>  
       <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>       
          <hbox homogeneous="True">
  <button ok></button>
      </hbox>   
      <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>
</vbox>
  </window>
'
  gtkdialog --program=MAIN_DIALOG &
Secondly, if the above is correct, then there are two problems:

1. I only get a Progress Bar when the gxmessage line is present. (And, of course, I also get the gxmessage message windows). When I remove the gxmessage line, the message windows cease to display, but so does the Progress Bar.

2. In both of the above cases (with the gxmessage line or without it) my script no longer actually installs anything.
[color=#006699]What you really need is two puppies:
Puppy Linux, and the sort with four legs and a tail.[/color]

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1466 Post by MochiMoppel »

TwoPuppies wrote:Firstly, is the following the correct way to integrate your script with mine?
No Image
Secondly, if the above is correct, then there are two problems:
If the above would be correct you wouldn't have these problems :wink:

Note that in my example PACKAGELIST contains only the names of the package files (without the preceding "petget +")

The content of the gxmessage represents the command that would be executed if you would remove "gxmessage". Take a close look. With your script this command would be not correct.

Before the "export PACKAGELIST='" line you still run all those petget commands, i.e. you are actually installing the packages before the progress function will try to install them again. Makes no sense. Remove these petget commands.

User avatar
TwoPuppies
Posts: 77
Joined: Wed 29 Dec 2010, 05:13
Location: Melbourne, Australia

#1467 Post by TwoPuppies »

OK, thanks. I'll see what I can do with it.
You might guess that I don't really have all that much idea what I am doing here. :oops:
[color=#006699]What you really need is two puppies:
Puppy Linux, and the sort with four legs and a tail.[/color]

User avatar
TwoPuppies
Posts: 77
Joined: Wed 29 Dec 2010, 05:13
Location: Melbourne, Australia

#1468 Post by TwoPuppies »

Got it working. Hooray!

For anyone else reading this and wanting to understand what is going on, I made three mistakes:

1. My initial list of commands was not required. It duplicated the list in the 'PACKAGELIST=' section, so I was trying to install everything twice.

2. The prefix petget + in the 'PACKAGELIST=' section was not required because the later command petget +$file adds this automatically.

3. When testing later, I subsequently misunderstood the comment #run executable (remove gxmessage after testing) and removed the entire line (rather than just gxmessage), so nothing got installed.

I think I have all that right.
This version works:

Code: Select all

#!/bin/sh

mv /usr/local/petget/{petget,petget_original}
cp /root/my-applications/"Install multiple packages"/Files/petget /usr/local/petget/


export PACKAGELIST='
fonts-freefont-ttf_20120503-4_all.deb
libbasicusageenvironment1_2016.02.09-1_i386.deb
libchromaprint0_1.3-1_i386.deb
libfreerdp-cache1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-client1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-codec1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-common1.1.0_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-core1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-crypto1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-gdi1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-locale1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-primitives1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libfreerdp-utils1.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libgroupsock8_2016.02.09-1_i386.deb
libkate1_0.4.1-7_i386.deb
liblivemedia50_2016.02.09-1_i386.deb
libmatroska6v5_1.4.4-1_i386.deb
libmtp9_1.1.10-2ubuntu1_i386.deb
libmtp-common_1.1.10-2ubuntu1_all.deb
libproxy-tools_0.4.11-5ubuntu1_i386.deb
libqt5core5a_5.5.1+dfsg-16ubuntu7.6_i386.deb
libqt5dbus5_5.5.1+dfsg-16ubuntu7.6_i386.deb
libqt5gui5_5.5.1+dfsg-16ubuntu7.6_i386.deb
libqt5network5_5.5.1+dfsg-16ubuntu7.6_i386.deb
libqt5widgets5_5.5.1+dfsg-16ubuntu7.6_i386.deb
libqt5x11extras5_5.5.1-3build1_i386.deb
libresid-builder0c2a_2.1.1-14ubuntu2_i386.deb
libshout3_2.3.1-3_i386.deb
libsidplay2v5_2.1.1-14ubuntu2_i386.deb
libssh2-1_1.5.0-2ubuntu0.1_i386.deb
libupnp6_1.6.19+git20160116-1_i386.deb
libusageenvironment3_2016.02.09-1_i386.deb
libvlc5_2.2.2-5ubuntu0.16.04.4_i386.deb
libvlccore8_2.2.2-5ubuntu0.16.04.4_i386.deb
libvncclient1_0.9.10+dfsg-3ubuntu0.16.04.3_i386.deb
libwinpr-crt0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-dsparse0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-environment0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-file0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-handle0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-heap0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-input0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-interlocked0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-library0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-path0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-pool0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-registry0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-rpc0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-sspi0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-synch0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-sysinfo0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-thread0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
libwinpr-utils0.1_1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3_i386.deb
vlc_2.2.2-5ubuntu0.16.04.4_i386.deb
vlc-data_2.2.2-5ubuntu0.16.04.4_all.deb
vlc-nox_2.2.2-5ubuntu0.16.04.4_i386.deb
'

function progress {
    IFS=$'\n'
    array=($PACKAGELIST)
    cnt=${#array[@]}
    step=$((100/cnt))
    bar=$step
    for ((c=0;c<$cnt;c++));do
        file=${array[$c]}
        echo $bar                #progress indicator (MUST be number)
        echo $file               #text within progress bar (MUST NOT start with number)
        petget +$file                #run executable (remove gxmessage after testing)
        bar=$((bar+step))        #increase progress indicator
    done;
    echo 100                     #bar value may not have reached 100; force 100 to trigger progress bar action
}; export -f progress

export MAIN_DIALOG='
<window>
    <vbox>
        <text label="Packages are being installed..."></text>
        <progressbar>
            <input>progress</input>
            <action>exit:</action>
        </progressbar>
    </vbox>
</window>
'
gtkdialog

rm -fR /usr/local/petget/petget
mv /usr/local/petget/{petget_original,petget}

/usr/sbin/fixmenus
 [ "`pidof jwm`" != "" ] && { jwm -reload || jwm -restart ; }

export MAIN_DIALOG='
<window window_position="3" title="Installation complete" width_request="300" icon-name="gtk-info">
<vbox>   
       <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>
<hbox homogeneous="true"> 
<text use-markup="true" width_request="0"><label>"<b><big>Installation is complete</big></b>"</label></text>    
</hbox>  
       <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>       
          <hbox homogeneous="True">
  <button ok></button>
      </hbox>   
      <pixmap><input file>/usr/local/lib/X11/pixmaps/invisible96x8.png</input></pixmap>
</vbox>
  </window>
'
  gtkdialog --program=MAIN_DIALOG &
As always, MochiMoppel, thank you for your help. What would I do without you?

Just out of interest, why does the Progress Bar close before the bar gets to the end? Can this be changed?
Last edited by TwoPuppies on Tue 13 Aug 2019, 05:03, edited 2 times in total.
[color=#006699]What you really need is two puppies:
Puppy Linux, and the sort with four legs and a tail.[/color]

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1469 Post by MochiMoppel »

TwoPuppies wrote:Got it working. Hooray!
Congratulations!
Just out of interest, why does the Progress Bar close before the bar gets to the end?
because bash doesn't know how to calculate :lol: . Here is what happens:
First we have to calculate cnt, the number of files in the list. Results in 56. So far so good.
We then have to calculate step, the portion of the progress bar added with each processed file. When all files are processed all steps should add up to 100, or at least close to it. My code calculates step as $((100/cnt)), i.e. 100 divided by 56, which should result in 1.786). Unfortunately bash can't do floating point calculation and rounds the result down to the nearest integer, which is 1. With a step of only 1 and 56 processed files the progress bar will only reach 56% :cry:
Can this be changed?
Yes. Increase the accuracy of the step value. Try an increase of 1000
Change step=$((100/cnt)) to step=$((100000/cnt))
and
echo $bar to echo $((bar/1000))
which reverts the temporary increase. See if this helps.

User avatar
misko_2083
Posts: 114
Joined: Tue 08 Nov 2016, 13:42

#1470 Post by misko_2083 »

MochiMoppel wrote:because bash doesn't know how to calculate :lol:
I would try next: :)

Code: Select all

 step=$(( 100 / cnt )).$(( (100 * 100 / cnt) % 100 ))
1.78
bc outputs the same:

Code: Select all

bc -l <<<"scale=2;100/56"
MochiMoppel wrote:Unfortunately bash can't do floating point calculation and rounds the result down to the nearest integer, which is 1. With a step of only 1 and 56 processed files the progress bar will only reach 56% :cry:
Bash can do floating point calculations. :wink:
:arrow: https://github.com/bluebat/.bash/blob/master/bashbc.sh

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1471 Post by MochiMoppel »

misko_2083 wrote:I would try next: :)

Code: Select all

 step=$(( 100 / cnt )).$(( (100 * 100 / cnt) % 100 ))
1.78
I wouldn't :lol:
Remember that you would still have to add these values up. In bash? Good luck!

I find my approach much easier. Besides: The progressbar doesn't seem to care about fractions. Non-numeric characters after an integer are ignored. It doesn't matter if you echo a value of 1 or 1.99999 or even 1blabla, the bar will always show exactly 1% .

User avatar
TwoPuppies
Posts: 77
Joined: Wed 29 Dec 2010, 05:13
Location: Melbourne, Australia

#1472 Post by TwoPuppies »

MochiMoppel wrote:Change step=$((100/cnt)) to step=$((100000/cnt))
and
echo $bar to echo $((bar/1000))
This worked as expected. The Progress Bar continued all the way to the end before the window closed. Thanks MochiMoppel.
misko_2083 wrote:I would try next: :)

Code: Select all

step=$(( 100 / cnt )).$(( (100 * 100 / cnt) % 100 ))
This caused the Progress Bar to freeze after only one Package was installed. No more Packages installed after that.
[color=#006699]What you really need is two puppies:
Puppy Linux, and the sort with four legs and a tail.[/color]

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1473 Post by MochiMoppel »

TwoPuppies wrote:This worked as expected.
Image

User avatar
misko_2083
Posts: 114
Joined: Tue 08 Nov 2016, 13:42

#1474 Post by misko_2083 »

MochiMoppel wrote:
misko_2083 wrote:I would try next: :)

Code: Select all

 step=$(( 100 / cnt )).$(( (100 * 100 / cnt) % 100 ))
1.78
I wouldn't :lol:
Remember that you would still have to add these values up. In bash? Good luck!

I find my approach much easier. Besides: The progressbar doesn't seem to care about fractions. Non-numeric characters after an integer are ignored. It doesn't matter if you echo a value of 1 or 1.99999 or even 1blabla, the bar will always show exactly 1% .
I know, just forgot to mention that I used the pure bash calculator.
I saved && made executable this script https://github.com/bluebat/.bash/blob/master/bashbc.sh

Code: Select all

    IFS=$'\n'
    array=($PACKAGELIST)
    cnt=${#array[@]}

    step=$(( 100 / cnt )).$(( (100 * 100 / cnt) % 100 ))
    bar=$step
    for ((c=0;c<$cnt;c++));do
        file=${array[$c]}
        echo $bar                #progress indicator (MUST be number)
        echo $file               #text within progress bar (MUST NOT start with number)
       # set the path to bashbc.sh here !
        bar=$(scale=2 bashbc.sh $bar+$step)        #increase progress indicator
    done;
    echo 100  
The calculator script works like this

Code: Select all

bashbc.sh 2.555+6.335
8.89
scale=2 bashbc.sh 2*(3/7)
0.84
Maybe not so precise but good enough for a progress bar.

User avatar
recobayu
Posts: 387
Joined: Wed 15 Sep 2010, 22:48
Location: indonesia

#1475 Post by recobayu »

I have 20 button inside of scrollable vbox. When I use down arrow keyboard to move from one button to another button below that, after some button, the button not appear. Butwhen I usemoise to scroll down, it is select on that button. How to make the button always seen when we use down arrow keyboard? Just like tree. Is it possible? Thank you.

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1476 Post by MochiMoppel »

recobayu wrote:How to make the button always seen when we use down arrow keyboard? Just like tree. Is it possible?
No.

User avatar
recobayu
Posts: 387
Joined: Wed 15 Sep 2010, 22:48
Location: indonesia

#1477 Post by recobayu »

I have an exploration about bolding a text that use-markup. We must call a function outside of gtkdialog code. Like this:

Code: Select all

#!/bin/sh
touch tebalku
tebal(){
	printf "<b>$e</b>" > tebalku
}
export -f tebal

echo '
<window>
	<vbox>
		<entry>
			<action>tebal</action>
			<action>refresh:tt</action>
			<variable>e</variable>
		</entry>
		<text xalign="1" use-markup="true">
			<input file>tebalku</input>
			<variable>tt</variable>
		</text>
	</vbox>
</window>'|gtkdialog -s
I try to add printf "<b>"$e"</b>" in action of entry. But it fail. So I must call it from outside function.
Attachments
Screenshot.png
bold text automatically
(3.16 KiB) Downloaded 513 times

User avatar
MochiMoppel
Posts: 2084
Joined: Wed 26 Jan 2011, 09:06
Location: Japan

#1478 Post by MochiMoppel »

recobayu wrote:I try to add printf "<b>"$e"</b>" in action of entry. But it fail.
...not when you escape the pango tags:

Code: Select all

#!/bin/bash
echo ' 
<window> 
<vbox> 
	<entry> 
		<action>refresh:tt</action> 
		<variable>e</variable> 
	</entry> 
	<text xalign="1" use-markup="true"> 
		<input>printf \<b\>"$e"\</b\></input> 
		<variable>tt</variable> 
	</text> 
</vbox> 
</window>'|gtkdialog -s

User avatar
d4rkn1ght
Posts: 55
Joined: Wed 20 Jan 2010, 00:47
Contact:

Button Delay

#1479 Post by d4rkn1ght »

First of all, I’m a beginner. All I’ve done so far is pasted code from other sources and molded to the direction I want to go. I still don’t know how to actually make something like you guys. :P

Anyway, I’ve been trying to have a button that pauses for a few seconds before it closes the button window.

This is what I have so far. Is this right? It works in Tahrpup.

Code: Select all

<button> 
  <label>Connect</label>
  <input file icon="gtk-yes"></input>
  <action>/usr/bin/start-gtkdialog-script.sh &</action>
  <action>sleep 8;</action>
  <action>Exit:exit &</action>
</button>

User avatar
Moose On The Loose
Posts: 965
Joined: Thu 24 Feb 2011, 14:54

Re: Button Delay

#1480 Post by Moose On The Loose »

d4rkn1ght wrote:First of all, I’m a beginner. All I’ve done so far is pasted code from other sources and molded to the direction I want to go. I still don’t know how to actually make something like you guys. :P

Anyway, I’ve been trying to have a button that pauses for a few seconds before it closes the button window.

This is what I have so far. Is this right? It works in Tahrpup.

Code: Select all

<button> 
  <label>Connect</label>
  <input file icon="gtk-yes"></input>
  <action>/usr/bin/start-gtkdialog-script.sh &</action>
  <action>sleep 8;</action>
  <action>Exit:exit &</action>
</button>
Yes, that looks about right. I tend to make only one action per button but what you have should work. I do question the "&" in the last action. I suspect that it just gets ignored.

Post Reply