From: Václav Slavík Date: Sat, 6 Apr 2002 14:55:16 +0000 (+0000) Subject: added resources browser to wxArtProvider sample (similar to the one from gtk-demo) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ccb42cc5c8fae331899b71a6ac1c2c039789ab24 added resources browser to wxArtProvider sample (similar to the one from gtk-demo) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14964 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/samples/artprov/Makefile.in b/samples/artprov/Makefile.in index e9370f49d3..e27c00833d 100644 --- a/samples/artprov/Makefile.in +++ b/samples/artprov/Makefile.in @@ -15,8 +15,8 @@ program_dir = samples/artprov PROGRAM=arttest -OBJECTS =$(PROGRAM).o -DEPFILES=$(PROGRAM).d +OBJECTS =$(PROGRAM).o artbrows.o +DEPFILES=$(PROGRAM).d artbrows.d include ../../src/makeprog.env diff --git a/samples/artprov/artbrows.cpp b/samples/artprov/artbrows.cpp new file mode 100644 index 0000000000..cbc1802c6a --- /dev/null +++ b/samples/artprov/artbrows.cpp @@ -0,0 +1,184 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: artbrows.cpp +// Purpose: wxArtProvider demo - art browser dialog +// Author: Vaclav Slavik +// Modified by: +// Created: 2002/04/05 +// RCS-ID: $Id$ +// Copyright: (c) Vaclav Slavik +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "artbrows.h" +#endif + +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP + #include "wx/wx.h" + #include "wx/listctrl.h" + #include "wx/choice.h" +#endif + +#include "wx/sizer.h" +#include "wx/imaglist.h" + +#include "artbrows.h" + +#define ART_CLIENT(id) \ + choice->Append(#id, (void*)id); +#define ART_ICON(id) \ + { \ + int ind; \ + wxIcon icon = wxArtProvider::GetIcon(id, client, size); \ + if ( icon.Ok() ) \ + ind = images->Add(icon); \ + else \ + ind = 0; \ + list->InsertItem(index, #id, ind); \ + list->SetItemData(index, (long)id); \ + index++; \ + } + +// ---------------------------------------------------------------------------- +// Functions to fill-in all supported art IDs +// ---------------------------------------------------------------------------- + +static void FillClients(wxChoice *choice) +{ + ART_CLIENT(wxART_OTHER) + ART_CLIENT(wxART_TOOLBAR) + ART_CLIENT(wxART_MENU) + ART_CLIENT(wxART_FRAME_ICON) + ART_CLIENT(wxART_CMN_DIALOG) + ART_CLIENT(wxART_HELP_BROWSER) + ART_CLIENT(wxART_MESSAGE_BOX) +} + +static void FillBitmaps(wxImageList *images, wxListCtrl *list, + int& index, + const wxArtClient& client, const wxSize& size) +{ + ART_ICON(wxART_ERROR) + ART_ICON(wxART_QUESTION) + ART_ICON(wxART_WARNING) + ART_ICON(wxART_INFORMATION) + ART_ICON(wxART_ADD_BOOKMARK) + ART_ICON(wxART_DEL_BOOKMARK) + ART_ICON(wxART_HELP_SIDE_PANEL) + ART_ICON(wxART_HELP_SETTINGS) + ART_ICON(wxART_HELP_BOOK) + ART_ICON(wxART_HELP_FOLDER) + ART_ICON(wxART_HELP_PAGE) + ART_ICON(wxART_GO_BACK) + ART_ICON(wxART_GO_FORWARD) + ART_ICON(wxART_GO_UP) + ART_ICON(wxART_GO_DOWN) + ART_ICON(wxART_GO_TO_PARENT) + ART_ICON(wxART_GO_HOME) + ART_ICON(wxART_FILE_OPEN) + ART_ICON(wxART_PRINT) + ART_ICON(wxART_HELP) + ART_ICON(wxART_TIP) + ART_ICON(wxART_REPORT_VIEW) + ART_ICON(wxART_LIST_VIEW) + ART_ICON(wxART_NEW_DIR) + ART_ICON(wxART_FOLDER) + ART_ICON(wxART_GO_DIR_UP) + ART_ICON(wxART_EXECUTABLE_FILE) + ART_ICON(wxART_NORMAL_FILE) + ART_ICON(wxART_TICK_MARK) + ART_ICON(wxART_CROSS_MARK) +} + + +// ---------------------------------------------------------------------------- +// Browser implementation +// ---------------------------------------------------------------------------- + +#include "null.xpm" + +BEGIN_EVENT_TABLE(wxArtBrowserDialog, wxDialog) + EVT_LIST_ITEM_SELECTED(-1, wxArtBrowserDialog::OnSelectItem) + EVT_CHOICE(-1, wxArtBrowserDialog::OnChooseClient) +END_EVENT_TABLE() + +wxArtBrowserDialog::wxArtBrowserDialog(wxWindow *parent) + : wxDialog(parent, -1, _T("Art resources browser"), + wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +{ + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + wxSizer *subsizer; + + wxChoice *choice = new wxChoice(this, -1); + FillClients(choice); + + subsizer = new wxBoxSizer(wxHORIZONTAL); + subsizer->Add(new wxStaticText(this, -1, _T("Client:")), 0, wxALIGN_CENTER_VERTICAL); + subsizer->Add(choice, 1, wxLEFT, 5); + sizer->Add(subsizer, 0, wxALL | wxEXPAND, 10); + + subsizer = new wxBoxSizer(wxHORIZONTAL); + + m_list = new wxListCtrl(this, -1, wxDefaultPosition, wxSize(250, 300), + wxLC_REPORT | wxSUNKEN_BORDER); + m_list->InsertColumn(0, _T("wxArtID")); + subsizer->Add(m_list, 1, wxEXPAND | wxRIGHT, 10); + + wxSizer *subsub = new wxBoxSizer(wxVERTICAL); + m_canvas = new wxStaticBitmap(this, -1, wxBitmap(null_xpm)); + subsub->Add(m_canvas); + subsub->Add(100, 100); + subsizer->Add(subsub); + + sizer->Add(subsizer, 1, wxEXPAND | wxLEFT|wxRIGHT, 10); + + wxButton *ok = new wxButton(this, wxID_OK, _T("Close")); + ok->SetDefault(); + sizer->Add(ok, 0, wxALIGN_RIGHT | wxALL, 10); + + SetSizer(sizer); + SetAutoLayout(TRUE); + sizer->Fit(this); + + choice->SetSelection(6/*wxART_MESSAGE_BOX*/); + SetArtClient(wxART_MESSAGE_BOX); +} + + +void wxArtBrowserDialog::SetArtClient(const wxArtClient& client) +{ + wxBusyCursor bcur; + + wxImageList *img = new wxImageList(16, 16); + img->Add(wxIcon(null_xpm)); + int index = 0; + + m_list->DeleteAllItems(); + FillBitmaps(img, m_list, index, client, wxSize(16, 16)); + m_list->AssignImageList(img, wxIMAGE_LIST_SMALL); + m_list->SetColumnWidth(0, wxLIST_AUTOSIZE); + + m_client = client; +} + +void wxArtBrowserDialog::OnSelectItem(wxListEvent &event) +{ + const wxChar *data = (const wxChar*)event.GetData(); + wxBitmap bmp = wxArtProvider::GetBitmap(data, m_client); + m_canvas->SetBitmap(bmp); + m_canvas->SetSize(bmp.GetWidth(), bmp.GetHeight()); +} + +void wxArtBrowserDialog::OnChooseClient(wxCommandEvent &event) +{ + const wxChar *data = (const wxChar*)event.GetClientData(); + SetArtClient(data); +} diff --git a/samples/artprov/artbrows.h b/samples/artprov/artbrows.h new file mode 100644 index 0000000000..2494a6ea34 --- /dev/null +++ b/samples/artprov/artbrows.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: artbrows.h +// Purpose: wxArtProvider demo - art browser dialog +// Author: Vaclav Slavik +// Modified by: +// Created: 2002/04/05 +// RCS-ID: $Id$ +// Copyright: (c) Vaclav Slavik +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifndef __ARTBROWS_H__ +#define __ARTBROWS_H__ + +#ifdef __GNUG__ +#pragma interface "artbrows.h" +#endif + +#include "wx/dialog.h" +#include "wx/artprov.h" + +class WXDLLEXPORT wxListCtrl; +class WXDLLEXPORT wxListEvent; +class WXDLLEXPORT wxStaticBitmap; + +class wxArtBrowserDialog : public wxDialog +{ +public: + wxArtBrowserDialog(wxWindow *parent); + + void SetArtClient(const wxArtClient& client); + +private: + void OnSelectItem(wxListEvent &event); + void OnChooseClient(wxCommandEvent &event); + + wxListCtrl *m_list; + wxStaticBitmap *m_canvas; + wxString m_client; + + DECLARE_EVENT_TABLE() +}; + +#endif // __ARTBROWS_H__ + diff --git a/samples/artprov/artprov.dsp b/samples/artprov/artprov.dsp index 0391f23c9c..2ed0bea518 100644 --- a/samples/artprov/artprov.dsp +++ b/samples/artprov/artprov.dsp @@ -148,6 +148,10 @@ SOURCE=.\arttest.cpp # End Source File # Begin Source File +SOURCE=.\artbrows.cpp +# End Source File +# Begin Source File + SOURCE=.\arttest.rc # End Source File # End Target diff --git a/samples/artprov/artprov.pro b/samples/artprov/artprov.pro index c3fbbc9cf8..992eafbfe5 100644 --- a/samples/artprov/artprov.pro +++ b/samples/artprov/artprov.pro @@ -12,6 +12,6 @@ CONFIG = wx #WXCONFIGS = Debug Release DebugDll ReleaseDll # project files -SOURCES = arttest.cpp +SOURCES = arttest.cpp artbrows.cpp RC_FILE = arttest.rc TARGET = artprov diff --git a/samples/artprov/arttest.cpp b/samples/artprov/arttest.cpp index 0c8ae43d8e..c8cda12516 100644 --- a/samples/artprov/arttest.cpp +++ b/samples/artprov/arttest.cpp @@ -25,6 +25,7 @@ #endif #include "wx/artprov.h" +#include "artbrows.h" // ---------------------------------------------------------------------------- // private classes @@ -47,7 +48,9 @@ private: void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnLogs(wxCommandEvent& event); - + void OnBrowser(wxCommandEvent& event); + void OnPlugProvider(wxCommandEvent& event); + DECLARE_EVENT_TABLE() }; @@ -59,7 +62,9 @@ private: enum { ID_Quit = wxID_HIGHEST, - ID_Logs + ID_Logs, + ID_Browser, + ID_PlugProvider }; // ---------------------------------------------------------------------------- @@ -67,9 +72,11 @@ enum // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(ID_Quit, MyFrame::OnQuit) - EVT_MENU(ID_Logs, MyFrame::OnLogs) - EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) + EVT_MENU(ID_Quit, MyFrame::OnQuit) + EVT_MENU(ID_Logs, MyFrame::OnLogs) + EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) + EVT_MENU(ID_Browser, MyFrame::OnBrowser) + EVT_MENU(ID_PlugProvider, MyFrame::OnPlugProvider) END_EVENT_TABLE() IMPLEMENT_APP(MyApp) @@ -92,6 +99,42 @@ bool MyApp::OnInit() return TRUE; } +// ---------------------------------------------------------------------------- +// custom art provider +// ---------------------------------------------------------------------------- + +class MyArtProvider : public wxArtProvider +{ +protected: + virtual wxBitmap CreateBitmap(const wxArtID& id, const wxArtClient& client, + const wxSize& size); +}; + +#include "info.xpm" +#include "error.xpm" +#include "warning.xpm" +#include "question.xpm" + +wxBitmap MyArtProvider::CreateBitmap(const wxArtID& id, + const wxArtClient& client, + const wxSize& WXUNUSED(size)) +{ + if ( client == wxART_MESSAGE_BOX ) + { + if ( id == wxART_INFORMATION ) + return wxBitmap(info_xpm); + if ( id == wxART_ERROR ) + return wxBitmap(error_xpm); + if ( id == wxART_WARNING ) + return wxBitmap(warning_xpm); + if ( id == wxART_QUESTION ) + return wxBitmap(question_xpm); + } + return wxNullBitmap; +} + + + // ---------------------------------------------------------------------------- // main frame // ---------------------------------------------------------------------------- @@ -109,9 +152,13 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, wxMenu *helpMenu = new wxMenu; helpMenu->Append(wxID_ABOUT, _T("&About...\tF1"), _T("Show about dialog")); + menuFile->AppendCheckItem(ID_PlugProvider, _T("&Plug-in art provider"), _T("Enable custom art provider")); + menuFile->AppendSeparator(); + menuFile->Append(ID_Logs, _T("&Logging test"), _T("Show some logging output")); + menuFile->Append(ID_Browser, _T("&Resources browser"), _T("Browse all available icons")); menuFile->AppendSeparator(); - + menuFile->Append(ID_Quit, _T("E&xit\tAlt-X"), _T("Quit this program")); // now append the freshly created menu to the menu bar... @@ -139,7 +186,7 @@ void MyFrame::OnLogs(wxCommandEvent& WXUNUSED(event)) wxLogWarning(_T("A warning.")); wxLogError(_T("Yet another error.")); wxLog::GetActiveTarget()->Flush(); - wxLogMessage(_T("Check/uncheck 'File/Plug-in provider' and try again.")); + wxLogMessage(_T("Check/uncheck 'File/Plug-in art provider' and try again.")); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) @@ -150,3 +197,17 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) wxMessageBox(msg, _T("About Minimal"), wxOK | wxICON_INFORMATION, this); } + +void MyFrame::OnBrowser(wxCommandEvent& WXUNUSED(event)) +{ + wxArtBrowserDialog dlg(this); + dlg.ShowModal(); +} + +void MyFrame::OnPlugProvider(wxCommandEvent& event) +{ + if ( event.IsChecked() ) + wxArtProvider::PushProvider(new MyArtProvider); + else + wxArtProvider::PopProvider(); +} diff --git a/samples/artprov/makefile.b32 b/samples/artprov/makefile.b32 index 6e8bf304f3..5e552306a8 100644 --- a/samples/artprov/makefile.b32 +++ b/samples/artprov/makefile.b32 @@ -10,7 +10,7 @@ WXDIR = $(WXWIN) TARGET=arttest -OBJECTS = $(TARGET).obj +OBJECTS = $(TARGET).obj artbrows.obj !include $(WXDIR)\src\makeprog.b32 diff --git a/samples/artprov/makefile.bcc b/samples/artprov/makefile.bcc index 13e5ca97ad..729844a27b 100644 --- a/samples/artprov/makefile.bcc +++ b/samples/artprov/makefile.bcc @@ -13,7 +13,7 @@ WXDIR = $(WXWIN) TARGET=arttest -OBJECTS=$(TARGET).obj +OBJECTS=$(TARGET).obj artbrows.obj !include $(WXDIR)\src\makeprog.bcc diff --git a/samples/artprov/makefile.dos b/samples/artprov/makefile.dos index cd84ffff1e..c67499e156 100644 --- a/samples/artprov/makefile.dos +++ b/samples/artprov/makefile.dos @@ -11,7 +11,7 @@ WXDIR = $(WXWIN) TARGET=arttest -OBJECTS = $(TARGET).obj +OBJECTS = $(TARGET).obj artbrows.obj !include $(WXDIR)\src\makeprog.msc diff --git a/samples/artprov/makefile.g95 b/samples/artprov/makefile.g95 index 5bf69d943c..3747a4748e 100644 --- a/samples/artprov/makefile.g95 +++ b/samples/artprov/makefile.g95 @@ -10,7 +10,7 @@ WXDIR = ../.. TARGET=arttest -OBJECTS = $(TARGET).o +OBJECTS = $(TARGET).o artbrows.o include $(WXDIR)/src/makeprog.g95 diff --git a/samples/artprov/makefile.unx b/samples/artprov/makefile.unx index 1d957ba989..ef1b88f79f 100644 --- a/samples/artprov/makefile.unx +++ b/samples/artprov/makefile.unx @@ -17,7 +17,7 @@ CXX = $(shell wx-config --cxx) PROGRAM = arttest -OBJECTS = $(PROGRAM).o +OBJECTS = $(PROGRAM).o artbrows.o # implementation diff --git a/samples/artprov/makefile.vc b/samples/artprov/makefile.vc index d433b6b410..76ec67060e 100644 --- a/samples/artprov/makefile.vc +++ b/samples/artprov/makefile.vc @@ -12,7 +12,7 @@ WXDIR = $(WXWIN) PROGRAM=arttest -OBJECTS = $(PROGRAM).obj +OBJECTS = $(PROGRAM).obj artbrows.obj !include $(WXDIR)\src\makeprog.vc diff --git a/samples/artprov/makefile.wat b/samples/artprov/makefile.wat index cba4eeb91d..af024efa8c 100644 --- a/samples/artprov/makefile.wat +++ b/samples/artprov/makefile.wat @@ -8,7 +8,7 @@ WXDIR = $(%WXWIN) PROGRAM = arttest -OBJECTS = $(PROGRAM).obj +OBJECTS = $(PROGRAM).obj artbrows.obj !include $(WXDIR)\src\makeprog.wat