diff options
Diffstat (limited to 'tvision/examples/inplis/inplist.cpp')
-rw-r--r-- | tvision/examples/inplis/inplist.cpp | 167 |
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); + } + |