home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC5.DMS / in.adf / EO-Demos.lha / EasyObjects-Demos / Auswahlfenster / Auswahlfenster.c < prev   
Encoding:
C/C++ Source or Header  |  1995-02-12  |  6.2 KB  |  279 lines

  1.  
  2. #include <classes/layouter/windows.h>
  3. #include <classes/layouter/boopsigadgets.h>
  4. #include <classes/layouter/decorgadgets.h>
  5. #include <classes/exec/libraries.h>
  6. #pragma header
  7.  
  8. class SelectWindowCloseC : public WindowCloseHandlerC {
  9. public:
  10.     SelectWindowCloseC(class SelectWindowC &);
  11.     VOID close();
  12. private:
  13.     class SelectWindowC &select;
  14. };
  15.  
  16. class SelectListEventC : public GadgetEventC {
  17. public:
  18.     SelectListEventC() : GadgetEventC(), _exit(FALSE) { };
  19.     VOID up(WindowC *w, GadgetC *, IntuiMessageC * );
  20.     VOID keyDown(WindowC *w, GadgetC *g, IntuiMessageC *m);
  21.     BOOL exit() { return _exit; };
  22. protected:
  23.     BOOL _exit;
  24. };
  25.  
  26. class SelectOkEventC : public GadgetEventC {
  27. public:
  28.     SelectOkEventC() : GadgetEventC(), _exit(FALSE) { };
  29.     VOID up(WindowC *, GadgetC *, IntuiMessageC * );
  30.     BOOL exit() { return _exit; };
  31. protected:
  32.     BOOL _exit;
  33. };
  34.  
  35. class SelectCancelEventC : public GadgetEventC {
  36. public:
  37.     SelectCancelEventC() : GadgetEventC(), _exit(FALSE) { };
  38.     VOID up(WindowC *, GadgetC *, IntuiMessageC * );
  39.     BOOL exit() { return _exit; };
  40. protected:
  41.     BOOL _exit;
  42. };
  43.  
  44. class SelectWindowC : public StandardWindowC {
  45. public:
  46.     SelectWindowC(GTIDCMPortC &, ScreenC &);
  47.     ~SelectWindowC();
  48.     VOID setList(EListC *);
  49.     ENodeC *selected();
  50.     virtual BOOL select();
  51.     virtual BOOL ok();
  52.     virtual BOOL cancel();
  53.     virtual VOID update();
  54.     ENodeC *selectModal(SignalsC &, EListC *, WindowListC *);
  55. protected:
  56.     EListC *eList;
  57. private:
  58.     PatterniC framepattern;
  59.     LBBevelboxC frame;
  60.     LBBevelboxC clear;
  61.     SelectListEventC listEvent;
  62.     LBListviewC listview;
  63.     TransparentGroupLayoutC buttons;
  64.     SelectOkEventC okEvent;
  65.     SelectCancelEventC cancelEvent;
  66.     LBIButtonC okButton, cancelButton;
  67.     GeometryGroupC frameG;
  68.     GeometryGroupC clearG;
  69.     GeometryC listviewG;
  70.     GeometryGroupC buttonsG;
  71.     GeometryC okG, cancelG;
  72.     SelectWindowCloseC wch;
  73.     GadgetKeyHandlerC keys;
  74. };
  75.  
  76. SelectWindowC::SelectWindowC(GTIDCMPortC &p, ScreenC &s)
  77.     : StandardWindowC(p,s,&okButton,
  78.         WA_SizeBBottom,TRUE,
  79.         WA_SizeBRight,FALSE,
  80.         TAG_END),
  81.       framepattern(
  82.        PIA_Standard,1,
  83.        IA_FGPen,SHINEPEN,
  84.        IA_BGPen,BACKGROUNDPEN,
  85.        TAG_END),
  86.       frame(*this,NULL,&framepattern,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
  87.        BBA_Frame,FALSE,
  88.        TAG_END),
  89.       clear(*this,NULL,NULL,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
  90.        BBA_Frame,TRUE,
  91.        IA_FrameType,FRAME_DEFAULT,
  92.        IA_Recessed,TRUE,
  93.        IA_EdgesOnly,FALSE,
  94.        TAG_END),
  95.       listEvent(),
  96.       listview(&listEvent,*this,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
  97.        GA_RelVerify,TRUE,
  98.        TAG_END),
  99.       buttons(),
  100.       okEvent(),
  101.       cancelEvent(),
  102.       okButton(&okEvent,*this,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
  103.        GA_Text,"_OK",
  104.        GA_RelVerify,TRUE,
  105.        TAG_END),
  106.       cancelButton(&cancelEvent,*this,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
  107.        GA_Text,"_Abbrechen",
  108.        GA_RelVerify,TRUE,
  109.        TAG_END),
  110.       frameG(frame,
  111.        LAYOUT_GROUP,NULL,0,LAYOUT_GROUP,NULL,0,
  112.        LAYOUT_GROUP,NULL,0,LAYOUT_GROUP,NULL,0),
  113.       clearG(clear,
  114.        LAYOUT_GROUP,NULL,0,LAYOUT_GROUP,NULL,0,
  115.        LAYOUT_GROUP,NULL,0,LAYOUT_GROUP,NULL,0),
  116.       listviewG(listview,
  117.        LAYOUT_GROUP,NULL,0,LAYOUT_OPPBORDER,&buttonsG,-2,
  118.        LAYOUT_GROUP,NULL,0,LAYOUT_GROUP,NULL,0),
  119.       buttonsG(buttons,
  120.        LAYOUT_SIZE,NULL,0,LAYOUT_GROUP,NULL,0,
  121.        LAYOUT_GROUP,NULL,0,LAYOUT_GROUP,NULL,0),
  122.       okG(okButton,
  123.        LAYOUT_SIZE,NULL,0,LAYOUT_GROUP,NULL,0,
  124.        LAYOUT_PROCENTCENTER,NULL,20,LAYOUT_MAXSIZE,NULL,0),
  125.       cancelG(cancelButton,
  126.        LAYOUT_SIZE,NULL,0,LAYOUT_GROUP,NULL,0,
  127.        LAYOUT_PROCENTCENTER,&okG,80,LAYOUT_MAXSIZE,NULL,0),
  128.       wch(*this),
  129.       keys(*this)
  130. {
  131.     titlegadgets.add(frame);
  132.     titlegadgets.add(clear);
  133.     gadgets.add(listview);
  134.     gadgets.add(okButton);
  135.     gadgets.add(cancelButton);
  136.     innerGeo.add(frameG);
  137.     frameG.add(clearG);
  138.     clearG.add(listviewG);
  139.     clearG.add(buttonsG);
  140.     buttonsG.add(okG);
  141.     buttonsG.add(cancelG);
  142.     okButton.disable(TRUE);
  143.     keys.add("-rcommand -shift -upstroke a",cancelButton);
  144. }
  145.  
  146. SelectWindowC::~SelectWindowC()
  147. {
  148.     close();
  149. }
  150.  
  151. VOID SelectWindowC::setList(EListC *l)
  152. {
  153.     eList = l;
  154. }
  155.  
  156. ENodeC *SelectWindowC::selected()
  157. {
  158.     ULONG i = listview.selected();
  159.     if (i == ~0 || eList == NULL)
  160.         return NULL;
  161.     return eList->find(i);
  162. }
  163.  
  164. BOOL SelectWindowC::select()
  165. {
  166.     okButton.disable(listview.selected() == ~0);
  167.     return FALSE;
  168. }
  169.  
  170. BOOL SelectWindowC::ok()
  171. {
  172.     close();
  173.     return TRUE;
  174. }
  175.  
  176. BOOL SelectWindowC::cancel()
  177. {
  178.     close();
  179.     return TRUE;
  180. }
  181.  
  182. VOID SelectWindowC::update()
  183. {
  184.     listview.setList(eList);
  185. }
  186.  
  187. ENodeC *SelectWindowC::selectModal(SignalsC &sc, EListC *l, WindowListC *wl)
  188. {
  189.     setList(l);
  190.     update();
  191.     open();
  192.     if (wl)
  193.     {
  194.         wl->setBusy(TRUE,this);
  195.     };
  196.     sc.loop();
  197.     if (wl)
  198.     {
  199.         wl->setBusy(FALSE,this);
  200.     };
  201.     return selected();
  202. }
  203.  
  204. // *************************************************************
  205.  
  206. SelectWindowCloseC::SelectWindowCloseC(SelectWindowC &s)
  207.     : WindowCloseHandlerC(s),
  208.       select(s)
  209. {
  210. }
  211.  
  212. VOID SelectWindowCloseC::close()
  213. {
  214.     _exit = select.cancel();
  215. }
  216.  
  217. VOID SelectListEventC::up(WindowC *w, GadgetC *, IntuiMessageC * )
  218. {
  219.     _exit = ((SelectWindowC *) w)->select();
  220. }
  221.  
  222. VOID SelectListEventC::keyDown(WindowC *, GadgetC *g, IntuiMessageC *m)
  223. {
  224.     ((BListC *) g)->setAttrs(m->Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT) ? LSA_Prev : LSA_Next,0);
  225. };
  226.  
  227. VOID SelectOkEventC::up(WindowC *w, GadgetC *, IntuiMessageC * )
  228. {
  229.     _exit = ((SelectWindowC *) w)->ok();
  230. }
  231.  
  232. VOID SelectCancelEventC::up(WindowC *w, GadgetC *, IntuiMessageC * )
  233. {
  234.     _exit = ((SelectWindowC *) w)->cancel();
  235. }
  236.  
  237. LibraryBaseErrC GadToolsBase("gadtools.library",37);
  238. LibraryBaseErrC UtilityBase("utility.library",37);
  239. LibraryBaseErrC CxBase("commodities.library",37);
  240. LibraryBaseErrC LayersBase("layers.library",37);
  241. LibraryBaseErrC WorkbenchBase("workbench.library",37);
  242.  
  243. void  main()
  244. {
  245.     if (!LibraryBaseC::areAllOpen())
  246.         return;
  247.  
  248.     // diese Klasse empfängt und verarbeitet alle Signale
  249.     SignalsC sc;
  250.  
  251.     // öffentlichen Standardbildschirm sperren
  252.     PublicScreenC screen();
  253.     if (!screen.lock(NULL))
  254.         return;
  255.  
  256.     // der IDCMPort (in der GadTools Version) für die Fenster
  257.     GTIDCMPortC port;
  258.     sc.add(port);
  259.  
  260.     GadgetUpHandlerC uphandler();
  261.     port.add(uphandler);
  262.  
  263.     // Das Fenster
  264.     SelectWindowC window(port,screen);
  265.  
  266.     // noch einen Ctrl C HandlerC zur Sicherheit einhängen
  267.     CtrlCHandlerC ctrlchandler;
  268.     sc.add(ctrlchandler);
  269.  
  270.     ENodeC m1("1. Element"),m2("2. Element"),m3("3. Element");
  271.     EListC list;
  272.     list.addTail(m1);
  273.     list.addTail(m2);
  274.     list.addTail(m3);
  275.  
  276.     window.selectModal(sc,&list,NULL);
  277.  
  278. }
  279.