summaryrefslogtreecommitdiff
path: root/c++/demo.cc
diff options
context:
space:
mode:
Diffstat (limited to 'c++/demo.cc')
-rw-r--r--c++/demo.cc569
1 files changed, 0 insertions, 569 deletions
diff --git a/c++/demo.cc b/c++/demo.cc
deleted file mode 100644
index 35433425f1fcc..0000000000000
--- a/c++/demo.cc
+++ /dev/null
@@ -1,569 +0,0 @@
-// * This makes emacs happy -*-Mode: C++;-*-
-/****************************************************************************
- * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
- * *
- * Permission is hereby granted, free of charge, to any person obtaining a *
- * copy of this software and associated documentation files (the *
- * "Software"), to deal in the Software without restriction, including *
- * without limitation the rights to use, copy, modify, merge, publish, *
- * distribute, distribute with modifications, sublicense, and/or sell *
- * copies of the Software, and to permit persons to whom the Software is *
- * furnished to do so, subject to the following conditions: *
- * *
- * The above copyright notice and this permission notice shall be included *
- * in all copies or substantial portions of the Software. *
- * *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
- * *
- * Except as contained in this notice, the name(s) of the above copyright *
- * holders shall not be used in advertising or otherwise to promote the *
- * sale, use or other dealings in this Software without prior written *
- * authorization. *
- ****************************************************************************/
-
-/*
- * Silly demo program for the NCursesPanel class.
- *
- * written by Anatoly Ivasyuk (anatoly@nick.csh.rit.edu)
- *
- * Demo code for NCursesMenu and NCursesForm written by
- * Juergen Pfeifer
- *
- * $Id: demo.cc,v 1.39 2008/12/07 02:07:34 juergen Exp $
- */
-
-#include "internal.h"
-#include "cursesapp.h"
-#include "cursesm.h"
-#include "cursesf.h"
-
-#ifdef __MINGW32__
-#undef KEY_EVENT
-#endif
-
-#ifndef __MINGW32__
-extern "C" unsigned int sleep(unsigned int);
-#endif
-
-#undef index // needed for NeXT
-
-//
-// -------------------------------------------------------------------------
-//
-class SillyDemo
-{
- public:
- void run(int sleeptime) {
-
- NCursesPanel *mystd = new NCursesPanel();
-
- // Make a few small demo panels
-
- NCursesPanel *u = new NCursesPanel(8, 20, 12, 4);
- NCursesPanel *v = new NCursesPanel(8, 20, 10, 6);
- NCursesPanel *w = new NCursesPanel(8, 20, 8, 8);
- NCursesPanel *x = new NCursesPanel(8, 20, 6, 10);
- NCursesPanel *y = new NCursesPanel(8, 20, 4, 12);
- NCursesPanel *z = new NCursesPanel(8, 30, 2, 14);
-
- // Draw something on the main screen, so we can see what happens
- // when panels get moved or deleted.
-
- mystd->box();
- mystd->move(mystd->height()/2, 1);
- mystd->hline(mystd->width()-2);
- mystd->move(1, mystd->width()/2);
- mystd->vline(mystd->height()-2);
- mystd->addch(0, mystd->width()/2, ACS_TTEE);
- mystd->addch(mystd->height()-1, mystd->width()/2, ACS_BTEE);
- mystd->addch(mystd->height()/2, 0, ACS_LTEE);
- mystd->addch(mystd->height()/2, mystd->width()-1, ACS_RTEE);
- mystd->addch(mystd->height()/2, mystd->width()/2, ACS_PLUS);
-
- // Draw frames with titles around panels so that we can see where
- // the panels are located.
- u->boldframe("Win U");
- v->frame("Win V");
- w->boldframe("Win W");
- x->frame("Win X");
- y->boldframe("Win Y");
- z->frame("Win Z");
- if (NCursesApplication::getApplication()->useColors()) {
- u->bkgd(' '|COLOR_PAIR(1));
- w->bkgd(' '|COLOR_PAIR(1));
- y->bkgd(' '|COLOR_PAIR(1));
- v->bkgd(' '|COLOR_PAIR(2));
- x->bkgd(' '|COLOR_PAIR(2));
- z->bkgd(' '|COLOR_PAIR(2));
- }
-
- // A refresh to any valid panel updates all panels and refreshes
- // the screen. Using mystd is just convenient - We know it's always
- // valid until the end of the program.
-
- mystd->refresh();
- sleep(sleeptime);
-
- // Show what happens when panels are deleted and moved.
-
- sleep(sleeptime);
- delete u;
- mystd->refresh();
-
- sleep(sleeptime);
- delete z;
- mystd->refresh();
-
- sleep(sleeptime);
- delete v;
- mystd->refresh();
-
- // show how it looks when a panel moves
- sleep(sleeptime);
- y->mvwin(5, 30);
- mystd->refresh();
-
- sleep(sleeptime);
- delete y;
- mystd->refresh();
-
- // show how it looks when you raise a panel
- sleep(sleeptime);
- w->top();
- mystd->refresh();
-
- sleep(sleeptime);
- delete w;
- mystd->refresh();
-
- sleep(sleeptime);
- delete x;
-
- mystd->clear();
- mystd->refresh();
-
- // Don't forget to clean up the main screen. Since this is the
- // last thing using NCursesWindow, this has the effect of
- // shutting down ncurses and restoring the terminal state.
-
- sleep(sleeptime);
- delete mystd;
- }
-};
-
-class UserData
-{
-private:
- int u;
-public:
- UserData(int x) : u(x) {}
- int sleeptime() const { return u; }
-};
-//
-// -------------------------------------------------------------------------
-//
-template<class T> class MyAction : public NCursesUserItem<T>
-{
-public:
- MyAction (const char* p_name,
- const T* p_UserData)
- : NCursesUserItem<T>(p_name, static_cast<const char*>(0), p_UserData)
- {}
-
- virtual ~MyAction() {}
-
- bool action() {
- SillyDemo a;
- a.run(NCursesUserItem<T>::UserData()->sleeptime());
- return FALSE;
- }
-};
-
-template class MyAction<UserData>;
-template class NCURSES_IMPEXP NCursesUserItem<UserData>;
-
-class QuitItem : public NCursesMenuItem
-{
-public:
- QuitItem() : NCursesMenuItem("Quit") {
- }
-
- bool action() {
- return TRUE;
- }
-};
-//
-// -------------------------------------------------------------------------
-//
-class Label : public NCursesFormField
-{
-public:
- Label(const char* title,
- int row, int col)
- : NCursesFormField(1, static_cast<int>(::strlen(title)), row, col) {
- set_value(title);
- options_off(O_EDIT|O_ACTIVE);
- }
-};
-//
-// -------------------------------------------------------------------------
-//
-class MyFieldType : public UserDefinedFieldType
-{
-private:
- int chk;
-protected:
- bool field_check(NCursesFormField& f) {
- return TRUE;
- }
- bool char_check(int c) {
- return (c==chk?TRUE:FALSE);
- }
-public:
- MyFieldType(int x) : chk(x) {
- }
-};
-//
-// -------------------------------------------------------------------------
-//
-class TestForm : public NCursesForm
-{
-private:
- NCursesFormField** F;
- MyFieldType* mft;
- Integer_Field *ift;
- Enumeration_Field *eft;
-
- static const char *weekdays[];
-
-public:
- TestForm()
- : NCursesForm(13, 51, (lines() - 15)/2, (cols() - 53)/2),
- F(0),
- mft(0),
- ift(0),
- eft(0)
- {
-
- F = new NCursesFormField*[10];
- mft = new MyFieldType('X');
- ift = new Integer_Field(0, 1, 10);
- eft = new Enumeration_Field(weekdays);
-
- F[0] = new Label("Demo Entry Form", 0, 16);
- F[1] = new Label("Weekday Enum", 2, 1);
- F[2] = new Label("Number(1-10)", 2, 21);
- F[3] = new Label("Only 'X'", 2, 35);
- F[4] = new Label("Multiline Field (Dynamic and Scrollable)", 5, 1);
- F[5] = new NCursesFormField(1, 18, 3, 1);
- F[6] = new NCursesFormField(1, 12, 3, 21);
- F[7] = new NCursesFormField(1, 12, 3, 35);
- F[8] = new NCursesFormField(4, 46, 6, 1, 2);
- F[9] = new NCursesFormField();
-
- InitForm(F, TRUE, TRUE);
- boldframe();
-
- F[5]->set_fieldtype(*eft);
- F[6]->set_fieldtype(*ift);
-
- F[7]->set_fieldtype(*mft);
- F[7]->set_maximum_growth(20); // max. 20 characters
- F[7]->options_off(O_STATIC); // make field dynamic
-
- F[8]->set_maximum_growth(10); // max. 10 lines
- F[8]->options_off(O_STATIC); // make field dynamic
- }
-
- TestForm& operator=(const TestForm& rhs)
- {
- if (this != &rhs) {
- *this = rhs;
- }
- return *this;
- }
-
- TestForm(const TestForm& rhs)
- : NCursesForm(rhs), F(0), mft(0), ift(0), eft(0)
- {
- }
-
- ~TestForm() {
- delete mft;
- delete ift;
- delete eft;
- }
-};
-
-const char* TestForm::weekdays[] = {
- "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
- "Friday", "Saturday", NULL };
-//
-// -------------------------------------------------------------------------
-//
-class FormAction : public NCursesMenuItem
-{
-public:
- FormAction(const char *s) : NCursesMenuItem(s) {
- }
-
- bool action() {
- TestForm F;
- Soft_Label_Key_Set* S = new Soft_Label_Key_Set;
- for(int i=1; i <= S->labels(); i++) {
- char buf[8];
- assert(i < 100);
- ::sprintf(buf, "Frm%02d", i);
- (*S)[i] = buf; // Text
- (*S)[i] = Soft_Label_Key_Set::Soft_Label_Key::Left; // Justification
- }
- NCursesApplication::getApplication()->push(*S);
- F();
- NCursesApplication::getApplication()->pop();
- delete S;
- return FALSE;
- }
-};
-//
-// -------------------------------------------------------------------------
-//
-class PadAction : public NCursesMenuItem
-{
-public:
- PadAction(const char* s) : NCursesMenuItem(s) {
- }
-
- bool action() {
- const int GRIDSIZE = 3;
- const int PADSIZE = 200;
- unsigned gridcount = 0;
-
- NCursesPanel mystd;
- NCursesPanel P(mystd.lines()-2, mystd.cols()-2, 1, 1);
- NCursesFramedPad FP(P, PADSIZE, PADSIZE);
-
- for (int i=0; i < PADSIZE; i++) {
- for (int j=0; j < PADSIZE; j++) {
- if (i % GRIDSIZE == 0 && j % GRIDSIZE == 0) {
- if (i==0 || j==0)
- FP.addch('+');
- else
- FP.addch(static_cast<chtype>('A' + (gridcount++ % 26)));
- }
- else if (i % GRIDSIZE == 0)
- FP.addch('-');
- else if (j % GRIDSIZE == 0)
- FP.addch('|');
- else
- FP.addch(' ');
- }
- }
-
- P.label("Pad Demo", NULL);
- FP();
- P.clear();
- return FALSE;
- }
-};
-
-//
-// -------------------------------------------------------------------------
-//
-class PassiveItem : public NCursesMenuItem
-{
-public:
- PassiveItem(const char* text) : NCursesMenuItem(text) {
- options_off(O_SELECTABLE);
- }
-};
-
-//
-// -------------------------------------------------------------------------
-//
-class ScanAction : public NCursesMenuItem
-{
-public:
- ScanAction(const char* s) : NCursesMenuItem(s) {
- }
-
- bool action() {
- NCursesPanel *mystd = new NCursesPanel();
-
- NCursesPanel *w = new NCursesPanel(mystd->lines() - 2, mystd->cols() - 2, 1, 1);
- w->box();
- w->refresh();
-
- NCursesPanel *s = new NCursesPanel(w->lines() - 6, w->cols() - 6, 3, 3);
- s->scrollok(TRUE);
- ::echo();
-
- s->printw("Enter decimal integers. The running total will be shown\n");
- int nvalue = -1;
- int result = 0;
- while (nvalue != 0) {
- nvalue = 0;
- s->scanw("%d", &nvalue);
- if (nvalue != 0) {
- s->printw("%d: ", result += nvalue);
- }
- s->refresh();
- }
- s->printw("\nPress any key to continue...");
- s->getch();
-
- delete s;
- delete w;
- delete mystd;
- ::noecho();
- return FALSE;
- }
-};
-
-//
-// -------------------------------------------------------------------------
-//
-class MyMenu : public NCursesMenu
-{
-private:
- NCursesPanel* P;
- NCursesMenuItem** I;
- UserData *u;
- #define n_items 7
-
-public:
- MyMenu ()
- : NCursesMenu (n_items+2, 8, (lines()-10)/2, (cols()-10)/2),
- P(0), I(0), u(0)
- {
- u = new UserData(1);
- I = new NCursesMenuItem*[1+n_items];
- I[0] = new PassiveItem("One");
- I[1] = new PassiveItem("Two");
- I[2] = new MyAction<UserData> ("Silly", u);
- I[3] = new FormAction("Form");
- I[4] = new PadAction("Pad");
- I[5] = new ScanAction("Scan");
- I[6] = new QuitItem();
- I[7] = new NCursesMenuItem(); // Terminating empty item
-
- InitMenu(I, TRUE, TRUE);
-
- P = new NCursesPanel(1, n_items, LINES-1, 1);
- boldframe("Demo", "Silly");
- P->show();
- }
-
- MyMenu& operator=(const MyMenu& rhs)
- {
- if (this != &rhs) {
- *this = rhs;
- }
- return *this;
- }
-
- MyMenu(const MyMenu& rhs)
- : NCursesMenu(rhs), P(0), I(0), u(0)
- {
- }
-
- ~MyMenu()
- {
- P->hide();
- delete P;
- delete u;
- }
-
- virtual void On_Menu_Init()
- {
- NCursesWindow W(::stdscr);
- P->move(0, 0);
- P->clrtoeol();
- for(int i=1; i<=count(); i++)
- P->addch('0' + i);
- P->bkgd(W.getbkgd());
- refresh();
- }
-
- virtual void On_Menu_Termination()
- {
- P->move(0, 0);
- P->clrtoeol();
- refresh();
- }
-
- virtual void On_Item_Init(NCursesMenuItem& item)
- {
- P->move(0, item.index());
- P->attron(A_REVERSE);
- P->printw("%1d", 1+item.index());
- P->attroff(A_REVERSE);
- refresh();
- }
-
- virtual void On_Item_Termination(NCursesMenuItem& item)
- {
- P->move(0, item.index());
- P->attroff(A_REVERSE);
- P->printw("%1d", 1+item.index());
- refresh();
- }
-};
-//
-// -------------------------------------------------------------------------
-//
-class TestApplication : public NCursesApplication
-{
-protected:
- int titlesize() const { return 1; }
- void title();
- Soft_Label_Key_Set::Label_Layout useSLKs() const {
- return Soft_Label_Key_Set::PC_Style_With_Index;
- }
- void init_labels(Soft_Label_Key_Set& S) const;
-
-public:
- TestApplication() : NCursesApplication(TRUE) {
- }
-
- int run();
-};
-
-void TestApplication::init_labels(Soft_Label_Key_Set& S) const
-{
- for(int i=1; i <= S.labels(); i++) {
- char buf[8];
- assert(i < 100);
- ::sprintf(buf, "Key%02d", i);
- S[i] = buf; // Text
- S[i] = Soft_Label_Key_Set::Soft_Label_Key::Left; // Justification
- }
-}
-
-void TestApplication::title()
-{
- const char * const titleText = "Simple C++ Binding Demo";
- const int len = ::strlen(titleText);
-
- titleWindow->bkgd(screen_titles());
- titleWindow->addstr(0, (titleWindow->cols() - len)/2, titleText);
- titleWindow->noutrefresh();
-}
-
-
-int TestApplication::run()
-{
- MyMenu M;
- M();
- return 0;
-}
-
-//
-// -------------------------------------------------------------------------
-//
-static TestApplication *Demo = new TestApplication();