| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        ownerdrw.cpp
 
- // Purpose:     Owner-draw sample, for Windows
 
- // Author:      Vadim Zeitlin
 
- // Modified by:
 
- // Created:     13.11.97
 
- // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // ============================================================================
 
- // headers & declarations
 
- // ============================================================================
 
- // For compilers that support precompilation, includes "wx.h".
 
- #include "wx/wxprec.h"
 
- #ifdef __BORLANDC__
 
-     #pragma hdrstop
 
- #endif
 
- #ifndef WX_PRECOMP
 
-     #include "wx/wx.h"
 
- #endif
 
- #include  "wx/ownerdrw.h"
 
- #include  "wx/menuitem.h"
 
- #include  "wx/checklst.h"
 
- // Define a new application type
 
- class OwnerDrawnApp: public wxApp
 
- {
 
- public:
 
-     bool OnInit();
 
- };
 
- // Define a new frame type
 
- class OwnerDrawnFrame : public wxFrame
 
- {
 
- public:
 
-     // ctor & dtor
 
-     OwnerDrawnFrame(wxFrame *frame, const wxChar *title, int x, int y, int w, int h);
 
-     ~OwnerDrawnFrame(){};
 
-     // notifications
 
-     void OnQuit             (wxCommandEvent& event);
 
-     void OnMenuToggle       (wxCommandEvent& event);
 
-     void OnAbout            (wxCommandEvent& event);
 
-     void OnListboxSelect    (wxCommandEvent& event);
 
-     void OnCheckboxToggle   (wxCommandEvent& event);
 
-     void OnListboxDblClick  (wxCommandEvent& event);
 
-     bool OnClose            ()                        { return true; }
 
-     wxDECLARE_EVENT_TABLE();
 
- private:
 
-     void InitMenu();
 
-     wxCheckListBox *m_pListBox;
 
-     wxMenuItem *pAboutItem;
 
- };
 
- enum
 
- {
 
-     Menu_Quit = 1,
 
-     Menu_First = 100,
 
-     Menu_Test1, Menu_Test2, Menu_Test3,
 
-     Menu_Bitmap, Menu_Bitmap2,
 
-     Menu_Submenu, Menu_Sub1, Menu_Sub2, Menu_Sub3,
 
-     Menu_Toggle, Menu_About,
 
-     Menu_Drawn1, Menu_Drawn2, Menu_Drawn3, Menu_Drawn4, Menu_Drawn5,
 
-     Menu_Native1, Menu_Native2, Menu_Native3, Menu_Native4, Menu_Native5,
 
-     Control_First = 1000,
 
-     Control_Listbox, Control_Listbox2
 
- };
 
- wxBEGIN_EVENT_TABLE(OwnerDrawnFrame, wxFrame)
 
-     EVT_MENU(Menu_Toggle, OwnerDrawnFrame::OnMenuToggle)
 
-     EVT_MENU(Menu_About, OwnerDrawnFrame::OnAbout)
 
-     EVT_MENU(Menu_Quit, OwnerDrawnFrame::OnQuit)
 
-     EVT_LISTBOX(Control_Listbox, OwnerDrawnFrame::OnListboxSelect)
 
-     EVT_CHECKLISTBOX(Control_Listbox, OwnerDrawnFrame::OnCheckboxToggle)
 
-     EVT_COMMAND(Control_Listbox, wxEVT_LISTBOX_DCLICK,
 
-                 OwnerDrawnFrame::OnListboxDblClick)
 
- wxEND_EVENT_TABLE()
 
- IMPLEMENT_APP(OwnerDrawnApp)
 
- // init our app: create windows
 
- bool OwnerDrawnApp::OnInit(void)
 
- {
 
-     if ( !wxApp::OnInit() )
 
-         return false;
 
-     OwnerDrawnFrame *pFrame
 
-         = new OwnerDrawnFrame(NULL, wxT("wxWidgets Ownerdraw Sample"),
 
-                               50, 50, 450, 340);
 
-     return true;
 
- }
 
- // create the menu bar for the main frame
 
- void OwnerDrawnFrame::InitMenu()
 
