Add xpmimg widget to makegdesc.
[doldaconnect.git] / common / makegdesc
index 68138d3..e8fd6f5 100755 (executable)
@@ -1,5 +1,10 @@
 #!/usr/bin/perl
 
+use Getopt::Long;
+use IO::File;
+
+GetOptions(\%args, "h=s") || exit 1;
+
 $tempvar = 0;
 
 sub printwidgets
@@ -114,13 +119,16 @@ sub printwidgets
            $widget->{"stock"} || die("Can't have image without stock\n");
            $widget->{"size"} || die("Can't have image without size\n");
            print "${p}stack[$sl] = gtk_image_new_from_stock(GTK_STOCK_" . $widget->{"stock"} . ", GTK_ICON_SIZE_" . $widget->{"size"} . ");\n";
+       } elsif($widget->{"type"} eq "xpmimg") {
+           $widget->{"data"} || die("Can't have XPM image without data\n");
+           print "${p}stack[$sl] = gtk_image_new_from_pixbuf(gdk_pixbuf_new_from_xpm_data((const char **)" . $widget->{"data"} . "));\n";
        } elsif($widget->{"type"} eq "lbl") {
            $widget->{"label"} || $widget->{"markup"} || die("Can't have label without label\n");
            if($widget->{"label"}) {
                print "${p}stack[$sl] = gtk_label_new(_(\"" . $widget->{"label"} . "\"));\n";
            } else {
                print "${p}stack[$sl] = gtk_label_new(NULL);\n";
-               print "${p}gtk_label_set_markup(GTK_LABEL(stack[$sl]), _(\"" . $widget->{"label"} . "\"));\n";
+               print "${p}gtk_label_set_markup(GTK_LABEL(stack[$sl]), _(\"" . $widget->{"markup"} . "\"));\n";
            }
            if($widget->{"wrap"} eq "y") {
                print "${p}gtk_label_set_line_wrap(GTK_LABEL(stack[$sl]), TRUE);\n";
@@ -197,6 +205,9 @@ sub printwidgets
            }
        } elsif($widget->{"type"} eq "notebook") {
            print "${p}stack[$sl] = gtk_notebook_new();\n";
+           if(defined($widget->{"pos"})) {
+               print "${p}gtk_notebook_set_tab_pos(GTK_NOTEBOOK(stack[$sl]), GTK_POS_" . $widget->{"pos"} . ");\n";
+           }
            $pf = sub
            {
                my($widget, $p, $sl) = @_;
@@ -356,6 +367,9 @@ sub printwidgets
        if($widget->{"align"} =~ /([\d\.]+):([\d\.]+)/) {
            print "${p}gtk_misc_set_alignment(GTK_MISC(stack[$sl]), $1, $2);\n";
        }
+       if($widget->{"wpad"} =~ /([\d\.]+):([\d\.]+)/) {
+           print "${p}gtk_misc_set_padding(GTK_MISC(stack[$sl]), $1, $2);\n";
+       }
        if($widget->{"var"} eq "y") {
            print $p . $options{"prefix"} . $widget->{"name"} . " = stack[$sl];\n";
        }
@@ -394,7 +408,7 @@ sub printwidgets
                    $cb = $widget->{$attr};
                    $data = "NULL";
                }
-               print "${p}g_signal_connect(G_OBJECT(stack[$sl]), \"$1\", G_CALLBACK($cb), (gpointer)$data);\n";
+               print "${p}g_signal_connect(G_OBJECT(stack[$sl]), \"$sig\", G_CALLBACK($cb), (gpointer)$data);\n";
            }
        }
        if($widget->{"subwidgets"})
@@ -417,6 +431,20 @@ sub printwidgets
     }
 }
 
+sub printheader
+{
+    my($widget, $handle);
+    $handle = $_[1];
+    foreach $widget (@{$_[0]})
+    {
+       if($widget->{"var"})
+       {
+           $handle->print("extern GtkWidget *" . $options{"prefix"} . $widget->{"name"} .";\n");
+       }
+       printheader($widget->{"subwidgets"}, $handle) if($widget->{"subwidgets"});
+    }
+}
+
 sub printvars
 {
     my($widget);
@@ -482,6 +510,14 @@ while(<>)
     }
 }
 
+if($args{"h"})
+{
+    $hfile = IO::File->new($args{"h"}, "w") || die;
+    $hfile->print("GtkWidget *create_" . $options{"prefix"} . "wnd(void);\n");
+    printheader $rootwidgets, $hfile;
+    $hfile->close();
+}
+
 printvars $rootwidgets;
 print "\n";
 print "GtkWidget *create_" . $options{"prefix"} . "wnd(void)\n";