tProgress bars added to Win32 GTK+ emulation; tweaks for better usage of gtk_widget_set_usize - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 290ec78c3d45f04c68b420451c2a3100fba912d8
 (DIR) parent cbe75c4a064236ea7d99cde4091576c75fa63254
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sat,  7 Apr 2001 22:48:45 +0000
       
       Progress bars added to Win32 GTK+ emulation; tweaks for better usage of
       gtk_widget_set_usize
       
       
       Diffstat:
         M src/gtk.c                           |     103 +++++++++++++++++++++++++++++++
         M src/gtk.h                           |      29 +++++++++++++++++++++++++++++
       
       2 files changed, 132 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/gtk.c b/src/gtk.c
       t@@ -180,6 +180,9 @@ static void gtk_window_handle_auto_size(GtkWindow *window,
                                                GtkAllocation *allocation);
        static void gtk_window_set_initial_position(GtkWindow *window,
                                                    GtkAllocation *allocation);
       +static void gtk_progress_bar_size_request(GtkWidget *widget,
       +                                          GtkRequisition *requisition);
       +static void gtk_progress_bar_realize(GtkWidget *widget);
        
        typedef struct _GdkInput GdkInput;
        
       t@@ -239,6 +242,20 @@ static GtkSignalType GtkSeparatorSignals[] = {
           { "",NULL,NULL }
        };
        
       +static GtkClass GtkMiscClass = {
       +   "misc",&GtkWidgetClass,sizeof(GtkMisc),NULL
       +};
       +
       +static GtkSignalType GtkProgressBarSignals[] = {
       +   { "size_request",gtk_marshal_VOID__GPOIN,gtk_progress_bar_size_request },
       +   { "realize",gtk_marshal_VOID__VOID,gtk_progress_bar_realize },
       +   { "",NULL,NULL }
       +};
       +
       +static GtkClass GtkProgressBarClass = {
       +   "progressbar",&GtkWidgetClass,sizeof(GtkProgressBar),GtkProgressBarSignals
       +};
       +
        static GtkClass GtkSeparatorClass = {
           "separator",&GtkWidgetClass,sizeof(GtkSeparator),GtkSeparatorSignals
        };
       t@@ -1037,6 +1054,8 @@ void gtk_widget_realize(GtkWidget *widget) {
        
        void gtk_widget_create(GtkWidget *widget) {
           GTK_WIDGET_SET_FLAGS(widget,GTK_SENSITIVE);
       +   widget->usize.width=0;
       +   widget->usize.height=0;
        }
        
        void gtk_widget_destroy(GtkWidget *widget) {
       t@@ -1071,6 +1090,10 @@ void gtk_widget_size_request(GtkWidget *widget,GtkRequisition *requisition) {
           if (GTK_WIDGET_VISIBLE(widget)) {
              gtk_signal_emit(GTK_OBJECT(widget),"size_request",requisition);
           }
       +   if (requisition->width < widget->usize.width)
       +      requisition->width = widget->usize.width;
       +   if (requisition->height < widget->usize.height)
       +      requisition->height = widget->usize.height;
           if (requisition->width != widget->requisition.width ||
               requisition->height != widget->requisition.height) {
              memcpy(&widget->requisition,requisition,sizeof(GtkRequisition));
       t@@ -2439,6 +2462,26 @@ GtkWidget *gtk_table_new(guint rows,guint cols,gboolean homogeneous) {
           return GTK_WIDGET(table);
        }
        
       +void gtk_table_resize(GtkTable *table,guint rows,guint cols) {
       +   gint i;
       +   table->rows = g_realloc(table->rows,sizeof(GtkTableRowCol)*rows);
       +   table->cols = g_realloc(table->cols,sizeof(GtkTableRowCol)*cols);
       +
       +   for (i=table->nrows;i<rows;i++) {
       +      table->rows[i].requisition=0;
       +      table->rows[i].allocation=0;
       +      table->rows[i].spacing=table->row_spacing;
       +   }
       +   for (i=table->ncols;i<cols;i++) {
       +      table->cols[i].requisition=0;
       +      table->cols[i].allocation=0;
       +      table->cols[i].spacing=table->column_spacing;
       +   }
       +   table->nrows = rows;
       +   table->ncols = cols;
       +   gtk_widget_update(GTK_WIDGET(table),FALSE);
       +}
       +
        void gtk_table_attach_defaults(GtkTable *table,GtkWidget *widget,
                                       guint left_attach,guint right_attach,
                                       guint top_attach,guint bottom_attach) {
       t@@ -3928,6 +3971,10 @@ guint gtk_label_parse_uline(GtkLabel *label,const gchar *str) {
           return 0;
        }
        
       +void gtk_label_get(GtkLabel *label,gchar **str) {
       +   *str = label->text;
       +}
       +
        void gtk_clist_set_row_data(GtkCList *clist,gint row,gpointer data) {
           GtkCListRow *list_row;
           if (row>=0 && row<g_slist_length(clist->rows)) {
       t@@ -3957,6 +4004,8 @@ void gtk_text_set_point(GtkText *text,guint index) {
        }
        
        void gtk_widget_set_usize(GtkWidget *widget,gint width,gint height) {
       +   widget->usize.width = width;
       +   widget->usize.height = height;
        }
        
        void gtk_clist_select_row(GtkCList *clist,gint row,gint column) {
       t@@ -4071,3 +4120,57 @@ void gtk_paned_set_position(GtkPaned *paned,gint position) {
           memcpy(&allocation,&paned->true_alloc,sizeof(GtkAllocation));
           gtk_widget_set_size(GTK_WIDGET(paned),&allocation);
        }
       +
       +void gtk_misc_set_alignment(GtkMisc *misc,gfloat xalign,gfloat yalign) {
       +}
       +
       +GtkWidget *gtk_progress_bar_new() {
       +   GtkProgressBar *prog;
       +
       +   prog=GTK_PROGRESS_BAR(GtkNewObject(&GtkProgressBarClass));
       +   prog->orient=GTK_PROGRESS_LEFT_TO_RIGHT;
       +   prog->position=0;
       +
       +   return GTK_WIDGET(prog);
       +}
       +
       +void gtk_progress_bar_set_orientation(GtkProgressBar *pbar,
       +                                      GtkProgressBarOrientation orientation) {
       +   pbar->orient=orientation;
       +}
       +
       +void gtk_progress_bar_update(GtkProgressBar *pbar,gfloat percentage) {
       +   GtkWidget *widget;
       +
       +   widget=GTK_WIDGET(pbar);
       +   pbar->position = percentage;
       +   if (GTK_WIDGET_REALIZED(widget)) {
       +      SendMessage(widget->hWnd,PBM_SETPOS,(WPARAM)(10000.0*pbar->position),0);
       +   }
       +}
       +
       +void gtk_progress_bar_size_request(GtkWidget *widget,
       +                                   GtkRequisition *requisition) {
       +   SIZE size;
       +
       +   if (GetTextSize(widget->hWnd,"Sample",&size)) {
       +      requisition->width = size.cx;
       +      requisition->height = size.cy;
       +   }
       +}
       +
       +void gtk_progress_bar_realize(GtkWidget *widget) {
       +   HWND Parent;
       +   GtkProgressBar *prog;
       +
       +   prog=GTK_PROGRESS_BAR(widget);
       +   Parent=gtk_get_parent_hwnd(widget);
       +   widget->hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,PROGRESS_CLASS,"",
       +                            WS_CHILD,
       +                            widget->allocation.x,widget->allocation.y,
       +                            widget->allocation.width,widget->allocation.height,
       +                            Parent,NULL,hInst,NULL);
       +   gtk_set_default_font(widget->hWnd);
       +   SendMessage(widget->hWnd,PBM_SETRANGE,0,MAKELPARAM(0,10000));
       +   SendMessage(widget->hWnd,PBM_SETPOS,(WPARAM)(10000.0*prog->position),0);
       +}
 (DIR) diff --git a/src/gtk.h b/src/gtk.h
       t@@ -21,6 +21,13 @@ typedef enum {
        } GtkVisibility;
        
        typedef enum {
       +   GTK_PROGRESS_LEFT_TO_RIGHT,
       +   GTK_PROGRESS_RIGHT_TO_LEFT,
       +   GTK_PROGRESS_BOTTOM_TO_TOP,
       +   GTK_PROGRESS_TOP_TO_BOTTOM
       +} GtkProgressBarOrientation;
       +
       +typedef enum {
           GTK_EXPAND = 1 << 0,
           GTK_SHRINK = 1 << 1,
           GTK_FILL   = 1 << 2
       t@@ -74,6 +81,8 @@ typedef struct _GtkMenuItem GtkMenuItem;
        typedef struct _GtkMenu GtkMenu;
        typedef struct _GtkAdjustment GtkAdjustment;
        typedef struct _GtkSeparator GtkSeparator;
       +typedef struct _GtkMisc GtkMisc;
       +typedef struct _GtkProgressBar GtkProgressBar;
        typedef struct _GtkHSeparator GtkHSeparator;
        typedef struct _GtkVSeparator GtkVSeparator;
        typedef struct _GtkAccelGroup GtkAccelGroup;
       t@@ -128,9 +137,20 @@ struct _GtkWidget {
           HWND hWnd;
           GtkRequisition requisition;
           GtkAllocation allocation;
       +   GtkRequisition usize;
           GtkWidget *parent;
        };
        
       +struct _GtkMisc {
       +   GtkWidget widget;
       +};
       +
       +struct _GtkProgressBar {
       +   GtkWidget widget;
       +   GtkProgressBarOrientation orient;
       +   gfloat position;
       +};
       +
        struct _GtkSeparator {
           GtkWidget widget;
        };
       t@@ -429,6 +449,8 @@ struct _GtkTableRowCol {
        #define GTK_MENU_BAR(obj) ((GtkMenuBar *)(obj))
        #define GTK_MENU_ITEM(obj) ((GtkMenuItem *)(obj))
        #define GTK_MENU(obj) ((GtkMenu *)(obj))
       +#define GTK_MISC(obj) ((GtkMisc *)(obj))
       +#define GTK_PROGRESS_BAR(obj) ((GtkProgressBar *)(obj))
        #define GTK_SIGNAL_FUNC(f) ((GtkSignalFunc) f)
        
        #define GTK_OBJECT_FLAGS(obj) (GTK_OBJECT(obj)->flags)
       t@@ -473,6 +495,7 @@ GtkWidget *gtk_scrolled_text_new(GtkAdjustment *hadj,GtkAdjustment *vadj,
                                         GtkWidget **pack_widg);
        GtkWidget *gtk_entry_new();
        GtkWidget *gtk_table_new(guint rows,guint cols,gboolean homogeneous);
       +void gtk_table_resize(GtkTable *table,guint rows,guint cols);
        GtkItemFactory *gtk_item_factory_new(GtkType container_type,
                                             const gchar *path,
                                             GtkAccelGroup *accel_group);
       t@@ -617,6 +640,7 @@ void gtk_option_menu_set_menu(GtkOptionMenu *option_menu,GtkWidget *menu);
        void gtk_option_menu_set_history(GtkOptionMenu *option_menu,guint index);
        void gtk_label_set_text(GtkLabel *label,const gchar *str);
        guint gtk_label_parse_uline(GtkLabel *label,const gchar *str);
       +void gtk_label_get(GtkLabel *label,gchar **str);
        void gtk_clist_set_row_data(GtkCList *clist,gint row,gpointer data);
        gpointer gtk_clist_get_row_data(GtkCList *clist,gint row);
        void gtk_clist_set_auto_sort(GtkCList *clist,gboolean auto_sort);
       t@@ -634,6 +658,11 @@ gint gtk_spin_button_get_value_as_int(GtkSpinButton *spin_button);
        void gtk_spin_button_set_value(GtkSpinButton *spin_button,gfloat value);
        void gtk_spin_button_set_adjustment(GtkSpinButton *spin_button,
                                            GtkAdjustment *adjustment);
       +void gtk_misc_set_alignment(GtkMisc *misc,gfloat xalign,gfloat yalign);
       +GtkWidget *gtk_progress_bar_new();
       +void gtk_progress_bar_set_orientation(GtkProgressBar *pbar,
       +                                      GtkProgressBarOrientation orientation);
       +void gtk_progress_bar_update(GtkProgressBar *pbar,gfloat percentage);
        
        extern long AsyncSocketError;