- {
 
-     // Make a menubar
 
-     wxMenuItem *pItem;
 
-     wxMenu *file_menu = new wxMenu;
 
- #ifndef __WXUNIVERSAL__
 
-     wxMenu *sub_menu  = new wxMenu;
 
-     // vars used for menu construction
 
-     wxFont fontLarge(18, wxROMAN, wxNORMAL, wxBOLD, false),
 
-            fontUlined(12, wxDEFAULT, wxNORMAL, wxNORMAL, true),
 
-            fontItalic(12, wxMODERN, wxITALIC, wxBOLD, false),
 
-            // should be at least of the size of bitmaps
 
-            fontBmp(14, wxDEFAULT, wxNORMAL, wxNORMAL, false);
 
-     // sorry for my artistic skills...
 
-     wxBitmap bmpBell(wxT("bell")),
 
-              bmpSound(wxT("sound")),
 
-              bmpNoSound(wxT("nosound")),
 
-              bmpInfo(wxT("info")),
 
-              bmpInfo_mono(wxT("info_mono"));
 
-     // construct submenu
 
-     pItem = new wxMenuItem(sub_menu, Menu_Sub1, wxT("Submenu &first"), wxT("large"));
 
-     pItem->SetFont(fontLarge);
 
-     sub_menu->Append(pItem);
 
-     pItem = new wxMenuItem(sub_menu, Menu_Sub2, wxT("Submenu &second"), wxT("italic"),
 
-                            wxITEM_CHECK);
 
-     pItem->SetFont(fontItalic);
 
-     sub_menu->Append(pItem);
 
-     pItem = new wxMenuItem(sub_menu, Menu_Sub3, wxT("Submenu &third"), wxT("underlined"),
 
-                            wxITEM_CHECK);
 
-     pItem->SetFont(fontUlined);
 
-     sub_menu->Append(pItem);
 
-     // construct menu
 
-     pItem = new wxMenuItem(file_menu, Menu_Test1, wxT("&Uncheckable"), wxT("red item"));
 
-     pItem->SetFont(*wxITALIC_FONT);
 
-     pItem->SetTextColour(wxColor(255, 0, 0));
 
-     file_menu->Append(pItem);
 
-     pItem = new wxMenuItem(file_menu, Menu_Test2, wxT("&Checkable"),
 
-                            wxT("checkable item"), wxITEM_CHECK);
 
-     pItem->SetFont(*wxSMALL_FONT);
 
-     file_menu->Append(pItem);
 
-     file_menu->Check(Menu_Test2, true);
 
-     pItem = new wxMenuItem(file_menu, Menu_Test3, wxT("&Disabled"), wxT("disabled item"));
 
-     pItem->SetFont(*wxNORMAL_FONT);
 
-     file_menu->Append(pItem);
 
-     file_menu->Enable(Menu_Test3, false);
 
-     file_menu->AppendSeparator();
 
-     pItem = new wxMenuItem(file_menu, Menu_Bitmap, wxT("&Bell"),
 
-                            wxT("check/uncheck me!"), wxITEM_CHECK);
 
-     pItem->SetFont(fontBmp);
 
-     pItem->SetBitmaps(bmpBell);
 
-     file_menu->Append(pItem);
 
-     pItem = new wxMenuItem(file_menu, Menu_Bitmap2, wxT("So&und"),
 
-                            wxT("icon changes!"), wxITEM_CHECK);
 
-     pItem->SetFont(fontBmp);
 
-     pItem->SetBitmaps(bmpSound, bmpNoSound);
 
-     file_menu->Append(pItem);
 
-     file_menu->AppendSeparator();
 
-     pItem = new wxMenuItem(file_menu, Menu_Submenu, wxT("&Sub menu"), wxT(""),
 
-                            wxITEM_CHECK, sub_menu);
 
-     pItem->SetFont(*wxSWISS_FONT);
 
-     file_menu->Append(pItem);
 
-     file_menu->AppendSeparator();
 
-     pItem = new wxMenuItem(file_menu, Menu_Toggle, wxT("&Disable/Enable\tCtrl+D"),
 
-                           wxT("enables/disables the About-Item"), wxITEM_NORMAL);
 
-     pItem->SetFont(*wxNORMAL_FONT);
 
-     file_menu->Append(pItem);
 
-     // Of course Ctrl+RatherLongAccel will not work in this example:
 
-     pAboutItem = new wxMenuItem(file_menu, Menu_About, wxT("&About\tCtrl+RatherLongAccel"),
 
-                                 wxT("display program information"), wxITEM_NORMAL);
 
-     pAboutItem->SetBitmap(bmpInfo);
 
-     pAboutItem->SetDisabledBitmap(bmpInfo_mono);
 
-     file_menu->Append(pAboutItem);
 
-     file_menu->AppendSeparator();
 
- #endif
 
-     pItem = new wxMenuItem(file_menu, Menu_Quit, wxT("&Quit"), wxT("Normal item"),
 
-                            wxITEM_NORMAL);
 
-     file_menu->Append(pItem);
 
-     wxMenu* drawn_menu = new wxMenu;
 
-     pItem = new wxMenuItem(drawn_menu, Menu_Drawn1, wxT("&Menu item\tCtrl+K"));
 
-     drawn_menu->Append(pItem);
 
-     drawn_menu->AppendSeparator();
 
-     pItem = new wxMenuItem(drawn_menu, Menu_Drawn2, wxT("&Checked item"),
 
-         wxT("check/uncheck me!"), wxITEM_CHECK);
 
-     drawn_menu->Append(pItem);
 
-     drawn_menu->Check(Menu_Drawn2, true);
 
-     pItem = new wxMenuItem(drawn_menu, Menu_Drawn3, wxT("&Radio item"),
 
-         wxT("check/uncheck me!"), wxITEM_RADIO);
 
-     drawn_menu->Append(pItem);
 
-     drawn_menu->AppendSeparator();
 
-     pItem = new wxMenuItem(drawn_menu, Menu_Drawn4, wxT("&Disabled item\tCtrl+RatherLongAccel"),
 
-         wxT("disabled item"));
 
-     pItem->Enable(false);
 
-     drawn_menu->Append(pItem);
 
-     pItem = new wxMenuItem(drawn_menu, Menu_Drawn5, wxT("&Other\tCtrl+O"), wxT("other item"));
 
-     pItem->SetTextColour(*wxRED);
 
-     drawn_menu->Append(pItem);
 
-     wxMenu* native_menu = new wxMenu;
 
-     pItem = new wxMenuItem(native_menu, Menu_Native1, wxT("&Menu item\tCtrl+K"));
 
-     native_menu->Append(pItem);
 
-     native_menu->AppendSeparator();
 
-     pItem = new wxMenuItem(native_menu, Menu_Native2, wxT("&Checked item"),
 
-         wxT("check/uncheck me!"), wxITEM_CHECK);
 
-     native_menu->Append(pItem);
 
-     native_menu->Check(Menu_Native2, true);
 
-     pItem = new wxMenuItem(native_menu, Menu_Native3, wxT("&Radio item"),
 
-         wxT("check/uncheck me!"), wxITEM_RADIO);
 
-     native_menu->Append(pItem);
 
-     native_menu->AppendSeparator();
 
-     pItem = new wxMenuItem(native_menu, Menu_Native4, wxT("&Disabled item\tCtrl+RatherLongAccel"),
 
-         wxT("disabled item"));
 
-     pItem->Enable(false);
 
-     native_menu->Append(pItem);
 
-     pItem = new wxMenuItem(native_menu, Menu_Native5, wxT("&Other\tCtrl+O"), wxT("other item"));
 
-     native_menu->Append(pItem);
 
-     wxMenuBar *menu_bar = new wxMenuBar;
 
-     menu_bar->Append(file_menu, wxT("&File"));
 
-     menu_bar->Append(drawn_menu, wxT("&Drawn"));
 
-     menu_bar->Append(native_menu, wxT("&Native"));
 
-     SetMenuBar(menu_bar);
 
- }
 
