comparison gtk/dw.c @ 626:ad7a4335f1f1

Make spinbutton VALUE_CHANGE callback work properly Add updated support for file and directory browser. Specified directory and extension filter now works.
author mhessling@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 12 Apr 2008 06:48:38 +0000
parents fb59f9eeeecd
children 77cc62375fee
comparison
equal deleted inserted replaced
625:21c321ec0810 626:ad7a4335f1f1
100 GtkClipboard *_clipboard_object[DW_THREAD_LIMIT]; 100 GtkClipboard *_clipboard_object[DW_THREAD_LIMIT];
101 gchar *_clipboard_contents[DW_THREAD_LIMIT]; 101 gchar *_clipboard_contents[DW_THREAD_LIMIT];
102 102
103 GtkWidget *last_window = NULL, *popup = NULL; 103 GtkWidget *last_window = NULL, *popup = NULL;
104 104
105 static int _dw_file_active = 0, _dw_ignore_click = 0, _dw_ignore_expand = 0, _dw_color_active = 0; 105 #if GTK_MAJOR_VERSION < 2
106 static int _dw_file_active = 0;
107 #endif
108 static int _dw_ignore_click = 0, _dw_ignore_expand = 0, _dw_color_active = 0;
106 static pthread_t _dw_thread = (pthread_t)-1; 109 static pthread_t _dw_thread = (pthread_t)-1;
107 static int _dw_mutex_locked[DW_THREAD_LIMIT]; 110 static int _dw_mutex_locked[DW_THREAD_LIMIT];
108 /* Use default border size for the default enlightenment theme */ 111 /* Use default border size for the default enlightenment theme */
109 static int _dw_border_width = 12, _dw_border_height = 28; 112 static int _dw_border_width = 12, _dw_border_height = 28;
110 113
1696 int val = _round_value(adjustment->value); 1699 int val = _round_value(adjustment->value);
1697 GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider"); 1700 GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider");
1698 GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); 1701 GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton");
1699 GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); 1702 GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar");
1700 1703
1701 if(slider) 1704 if (slider)
1702 { 1705 {
1703 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); 1706 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data);
1704 1707
1705 if(work.window) 1708 if (work.window)
1706 { 1709 {
1707 int (*valuechangedfunc)(HWND, int, void *) = work.func; 1710 int (*valuechangedfunc)(HWND, int, void *) = work.func;
1708 1711
1709 if(GTK_IS_VSCALE(slider)) 1712 if(GTK_IS_VSCALE(slider))
1710 valuechangedfunc(work.window, (max - val) - 1, work.data); 1713 valuechangedfunc(work.window, (max - val) - 1, work.data);
1711 else 1714 else
1712 valuechangedfunc(work.window, val, work.data); 1715 valuechangedfunc(work.window, val, work.data);
1713 } 1716 }
1714 } 1717 }
1715 else if(scrollbar || spinbutton) 1718 else if (scrollbar || spinbutton)
1716 { 1719 {
1717 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); 1720 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data);
1718 1721
1719 if(work.window) 1722 if (work.window)
1720 { 1723 {
1721 int (*valuechangedfunc)(HWND, int, void *) = work.func; 1724 int (*valuechangedfunc)(HWND, int, void *) = work.func;
1722 1725
1723 valuechangedfunc(work.window, val, work.data); 1726 valuechangedfunc(work.window, val, work.data);
1724 } 1727 }
5120 5123
5121 curval = dw_spinbutton_get_pos(handle); 5124 curval = dw_spinbutton_get_pos(handle);
5122 DW_MUTEX_LOCK; 5125 DW_MUTEX_LOCK;
5123 adj = (GtkAdjustment *)gtk_adjustment_new((gfloat)curval, (gfloat)lower, (gfloat)upper, 1.0, 5.0, 0.0); 5126 adj = (GtkAdjustment *)gtk_adjustment_new((gfloat)curval, (gfloat)lower, (gfloat)upper, 1.0, 5.0, 0.0);
5124 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(handle), adj); 5127 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(handle), adj);
5128 /*
5129 * Set our internal relationships between the adjustment and the spinbutton
5130 */
5131 gtk_object_set_data(GTK_OBJECT(handle), "_dw_adjustment", (gpointer)adj);
5132 gtk_object_set_data(GTK_OBJECT(adj), "_dw_spinbutton", (gpointer)handle);
5125 DW_MUTEX_UNLOCK; 5133 DW_MUTEX_UNLOCK;
5126 } 5134 }
5127 5135
5128 /* 5136 /*
5129 * Sets the entryfield character limit. 5137 * Sets the entryfield character limit.
10076 } 10084 }
10077 env->MajorVersion = atoi(tempbuf); 10085 env->MajorVersion = atoi(tempbuf);
10078 env->MinorVersion = 0; 10086 env->MinorVersion = 0;
10079 } 10087 }
10080 10088
10089 #if GTK_MAJOR_VERSION < 2
10081 /* Internal function to handle the file OK press */ 10090 /* Internal function to handle the file OK press */
10082 static gint _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait) 10091 static gint _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait)
10083 { 10092 {
10084 #if GTK_MAJOR_VERSION > 1
10085 const char *tmp;
10086 #else
10087 char *tmp; 10093 char *tmp;
10088 #endif
10089 char *tmpdup=NULL; 10094 char *tmpdup=NULL;
10090 10095
10091 if(!dwwait) 10096 if(!dwwait)
10092 return FALSE; 10097 return FALSE;
10093 10098
10239 free(folder); 10244 free(folder);
10240 } 10245 }
10241 10246
10242 return FALSE; 10247 return FALSE;
10243 } 10248 }
10249 #endif
10244 10250
10245 /* 10251 /*
10246 * Opens a file dialog and queries user selection. 10252 * Opens a file dialog and queries user selection.
10247 * Parameters: 10253 * Parameters:
10248 * title: Title bar text for dialog. 10254 * title: Title bar text for dialog.
10255 * 10261 *
10256 */ 10262 */
10257 char *dw_file_browse(char *title, char *defpath, char *ext, int flags) 10263 char *dw_file_browse(char *title, char *defpath, char *ext, int flags)
10258 { 10264 {
10259 GtkWidget *filew; 10265 GtkWidget *filew;
10266
10267 #if GTK_MAJOR_VERSION > 1
10268 GtkFileChooserAction action;
10269 GtkFileFilter *filter1 = NULL;
10270 GtkFileFilter *filter2 = NULL;
10271 gchar *button;
10272 char *filename = NULL;
10273 char buf[1000];
10274
10275 switch (flags )
10276 {
10277 case DW_DIRECTORY_OPEN:
10278 action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
10279 button = GTK_STOCK_OPEN;
10280 break;
10281 case DW_FILE_OPEN:
10282 action = GTK_FILE_CHOOSER_ACTION_OPEN;
10283 button = GTK_STOCK_OPEN;
10284 break;
10285 case DW_FILE_SAVE:
10286 action = GTK_FILE_CHOOSER_ACTION_SAVE;
10287 button = GTK_STOCK_SAVE;
10288 break;
10289 default:
10290 dw_messagebox( "Coding error", DW_MB_OK|DW_MB_ERROR, "dw_file_browse() flags argument invalid.");
10291 return NULL;
10292 break;
10293 }
10294
10295 filew = gtk_file_chooser_dialog_new ( title,
10296 NULL,
10297 action,
10298 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
10299 button, GTK_RESPONSE_ACCEPT,
10300 NULL);
10301
10302 if ( flags == DW_FILE_SAVE )
10303 gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER( filew ), TRUE );
10304
10305 if ( ext )
10306 {
10307 filter1 = gtk_file_filter_new();
10308 sprintf( buf, "*.%s", ext );
10309 gtk_file_filter_add_pattern( filter1, (gchar *)buf );
10310 sprintf( buf, "\"%s\" files", ext );
10311 gtk_file_filter_set_name( filter1, (gchar *)buf );
10312 filter2 = gtk_file_filter_new();
10313 gtk_file_filter_add_pattern( filter2, (gchar *)"*" );
10314 gtk_file_filter_set_name( filter2, (gchar *)"All Files" );
10315 gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( filew ), filter1 );
10316 gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( filew ), filter2 );
10317 }
10318
10319 if ( defpath )
10320 {
10321 gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( filew ), defpath );
10322 }
10323
10324 if ( gtk_dialog_run( GTK_DIALOG( filew ) ) == GTK_RESPONSE_ACCEPT )
10325 {
10326 filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( filew ) );
10327 // g_free (filename);
10328 }
10329
10330 gtk_widget_destroy( filew );
10331 return filename;
10332 #else
10260 int _locked_by_me = FALSE; 10333 int _locked_by_me = FALSE;
10261 DWDialog *dwwait; 10334 DWDialog *dwwait;
10262
10263 if(flags == DW_DIRECTORY_OPEN) 10335 if(flags == DW_DIRECTORY_OPEN)
10264 { 10336 {
10265 HWND window, hbox, vbox, tree, button; 10337 HWND window, hbox, vbox, tree, button;
10266 HTREEITEM item, tempitem; 10338 HTREEITEM item, tempitem;
10267 10339
10328 gtk_widget_show(filew); 10400 gtk_widget_show(filew);
10329 10401
10330 DW_MUTEX_UNLOCK; 10402 DW_MUTEX_UNLOCK;
10331 } 10403 }
10332 return (char *)dw_dialog_wait(dwwait); 10404 return (char *)dw_dialog_wait(dwwait);
10405 #endif
10333 } 10406 }
10334 10407
10335 10408
10336 /* 10409 /*
10337 * Execute and external program in a seperate session. 10410 * Execute and external program in a seperate session.
10807 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) 10880 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0)
10808 thiswindow = GTK_COMBO(thiswindow)->list; 10881 thiswindow = GTK_COMBO(thiswindow)->list;
10809 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0) 10882 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0)
10810 thiswindow = GTK_COMBO(thiswindow)->entry; 10883 thiswindow = GTK_COMBO(thiswindow)->entry;
10811 else if(GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || 10884 else if(GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) ||
10812 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) 10885 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow) ||
10886 GTK_IS_SPIN_BUTTON(thiswindow))
10813 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); 10887 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment");
10814 #if GTK_MAJOR_VERSION > 1 10888 #if GTK_MAJOR_VERSION > 1
10815 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) 10889 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0)
10816 thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); 10890 thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow));
10817 #endif 10891 #endif
10833 HWND thiswindow = window; 10907 HWND thiswindow = window;
10834 int sigid, _locked_by_me = FALSE; 10908 int sigid, _locked_by_me = FALSE;
10835 gint cid; 10909 gint cid;
10836 10910
10837 DW_MUTEX_LOCK; 10911 DW_MUTEX_LOCK;
10838 /* 10912 /*
10839 * If the window we are setting the signal on is a scrolled window we need to get 10913 * If the window we are setting the signal on is a scrolled window we need to get
10840 * the "real" widget type. thiswindow is the "real" widget type 10914 * the "real" widget type. thiswindow is the "real" widget type
10841 */ 10915 */
10842 if (GTK_IS_SCROLLED_WINDOW(thiswindow)) 10916 if (GTK_IS_SCROLLED_WINDOW(thiswindow))
10843 { 10917 {
10844 thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); 10918 thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window));
10845 } 10919 }
10846 10920
10963 if(GTK_IS_COMBO(thiswindow)) 11037 if(GTK_IS_COMBO(thiswindow))
10964 thiswindow = GTK_COMBO(thiswindow)->entry; 11038 thiswindow = GTK_COMBO(thiswindow)->entry;
10965 } 11039 }
10966 #endif 11040 #endif
10967 else if (GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || 11041 else if (GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) ||
10968 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) 11042 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow) ||
11043 GTK_IS_SPIN_BUTTON(thiswindow) )
10969 { 11044 {
10970 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); 11045 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment");
10971 } 11046 }
10972 else if (GTK_IS_NOTEBOOK(thiswindow) && strcmp(signame, DW_SIGNAL_SWITCH_PAGE) == 0) 11047 else if (GTK_IS_NOTEBOOK(thiswindow) && strcmp(signame, DW_SIGNAL_SWITCH_PAGE) == 0)
10973 { 11048 {