Mercurial > vim
comparison src/gui_motif.c @ 819:23f82b5d2814 v7.0c10
updated for version 7.0c10
author | vimboss |
---|---|
date | Wed, 05 Apr 2006 20:41:53 +0000 |
parents | d2c169a725c8 |
children | 8dd456c1e283 |
comparison
equal
deleted
inserted
replaced
818:1f929f3ca806 | 819:23f82b5d2814 |
---|---|
24 #endif | 24 #endif |
25 #include <Xm/Frame.h> | 25 #include <Xm/Frame.h> |
26 #include <Xm/LabelG.h> | 26 #include <Xm/LabelG.h> |
27 #include <Xm/ToggleBG.h> | 27 #include <Xm/ToggleBG.h> |
28 #include <Xm/SeparatoG.h> | 28 #include <Xm/SeparatoG.h> |
29 #include <Xm/Notebook.h> | |
29 | 30 |
30 #include <X11/keysym.h> | 31 #include <X11/keysym.h> |
31 #include <X11/Xatom.h> | 32 #include <X11/Xatom.h> |
32 #include <X11/StringDefs.h> | 33 #include <X11/StringDefs.h> |
33 #include <X11/Intrinsic.h> | 34 #include <X11/Intrinsic.h> |
61 Widget textArea; | 62 Widget textArea; |
62 #ifdef FEAT_TOOLBAR | 63 #ifdef FEAT_TOOLBAR |
63 static Widget toolBarFrame; | 64 static Widget toolBarFrame; |
64 static Widget toolBar; | 65 static Widget toolBar; |
65 #endif | 66 #endif |
67 #ifdef FEAT_GUI_TABLINE | |
68 static Widget tabLine; | |
69 static Widget tabLine_menu = 0; | |
70 static int showing_tabline = 0; | |
71 #endif | |
66 #ifdef FEAT_FOOTER | 72 #ifdef FEAT_FOOTER |
67 static Widget footer; | 73 static Widget footer; |
68 #endif | 74 #endif |
69 #ifdef FEAT_MENU | 75 #ifdef FEAT_MENU |
70 # if (XmVersion >= 1002) | 76 # if (XmVersion >= 1002) |
73 # endif | 79 # endif |
74 static Widget menuBar; | 80 static Widget menuBar; |
75 #endif | 81 #endif |
76 | 82 |
77 static void scroll_cb __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); | 83 static void scroll_cb __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); |
84 #ifdef FEAT_GUI_TABLINE | |
85 static void tabline_cb __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); | |
86 static void tabline_button_cb __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); | |
87 static void tabline_menu_cb __ARGS((Widget w, XtPointer closure, XEvent *e, Boolean *continue_dispatch)); | |
88 #endif | |
78 #ifdef FEAT_TOOLBAR | 89 #ifdef FEAT_TOOLBAR |
79 # ifdef FEAT_FOOTER | 90 # ifdef FEAT_FOOTER |
80 static void toolbarbutton_enter_cb __ARGS((Widget, XtPointer, XEvent *, Boolean *)); | 91 static void toolbarbutton_enter_cb __ARGS((Widget, XtPointer, XEvent *, Boolean *)); |
81 static void toolbarbutton_leave_cb __ARGS((Widget, XtPointer, XEvent *, Boolean *)); | 92 static void toolbarbutton_leave_cb __ARGS((Widget, XtPointer, XEvent *, Boolean *)); |
82 # endif | 93 # endif |
118 dragging = (((XmScrollBarCallbackStruct *)call_data)->reason == | 129 dragging = (((XmScrollBarCallbackStruct *)call_data)->reason == |
119 (int)XmCR_DRAG); | 130 (int)XmCR_DRAG); |
120 gui_drag_scrollbar(sb, value, dragging); | 131 gui_drag_scrollbar(sb, value, dragging); |
121 } | 132 } |
122 | 133 |
134 #ifdef FEAT_GUI_TABLINE | |
135 /*ARGSUSED*/ | |
136 static void | |
137 tabline_cb(w, client_data, call_data) | |
138 Widget w; | |
139 XtPointer client_data, call_data; | |
140 { | |
141 XmNotebookCallbackStruct *nptr; | |
142 | |
143 nptr = (XmNotebookCallbackStruct *)call_data; | |
144 if (nptr->reason != (int)XmCR_NONE) | |
145 send_tabline_event(nptr->page_number); | |
146 } | |
147 | |
148 /*ARGSUSED*/ | |
149 static void | |
150 tabline_button_cb(w, client_data, call_data) | |
151 Widget w; | |
152 XtPointer client_data, call_data; | |
153 { | |
154 char_u string[3]; | |
155 int cmd, tab_idx; | |
156 | |
157 XtVaGetValues(w, XmNuserData, &cmd, NULL); | |
158 XtVaGetValues(tabLine_menu, XmNuserData, &tab_idx, NULL); | |
159 | |
160 string[0] = CSI; | |
161 string[1] = KS_TABMENU; | |
162 string[2] = KE_FILLER; | |
163 add_to_input_buf(string, 3); | |
164 string[0] = tab_idx; | |
165 string[1] = (char_u)(long)cmd; | |
166 add_to_input_buf_csi(string, 2); | |
167 } | |
168 | |
169 /*ARGSUSED*/ | |
170 static void | |
171 tabline_menu_cb(w, closure, e, continue_dispatch) | |
172 Widget w; | |
173 XtPointer closure; | |
174 XEvent *e; | |
175 Boolean *continue_dispatch; | |
176 { | |
177 Widget tab_w; | |
178 XButtonPressedEvent *event; | |
179 int tab_idx = 0; | |
180 WidgetList children; | |
181 Cardinal numChildren; | |
182 | |
183 event = (XButtonPressedEvent *)e; | |
184 | |
185 if (event->button != Button3) | |
186 return; | |
187 | |
188 if (event->subwindow != None) | |
189 { | |
190 tab_w = XtWindowToWidget(XtDisplay(w), event->subwindow); | |
191 if (tab_w != (Widget)0 && XmIsPushButton(tab_w)) | |
192 XtVaGetValues(tab_w, XmNpageNumber, &tab_idx, NULL); | |
193 } | |
194 | |
195 XtVaSetValues(tabLine_menu, XmNuserData, tab_idx, NULL); | |
196 XtVaGetValues(tabLine_menu, XmNchildren, &children, XmNnumChildren, | |
197 &numChildren, NULL); | |
198 XtManageChildren(children, numChildren); | |
199 XmMenuPosition(tabLine_menu, (XButtonPressedEvent *)e) ; | |
200 XtManageChild(tabLine_menu); | |
201 } | |
202 #endif | |
203 | |
123 /* | 204 /* |
124 * End of call-back routines | 205 * End of call-back routines |
125 */ | 206 */ |
126 | 207 |
127 /* | 208 /* |
220 * Create all the motif widgets necessary. | 301 * Create all the motif widgets necessary. |
221 */ | 302 */ |
222 void | 303 void |
223 gui_x11_create_widgets() | 304 gui_x11_create_widgets() |
224 { | 305 { |
306 #ifdef FEAT_GUI_TABLINE | |
307 Widget button; | |
308 Arg args[10]; | |
309 int n; | |
310 XmString xms; | |
311 #endif | |
312 | |
225 /* | 313 /* |
226 * Install the 3D shade effect drawing routines. | 314 * Install the 3D shade effect drawing routines. |
227 */ | 315 */ |
228 if (old_label_expose == NULL) | 316 if (old_label_expose == NULL) |
229 { | 317 { |
314 XmNmarginWidth, 0, | 402 XmNmarginWidth, 0, |
315 XmNadjustLast, True, | 403 XmNadjustLast, True, |
316 NULL); | 404 NULL); |
317 gui_motif_menu_colors(toolBar); | 405 gui_motif_menu_colors(toolBar); |
318 | 406 |
407 #endif | |
408 | |
409 #ifdef FEAT_GUI_TABLINE | |
410 /* Create the Vim GUI tabline */ | |
411 n = 0; | |
412 XtSetArg(args[n], XmNbindingType, XmNONE); n++; | |
413 XtSetArg(args[n], XmNorientation, XmVERTICAL); n++; | |
414 XtSetArg(args[n], XmNbackPageSize, XmNONE); n++; | |
415 XtSetArg(args[n], XmNbackPageNumber, 0); n++; | |
416 XtSetArg(args[n], XmNbackPagePlacement, XmTOP_RIGHT); n++; | |
417 XtSetArg(args[n], XmNmajorTabSpacing, 0); n++; | |
418 XtSetArg(args[n], XmNshadowThickness, 0); n++; | |
419 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; | |
420 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; | |
421 tabLine = XmCreateNotebook(vimForm, "Vim tabline", args, n); | |
422 | |
423 XtAddCallback(tabLine, XmNpageChangedCallback, (XtCallbackProc)tabline_cb, | |
424 NULL); | |
425 XtAddEventHandler(tabLine, ButtonPressMask, False, | |
426 (XtEventHandler)tabline_menu_cb, NULL); | |
427 | |
428 /* Create the tabline popup menu */ | |
429 tabLine_menu = XmCreatePopupMenu(tabLine, "tabline popup", NULL, 0); | |
430 | |
431 /* Add the buttons to the menu */ | |
432 n = 0; | |
433 XtSetArg(args[n], XmNuserData, TABLINE_MENU_CLOSE); n++; | |
434 xms = XmStringCreate((char *)"Close tab", STRING_TAG); | |
435 XtSetArg(args[n], XmNlabelString, xms); n++; | |
436 button = XmCreatePushButton(tabLine_menu, "Close", args, n); | |
437 XtAddCallback(button, XmNactivateCallback, | |
438 (XtCallbackProc)tabline_button_cb, NULL); | |
439 XmStringFree(xms); | |
440 | |
441 n = 0; | |
442 XtSetArg(args[n], XmNuserData, TABLINE_MENU_NEW); n++; | |
443 xms = XmStringCreate((char *)"New Tab", STRING_TAG); | |
444 XtSetArg(args[n], XmNlabelString, xms); n++; | |
445 button = XmCreatePushButton(tabLine_menu, "New Tab", args, n); | |
446 XtAddCallback(button, XmNactivateCallback, | |
447 (XtCallbackProc)tabline_button_cb, NULL); | |
448 XmStringFree(xms); | |
449 | |
450 n = 0; | |
451 XtSetArg(args[n], XmNuserData, TABLINE_MENU_OPEN); n++; | |
452 xms = XmStringCreate((char *)"Open tab...", STRING_TAG); | |
453 XtSetArg(args[n], XmNlabelString, xms); n++; | |
454 button = XmCreatePushButton(tabLine_menu, "Open tab...", args, n); | |
455 XtAddCallback(button, XmNactivateCallback, | |
456 (XtCallbackProc)tabline_button_cb, NULL); | |
457 XmStringFree(xms); | |
319 #endif | 458 #endif |
320 | 459 |
321 textAreaForm = XtVaCreateManagedWidget("textAreaForm", | 460 textAreaForm = XtVaCreateManagedWidget("textAreaForm", |
322 xmFormWidgetClass, vimForm, | 461 xmFormWidgetClass, vimForm, |
323 XmNleftAttachment, XmATTACH_FORM, | 462 XmNleftAttachment, XmATTACH_FORM, |
548 /* toolBar is attached to top form */ | 687 /* toolBar is attached to top form */ |
549 XtVaSetValues(XtParent(toolBar), | 688 XtVaSetValues(XtParent(toolBar), |
550 XmNtopAttachment, XmATTACH_WIDGET, | 689 XmNtopAttachment, XmATTACH_WIDGET, |
551 XmNtopWidget, menuBar, | 690 XmNtopWidget, menuBar, |
552 NULL); | 691 NULL); |
553 XtVaSetValues(textAreaForm, | 692 #ifdef FEAT_GUI_TABLINE |
554 XmNtopAttachment, XmATTACH_WIDGET, | 693 if (showing_tabline) |
555 XmNtopWidget, XtParent(toolBar), | 694 { |
556 NULL); | 695 XtVaSetValues(tabLine, |
696 XmNtopAttachment, XmATTACH_WIDGET, | |
697 XmNtopWidget, XtParent(toolBar), | |
698 NULL); | |
699 XtVaSetValues(textAreaForm, | |
700 XmNtopAttachment, XmATTACH_WIDGET, | |
701 XmNtopWidget, tabLine, | |
702 NULL); | |
703 } | |
704 else | |
705 #endif | |
706 XtVaSetValues(textAreaForm, | |
707 XmNtopAttachment, XmATTACH_WIDGET, | |
708 XmNtopWidget, XtParent(toolBar), | |
709 NULL); | |
557 } | 710 } |
558 else | 711 else |
559 #endif | 712 #endif |
560 { | 713 { |
561 XtVaSetValues(textAreaForm, | 714 #ifdef FEAT_GUI_TABLINE |
562 XmNtopAttachment, XmATTACH_WIDGET, | 715 if (showing_tabline) |
563 XmNtopWidget, menuBar, | 716 { |
564 NULL); | 717 XtVaSetValues(tabLine, |
718 XmNtopAttachment, XmATTACH_WIDGET, | |
719 XmNtopWidget, menuBar, | |
720 NULL); | |
721 XtVaSetValues(textAreaForm, | |
722 XmNtopAttachment, XmATTACH_WIDGET, | |
723 XmNtopWidget, tabLine, | |
724 NULL); | |
725 } | |
726 else | |
727 #endif | |
728 XtVaSetValues(textAreaForm, | |
729 XmNtopAttachment, XmATTACH_WIDGET, | |
730 XmNtopWidget, menuBar, | |
731 NULL); | |
565 } | 732 } |
566 } | 733 } |
567 else | 734 else |
568 { | 735 { |
569 XtUnmanageChild(menuBar); | 736 XtUnmanageChild(menuBar); |
571 if (XtIsManaged(XtParent(toolBar))) | 738 if (XtIsManaged(XtParent(toolBar))) |
572 { | 739 { |
573 XtVaSetValues(XtParent(toolBar), | 740 XtVaSetValues(XtParent(toolBar), |
574 XmNtopAttachment, XmATTACH_FORM, | 741 XmNtopAttachment, XmATTACH_FORM, |
575 NULL); | 742 NULL); |
576 XtVaSetValues(textAreaForm, | 743 #ifdef FEAT_GUI_TABLINE |
577 XmNtopAttachment, XmATTACH_WIDGET, | 744 if (showing_tabline) |
578 XmNtopWidget, XtParent(toolBar), | 745 { |
579 NULL); | 746 XtVaSetValues(tabLine, |
747 XmNtopAttachment, XmATTACH_WIDGET, | |
748 XmNtopWidget, XtParent(toolBar), | |
749 NULL); | |
750 XtVaSetValues(textAreaForm, | |
751 XmNtopAttachment, XmATTACH_WIDGET, | |
752 XmNtopWidget, tabLine, | |
753 NULL); | |
754 } | |
755 else | |
756 #endif | |
757 XtVaSetValues(textAreaForm, | |
758 XmNtopAttachment, XmATTACH_WIDGET, | |
759 XmNtopWidget, XtParent(toolBar), | |
760 NULL); | |
580 } | 761 } |
581 else | 762 else |
582 #endif | 763 #endif |
583 { | 764 { |
584 XtVaSetValues(textAreaForm, | 765 #ifdef FEAT_GUI_TABLINE |
585 XmNtopAttachment, XmATTACH_FORM, | 766 if (showing_tabline) |
586 NULL); | 767 { |
768 XtVaSetValues(tabLine, | |
769 XmNtopAttachment, XmATTACH_FORM, | |
770 NULL); | |
771 XtVaSetValues(textAreaForm, | |
772 XmNtopAttachment, XmATTACH_WIDGET, | |
773 XmNtopWidget, tabLine, | |
774 NULL); | |
775 } | |
776 else | |
777 #endif | |
778 XtVaSetValues(textAreaForm, | |
779 XmNtopAttachment, XmATTACH_FORM, | |
780 NULL); | |
587 } | 781 } |
588 } | 782 } |
589 | 783 |
590 } | 784 } |
591 | 785 |
2768 } | 2962 } |
2769 } | 2963 } |
2770 } | 2964 } |
2771 gui.toolbar_height = gui_mch_compute_toolbar_height(); | 2965 gui.toolbar_height = gui_mch_compute_toolbar_height(); |
2772 XtManageChild(XtParent(toolBar)); | 2966 XtManageChild(XtParent(toolBar)); |
2773 XtVaSetValues(textAreaForm, | 2967 #ifdef FEAT_GUI_TABLINE |
2774 XmNtopAttachment, XmATTACH_WIDGET, | 2968 if (showing_tabline) |
2775 XmNtopWidget, XtParent(toolBar), | 2969 { |
2776 NULL); | 2970 XtVaSetValues(tabLine, |
2971 XmNtopAttachment, XmATTACH_WIDGET, | |
2972 XmNtopWidget, XtParent(toolBar), | |
2973 NULL); | |
2974 XtVaSetValues(textAreaForm, | |
2975 XmNtopAttachment, XmATTACH_WIDGET, | |
2976 XmNtopWidget, tabLine, | |
2977 NULL); | |
2978 } | |
2979 else | |
2980 #endif | |
2981 XtVaSetValues(textAreaForm, | |
2982 XmNtopAttachment, XmATTACH_WIDGET, | |
2983 XmNtopWidget, XtParent(toolBar), | |
2984 NULL); | |
2777 if (XtIsManaged(menuBar)) | 2985 if (XtIsManaged(menuBar)) |
2778 XtVaSetValues(XtParent(toolBar), | 2986 XtVaSetValues(XtParent(toolBar), |
2779 XmNtopAttachment, XmATTACH_WIDGET, | 2987 XmNtopAttachment, XmATTACH_WIDGET, |
2780 XmNtopWidget, menuBar, | 2988 XmNtopWidget, menuBar, |
2781 NULL); | 2989 NULL); |
2786 } | 2994 } |
2787 else | 2995 else |
2788 { | 2996 { |
2789 gui.toolbar_height = 0; | 2997 gui.toolbar_height = 0; |
2790 if (XtIsManaged(menuBar)) | 2998 if (XtIsManaged(menuBar)) |
2791 XtVaSetValues(textAreaForm, | 2999 { |
2792 XmNtopAttachment, XmATTACH_WIDGET, | 3000 #ifdef FEAT_GUI_TABLINE |
2793 XmNtopWidget, menuBar, | 3001 if (showing_tabline) |
2794 NULL); | 3002 { |
3003 XtVaSetValues(tabLine, | |
3004 XmNtopAttachment, XmATTACH_WIDGET, | |
3005 XmNtopWidget, menuBar, | |
3006 NULL); | |
3007 XtVaSetValues(textAreaForm, | |
3008 XmNtopAttachment, XmATTACH_WIDGET, | |
3009 XmNtopWidget, tabLine, | |
3010 NULL); | |
3011 } | |
3012 else | |
3013 #endif | |
3014 XtVaSetValues(textAreaForm, | |
3015 XmNtopAttachment, XmATTACH_WIDGET, | |
3016 XmNtopWidget, menuBar, | |
3017 NULL); | |
3018 } | |
2795 else | 3019 else |
2796 XtVaSetValues(textAreaForm, | 3020 { |
2797 XmNtopAttachment, XmATTACH_FORM, | 3021 #ifdef FEAT_GUI_TABLINE |
2798 NULL); | 3022 if (showing_tabline) |
3023 { | |
3024 XtVaSetValues(tabLine, | |
3025 XmNtopAttachment, XmATTACH_FORM, | |
3026 NULL); | |
3027 XtVaSetValues(textAreaForm, | |
3028 XmNtopAttachment, XmATTACH_WIDGET, | |
3029 XmNtopWidget, tabLine, | |
3030 NULL); | |
3031 } | |
3032 else | |
3033 #endif | |
3034 XtVaSetValues(textAreaForm, | |
3035 XmNtopAttachment, XmATTACH_FORM, | |
3036 NULL); | |
3037 } | |
2799 | 3038 |
2800 XtUnmanageChild(XtParent(toolBar)); | 3039 XtUnmanageChild(XtParent(toolBar)); |
2801 } | 3040 } |
2802 gui_set_shellsize(FALSE, FALSE, RESIZE_VERT); | 3041 gui_set_shellsize(FALSE, FALSE, RESIZE_VERT); |
2803 } | 3042 } |
2910 Boolean *cont; | 3149 Boolean *cont; |
2911 { | 3150 { |
2912 gui_mch_set_footer((char_u *) ""); | 3151 gui_mch_set_footer((char_u *) ""); |
2913 } | 3152 } |
2914 # endif | 3153 # endif |
3154 #endif | |
3155 | |
3156 #if defined(FEAT_GUI_TABLINE) || defined(PROTO) | |
3157 /* | |
3158 * Show or hide the tabline. | |
3159 */ | |
3160 void | |
3161 gui_mch_show_tabline(int showit) | |
3162 { | |
3163 if (tabLine == (Widget)0) | |
3164 return; | |
3165 | |
3166 if (!showit != !showing_tabline) | |
3167 { | |
3168 if (showit) | |
3169 { | |
3170 XtManageChild(tabLine); | |
3171 XtUnmanageChild(XtNameToWidget(tabLine, "PageScroller")); | |
3172 #ifdef FEAT_MENU | |
3173 # ifdef FEAT_TOOLBAR | |
3174 if (XtIsManaged(XtParent(toolBar))) | |
3175 XtVaSetValues(tabLine, | |
3176 XmNtopAttachment, XmATTACH_WIDGET, | |
3177 XmNtopWidget, XtParent(toolBar), NULL); | |
3178 else | |
3179 # endif | |
3180 if (XtIsManaged(menuBar)) | |
3181 XtVaSetValues(tabLine, | |
3182 XmNtopAttachment, XmATTACH_WIDGET, | |
3183 XmNtopWidget, menuBar, NULL); | |
3184 else | |
3185 #endif | |
3186 XtVaSetValues(tabLine, | |
3187 XmNtopAttachment, XmATTACH_FORM, NULL); | |
3188 XtVaSetValues(textAreaForm, | |
3189 XmNtopAttachment, XmATTACH_WIDGET, | |
3190 XmNtopWidget, tabLine, | |
3191 NULL); | |
3192 } | |
3193 else | |
3194 { | |
3195 XtUnmanageChild(tabLine); | |
3196 #ifdef FEAT_MENU | |
3197 # ifdef FEAT_TOOLBAR | |
3198 if (XtIsManaged(XtParent(toolBar))) | |
3199 XtVaSetValues(textAreaForm, | |
3200 XmNtopAttachment, XmATTACH_WIDGET, | |
3201 XmNtopWidget, XtParent(toolBar), NULL); | |
3202 else | |
3203 # endif | |
3204 if (XtIsManaged(menuBar)) | |
3205 XtVaSetValues(textAreaForm, | |
3206 XmNtopAttachment, XmATTACH_WIDGET, | |
3207 XmNtopWidget, menuBar, NULL); | |
3208 else | |
3209 #endif | |
3210 XtVaSetValues(textAreaForm, | |
3211 XmNtopAttachment, XmATTACH_FORM, NULL); | |
3212 } | |
3213 showing_tabline = showit; | |
3214 } | |
3215 } | |
3216 | |
3217 /* | |
3218 * Return TRUE when tabline is displayed. | |
3219 */ | |
3220 int | |
3221 gui_mch_showing_tabline(void) | |
3222 { | |
3223 return tabLine != (Widget)0 && showing_tabline; | |
3224 } | |
3225 | |
3226 /* | |
3227 * Update the labels of the tabline. | |
3228 */ | |
3229 void | |
3230 gui_mch_update_tabline(void) | |
3231 { | |
3232 tabpage_T *tp; | |
3233 int nr = 1, n; | |
3234 Arg args[10]; | |
3235 int curtabidx = 0, currentpage; | |
3236 Widget tab; | |
3237 XmNotebookPageInfo page_info; | |
3238 XmNotebookPageStatus page_status; | |
3239 int last_page, tab_count; | |
3240 | |
3241 if (tabLine == (Widget)0) | |
3242 return; | |
3243 | |
3244 /* Add a label for each tab page. They all contain the same text area. */ | |
3245 for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr) | |
3246 { | |
3247 if (tp == curtab) | |
3248 curtabidx = nr; | |
3249 | |
3250 page_status = XmNotebookGetPageInfo(tabLine, nr, &page_info); | |
3251 if (page_status == XmPAGE_INVALID | |
3252 || page_info.major_tab_widget == (Widget)0) | |
3253 { | |
3254 /* Add the tab */ | |
3255 n = 0; | |
3256 XtSetArg(args[n], XmNnotebookChildType, XmMAJOR_TAB); n++; | |
3257 XtSetArg(args[n], XmNtraversalOn, False); n++; | |
3258 XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; | |
3259 XtSetArg(args[n], XmNhighlightThickness, 1); n++; | |
3260 XtSetArg(args[n], XmNshadowThickness , 1); n++; | |
3261 tab = XmCreatePushButton(tabLine, "-Empty-", args, n); | |
3262 XtManageChild(tab); | |
3263 } | |
3264 else | |
3265 tab = page_info.major_tab_widget; | |
3266 | |
3267 XtVaSetValues(tab, XmNpageNumber, nr, NULL); | |
3268 get_tabline_label(tp); | |
3269 XtVaSetValues(tab, XtVaTypedArg, XmNlabelString, XmRString, | |
3270 NameBuff, STRLEN(NameBuff) + 1, NULL); | |
3271 } | |
3272 | |
3273 tab_count = nr - 1; | |
3274 | |
3275 XtVaGetValues(tabLine, XmNlastPageNumber, &last_page, NULL); | |
3276 | |
3277 /* Remove any old labels. */ | |
3278 while (nr <= last_page) | |
3279 { | |
3280 if (XmNotebookGetPageInfo(tabLine, nr, &page_info) != XmPAGE_INVALID | |
3281 && page_info.page_number == nr | |
3282 && page_info.major_tab_widget != (Widget)0) | |
3283 { | |
3284 XtUnmanageChild(page_info.major_tab_widget); | |
3285 XtDestroyWidget(page_info.major_tab_widget); | |
3286 } | |
3287 nr++; | |
3288 } | |
3289 | |
3290 XtVaSetValues(tabLine, XmNlastPageNumber, tab_count, NULL); | |
3291 | |
3292 XtVaGetValues(tabLine, XmNcurrentPageNumber, ¤tpage, NULL); | |
3293 if (currentpage != curtabidx) | |
3294 XtVaSetValues(tabLine, XmNcurrentPageNumber, curtabidx, NULL); | |
3295 } | |
3296 | |
3297 /* | |
3298 * Set the current tab to "nr". First tab is 1. | |
3299 */ | |
3300 void | |
3301 gui_mch_set_curtab(nr) | |
3302 int nr; | |
3303 { | |
3304 int currentpage; | |
3305 | |
3306 if (tabLine == (Widget)0) | |
3307 return; | |
3308 | |
3309 XtVaGetValues(tabLine, XmNcurrentPageNumber, ¤tpage, NULL); | |
3310 if (currentpage != nr) | |
3311 XtVaSetValues(tabLine, XmNcurrentPageNumber, nr, NULL); | |
3312 } | |
2915 #endif | 3313 #endif |
2916 | 3314 |
2917 /* | 3315 /* |
2918 * Set the colors of Widget "id" to the menu colors. | 3316 * Set the colors of Widget "id" to the menu colors. |
2919 */ | 3317 */ |