comparison gtk/dw.c @ 7:005fa766e8c2

Updates to latest build.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 03 Jul 2001 13:54:29 +0000
parents 67a643a734d9
children 26e2130135b9
comparison
equal deleted inserted replaced
6:160798fd63c4 7:005fa766e8c2
942 * resource file. 942 * resource file.
943 */ 943 */
944 HMENUI dw_menu_new(unsigned long id) 944 HMENUI dw_menu_new(unsigned long id)
945 { 945 {
946 int _locked_by_me = FALSE; 946 int _locked_by_me = FALSE;
947 HMENUI tmp = malloc(sizeof(struct _hmenui));; 947 HMENUI tmp = malloc(sizeof(struct _hmenui));
948 GtkAccelGroup *accel_group;
948 949
949 if(!tmp) 950 if(!tmp)
950 return NULL; 951 return NULL;
951 952
952 DW_MUTEX_LOCK; 953 DW_MUTEX_LOCK;
953 tmp->menu = gtk_menu_new(); 954 tmp->menu = gtk_menu_new();
954 gtk_widget_show(tmp->menu); 955 gtk_widget_show(tmp->menu);
956 accel_group = gtk_accel_group_new();
955 gtk_object_set_data(GTK_OBJECT(tmp->menu), "id", (gpointer)id); 957 gtk_object_set_data(GTK_OBJECT(tmp->menu), "id", (gpointer)id);
958 gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group);
956 DW_MUTEX_UNLOCK; 959 DW_MUTEX_UNLOCK;
957 return tmp; 960 return tmp;
958 } 961 }
959 962
960 /* 963 /*
964 */ 967 */
965 HMENUI dw_menubar_new(HWND location) 968 HMENUI dw_menubar_new(HWND location)
966 { 969 {
967 GtkWidget *box; 970 GtkWidget *box;
968 int _locked_by_me = FALSE; 971 int _locked_by_me = FALSE;
969 HMENUI tmp = malloc(sizeof(struct _hmenui));; 972 HMENUI tmp = malloc(sizeof(struct _hmenui));
973 GtkAccelGroup *accel_group;
970 974
971 if(!tmp) 975 if(!tmp)
972 return NULL; 976 return NULL;
973 977
974 DW_MUTEX_LOCK; 978 DW_MUTEX_LOCK;
975 tmp->menu = gtk_menu_bar_new(); 979 tmp->menu = gtk_menu_bar_new();
976 box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location)); 980 box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location));
977 gtk_widget_show(tmp->menu); 981 gtk_widget_show(tmp->menu);
982 accel_group = gtk_accel_group_new();
983 gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group);
978 984
979 if(box) 985 if(box)
980 gtk_box_pack_end(GTK_BOX(box), tmp->menu, FALSE, FALSE, 0); 986 gtk_box_pack_end(GTK_BOX(box), tmp->menu, FALSE, FALSE, 0);
981 987
982 DW_MUTEX_UNLOCK; 988 DW_MUTEX_UNLOCK;
1000 *menu = NULL; 1006 *menu = NULL;
1001 DW_MUTEX_UNLOCK; 1007 DW_MUTEX_UNLOCK;
1002 } 1008 }
1003 } 1009 }
1004 1010
1005 void _removetilde(char *dest, char *src) 1011 char _removetilde(char *dest, char *src)
1006 { 1012 {
1007 int z, cur=0; 1013 int z, cur=0;
1014 char accel = '\0';
1008 1015
1009 for(z=0;z<strlen(src);z++) 1016 for(z=0;z<strlen(src);z++)
1010 { 1017 {
1011 if(src[z] != '~') 1018 if(src[z] != '~')
1012 { 1019 {
1013 dest[cur] = src[z]; 1020 dest[cur] = src[z];
1014 cur++; 1021 cur++;
1015 } 1022 }
1023 else
1024 {
1025 dest[cur] = '_';
1026 accel = src[z+1];
1027 cur++;
1028 }
1016 } 1029 }
1017 dest[cur] = 0; 1030 dest[cur] = 0;
1031 return accel;
1018 } 1032 }
1019 1033
1020 /* 1034 /*
1021 * Adds a menuitem or submenu to an existing menu. 1035 * Adds a menuitem or submenu to an existing menu.
1022 * Parameters: 1036 * Parameters:
1029 * submenu: Handle to an existing menu to be a submenu or NULL. 1043 * submenu: Handle to an existing menu to be a submenu or NULL.
1030 */ 1044 */
1031 HWND dw_menu_append_item(HMENUI menu, char *title, unsigned long id, unsigned long flags, int end, int check, HMENUI submenu) 1045 HWND dw_menu_append_item(HMENUI menu, char *title, unsigned long id, unsigned long flags, int end, int check, HMENUI submenu)
1032 { 1046 {
1033 GtkWidget *tmphandle; 1047 GtkWidget *tmphandle;
1034 char *tempbuf = malloc(strlen(title)+1); 1048 char accel, *tempbuf = malloc(strlen(title)+1);
1035 int _locked_by_me = FALSE; 1049 int _locked_by_me = FALSE;
1050 guint tmp_key;
1051 GtkAccelGroup *accel_group;
1036 1052
1037 if(!menu || !menu->menu) 1053 if(!menu || !menu->menu)
1038 { 1054 {
1039 free(tempbuf); 1055 free(tempbuf);
1040 return NULL; 1056 return NULL;
1041 } 1057 }
1042 1058
1043 DW_MUTEX_LOCK; 1059 DW_MUTEX_LOCK;
1044 _removetilde(tempbuf, title); 1060 accel = _removetilde(tempbuf, title);
1061
1062 accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu->menu), "accel");
1045 1063
1046 if(strlen(tempbuf) == 0) 1064 if(strlen(tempbuf) == 0)
1047 tmphandle=gtk_menu_item_new(); 1065 tmphandle=gtk_menu_item_new();
1048 else 1066 else
1049 { 1067 {
1050 if(check) 1068 if(check)
1051 { 1069 {
1052 char numbuf[10]; 1070 char numbuf[10];
1053 tmphandle=gtk_check_menu_item_new_with_label(tempbuf); 1071 if(accel && accel_group)
1072 {
1073 tmphandle=gtk_check_menu_item_new_with_label("");
1074 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf);
1075 gtk_widget_add_accelerator(tmphandle, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0);
1076 }
1077 else
1078 tmphandle=gtk_check_menu_item_new_with_label(tempbuf);
1054 gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); 1079 gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE);
1055 sprintf(numbuf, "%lu", id); 1080 sprintf(numbuf, "%lu", id);
1056 gtk_object_set_data(GTK_OBJECT(menu->menu), numbuf, (gpointer)tmphandle); 1081 gtk_object_set_data(GTK_OBJECT(menu->menu), numbuf, (gpointer)tmphandle);
1057 } 1082 }
1058 else 1083 else
1059 tmphandle=gtk_menu_item_new_with_label(tempbuf); 1084 {
1085 if(accel && accel_group)
1086 {
1087 tmphandle=gtk_menu_item_new_with_label("");
1088 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf);
1089 gtk_widget_add_accelerator(tmphandle, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0);
1090 }
1091 else
1092 tmphandle=gtk_menu_item_new_with_label(tempbuf);
1093 }
1060 } 1094 }
1061 1095
1062 gtk_widget_show(tmphandle); 1096 gtk_widget_show(tmphandle);
1063 1097
1064 if(submenu) 1098 if(submenu)
1181 * Parameters: 1215 * Parameters:
1182 * text: The text to be display by the static text widget. 1216 * text: The text to be display by the static text widget.
1183 * id: An ID to be used with WinWindowFromID() or 0L. 1217 * id: An ID to be used with WinWindowFromID() or 0L.
1184 */ 1218 */
1185 HWND dw_text_new(char *text, unsigned long id) 1219 HWND dw_text_new(char *text, unsigned long id)
1220 {
1221 GtkWidget *tmp;
1222 int _locked_by_me = FALSE;
1223
1224 DW_MUTEX_LOCK;
1225 tmp = gtk_label_new(text);
1226 gtk_label_set_justify(GTK_LABEL(tmp), GTK_JUSTIFY_LEFT);
1227 gtk_widget_show(tmp);
1228 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id);
1229 DW_MUTEX_UNLOCK;
1230 return tmp;
1231 }
1232
1233 /*
1234 * Create a new status text window (widget) to be packed.
1235 * Parameters:
1236 * text: The text to be display by the static text widget.
1237 * id: An ID to be used with WinWindowFromID() or 0L.
1238 */
1239 HWND dw_status_text_new(char *text, ULONG id)
1186 { 1240 {
1187 GtkWidget *tmp; 1241 GtkWidget *tmp;
1188 int _locked_by_me = FALSE; 1242 int _locked_by_me = FALSE;
1189 1243
1190 DW_MUTEX_LOCK; 1244 DW_MUTEX_LOCK;
1753 1807
1754 pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower; 1808 pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower;
1755 1809
1756 gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos); 1810 gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos);
1757 } 1811 }
1812 }
1813 }
1814 DW_MUTEX_UNLOCK;
1815 }
1816
1817 /*
1818 * Sets the editablity of an MLE box.
1819 * Parameters:
1820 * handle: Handle to the MLE.
1821 * state: TRUE if it can be edited, FALSE for readonly.
1822 */
1823 void dw_mle_set_editable(HWND handle, int state)
1824 {
1825 int _locked_by_me = FALSE;
1826
1827 DW_MUTEX_LOCK;
1828 if(GTK_IS_BOX(handle))
1829 {
1830 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle");
1831
1832 if(tmp && GTK_IS_TEXT(tmp))
1833 {
1834 gtk_text_set_editable(GTK_TEXT(tmp), state);
1835 }
1836 }
1837 DW_MUTEX_UNLOCK;
1838 }
1839
1840 /*
1841 * Sets the word wrap state of an MLE box.
1842 * Parameters:
1843 * handle: Handle to the MLE.
1844 * state: TRUE if it wraps, FALSE if it doesn't.
1845 */
1846 void dw_mle_set_word_wrap(HWND handle, int state)
1847 {
1848 int _locked_by_me = FALSE;
1849
1850 DW_MUTEX_LOCK;
1851 if(GTK_IS_BOX(handle))
1852 {
1853 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle");
1854
1855 if(tmp && GTK_IS_TEXT(tmp))
1856 {
1857 gtk_text_set_word_wrap(GTK_TEXT(tmp), state);
1758 } 1858 }
1759 } 1859 }
1760 DW_MUTEX_UNLOCK; 1860 DW_MUTEX_UNLOCK;
1761 } 1861 }
1762 1862