summaryrefslogtreecommitdiff
path: root/tvision/examples/tcombo/tsinputl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tvision/examples/tcombo/tsinputl.cpp')
-rw-r--r--tvision/examples/tcombo/tsinputl.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/tvision/examples/tcombo/tsinputl.cpp b/tvision/examples/tcombo/tsinputl.cpp
new file mode 100644
index 0000000..cf0725b
--- /dev/null
+++ b/tvision/examples/tcombo/tsinputl.cpp
@@ -0,0 +1,158 @@
+/*************************************************************************/
+/* */
+/* TSINPUTL.H */
+/* */
+/* Copyright (c) 1992, Vincent J. Dentice */
+/* All rights reserved */
+/* */
+/* */
+/* Date Prg Ver Description */
+/* -------- --- --- ------------------------------------------------- */
+/* 09/30/92 VJD 0.1 Initial module definition. */
+/* 11/16/92 VJD 0.2 Added streamability to TStaticInputLine class. */
+/* 11/17/92 VJD 0.3 Replaced matchFirstChar() function with member */
+/* function getNextMatch(). */
+/* 11/17/92 RG 0.3 Added functionality to jump to the beginning and */
+/* end of the list by using the HOME and END keys. */
+/* This code was supplied by Robert Gloeckner */
+/* (100034,3033). */
+/* */
+/*************************************************************************/
+
+#include <ctype.h>
+#define Uses_string
+
+#define Uses_TEvent
+#define Uses_TKeys
+#define Uses_TStaticInputLine
+#define Uses_TStreamableClass
+#include "tsinputl.h"
+
+Boolean matchFirstChar(void *, void *);
+
+
+TStaticInputLine::TStaticInputLine(const TRect& bounds, int aMaxLen, TCollection *aList) :
+ TInputLine(bounds, aMaxLen)
+{
+ list = aList;
+}
+
+
+void *TStaticInputLine::getNextMatch(char testChar)
+{
+ return (char *)list->firstThat(matchFirstChar, &testChar);
+}
+
+
+void TStaticInputLine::handleEvent(TEvent& event)
+{
+ char testChar[2];
+ char *tempData;
+ ccIndex index;
+
+ if (event.what == evKeyDown) {
+ if (isprint(event.keyDown.charScan.charCode)) {
+ testChar[0] = event.keyDown.charScan.charCode;
+ testChar[1] = '\0';
+ tempData = (char *)getNextMatch(testChar[0]);
+ if (tempData != 0) {
+ strcpy(data, tempData);
+ selectAll(True);
+ drawView();
+ }
+ clearEvent(event);
+ }
+ else
+ switch (event.keyDown.keyCode) {
+ case kbUp :
+ index = list->indexOf(data) - 1;
+ if (index < 0)
+ index = list->getCount() - 1;
+ strcpy(data, (char *)list->at(index));
+ selectAll(True);
+ drawView();
+ clearEvent(event);
+ break;
+
+ case kbDown :
+ index = list->indexOf(data) + 1;
+ if (index >= list->getCount())
+ index = 0;
+ strcpy(data, (char *)list->at(index));
+ selectAll(True);
+ drawView();
+ clearEvent(event);
+ break;
+
+ case kbHome:
+ index = 0;
+ strcpy(data, (char *)list->at(index));
+ selectAll(True);
+ drawView();
+ clearEvent(event);
+ break;
+
+ case kbEnd:
+ index = list->getCount() - 1;
+ strcpy(data, (char *)list->at(index));
+ selectAll(True);
+ drawView();
+ clearEvent(event);
+ break;
+
+ case kbLeft :
+ case kbRight :
+ case kbBack :
+ case kbIns :
+ case kbDel : clearEvent(event);
+ }
+ }
+ TInputLine::handleEvent(event);
+}
+
+
+void TStaticInputLine::newList(TCollection *aList)
+{
+ if (list)
+ CLY_destroy(list);
+ list = aList;
+ drawView();
+}
+
+
+void *TStaticInputLine::read( ipstream& is )
+{
+ TInputLine::read(is);
+ is >> list;
+ return this;
+}
+
+
+void TStaticInputLine::write( opstream& os )
+{
+ TInputLine::write(os);
+ os << list;
+}
+
+TStreamable *TStaticInputLine::build()
+{
+ return new TStaticInputLine(streamableInit);
+}
+
+
+TStaticInputLine::TStaticInputLine(StreamableInit) : TInputLine(streamableInit) { }
+
+
+
+Boolean matchFirstChar(void *string1, void *string2)
+{
+ char *temp1, *temp2;
+
+ temp1 = (char *)string1;
+ temp2 = (char *)string2;
+
+ if (toupper(temp1[0]) == toupper(temp2[0]))
+ return True;
+ else
+ return False;
+}