00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293 #ifndef XMDialogs_h
00294 #define XMDialogs_h
00295 #include <stdio.h>
00296
00297 #include <X11/StringDefs.h>
00298 #include <Xm/MessageB.h>
00299 #include <Xm/SelectioB.h>
00300 #include <Xm/FileSB.h>
00301
00302 #include "XMWidget.h"
00303 #include "XMPushbutton.h"
00304 #include "XMManagers.h"
00305 #include "XMCallback.h"
00306
00307
00308
00309
00310
00311 #ifdef unix
00312 #define XMFILE_DEFAULT_DIR "./"
00313 #define XMFILE_DEFAULT_DIRMASK ".
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 class XMMessageBox : public XMManagedWidget
00324 {
00325 protected:
00326 XMPushButton *okbutton;
00327 XMPushButton *cancelbutton;
00328 XMPushButton *helpbutton;
00329 void GetButtons()
00330 {
00331 Widget wid;
00332 wid = XmMessageBoxGetChild(id, XmDIALOG_OK_BUTTON);
00333 okbutton = new XMPushButton(wid);
00334
00335 wid = XmMessageBoxGetChild(id, XmDIALOG_CANCEL_BUTTON);
00336 cancelbutton = new XMPushButton(wid);
00337
00338 wid = XmMessageBoxGetChild(id, XmDIALOG_HELP_BUTTON);
00339 helpbutton = new XMPushButton(wid);
00340 }
00341 public:
00342
00343
00344 virtual ~XMMessageBox()
00345 { delete okbutton;
00346 delete cancelbutton;
00347 delete helpbutton;
00348 }
00349 XMMessageBox(char *n) : XMManagedWidget(n) {}
00350 XMMessageBox(Widget w) : XMManagedWidget(w)
00351 {
00352 GetButtons();
00353 }
00354
00355
00356 XMPushButton *GetOkButton() { return okbutton; }
00357 XMPushButton *GetCancelButton() { return cancelbutton; }
00358 XMPushButton *GetHelpButton() { return helpbutton; }
00359
00360
00361
00362 virtual void SetText(char *txt)
00363 {
00364 XmString s = XmStringCreateLtoR(txt,
00365 XmSTRING_DEFAULT_CHARSET);
00366 SetAttribute(XmNmessageString, s);
00367 XmStringFree(s);
00368 }
00369
00370
00371 Callback_data *AddOkCallback(void (*cb)(XMWidget *w,
00372 XtPointer,
00373 XtPointer),
00374 XtPointer cd = NULL)
00375 {
00376 return AddCallback(XmNokCallback, cb, cd);
00377 }
00378 Callback_data *AddCancelCallback(void (*cb)(XMWidget *w,
00379 XtPointer,
00380 XtPointer),
00381 XtPointer cd = NULL)
00382 {
00383 return AddCallback(XmNcancelCallback, cb, cd);
00384 }
00385
00386
00387 void LabelCancelButton(char *txt)
00388 { XmString str = XmStringCreateLtoR(txt,
00389 XmSTRING_DEFAULT_CHARSET);
00390 SetAttribute(XmNcancelLabelString, str);
00391 XmStringFree(str);
00392 }
00393 void LabelOkButton(char *txt)
00394 {
00395 XmString str = XmStringCreateLtoR(txt,
00396 XmSTRING_DEFAULT_CHARSET);
00397 SetAttribute(XmNokLabelString, str);
00398 XmStringFree(str);
00399 }
00400 void LabelHelpButton(char *txt)
00401 { helpbutton->Label(txt); }
00402
00403
00404
00405 void DefaultToOk()
00406 { SetAttribute(XmNdefaultButtonType,
00407 XmDIALOG_OK_BUTTON);
00408 }
00409 void DefaultToCancel()
00410 { SetAttribute(XmNdefaultButtonType,
00411 XmDIALOG_CANCEL_BUTTON);
00412 }
00413 void DefaultToHelp()
00414 {
00415 SetAttribute(XmNdefaultButtonType,
00416 XmDIALOG_HELP_BUTTON);
00417 }
00418 void Show() {
00419 Manage();
00420 XtPopup(XtParent(id), XtGrabNone);
00421 }
00422 void Hide() {
00423 UnManage();
00424 }
00425 void SetModal(unsigned char modality)
00426 { SetAttribute(XmNdialogStyle, modality); }
00427 };
00428
00429
00430
00431
00432
00433
00434
00435 class XMErrorDialog : public XMMessageBox
00436 {
00437 public:
00438
00439 XMErrorDialog(char *n, Widget parent, char *msg,
00440 void (*cb)(XMWidget *,
00441 XtPointer, XtPointer) = NULL,
00442 XtPointer cbd = NULL,
00443 ArgList list = NULL, Cardinal argcount = 0):
00444 XMMessageBox(n)
00445 {
00446 id = XmCreateErrorDialog(parent,
00447 name,
00448 list,
00449 argcount);
00450 SetText(msg);
00451 GetButtons();
00452 LabelOkButton("Dismiss");
00453 cancelbutton->Disable();
00454 helpbutton->Disable();
00455 if(cb)
00456 AddOkCallback(cb, cbd);
00457 Manage();
00458 XtPopup(XtParent(id), XtGrabNone);
00459 }
00460 XMErrorDialog(char *n, XMWidget &parent, char *msg,
00461 void (*cb)(XMWidget *,
00462 XtPointer, XtPointer) = NULL,
00463 XtPointer cbd = NULL,
00464 ArgList list = NULL, Cardinal argcount = 0):
00465 XMMessageBox(n)
00466 {
00467 id = XmCreateErrorDialog(parent.getid(),
00468 name,
00469 list,
00470 argcount);
00471 SetText(msg);
00472 GetButtons();
00473 LabelOkButton("Dismiss");
00474 cancelbutton->Disable();
00475 helpbutton->Disable();
00476 if(cb)
00477 AddOkCallback(cb, cbd);
00478 Manage();
00479 XtPopup(XtParent(id), XtGrabNone);
00480 }
00481 XMErrorDialog(Widget w) : XMMessageBox(w)
00482 {
00483 }
00484 };
00485
00486
00487
00488
00489 class XMInformationDialog : public XMMessageBox
00490 {
00491 public:
00492
00493 XMInformationDialog(char *n,Widget parent, char *msg,
00494 void (*cb)(XMWidget *,
00495 XtPointer, XtPointer) = NULL,
00496 XtPointer cbd = NULL,
00497 ArgList list = NULL, Cardinal argcount=0) :
00498 XMMessageBox(n)
00499 {
00500 id = XmCreateInformationDialog(parent,
00501 name,
00502 list,
00503 argcount);
00504 SetText(msg);
00505 GetButtons();
00506 LabelOkButton("Dismiss");
00507 cancelbutton->Disable();
00508 helpbutton->Disable();
00509 if(cb)
00510 AddOkCallback(cb, cbd);
00511 Manage();
00512 XtPopup(XtParent(id), XtGrabNone);
00513 }
00514 XMInformationDialog(char *n, XMWidget &parent, char *msg,
00515 void (*cb)(XMWidget *,
00516 XtPointer, XtPointer) = NULL,
00517 XtPointer cbd = NULL,
00518 ArgList list = NULL, Cardinal argcount=0) :
00519 XMMessageBox(n)
00520 {
00521 id = XmCreateInformationDialog(
00522 parent.getid(),
00523 name,
00524 list,
00525 argcount);
00526 SetText(msg);
00527 GetButtons();
00528 LabelOkButton("Dismiss");
00529 cancelbutton->Disable();
00530 helpbutton->Disable();
00531 if(cb)
00532 AddOkCallback(cb, cbd);
00533 Manage();
00534 XtPopup(XtParent(id), XtGrabNone);
00535 }
00536 XMInformationDialog(Widget w) : XMMessageBox(w)
00537 {
00538 }
00539 };
00540
00541
00542
00543
00544 class XMMessageDialog : public XMMessageBox
00545 {
00546 public:
00547
00548 XMMessageDialog(char *n,Widget parent, char *msg,
00549 void (*cb)(XMWidget *,
00550 XtPointer, XtPointer) = NULL,
00551 XtPointer cbd = NULL,
00552 ArgList list = NULL, Cardinal argcount=0) :
00553 XMMessageBox(n)
00554 {
00555 id = XmCreateMessageDialog(parent,
00556 name,
00557 list,
00558 argcount);
00559 SetText(msg);
00560 GetButtons();
00561 LabelOkButton("Dismiss");
00562 cancelbutton->Disable();
00563 helpbutton->Disable();
00564 if(cb)
00565 AddOkCallback(cb, cbd);
00566 Manage();
00567 XtPopup(XtParent(id), XtGrabNone);
00568 }
00569 XMMessageDialog(char *n, XMWidget &parent, char *msg,
00570 void (*cb)(XMWidget *,
00571 XtPointer, XtPointer) = NULL,
00572 XtPointer cbd = NULL,
00573 ArgList list = NULL, Cardinal argcount=0) :
00574 XMMessageBox(n)
00575 {
00576 id = XmCreateMessageDialog(parent.getid(),
00577 name,
00578 list,
00579 argcount);
00580 SetText(msg);
00581 GetButtons();
00582 LabelOkButton("Dismiss");
00583 cancelbutton->Disable();
00584 helpbutton->Disable();
00585 if(cb)
00586 AddOkCallback(cb, cbd);
00587 Manage();
00588 XtPopup(XtParent(id), XtGrabNone);
00589 }
00590 XMMessageDialog(Widget w) : XMMessageBox(w)
00591 {
00592 }
00593 };
00594
00595
00596
00597 class XMQuestionDialog : public XMMessageBox
00598 {
00599 public:
00600
00601 XMQuestionDialog(char *n,Widget parent, char *msg,
00602 void (*cb)(XMWidget *,
00603 XtPointer, XtPointer) = NULL,
00604 XtPointer cbd = NULL,
00605 ArgList list = NULL, Cardinal argcount=0) :
00606 XMMessageBox(n)
00607 {
00608 id = XmCreateQuestionDialog(parent,
00609 name,
00610 list,
00611 argcount);
00612 SetText(msg);
00613 GetButtons();
00614 LabelOkButton("Yes");
00615 LabelCancelButton("No");
00616 helpbutton->Disable();
00617 if(cb)
00618 AddOkCallback(cb, cbd);
00619 Manage();
00620 XtPopup(XtParent(id), XtGrabNone);
00621 }
00622 XMQuestionDialog(char *n, XMWidget &parent, char *msg,
00623 void (*cb)(XMWidget *,
00624 XtPointer, XtPointer) = NULL,
00625 XtPointer cbd = NULL,
00626 ArgList list = NULL, Cardinal argcount=0) :
00627 XMMessageBox(n)
00628 {
00629 id = XmCreateQuestionDialog(parent.getid(),
00630 name,
00631 list,
00632 argcount);
00633 SetText(msg);
00634 GetButtons();
00635 LabelOkButton("Yes");
00636 LabelCancelButton("No");
00637 helpbutton->Disable();
00638 if(cb)
00639 AddOkCallback(cb, cbd);
00640 Manage();
00641 XtPopup(XtParent(id), XtGrabNone);
00642 }
00643 XMQuestionDialog(Widget w) : XMMessageBox(w)
00644 {
00645 }
00646 };
00647
00648
00649
00650
00651
00652
00653
00654
00655 class XMQuestioner : public XMQuestionDialog {
00656 public:
00657 XMQuestioner(char *n, Widget parent, char *msg,
00658 XtPointer cbd,
00659 ArgList list = NULL, Cardinal argcount = 0);
00660 XMQuestioner(char *n, XMWidget &parent, char *msg,
00661 XtPointer cbd,
00662 ArgList list = NULL, Cardinal argcount = 0);
00663 ~XMQuestioner();
00664 protected:
00665 XMCallback<XMQuestioner> yescallback;
00666 XMCallback<XMQuestioner> nocallback;
00667 virtual void Yescb(XMWidget *wid, XtPointer ud, XtPointer cd);
00668 virtual void Nocb(XMWidget *wid, XtPointer ud, XtPointer cd);
00669 private:
00670
00671 };
00672
00673
00674
00675 class XMWarningDialog : public XMMessageBox
00676 {
00677 public:
00678
00679 XMWarningDialog(char *n,Widget parent, char *msg,
00680 void (*cb)(XMWidget *,
00681 XtPointer, XtPointer) = NULL,
00682 XtPointer cbd = NULL,
00683 ArgList list = NULL, Cardinal argcount=0) :
00684 XMMessageBox(n)
00685 {
00686 id = XmCreateWarningDialog(parent,
00687 name,
00688 list,
00689 argcount);
00690 SetText(msg);
00691 LabelOkButton("Dismiss");
00692 cancelbutton->Disable();
00693 helpbutton->Disable();
00694 GetButtons();
00695 if(cb)
00696 AddOkCallback(cb, cbd);
00697 Manage();
00698 XtPopup(XtParent(id), XtGrabNone);
00699 }
00700 XMWarningDialog(char *n, XMWidget &parent, char *msg,
00701 void (*cb)(XMWidget *,
00702 XtPointer, XtPointer) = NULL,
00703 XtPointer cbd = NULL,
00704 ArgList list = NULL, Cardinal argcount=0) :
00705 XMMessageBox(n)
00706 {
00707 id = XmCreateWarningDialog(parent.getid(),
00708 name,
00709 list,
00710 argcount);
00711 SetText(msg);
00712 GetButtons();
00713 LabelOkButton("Dismiss");
00714 cancelbutton->Disable();
00715 helpbutton->Disable();
00716 GetButtons();
00717 if(cb)
00718 AddOkCallback(cb, cbd);
00719 Manage();
00720 XtPopup(XtParent(id), XtGrabNone);
00721 }
00722 XMWarningDialog(Widget w) : XMMessageBox(w)
00723 {
00724 }
00725 };
00726
00727
00728
00729
00730 class XMWorkingDialog : public XMMessageBox
00731 {
00732 public:
00733
00734 XMWorkingDialog(char *n,Widget parent, char *msg,
00735 void (*cb)(XMWidget *,
00736 XtPointer, XtPointer) = NULL,
00737 XtPointer cbd = NULL,
00738 ArgList list = NULL, Cardinal argcount=0) :
00739 XMMessageBox(n)
00740 {
00741 id = XmCreateWorkingDialog(parent,
00742 name,
00743 list,
00744 argcount);
00745 SetText(msg);
00746 GetButtons();
00747 LabelOkButton("Dismiss");
00748 cancelbutton->Disable();
00749 helpbutton->Disable();
00750 GetButtons();
00751 if(cb)
00752 AddOkCallback(cb, cbd);
00753 Manage();
00754 XtPopup(XtParent(id), XtGrabNone);
00755 }
00756 XMWorkingDialog(char *n, XMWidget &parent, char *msg,
00757 void (*cb)(XMWidget *,
00758 XtPointer, XtPointer) = NULL,
00759 XtPointer cbd = NULL,
00760 ArgList list = NULL, Cardinal argcount=0) :
00761 XMMessageBox(n)
00762 {
00763 id = XmCreateWorkingDialog(parent.getid(),
00764 name,
00765 list,
00766 argcount);
00767 SetText(msg);
00768 GetButtons();
00769 LabelOkButton("Dismiss");
00770 cancelbutton->Disable();
00771 helpbutton->Disable();
00772 GetButtons();
00773 if(cb)
00774 AddOkCallback(cb, cbd);
00775 Manage();
00776 XtPopup(XtParent(id), XtGrabNone);
00777 }
00778 XMWorkingDialog(Widget w) : XMMessageBox(w)
00779 {
00780 }
00781 };
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796 struct XM_help_client_data {
00797 char *name;
00798 XMInformationDialog *dialog;
00799 char **text;
00800 };
00801
00802
00803
00804
00805
00806
00807 extern XM_help_client_data XM_About;
00808 extern XM_help_client_data XM_Help_Overview;
00809
00810
00811
00812
00813 XMInformationDialog *XM_help(char *name,
00814 XMWidget *parent, char **help_text);
00815 void XM_display_help(XMWidget *caller,
00816 XtPointer client_data,
00817 XtPointer reason = NULL);
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830 class XMSelection : public XMMessageBox
00831 {
00832 protected:
00833 XMPushButton *applybutton;
00834 void GetButtons() {
00835
00836 Widget wid;
00837 wid = XmSelectionBoxGetChild(id, XmDIALOG_OK_BUTTON);
00838 okbutton = new XMPushButton(wid);
00839
00840 wid = XmSelectionBoxGetChild(id, XmDIALOG_CANCEL_BUTTON);
00841 cancelbutton = new XMPushButton(wid);
00842
00843 wid = XmSelectionBoxGetChild(id, XmDIALOG_HELP_BUTTON);
00844 helpbutton = new XMPushButton(wid);
00845
00846 applybutton = new XMPushButton(
00847 XmSelectionBoxGetChild(id,
00848 XmDIALOG_APPLY_BUTTON));
00849 }
00850 public:
00851
00852
00853
00854 XMSelection(char *name) : XMMessageBox(name) {}
00855 XMSelection(Widget w) : XMMessageBox(w) {
00856 GetButtons();
00857 }
00858 virtual ~XMSelection() {
00859 delete applybutton;
00860 }
00861
00862
00863 void SetTextWidth(Cardinal n) {
00864 SetAttribute(XmNtextColumns, (short)n);
00865 }
00866
00867
00868
00869 Callback_data *AddDoCallback(void (*cb)(XMWidget *,
00870 XtPointer,
00871 XtPointer),
00872 XtPointer client_data = NULL,
00873 Callback_data **apply = NULL) {
00874 Callback_data *apcb;
00875 apcb = AddCallback(XmNapplyCallback, cb, client_data);
00876 if (apply != NULL) *apply = apcb;
00877 return AddCallback(XmNokCallback, cb, client_data);
00878 }
00879 Callback_data *AddApplyCallback(void (*cb)(XMWidget *,
00880 XtPointer,
00881 XtPointer),
00882 XtPointer client_data = NULL) {
00883 return AddCallback(XmNapplyCallback, cb, client_data);
00884 }
00885
00886
00887
00888 XMPushButton *GetApplyButton() { return applybutton;}
00889
00890
00891
00892 virtual void SetText(char *txt) {
00893 XmString s = XmStringCreateLtoR(txt, XmSTRING_DEFAULT_CHARSET);
00894 SetAttribute(XmNtextString, s);
00895 XmStringFree(s);
00896 }
00897 virtual void SetLabelString(char *txt) {
00898 XmString s = XmStringCreateLtoR(txt,
00899 XmSTRING_DEFAULT_CHARSET);
00900 SetAttribute(XmNselectionLabelString, s);
00901 XmStringFree(s);
00902 }
00903
00904
00905 void LabelApplyButton(char *txt) {
00906 XmString str = XmStringCreateLtoR(txt,
00907 XmSTRING_DEFAULT_CHARSET);
00908 SetAttribute(XmNapplyLabelString, str);
00909 XmStringFree(str);
00910 }
00911
00912
00913 void DefaultToOk() {
00914 SetAttribute(XmNdefaultButton,
00915 okbutton->getid());
00916 }
00917 void DefaultToCancel() {
00918 SetAttribute(XmNdefaultButton,
00919 cancelbutton->getid());
00920 }
00921 void DefaultToHelp() {
00922 SetAttribute(XmNdefaultButton,
00923 helpbutton->getid());
00924 }
00925 void DefaultToApply() {
00926 SetAttribute(XmNdefaultButton,
00927 applybutton->getid());
00928 }
00929 };
00930
00931
00932
00933
00934
00935
00936 class XMPromptDialog : public XMSelection
00937 {
00938 protected:
00939 void GetButtons() {
00940 Widget w;
00941 w = XmSelectionBoxGetChild(id, XmDIALOG_HELP_BUTTON);
00942 helpbutton = new XMPushButton(w);
00943
00944 w = XmSelectionBoxGetChild(id, XmDIALOG_CANCEL_BUTTON);
00945 cancelbutton = new XMPushButton(w);
00946
00947 w = XmSelectionBoxGetChild(id, XmDIALOG_APPLY_BUTTON);
00948 applybutton = new XMPushButton(w);
00949
00950 w = XmSelectionBoxGetChild(id, XmDIALOG_OK_BUTTON);
00951 okbutton = new XMPushButton(w);
00952 }
00953 public:
00954 XMPromptDialog(char *n, Widget parent, char *prompt = NULL,
00955 void (*cb)(XMWidget *,
00956 XtPointer, XtPointer) = NULL,
00957 XtPointer cbd = NULL,
00958 ArgList list = NULL, Cardinal argcount = 0) :
00959 XMSelection(n) {
00960 id = XmCreatePromptDialog(parent, name,
00961 list, argcount);
00962 GetButtons();
00963 if(prompt) SetLabelString(prompt);
00964 helpbutton->Disable();
00965 if(cb) AddDoCallback(cb, cbd);
00966 Manage();
00967 XtPopup(XtParent(id), XtGrabNone);
00968 }
00969 XMPromptDialog(char *n, XMWidget &parent, char *prompt = NULL,
00970 void (*cb)(XMWidget *,
00971 XtPointer, XtPointer) = NULL,
00972 XtPointer cbd = NULL,
00973 ArgList list = NULL, Cardinal argcount = 0) :
00974 XMSelection(n) {
00975 id = XmCreatePromptDialog(parent.getid(),
00976 name, list, argcount);
00977 GetButtons();
00978 if(prompt) SetLabelString(prompt);
00979 if(cb) AddDoCallback(cb, cbd);
00980 helpbutton->Disable();
00981 Manage();
00982 XtPopup(XtParent(id), XtGrabNone);
00983 }
00984 XMPromptDialog(Widget w) : XMSelection(w) { }
00985
00986
00987 };
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999 class XMPrompter : public XMPromptDialog {
01000 public:
01001 XMPrompter(char *name, Widget parent, char *prompt = NULL,
01002 XtPointer calldata = NULL);
01003 XMPrompter(char *name, XMWidget &parent, char *prompt = NULL,
01004 XtPointer calldata = NULL);
01005 ~XMPrompter();
01006
01007
01008 void SetHelpText(char **new_help);
01009 void RevertHelpText();
01010 protected:
01011 XMCallback<XMPrompter> ok;
01012 XMCallback<XMPrompter> apply;
01013 XMCallback<XMPrompter> cancel;
01014 XMCallback<XMPrompter> help;
01015 private:
01016 virtual void OkCallback(XMWidget *wid, XtPointer userd, XtPointer calld);
01017 virtual void ApplyCallback(XMWidget *wid, XtPointer userd, XtPointer calld);
01018 virtual void CancelCallback(XMWidget *wid, XtPointer userd, XtPointer calld);
01019 virtual void HelpCallback(XMWidget *wid, XtPointer userd, XtPointer calld);
01020 virtual Boolean Perform(XMWidget *wid, XtPointer userd, XtPointer calld);
01021
01022 struct XM_help_client_data help_info;
01023 };
01024
01025
01026
01027
01028
01029 class XMSelectionDialog : public XMSelection
01030 {
01031 public:
01032 XMSelectionDialog(char *n, Widget parent, char *prompt = NULL,
01033 void (*cb)(XMWidget *,
01034 XtPointer, XtPointer) = NULL,
01035 XtPointer cbd = NULL,
01036 ArgList list = NULL, Cardinal argcount = 0) :
01037 XMSelection(n) {
01038 id = XmCreateSelectionDialog(parent, name,
01039 list, argcount);
01040 GetButtons();
01041 if(prompt) SetLabelString(prompt);
01042 helpbutton->Disable();
01043 if(cb) AddDoCallback(cb, cbd);
01044 Manage();
01045 XtPopup(XtParent(id), XtGrabNone);
01046 }
01047 XMSelectionDialog(char *n, XMWidget &parent, char *prompt = NULL,
01048 void (*cb)(XMWidget *,
01049 XtPointer, XtPointer) = NULL,
01050 XtPointer cbd = NULL,
01051 ArgList list = NULL, Cardinal argcount = 0) :
01052 XMSelection(n) {
01053 id = XmCreateSelectionDialog(parent.getid(),
01054 name, list, argcount);
01055 GetButtons();
01056 if(prompt) SetLabelString(prompt);
01057 if(cb) AddDoCallback(cb, cbd);
01058 helpbutton->Disable();
01059 Manage();
01060 XtPopup(XtParent(id), XtGrabNone);
01061 }
01062 XMSelectionDialog(Widget w) : XMSelection(w) { }
01063
01064
01065
01066
01067
01068
01069 void SetSelectionList(Cardinal list_count, char **selections);
01070 void SetVisibleItemCount(Cardinal num_visible) {
01071 SetAttribute(XmNvisibleItemCount, num_visible);
01072 }
01073
01074
01075
01076
01077
01078
01079 void RestrictChoices() {
01080 SetAttribute(XmNmustMatch, True);
01081 }
01082 void NoRestrictChoices() {
01083 SetAttribute(XmNmustMatch, (XtArgVal)False);
01084 }
01085 Callback_data *AddNoMatchCallback(void (*cb)(XMWidget *,
01086 XtPointer, XtPointer),
01087 XtPointer client_data = NULL) {
01088 return AddCallback(XmNnoMatchCallback, cb, client_data);
01089 }
01090
01091 };
01092
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107 class XMSelector : public XMSelectionDialog
01108 {
01109 public:
01110 XMSelector(char *n, Widget parent, char *prompt = NULL,
01111 XtPointer cbd = NULL,
01112 ArgList list = NULL, Cardinal argcount = 0);
01113 XMSelector(char *n, XMWidget &parent, char *prompt = NULL,
01114 XtPointer cbd = NULL,
01115 ArgList list = NULL, Cardinal argcount = 0);
01116 ~XMSelector();
01117
01118 virtual void SetupList();
01119 void SetHelpText(char **text);
01120 void RevertHelpText();
01121 protected:
01122 virtual Boolean Perform(XMWidget *wid, XtPointer cd,
01123 int reason, XmString value, int size);
01124 virtual void OkCb(XMWidget *wid, XtPointer cd, XtPointer ud);
01125 virtual void NoMatchCb(XMWidget *wid, XtPointer cd, XtPointer ud);
01126 virtual void ApplyCb(XMWidget *wid, XtPointer cd, XtPointer ud);
01127 virtual void CancelCb(XMWidget *wid, XtPointer cd, XtPointer ud);
01128 virtual void HelpCb(XMWidget *wid, XtPointer cd, XtPointer ud);
01129 private:
01130 XMCallback<XMSelector> okbuttonCB;
01131 XMCallback<XMSelector> applybuttonCB;
01132 XMCallback<XMSelector> cancelbuttonCB;
01133 XMCallback<XMSelector> helpbuttonCB;
01134 XMCallback<XMSelector> nomatchCB;
01135
01136 struct XM_help_client_data helpinfo;
01137
01138 };
01139
01140
01141
01142
01143
01144
01145
01146
01147 class XMFileListDialog : public XMSelection
01148 {
01149 protected:
01150 void GetButtons() {
01151 helpbutton = new
01152 XMPushButton(XmFileSelectionBoxGetChild(id,
01153 XmDIALOG_HELP_BUTTON));
01154 cancelbutton = new
01155 XMPushButton(XmFileSelectionBoxGetChild(id,
01156 XmDIALOG_CANCEL_BUTTON));
01157 okbutton = new
01158 XMPushButton(XmFileSelectionBoxGetChild(id,
01159 XmDIALOG_OK_BUTTON));
01160 applybutton = new
01161 XMPushButton(XmFileSelectionBoxGetChild(id,
01162 XmDIALOG_APPLY_BUTTON));
01163 }
01164
01165 public:
01166 XMFileListDialog(char *n, Widget parent, char
01167 *directory = XMFILE_DEFAULT_DIRMASK,
01168 void (*cb)(XMWidget *,
01169 XtPointer, XtPointer) = NULL,
01170 XtPointer cbd = NULL,
01171 ArgList list = NULL, Cardinal argcount = 0) :
01172 XMSelection(n) {
01173 id = XmCreateFileSelectionDialog(parent, name,
01174 list, argcount);
01175 GetButtons();
01176 helpbutton->Disable();
01177 SetLabelString("Filename: ");
01178 if(cb) AddDoCallback(cb, cbd);
01179
01180
01181
01182 DoSearch(directory);
01183 Manage();
01184 XtPopup(XtParent(id), XtGrabNone);
01185 }
01186 XMFileListDialog(char *n, XMWidget &parent,
01187 char *directory = XMFILE_DEFAULT_DIRMASK,
01188 void (*cb)(XMWidget *,
01189 XtPointer, XtPointer) = NULL,
01190 XtPointer cbd = NULL,
01191 ArgList list = NULL, Cardinal argcount = 0) :
01192 XMSelection(n) {
01193 id = XmCreateFileSelectionDialog(parent.getid(),
01194 name, list, argcount);
01195 GetButtons();
01196 DoSearch(directory);
01197 if(cb) AddDoCallback(cb, cbd);
01198 helpbutton->Disable();
01199 SetLabelString("Filename: ");
01200 Manage();
01201 XtPopup(XtParent(id), XtGrabNone);
01202 }
01203 XMFileListDialog(Widget w) : XMSelection(w) { }
01204
01205
01206 void DoSearch(XmString dir) {
01207 XmFileSelectionDoSearch(id, dir);
01208 }
01209 void DoSearch(char *dir) {
01210 XmString d;
01211 d = XmStringCreateLtoR(dir, XmSTRING_DEFAULT_CHARSET);
01212 XmFileSelectionDoSearch(id, d);
01213 XmStringFree(d);
01214 }
01215 void DoSearch() {
01216 XmString dirmask;
01217 GetAttribute(XmNdirMask, &dirmask);
01218
01219 XmFileSelectionDoSearch(id, dirmask);
01220 XmStringFree(dirmask);
01221 }
01222
01223 char *GetDirectory();
01224 char *GetFileMask();
01225 char *GetFullSearchString();
01226
01227
01228
01229 virtual void SetLabelString(char *txt) {
01230 XmString s = XmStringCreateLtoR(txt, XmSTRING_DEFAULT_CHARSET);
01231 XtVaSetValues(XmFileSelectionBoxGetChild(id,
01232 XmDIALOG_SELECTION_LABEL),
01233 XmNlabelString, s,
01234 NULL);
01235 XmStringFree(s);
01236 }
01237 virtual void SetFilterString(char *txt) {
01238 XmString s = XmStringCreateLtoR(txt, XmSTRING_DEFAULT_CHARSET);
01239 SetAttribute(XmNfilterLabelString, s);
01240 XmStringFree(s);
01241 }
01242
01243
01244 void SetFileTypes(unsigned char fileset) {
01245 SetAttribute(XmNfileTypeMask, fileset);
01246 }
01247 void RestrictChoices() {
01248 SetAttribute(XmNmustMatch, True);
01249 }
01250 void NoRestrictChoices() {
01251 SetAttribute(XmNmustMatch, (XtArgVal)False);
01252 }
01253
01254
01255
01256 Callback_data *AddNoMatchCallback(void (*cb)(XMWidget *,
01257 XtPointer, XtPointer),
01258 XtPointer client_data = NULL) {
01259 return AddCallback(XmNnoMatchCallback, cb, client_data);
01260 }
01261
01262 };
01263
01264
01265
01266
01267
01268
01269
01270
01271
01272
01273
01274
01275
01276 class XMFileSelector : public XMFileListDialog
01277 {
01278 public:
01279 XMFileSelector(char *n, Widget parent,
01280 XtPointer calld = NULL,
01281 char *directory = XMFILE_DEFAULT_DIRMASK);
01282
01283 XMFileSelector(char *n, XMWidget &parent,
01284 XtPointer ud = NULL,
01285 char *directory = XMFILE_DEFAULT_DIRMASK);
01286
01287
01288 ~XMFileSelector();
01289
01290 void SetHelpText(char **text);
01291 void RevertHelpText();
01292 protected:
01293 virtual Boolean Perform(XMWidget *wid, XtPointer ud,
01294 char *filename,
01295 int reason);
01296 virtual void OkCb(XMWidget *wid, XtPointer ud, XtPointer cd);
01297 virtual void NomatchCb(XMWidget *wid, XtPointer ud, XtPointer cd);
01298 virtual void FilterCb(XMWidget *wid, XtPointer ud, XtPointer cd);
01299 virtual void CancelCb(XMWidget *wid, XtPointer ud, XtPointer cd);
01300 virtual void HelpCb(XMWidget *wid, XtPointer ud, XtPointer cd);
01301
01302
01303 private:
01304 XMCallback<XMFileSelector> okcb;
01305 XMCallback<XMFileSelector> nomatchcb;
01306 XMCallback<XMFileSelector> filtercb;
01307 XMCallback<XMFileSelector> cancelcb;
01308 XMCallback<XMFileSelector> helpcb;
01309
01310 struct XM_help_client_data helpinfo;
01311 };
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330 class XMCustomDialog : public XMWidget
01331 {
01332 protected:
01333 XMForm *shell_child;
01334 XMPanedWindow *top_manager;
01335 XMRowColumn *action_area;
01336 XMForm *work_area;
01337 XMPushButton *Ok;
01338 XMPushButton *Apply;
01339 XMPushButton *Cancel;
01340 XMPushButton *Help;
01341 void CreateDialog(char *name, Widget parent, char *title,
01342 ArgList l, Cardinal num_args);
01343 public:
01344
01345
01346 XMCustomDialog(char *name, XMWidget &parent, char *title,
01347 ArgList l = NULL, Cardinal num_args = 0) :
01348 XMWidget(name) {
01349 CreateDialog(name, parent.getid(), title,
01350 l, num_args);
01351 }
01352 XMCustomDialog(char *name, Widget parent, char *title,
01353 ArgList l = NULL, Cardinal num_args = 0) :
01354 XMWidget(name) {
01355 CreateDialog(name, parent, title, l, num_args); }
01356
01357
01358
01359 ~XMCustomDialog() {
01360 delete Ok;
01361 delete Apply;
01362 delete Cancel;
01363 delete Help;
01364 delete action_area;
01365 delete work_area;
01366 delete top_manager;
01367 delete shell_child;
01368 }
01369
01370
01371
01372 void Manage();
01373 void UnManage();
01374
01375 XMPanedWindow *TopManager() { return top_manager; }
01376 XMRowColumn *ActionArea() { return action_area; }
01377 XMForm *WorkArea() { return work_area; }
01378 XMPushButton *ok() { return Ok; }
01379 XMPushButton *apply() { return Apply; }
01380 XMPushButton *cancel() { return Cancel; }
01381 XMPushButton *help() { return Help; }
01382
01383 Callback_data *AddDoCallback(void (*callback)(XMWidget *, XtPointer, XtPointer),
01384 XtPointer user_data = NULL,
01385 Callback_data **okcb = NULL)
01386 {
01387 Callback_data *okc;
01388 okc = Ok->AddCallback(callback, user_data);
01389 if(okcb != NULL) *okcb = okc;
01390 return Apply->AddCallback(callback, user_data);
01391 }
01392 Callback_data *AddOkCallback(void (*callback)(XMWidget *, XtPointer, XtPointer),
01393 XtPointer user_data = NULL)
01394 { return Ok->AddCallback(callback, user_data); }
01395 Callback_data *AddApplyCallback(void (*callback)(XMWidget *, XtPointer, XtPointer),
01396 XtPointer user_data = NULL)
01397 { return Apply->AddCallback(callback, user_data); }
01398 Callback_data *AddCancelCallback(void (*callback)(XMWidget *, XtPointer, XtPointer),
01399 XtPointer user_data = NULL)
01400 { return Cancel->AddCallback(callback, user_data); }
01401 Callback_data *AddHelpCallback(void (*callback)(XMWidget *, XtPointer, XtPointer),
01402 XtPointer user_data = NULL)
01403 { return Help->AddCallback(callback, user_data); }
01404
01405 void SetModal(unsigned char modality)
01406 { shell_child->SetAttribute(XmNdialogStyle, modality); }
01407
01408 };
01409
01410
01411
01412 class XMCustomDialogBox : public XMCustomDialog
01413 {
01414 public:
01415 XMCustomDialogBox(char *name, XMWidget &parent, char *title,
01416 ArgList l= NULL, Cardinal num_args=0);
01417 XMCustomDialogBox(char *name, Widget parent, char *title,
01418 ArgList l=NULL, Cardinal num_args=0);
01419 ~XMCustomDialogBox();
01420
01421
01422 void SetHelpText(char **help_text);
01423 void RevertHelpText();
01424
01425 protected:
01426 XMCallback<XMCustomDialogBox> OkCb;
01427 XMCallback<XMCustomDialogBox> ApplyCb;
01428 XMCallback<XMCustomDialogBox> CancelCb;
01429 XMCallback<XMCustomDialogBox> HelpCb;
01430
01431 virtual Boolean Perform(XMWidget *wid, XtPointer cli, XtPointer call);
01432 virtual void OkPressed(XMWidget *wid, XtPointer cli, XtPointer call);
01433 virtual void ApplyPressed(XMWidget *wid, XtPointer cli, XtPointer call);
01434 virtual void CancelPressed(XMWidget *wid, XtPointer cli, XtPointer call);
01435 virtual void HelpPressed(XMWidget *wid, XtPointer cli, XtPointer call);
01436
01437 private:
01438 void InitializeHelp();
01439 void SetCallbacks();
01440 XM_help_client_data help_info;
01441
01442 };
01443 #endif