- // main frame constructor
 
- OwnerDrawnFrame::OwnerDrawnFrame(wxFrame *frame, const wxChar *title,
 
-                                  int x, int y, int w, int h)
 
-          : wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
 
- {
 
-     // set the icon
 
-     SetIcon(wxICON(sample));
 
-     // create the menu
 
-     InitMenu();
 
- #if wxUSE_STATUSBAR
 
-     // create the status line
 
-     const int widths[] = { -1, 60 };
 
-     CreateStatusBar(2);
 
-     SetStatusWidths(2, widths);
 
-     SetStatusText(wxT("no selection"), 0);
 
- #endif // wxUSE_STATUSBAR
 
-     // make a panel with some controls
 
-     wxPanel *pPanel = new wxPanel(this);
 
-     // check list box
 
-     static const wxChar* aszChoices[] = { wxT("Hello"), wxT("world"), wxT("and"),
 
-                                           wxT("goodbye"), wxT("cruel"), wxT("world"),
 
-                                           wxT("-------"), wxT("owner-drawn"), wxT("listbox") };
 
-     wxString *astrChoices = new wxString[WXSIZEOF(aszChoices)];
 
-     unsigned int ui;
 
-     for ( ui = 0; ui < WXSIZEOF(aszChoices); ui++ )
 
-         astrChoices[ui] = aszChoices[ui];
 
-     m_pListBox = new wxCheckListBox
 
-         (
 
-             pPanel,             // parent
 
-             Control_Listbox,    // control id
 
-             wxPoint(10, 10),    // listbox position
 
-             wxSize(200, 200),   // listbox size
 
-             WXSIZEOF(aszChoices), // number of strings
 
-             astrChoices         // array of strings
 
-         );
 
-     delete [] astrChoices;
 
-     for ( ui = 0; ui < WXSIZEOF(aszChoices); ui += 2 )
 
-     {
 
- #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
 
-         m_pListBox->GetItem(ui)->SetBackgroundColour(wxColor(200, 200, 200));
 
- #endif
 
-     }
 
-     m_pListBox->Check(2);
 
-     // normal (but owner-drawn) listbox
 
-     static const wxChar* aszColors[] = { wxT("Red"), wxT("Blue"), wxT("Pink"),
 
-                                          wxT("Green"), wxT("Yellow"),
 
-                                          wxT("Black"), wxT("Violet")  };
 
-     astrChoices = new wxString[WXSIZEOF(aszColors)];
 
-     for ( ui = 0; ui < WXSIZEOF(aszColors); ui++ )
 
-     {
 
-         astrChoices[ui] = aszColors[ui];
 
-     }
 
-     wxListBox *pListBox = new wxListBox
 
-         (
 
-             pPanel,              // parent
 
-             Control_Listbox2,    // control id
 
-             wxPoint(220, 10),    // listbox position
 
-             wxSize(200, 200),    // listbox size
 
-             WXSIZEOF(aszColors), // number of strings
 
-             astrChoices,         // array of strings
 
-             wxLB_OWNERDRAW       // owner-drawn
 
-         );
 
- #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
 
-     struct { unsigned char r, g, b; } aColors[] =
 
-         {
 
-             {255,0,0}, {0,0,255}, {255,128,192},
 
-             {0,255,0}, {255,255,128},
 
-             {0,0,0}, {128,0,255}
 
-         };
 
-     for ( ui = 0; ui < WXSIZEOF(aszColors); ui++ )
 
-     {
 
-         pListBox->GetItem(ui)->SetTextColour(wxColor(aColors[ui].r,
 
-                                                      aColors[ui].g,
 
-                                                      aColors[ui].b));
 
-         // yellow on white is horrible...
 
-         if ( ui == 4 )
 
-         {
 
-             pListBox->GetItem(ui)->SetBackgroundColour(wxColor(0, 0, 0));
 
-         }
 
-     }
 
- #else
 
-     wxUnusedVar( pListBox );
 
- #endif
 
-     delete[] astrChoices;
 
-     Show(true);
 
- }
 
