Mercurial > dwindows
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 |