summaryrefslogtreecommitdiff
path: root/tvision/examples/inplis/inplist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tvision/examples/inplis/inplist.cpp')
-rw-r--r--tvision/examples/inplis/inplist.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/tvision/examples/inplis/inplist.cpp b/tvision/examples/inplis/inplist.cpp
new file mode 100644
index 0000000..2ad5cd5
--- /dev/null
+++ b/tvision/examples/inplis/inplist.cpp
@@ -0,0 +1,167 @@
+/*
+
+ Created by L. Borobia 92-11-30
+
+ File: INPLIST.CPP
+
+ A little example, how to execute an inputline in a
+ focused item from a listbox.
+
+*/
+
+#include "stdio.h"
+#include "string.h"
+#include "inplist.h"
+
+TExecInputLine::TExecInputLine(const TRect& bounds, int aMaxLen)
+ :TInputLine(bounds, aMaxLen)
+ {
+ }
+
+void TExecInputLine::set(void *rec)
+ {
+ setData(rec);
+ }
+
+void TExecInputLine::get(void *rec)
+ {
+ getData(rec);
+ }
+
+ushort TExecInputLine::execute()
+ {
+ TEvent e;
+ Boolean leavemodal = False;
+ do
+ {
+ getEvent(e);
+ if (e.what == evKeyDown)
+ {
+ switch (e.keyDown.keyCode)
+ {
+ case kbDown:
+ case kbUp:
+ case kbEsc:
+ case kbEnter:
+ case kbPgDn:
+ case kbPgUp:
+ case kbCtrlPgDn:
+ case kbCtrlPgUp:
+ leavemodal = True;
+ break;
+ default:
+ leavemodal = False;
+ break;
+ }
+ }
+ if (e.what == evMouseDown && e.mouse.buttons == mbLeftButton)
+ {
+ TPoint p = makeLocal(e.mouse.where);
+ if (mouseInView(p) == False)
+ leavemodal = True;
+ }
+ handleEvent(e);
+ } while (leavemodal == False);
+ return e.keyDown.keyCode;
+}
+
+
+TInputBox::TInputBox(const TRect& bounds, ushort aNumCols, TScrollBar *aScrollBar)
+ :TListBox(bounds,aNumCols,aScrollBar)
+
+ {
+ }
+
+void TInputBox::getText(char *dest, int item, short maxLen)
+ {
+ ListBoxItem *v;
+ char s[MAXVALUELEN+MAXLABELLEN];
+ if (list() != 0 )
+ {
+ v = (ListBoxItem *)(list()->at(item));
+ sprintf(s, "%.*s = %.*s", MAXLABELLEN,v->label, MAXVALUELEN, v->value);
+ strncpy( dest, s, maxLen );
+ dest[maxLen] = '\0';
+ }
+ else
+ *dest = EOS;
+ }
+
+ushort TInputBox::inputData( )
+ {
+ ListBoxItem *v;
+ TExecInputLine *te;
+ TRect r = getExtent();
+ ushort control=0;
+ if (list() != 0 )
+ {
+ v = (ListBoxItem *)(list()->at(focused));
+ r = TRect(strlen(v->label)+5, focused-topItem+1,r.b.x-r.a.x,focused-topItem+2);
+ te = new TExecInputLine(r,MAXVALUELEN);
+ te->set(v->value);
+ control = owner->execView((TView *)te);
+ if (control != kbEsc)
+ te->get(v->value);
+ CLY_destroy((TView *)te);
+ }
+ return control;
+ }
+
+
+void TInputBox::handleEvent(TEvent& event)
+ {
+ TEvent e = event;
+ ushort item;
+ TListBox::handleEvent(event);
+ item = focused;
+ if ( event.what == evKeyDown )
+ {
+ if (event.keyDown.charScan.charCode >= 32)
+ {
+ putEvent(event);
+ if (inputData() == kbUp)
+ item--;
+ else
+ item++;
+ drawView();
+ focusItemNum(item);
+ }
+ else
+ if ( event.keyDown.keyCode == kbRight ||
+ event.keyDown.keyCode == kbLeft ||
+ event.keyDown.keyCode == kbEnter
+ )
+ {
+ if (inputData() == kbUp)
+ item--;
+ else
+ item++;
+ drawView();
+ focusItemNum(item);
+ }
+ }
+ else
+ if (e.what == evMouseDown &&
+ e.mouse.buttons == mbLeftButton)
+ {
+ inputData();
+ drawView();
+ }
+ }
+
+
+TInputDialog::TInputDialog(const TRect& r, const char *aTitle, TCollection *aList)
+ : TWindowInit( &TInputDialog::initFrame )
+ , TDialog(r, aTitle)
+
+ {
+ options |= ofCentered;
+ TRect r1 = getExtent();
+ r1.grow(-1,-1);
+ vScrollBar = new TScrollBar(TRect(r1.b.x-1,r1.a.y,r1.b.x,r1.b.y));
+ inputBox = new TInputBox(r1,1,vScrollBar);
+ inputBox->newList(aList);
+ insert(inputBox);
+ insert(vScrollBar);
+ }
+