This repository has been archived on 2024-11-22. You can view files and clone it, but cannot push or open issues or pull requests.
zenity/src/gdialog

222 lines
5.2 KiB
Perl

#!/usr/bin/perl
# gdialog -> zenity conversion wrapper
#
# by Mike Newman <mikegtn@gnome.org>
#
# This is all, of course, horrible - but it should translate
# most commond gdialog types to zenity equivalents. It will mostly drop
# the pointless and unused (even by gdialog!) size arguments
# but hopefully will translate all the others.
#
# For testing purposes, I've used a couple of the nautilus scripts
# available at http://g-scripts.sourceforge.net - what is sometimes
# unclear is what is a gdialog/zenity translation problem, and what is
# a problem with the original script
my $command = "zenity "; # the command line we build up to execute
my $element = ""; # current bit of command line
my $argn = 0; # counter for walking args
my $args = $#ARGV + 1; # total number of command line arguments
my $separator = 0; # set if --separate-output is in use
# this just loads the current arg into $element
sub get_arg () {
$element = $ARGV[$argn];
}
# walk the command line
ARG: while ($argn < $args) {
get_arg;
# Section 1 : Args which gdialog expects BEFORE box options
# --clear, --backtitle have no obvious effect - ignored
if ($element eq "--title") {
# --title argument is almost analogous in gdialog and
# zenity - so pass it almost entirely as is
$argn++;
get_arg;
$command .= "--title=\"$element\" ";
# keep processing args
$argn++;
next ARG;
}
if ($element eq "--separate-output") {
# set the flag to pring list output line by line
$separator = 1;
# keep processing args
$argn++;
next ARG;
}
# Section 2 : Box Options and subsequent args
if ($element eq "--msgbox" || $element eq "--infobox") {
# This bit is common to almost all of the dialogs
# the arg following the dialog type in gdialog is usually
# equivalent to zenity's --text arg.
$argn++;
get_arg;
$command .= "--info --text=\"$element\" ";
# this also happens a lot - gdialog accepted size args
# for dialog compatability - which it pretty much ignored
# and we will do the same
$argn+=2;
last ARG;
}
if ($element eq "--yesno") {
# this will silently ignore the gdialog option to set
# the default button in question dialogs - which is
# highly hig-norant anyway!
$argn++;
get_arg;
$command .= "--question --text=\"$element\" ";
last ARG;
}
if ($element eq "--inputbox") {
$argn++;
get_arg;
$command .= "--entry --text=\"$element\" ";
# ignore size elements and maybe there is some
# default text to initialize the entry with?
$argn+=3;
get_arg;
$command .= "--entry-text=\"$element\" ";
last ARG;
}
if ($element eq "--textbox") {
$command .= "--text-info ";
# the arg immediately following the dialog type in
# gdialog is the filename, so pass this to zenity
$argn++;
get_arg;
$command .= "--filename=\"$element\" ";
# width and height matter for this one, so get them
# and apply the same multipliers as used in gdialog
$argn++;
get_arg;
$element = $element * 8;
$command .= "--width=\"$element\" ";
$argn++;
get_arg;
$element = $element * 7;
$command .= "--height=\"$element\" ";
last ARG;
}
if ($element eq "--checklist" || $element eq "--radiolist") {
$list=$element;
$argn++;
get_arg;
# Conveniently, zenity and gdialog use the same names
# for list types, so pass this to zenity intact along with
# an untitled column for the check or radio buttons
# and the 'text' arg as a second column header
$command .= "--list $list --column='' --column $element ";
# should output be line by line?
if ($separator) {
$command .= " --separator='\n' ";
}
# Skip to the first 'item' arg of the list content
# bypassing height, width and list-height
# from here args run [tag] [item] [status] ...
$argn += 5;
# Loop over the remainder of the commandline
# discarding the 'status' and 'tag' args of each item
# and using the 'item' for display in our second column
# also pass a fake NULL argument since zenity can't set
# the status of a row like gdialog can
while ($argn < $args) {
get_arg;
$command .= "NULL $element ";
$argn += 3;
}
last ARG;
}
if ($element eq "--menu") {
$list=$element;
$argn++;
get_arg;
# a gdialog --menu is just a one column zenity --list
# Use the 'text' arg as a second column header
# FIXME: or should it be the dialog text, or both?
$command .= "--list --column $element ";
# Skip to the first 'item' arg of the list content
# bypassing height, width and list-height
# from here args run [tag] [item] ...
$argn += 5;
# Loop over the remainder of the commandline
# discarding the 'tag' args of each item
# and using the 'item' for display in our second column
while ($argn < $args) {
get_arg;
$command .= "$element ";
$argn += 2;
}
last ARG;
}
if ($element eq "--gauge") {
$argn++;
get_arg;
$command .= "--progress --text=\"$element\" ";
# discard the size args as usually, and see if
# a percentage value was supplied to initialize the
# dialog
$argn += 3;
get_arg;
if ($element) {
$command .= "--percentage=$element ";
}
last ARG;
}
$argn++;
}
# execute the constructed zenity command line
$command .= " 2>&1";
system($command);