In this article I walk through the steps that get the yad, gtkdialog and geany installed and tested.
This is the next article in a series of articles on gtkdialog, “gtkdialog Exploration – articles and examples”, which can be found at https://blogs.czapski.id.au/2017/04/gtkdialog-exploration.
Pre-Requisites
This article assumes that the Virtual Box Machine Image created in accordance with the instructions in the blog article to be found at https://blogs.czapski.id.au/2016/10/configure-virtual-box-virtual-machine-and-install-centos-6-8-base-image is available but it is expected that pretty much any VirtualBox Linux disk will do just as well so long as it supports yad and gtkdialog.
For convenience I posted the export of the VirtualBox image which would have been built if the reader followed all the articles in the series “Build a Linux-based Infrastructure Solution Demonstration Series” to date, that is to the 8th of March 2017. The link to the main article is https://blogs.czapski.id.au/2016/10/build-a-linux-based-infrastructure-solution-demonstration-series.
In this article I am discussing how yad and gtkdialog can be obtained and installed on CentOS 6.8. yad because I use it for simple OK/Cancel dialog boxes and gtkdialog because I use it for the applications with reasonably sophisticated functionality for which yad would be too cumbersome to use.
Install yad
Download yad from https://sourceforge.net/projects/yad-dialog/, build and install.
cd ~/Downloads wget https://downloads.sourceforge.net/project/yad-dialog/yad-0.38.2.tar.xz tar xvf yad-0.38.2.tar.xz cd yad-0.38.2 autoreconf -ivf export CFLAGS="$CFLAGS -DPACKAGE_URL='\"http://yad-dialog.sf.net/\"'" ./configure make sudo make install
Is there help?
man yad
A simple information dialogue can be constructed as follows:
cat <<-'EODECK' > /tmp/yad01.sh templateFile=/tmp/xml/GIndProv_template_request.xml if [ ! -f ${templateFile} ]; then yad --title="Required XML Template does not exist" --text="Required XML Template\n${templateFile}\ndoes not exist - aborting" \ --center --image="gtk-dialog-error" --window-icon="gtk-dialog-error" --width=500 --height=100 --button="gtk-ok:0" exit; fi EODECK /bin/sh /tmp/yad01.sh
A more sophisticated dialog might look like this:
cat <<-'EODECK' > /tmp/yad_find_patient.sh #!/bin/bash fnUpdateFieldsSBR() { echo "3:${title:-MR}" echo "4:${lastName:-Smith}" echo "5:${gender:-Male}" echo "6:${ssn:-123456789}" echo "11:${firstName:-John}" echo "12:${suffix:-III}" echo "13:${dob:-10/10/1978}" } export -f fnUpdateFieldsSBR yad \ --center \ --title="Find Patient by EUID" \ --text="<span size=\"xx-large\">Find Patient Details by EUID</span>\n" \ --form \ --width=550 \ --borders=5 \ --columns=2 \ --date-format="%m/%d/%Y" \ --align=right \ --field="Enterprise Unique ID" "${USAPatXEUIDX:-0001234567}" \ --field="Demographics:LBL" "" \ --field="Title:RO" "" \ --field="Last Name:RO" "" \ --field="Sex:RO" "" \ --field="Social Security Number:RO" "" \ --field="Options:LBL" "" \ --field="Show XML Request?:CHK" "FALSE" \ \ --field " Search!gtk-find:FBTN" "@bash -c \"fnUpdateFieldsSBR \"%16\" \"%8\" \"%1\" \" " \ --field=":LBL" "" \ --field="First Name:RO" "" \ --field="Suffix:RO" "" \ --field="Date of Birth:RO" "" \ --field=".:LBL" "." \ --field=":LBL" "" \ --field="Show XML Response?:CHK" "FALSE" \ \ --dialog-sep \ --button="Quit!gtk-quit:0" EODECK /bin/sh /tmp/yad_find_patient.sh
Install gtkdialog
Download gtkdialog from https://centos.pkgs.org/6/epel-x86_64/gtkdialog-0.8.3-8.el6.x86_64.rpm.html
# get and install the package cd ~/Downloads wget http://dl.fedoraproject.org/pub/epel/6/x86_64//gtkdialog-0.8.3-8.el6.x86_64.rpm sudo yum localinstall -y gtkdialog-0.8.3-8.el6.x86_64.rpm # get and install soruces for examples and documentation wget https://fossies.org/linux/privat/old/gtkdialog-0.8.3.tar.gz cd ~/ tar xvf ./Downloads/gtkdialog-0.8.3.tar.gz
Try a few examples provided in the source distribution to get some notion of what can be accomplished with gtkdialog:
~/gtkdialog-0.8.3/examples/menu/menu ~/gtkdialog-0.8.3/examples/comboboxentry/comboboxentry_advanced ~/gtkdialog-0.8.3/examples/button/button_attributes ~/gtkdialog-0.8.3/examples/notebook/notebook_advanced
Take a look at reference and other documentation:
firefox file:///home/demo/gtkdialog-0.8.3/doc/reference/window.html & firefox http://gtk.php.net/manual/en/html/gdk/gdk.enum.windowtypehint.html &
Install geany
Download and install geany editor – it beats the gedit and other free alternatives in my opinion
cd ~/Downloads wget http://download.geany.org/geany-1.24.1.tar.gz tar xvf geany-1.24.1.tar.gz cd geany-1.24.1 ./autogen.sh make sudo make install
Test:
cp -v /home/demo/gtkdialog-0.8.3/examples/window/window /tmp/gtk_window.sh geany /tmp/gtk_window.sh &
Inspect the code in geany and press F5 to execute it.
gtkdialog hello world
Create a modified script and experiment with the various settings of the window attributes
cat <<-'EODECK' > /tmp/gtk_window.sh #!/bin/bash GTKDIALOG=gtkdialog MAIN_DIALOG=' <window \ decorated="true" \ allow-grow="true" \ allow-shrink="true" \ default-height="200" \ default-width="400" \ resizable="true" xx-resizable="overrides default-height and default-width if set to false" \ deletable="true" xx-deletable="this keep (default) or remove the close button from the window title bar" \ icon-name="gtk-refresh" \ modal="false" \ skip-pager-hint="true" \ skip-taskbar-hint="false" \ title="My First Window" \ window-position="1" \ border-width="5" xx-border-width="is an inherited GtkContainer property - see object hierarchy at https://developer.gnome.org/gtk2/2.24/GtkWindow.html#GtkWindow.object-hierarchy" \ sensitive="true" xx-sensitive="is an inherited GtkWidget property that disables everything inside the window - see obect hierarchy" \ tooltip-markup="This is a <b>window tooltip</b>" xx-tooltip-markup="is inherited from GtkWidget" \ > <vbox> <frame Description > <text> <label>This is an example window.</label> </text> </frame> <hbox> <button ok></button> <button cancel></button> </hbox> </vbox> </window> ' export MAIN_DIALOG case $1 in -d | --dump) echo "$MAIN_DIALOG" ;; *) $GTKDIALOG --program=MAIN_DIALOG ;; esac EODECK /tmp/gtk_window.sh
Experiment with the setting of the Window object attributes and see what effect the changes have on the appearance and behaviour of the window.
There is plenty more that can be done with gtkdialog. I intend to write more articles on this topic as the time goes by. This article provides the tooling for these later articles.