summaryrefslogtreecommitdiff
path: root/setedit/settvuti/tdiagaid.cc
diff options
context:
space:
mode:
Diffstat (limited to 'setedit/settvuti/tdiagaid.cc')
-rw-r--r--setedit/settvuti/tdiagaid.cc322
1 files changed, 322 insertions, 0 deletions
diff --git a/setedit/settvuti/tdiagaid.cc b/setedit/settvuti/tdiagaid.cc
new file mode 100644
index 0000000..28243e4
--- /dev/null
+++ b/setedit/settvuti/tdiagaid.cc
@@ -0,0 +1,322 @@
+/* Copyright (C) 1996-2005 by Salvador E. Tropea (SET),
+ see copyrigh file for details */
+#define Uses_string
+//#define Uses_stdio // debug
+
+#define Uses_AllocLocal
+#define Uses_TDialogAID
+#define Uses_TKeys
+#define Uses_TKeys_Extended
+#define Uses_TEvent
+#define Uses_TProgram
+#define Uses_TDeskTop
+#define Uses_TRadioButtons
+#define Uses_TSItem
+#define Uses_TLabel
+#define Uses_TButton
+#define Uses_TRect
+#define Uses_TSortedListBox
+
+#define Uses_TSLabel
+#define Uses_TSButton
+#define Uses_TSHzGroup
+#define Uses_TSStringableListBox
+#define Uses_TSSortedListBox
+#define Uses_TSVeGroup
+#define Uses_TSLabelRadio
+#define Uses_TSNoStaticText
+#define Uses_TSStaticText
+
+#include <easydia1.h>
+#include <settvuti.h>
+#include <easydiag.h>
+
+#include <diaghelp.h>
+
+
+TDialogAID::TDialogAID(const TRect& bounds, const char *aTitle,
+ TStringableListBox *slb ) :
+ TWindowInit(&TDialogAID::initFrame),
+ TGrowDialog(bounds,aTitle)
+{
+ List=slb;
+ AddAction=0;
+ InsAction=0;
+ DelAction=0;
+ OkAction=0;
+ CancelAction=0;
+ InfoAction=0;
+ nst=NULL;
+}
+
+static
+void EnableComms(void)
+{
+ TView::enableCommand(cmOKApply);
+ TView::enableCommand(cmDeleteKey);
+ TView::enableCommand(cmInsertKey);
+}
+
+static
+void DisableComms(unsigned leftOKEnabled)
+{
+ if (!leftOKEnabled)
+ TView::disableCommand(cmOKApply);
+ TView::disableCommand(cmDeleteKey);
+ TView::disableCommand(cmInsertKey);
+}
+
+
+void TDialogAID::handleEvent(TEvent& event)
+{
+ if (event.what==evKeyDown)
+ {
+ switch (event.keyDown.keyCode)
+ {
+ case kbEsc:
+ event.what=evCommand;
+ event.message.command=cmCancelApply;
+ break;
+ case kbInsert:
+ event.what=evCommand;
+ event.message.command=(List->list())->GetCount() ? cmInsertKey : cmAddKey;
+ if (event.message.command==cmInsertKey && InsAction==0)
+ event.message.command=cmAddKey;
+ break;
+ case kbDelete:
+ event.what=evCommand;
+ event.message.command=cmDeleteKey;
+ break;
+ default:
+ TDialog::handleEvent(event);
+ }
+ }
+ else
+ TDialog::handleEvent(event);
+
+ if ( event.what == evCommand || event.what == evBroadcast)
+ {
+ switch ( event.message.command )
+ {
+ case cmAddKey:
+ if (AddAction)
+ {
+ if (AddAction())
+ List->Update();
+ if ((List->list())->GetCount())
+ EnableComms();
+ }
+ break;
+ case cmInsertKey:
+ if (InsAction && (List->list())->GetCount())
+ {
+ if (InsAction(List->focused))
+ List->Update();
+ }
+ break;
+ case cmDeleteKey:
+ if (DelAction && (List->list())->GetCount())
+ {
+ if (DelAction(List->focused))
+ List->Update();
+ if ((List->list())->GetCount()==0)
+ DisableComms(flags & aidOKEnabled);
+ }
+ break;
+ case cmOKApply:
+ if (OkAction)
+ {
+ if (OkAction())
+ endModal(cmOK);
+ }
+ else
+ endModal(cmOK);
+ break;
+ case cmCancelApply:
+ if (CancelAction)
+ {
+ if (CancelAction())
+ endModal(cmCancel);
+ }
+ else
+ endModal(cmCancel);
+ break;
+ case cmInfoAID:
+ if (InfoAction)
+ InfoAction(List->focused);
+ break;
+ case cmBrowseAID:
+ if (BrowseAction)
+ {
+ if (BrowseAction())
+ List->Update();
+ if ((List->list())->GetCount())
+ EnableComms();
+ }
+ break;
+ case cmeZoom:
+ event.message.command=cmZoom;
+ TDialog::handleEvent(event);
+ break;
+ default:
+ return;
+ }
+ clearEvent(event);
+ }
+}
+
+static char *nbotAdd=__("~A~dd");
+static char *nbotIns=__("~I~nsert");
+static char *nbotDel=__("~D~elete");
+static char *nbotOk =__("~O~k");
+static char *nbotCan=__("~C~ancel");
+static char *nbotInfo=__("~I~nfo.");
+static char *nbotBrowse=__("~B~rowse");
+
+const int lSepb=2;
+
+TDialogAID *CreateAddInsDelDialog(int x, int y, const char *name, int h, int w,
+ int flags)
+{
+ unsigned options=0;
+ if (x<=0)
+ {
+ x=1;
+ options|=ofCenterX;
+ }
+ if (y<=0)
+ {
+ y=1;
+ options|=ofCenterY;
+ }
+
+ TSStringableListBox *slb=new TSStringableListBox(w,h+1,tsslbVertical);
+ TSView *upper=slb;
+ slb->view->growMode=gfMoveBottomCorner;
+
+ TDialogAID *d=new TDialogAID(TRect(x,y,1,1),name,
+ (TStringableListBox *)slb->view);
+ TSViewCol *col=new TSViewCol(d);
+
+ if (flags & aidAssignedTo)
+ {
+ AllocLocalStr(buffer,w+1);
+ memset(buffer,' ',w);
+ buffer[w]=0;
+ TSNoStaticText *snst=new TSNoStaticText(buffer);
+ d->nst=(TNoStaticText *)snst->view;
+ TSStaticText *labasig=new TSStaticText(__("Assigned to:"));
+ snst->setGrowMode(gfGrowHiX | gfGrowHiY | gfGrowLoY);
+ labasig->setGrowMode(gfGrowHiX | gfGrowHiY | gfGrowLoY);
+ upper=MakeVeGroup(0,upper,labasig,snst,0);
+ }
+
+ if (flags & aidComMac)
+ {
+ TSLabel *tl=TSLabelRadio(__("Assignmen~t~"),__("Command~s~"),__("~M~acro"),
+ __("s~L~isp code"),0);
+ tl->setGrowMode(gfGrowHiX | gfGrowHiY | gfGrowLoY);
+ upper=new TSVeGroup(upper,tl,0);
+ }
+ upper->Flags=wSpan;
+
+ TSButton *exBts[2];
+ exBts[0]=exBts[1]=NULL;
+ int idxEx=0;
+ if (flags & aidInfo)
+ exBts[idxEx++]=new TSButton(nbotInfo,cmInfoAID);
+ if (flags & aidBrowse)
+ exBts[idxEx++]=new TSButton(nbotBrowse,cmBrowseAID);
+ TSHzGroup *bt1=MakeHzGroup(new TSButton(nbotOk,cmOKApply,bfDefault),
+ new TSButton(nbotCan,cmCancelApply),
+ exBts[0],exBts[1],NULL);
+ bt1->setGrowMode(gfMoveAccording);
+ bt1->ySep=0;
+ TSHzGroup *bt2;
+ if (flags & aidInsert)
+ {
+ bt2=MakeHzGroup(new TSButton(nbotAdd,cmAddKey),
+ new TSButton(nbotIns,cmInsertKey),
+ new TSButton(nbotDel,cmDeleteKey),
+ 0);
+ }
+ else
+ {
+ bt2=MakeHzGroup(new TSButton(nbotAdd,cmAddKey),
+ new TSButton(nbotDel,cmDeleteKey),
+ 0);
+ }
+ bt2->setGrowMode(gfMoveAccording);
+
+ col->insert(xTSCenter,yTSUp,upper);
+ col->insert(xTSCenter,yTSUnder,bt2,0,upper);
+ col->insert(xTSCenter,yTSUnder,bt1,0,bt2);
+ col->doIt();
+ d->options|=options;
+ d->flags=flags;
+ return d;
+}
+
+// That creates the dialog, is generic and is reused
+// Used to: (1) Choose a comand (2) Choose a macro
+TDialog *CreateChooseDialog(int x, int y, const char *name, int h, int w,
+ unsigned options)
+{
+ unsigned opsDiag=0;
+ if (x<=0)
+ {
+ x=1;
+ opsDiag|=ofCenterX;
+ }
+ if (y<=0)
+ {
+ y=1;
+ opsDiag|=ofCenterY;
+ }
+ TSViewCol *col=new TSViewCol(new TDialog(TRect(x,y,1,1),name));
+
+ unsigned scrlBars=tsslbVertical;
+ unsigned hzMax=w;
+ if (options & aidHzScroll)
+ {
+ scrlBars|=tsslbHorizontal;
+ hzMax=256;
+ }
+ TSView *slb;
+ if (options & aidStringable)
+ slb=new TSStringableListBox(w,h+1,scrlBars,1,hzMax);
+ else
+ slb=new TSSortedListBox(w,h+1,scrlBars,1,hzMax);
+ col->insert(xTSCenter,yTSUp,slb);
+
+ TSView *bts;
+ if (options & aidNoCancel)
+ bts=new TSButton(nbotOk,cmOK,bfDefault);
+ else
+ bts=MakeHzGroup(new TSButton(nbotOk,cmOK,bfDefault),
+ new TSButton(nbotCan,cmCancel),0);
+ col->insert(xTSCenter,yTSDown,bts);
+
+ TDialog *d=col->doIt();
+ d->options|=opsDiag;
+
+ return d;
+}
+
+void TGrowDialogZ::handleEvent(TEvent& event)
+{
+ TDialog::handleEvent(event);
+ if (event.what==evCommand || event.what==evBroadcast)
+ {
+ switch (event.message.command)
+ {
+ case cmeZoom:
+ event.message.command=cmZoom;
+ TDialog::handleEvent(event);
+ break;
+ default:
+ break;
+ }
+ }
+}
+