home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / widgets.cpp < prev    next >
C/C++ Source or Header  |  1994-05-26  |  6KB  |  234 lines

  1. #include <stdio.h>
  2. #include <owl\applicat.h>
  3. #include <owl\button.h>
  4. #include <owl\checkbox.h>
  5. #include <owl\framewin.h>
  6. #include <owl\groupbox.h>
  7. #include <owl\radiobut.h>
  8. #include <owl\window.h>
  9. #include <owl\window.rh>
  10.  
  11. #include "widgets.h"
  12.  
  13. class TMyGroup : public TGroupBox
  14. {
  15. public:
  16.    TMyGroup(TWindow        *parent,
  17.             int            id,
  18.             const char far *text,
  19.             int X, int Y, int W, int H,
  20.             TModule        *module = 0 )
  21.       : TGroupBox(parent, id, text, X, Y, W, H, module), cur(-1)
  22.       { }
  23.  
  24.    LPCSTR GetCurCheck();
  25.  
  26.    virtual void SelectionChanged(int controlId)
  27.       { TGroupBox::SelectionChanged(cur = controlId); }
  28.    
  29. private:
  30.    int cur;
  31. };
  32.  
  33. LPCSTR TMyGroup::GetCurCheck()
  34. {
  35.    TWindow *w = Parent->ChildWithId(cur);
  36.    return w ? w->Title : NULL;
  37. }
  38.  
  39. class TWidgetWindow : public TWindow
  40. {
  41. public:
  42.    TWidgetWindow(TWindow *parent = 0);
  43.  
  44. protected:
  45.    virtual void SetupWindow();
  46.  
  47.    void EnableGroupA(BOOL enable);
  48.    void EnableGroupB(BOOL enable);
  49.    void EnableGroupC(BOOL enable);
  50.  
  51.    BOOL BuildStr( LPSTR str,
  52.                   LPCSTR name,
  53.                   TCheckBox *check,
  54.                   TMyGroup *group );
  55.  
  56.    void CmDone();
  57.    void CmCancel();
  58.    void CmTypeA();
  59.    void CmTypeB();
  60.    void CmTypeC();
  61.  
  62. private:
  63.    TCheckBox      *TypeA, *TypeB, *TypeC;
  64.    TMyGroup       *GroupA, *GroupB, *GroupC;
  65.    TRadioButton   *Etched, *Polished,
  66.                   *WoodGrain, *Varnished, *Engraved,
  67.                   *Mediocre, *Deluxe;
  68.  
  69.    DECLARE_RESPONSE_TABLE(TWidgetWindow);
  70. };
  71. DEFINE_RESPONSE_TABLE1(TWidgetWindow, TWindow)
  72.    EV_BN_CLICKED(IDOK, CmDone),
  73.    EV_BN_CLICKED(IDCANCEL, CmCancel),
  74.    EV_BN_CLICKED(IDC_TYPEA, CmTypeA),
  75.    EV_BN_CLICKED(IDC_TYPEB, CmTypeB),
  76.    EV_BN_CLICKED(IDC_TYPEC, CmTypeC),
  77. END_RESPONSE_TABLE;
  78.  
  79. TWidgetWindow::TWidgetWindow(TWindow *parent)
  80. {
  81.    Init(parent, 0, 0);
  82.  
  83.    new TButton(this, IDOK, "Done", 175, 350, 100, 30);
  84.    new TButton(this, IDCANCEL, "Cancel", 400, 350, 100, 30);
  85.  
  86.    TypeA = new TCheckBox(this, IDC_TYPEA, "Type A",
  87.                                     70, 40, 100, 20);
  88.    GroupA = new TMyGroup(this, IDG_TYPEA, NULL,
  89.                                     192, 15, 280, 75);
  90.    Etched = new TRadioButton(this, IDR_ETCHED, "Etched",
  91.                                     203, 42, 100, 20, GroupA);
  92.    Polished = new TRadioButton(this, IDR_POLISHED, "Polished",
  93.                                     332, 42, 100, 20, GroupA);
  94.  
  95.    TypeB = new TCheckBox(this, IDC_TYPEB, "Type B",
  96.                                     70, 153, 100, 20);
  97.    GroupB = new TMyGroup(this, IDG_TYPEB, NULL,
  98.                                     192, 123, 280, 75);
  99.    WoodGrain = new TRadioButton(this, IDR_WOODGRAIN, "Wood-Grain",
  100.                                     203, 138, 100, 20, GroupB);
  101.    Varnished = new TRadioButton(this, IDR_VARNISHED, "Varnished",
  102.                                     332, 138, 100, 20, GroupB);
  103.    Engraved = new TRadioButton(this, IDR_ENGRAVED, "Engraved",
  104.                                     203, 172, 100, 20, GroupB);
  105.  
  106.    TypeC = new TCheckBox(this, IDC_TYPEC, "Type C",
  107.                                     70, 272, 100, 20);
  108.    GroupC = new TMyGroup(this, IDG_TYPEC, NULL,
  109.                                     192, 247, 280, 75);
  110.    Mediocre = new TRadioButton(this, IDR_MEDIOCRE, "Mediocre",
  111.                                     203, 273, 100, 20, GroupC);
  112.    Deluxe = new TRadioButton(this, IDR_DELUXE, "Deluxe",
  113.                                     332, 273, 100, 20, GroupC);
  114. }
  115.  
  116. void TWidgetWindow::SetupWindow()
  117. {
  118.    TWindow::SetupWindow();    // Initialize the visual element
  119.  
  120.    EnableGroupA(FALSE);
  121.    EnableGroupB(FALSE);
  122.    EnableGroupC(FALSE);
  123. }
  124.  
  125. void TWidgetWindow::EnableGroupA(BOOL enable)
  126. {
  127.    if (Etched)
  128.       Etched->EnableWindow(enable);
  129.    if (Polished)
  130.       Polished->EnableWindow(enable);
  131. }
  132.  
  133. void TWidgetWindow::EnableGroupB(BOOL enable)
  134. {
  135.    if (WoodGrain)
  136.       WoodGrain->EnableWindow(enable);
  137.    if (Varnished)
  138.       Varnished->EnableWindow(enable);
  139.    if (Engraved)
  140.       Engraved->EnableWindow(enable);
  141. }
  142.  
  143. void TWidgetWindow::EnableGroupC(BOOL enable)
  144. {
  145.    if (Mediocre)
  146.       Mediocre->EnableWindow(enable);
  147.    if (Deluxe)
  148.       Deluxe->EnableWindow(enable);
  149. }
  150.  
  151. BOOL TWidgetWindow::BuildStr( LPSTR str,
  152.                               LPCSTR name,
  153.                               TCheckBox *check,
  154.                               TMyGroup *group )
  155. {
  156.    BOOL rslt = FALSE;
  157.    if (str && check && check->GetCheck())
  158.       {
  159.       rslt = TRUE;
  160.       LPCSTR groupname;
  161.  
  162.       str += lstrlen(str);    // point to end of str
  163.       sprintf(str, "\n   %s: ", name);
  164.       if (group && (NULL != (groupname = group->GetCurCheck())))
  165.          strcat(str, groupname);
  166.       }
  167.    return rslt;
  168. }
  169.  
  170.  
  171. void TWidgetWindow::CmDone()
  172. {
  173.    char           str[256] = "";
  174.    int            sels = 0;
  175.  
  176.    strcpy(str, "You have selected the following:");
  177.    sels += BuildStr(str, "Widget A", TypeA, GroupA);
  178.    sels += BuildStr(str, "Widget B", TypeB, GroupB);
  179.    sels += BuildStr(str, "Widget C", TypeC, GroupC);
  180.    if (!sels)
  181.       strcat(str, "\n   << No selections >>");
  182.    MessageBox(str, "Widget Selection", MB_OK);
  183.    SendMessage(WM_CLOSE);
  184. }
  185.  
  186. void TWidgetWindow::CmCancel()
  187. {
  188.    SendMessage(WM_CLOSE);
  189. }
  190.  
  191. void TWidgetWindow::CmTypeA()
  192. {
  193.    if (TypeA)
  194.       EnableGroupA(TypeA->GetCheck());
  195.    if (GroupA && !GroupA->GetCurCheck() && Etched)
  196.       Etched->Check();
  197. }
  198.  
  199. void TWidgetWindow::CmTypeB()
  200. {
  201.    if (TypeB)
  202.       EnableGroupB(TypeB->GetCheck());
  203.    if (GroupB && !GroupB->GetCurCheck() && WoodGrain)
  204.       WoodGrain->Check();
  205. }
  206.  
  207. void TWidgetWindow::CmTypeC()
  208. {
  209.    if (TypeC)
  210.       EnableGroupC(TypeC->GetCheck());
  211.    if (GroupC && !GroupC->GetCurCheck() && Mediocre)
  212.       Mediocre->Check();
  213. }
  214.  
  215.  
  216. class TWidgetApp : public TApplication
  217. {
  218. public:
  219.    TWidgetApp() : TApplication()
  220.       { nCmdShow = SW_SHOWMAXIMIZED; }
  221.  
  222.    void InitMainWindow()
  223.       {
  224.       SetMainWindow(new TFrameWindow(  0,
  225.                            "World-Wide Widget Weilders",
  226.                            new TWidgetWindow ));
  227.       }
  228. };
  229.  
  230. int OwlMain(int, char *[])
  231. {
  232.    return TWidgetApp().Run();
  233. }
  234.