- void OwnerDrawnFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     Close(true);
 
- }
 
- void OwnerDrawnFrame::OnMenuToggle(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     // This example shows the use of bitmaps in ownerdrawn menuitems and is not a good
 
-     // example on how to enable and disable menuitems - this should be done with the help of
 
-     // EVT_UPDATE_UI and EVT_UPDATE_UI_RANGE !
 
-     pAboutItem->Enable( pAboutItem->IsEnabled() ? false : true );
 
- }
 
- void OwnerDrawnFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     wxMessageDialog dialog(this,
 
-                            wxT("Demo of owner-drawn controls\n"),
 
-                            wxT("About wxOwnerDrawn"), wxYES_NO | wxCANCEL);
 
-     dialog.ShowModal();
 
- }
 
- void OwnerDrawnFrame::OnListboxSelect(wxCommandEvent& event)
 
- {
 
- #if wxUSE_STATUSBAR
 
-     wxString strSelection;
 
-     unsigned int nSel = event.GetSelection();
 
-     strSelection.Printf(wxT("item %d selected (%schecked)"), nSel,
 
-                         m_pListBox->IsChecked(nSel) ? wxT("") : wxT("not "));
 
-     SetStatusText(strSelection);
 
- #else
 
-     wxUnusedVar(event);
 
- #endif // wxUSE_STATUSBAR
 
- }
 
- void OwnerDrawnFrame::OnListboxDblClick(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     wxString strSelection;
 
-     strSelection.Printf(wxT("item %d double clicked"),
 
-                         m_pListBox->GetSelection());
 
-     wxMessageDialog dialog(this, strSelection);
 
-     dialog.ShowModal();
 
- }
 
- void OwnerDrawnFrame::OnCheckboxToggle(wxCommandEvent& event)
 
- {
 
- #if wxUSE_STATUSBAR
 
-     wxString strSelection;
 
-     unsigned int nItem = event.GetInt();
 
-     strSelection.Printf(wxT("item %d was %schecked"), nItem,
 
-                         m_pListBox->IsChecked(nItem) ? wxT("") : wxT("un"));
 
-     SetStatusText(strSelection);
 
- #else
 
-     wxUnusedVar(event);
 
- #endif // wxUSE_STATUSBAR
 
- }
 
 
  |