]> git.saurik.com Git - wxWidgets.git/commitdiff
added resources browser to wxArtProvider sample (similar to the one from gtk-demo)
authorVáclav Slavík <vslavik@fastmail.fm>
Sat, 6 Apr 2002 14:55:16 +0000 (14:55 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sat, 6 Apr 2002 14:55:16 +0000 (14:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14964 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
samples/artprov/Makefile.in
samples/artprov/artbrows.cpp [new file with mode: 0644]
samples/artprov/artbrows.h [new file with mode: 0644]
samples/artprov/artprov.dsp
samples/artprov/artprov.pro
samples/artprov/arttest.cpp
samples/artprov/makefile.b32
samples/artprov/makefile.bcc
samples/artprov/makefile.dos
samples/artprov/makefile.g95
samples/artprov/makefile.unx
samples/artprov/makefile.vc
samples/artprov/makefile.wat

index e9370f49d3025447a58bea56a7c093d9192344e8..e27c00833d7d80a2fd463ad19f9393b6129de1f7 100644 (file)
@@ -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 (file)
index 0000000..cbc1802
--- /dev/null
@@ -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 (file)
index 0000000..2494a6e
--- /dev/null
@@ -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__
+
index 0391f23c9ce0939ac9425d16b58a23b538d662e6..2ed0bea518d69c90deb859b9e7188d28aece3adf 100644 (file)
@@ -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
index c3fbbc9cf8612bca1e77a7cd17d87d4f7686505f..992eafbfe5e24a89f0cbfd665188c793b52b3ce9 100644 (file)
@@ -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
index 0c8ae43d8e8f6e8a5c94e7b66ccf48b73f7fd5ae..c8cda125164ae3c07b119b06d92cb8a2803221b3 100644 (file)
@@ -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();
+}
index 6e8bf304f3172a68f42005948bf50e09d6beea55..5e552306a8e52e746033815e401c3bf2e437c830 100644 (file)
@@ -10,7 +10,7 @@
 WXDIR = $(WXWIN)
 
 TARGET=arttest
-OBJECTS = $(TARGET).obj
+OBJECTS = $(TARGET).obj artbrows.obj
 
 !include $(WXDIR)\src\makeprog.b32
 
index 13e5ca97ad8f14495607b07ec0d3bdcf5ed28755..729844a27ba4360b7b0a3fb90f4b0a04884fcf7e 100644 (file)
@@ -13,7 +13,7 @@
 WXDIR = $(WXWIN)
 
 TARGET=arttest
-OBJECTS=$(TARGET).obj
+OBJECTS=$(TARGET).obj artbrows.obj
 
 !include $(WXDIR)\src\makeprog.bcc
 
index cd84ffff1ee80efb119e4bee860999e2f309d22e..c67499e1569bbf2f525668bd951f8749285f6541 100644 (file)
@@ -11,7 +11,7 @@
 WXDIR = $(WXWIN)
 
 TARGET=arttest
-OBJECTS = $(TARGET).obj
+OBJECTS = $(TARGET).obj artbrows.obj
 
 !include $(WXDIR)\src\makeprog.msc
 
index 5bf69d943c62718977b511b7d832bdc040a80879..3747a4748e2944c75912472bf3570917f0bab9e4 100644 (file)
@@ -10,7 +10,7 @@
 WXDIR = ../..
 
 TARGET=arttest
-OBJECTS = $(TARGET).o
+OBJECTS = $(TARGET).o artbrows.o
 
 include $(WXDIR)/src/makeprog.g95
 
index 1d957ba98938af2d4232760b51e44b5346f9f7fb..ef1b88f79f9992bf91a62c36fa3414a902b19b82 100644 (file)
@@ -17,7 +17,7 @@ CXX = $(shell wx-config --cxx)
 
 PROGRAM = arttest
 
-OBJECTS = $(PROGRAM).o
+OBJECTS = $(PROGRAM).o artbrows.o
 
 # implementation
 
index d433b6b410d03ddd21419da17a57374489511ea4..76ec67060e9790b38b6c7a144589ec21d94c6636 100644 (file)
@@ -12,7 +12,7 @@
 WXDIR = $(WXWIN)
 
 PROGRAM=arttest
-OBJECTS = $(PROGRAM).obj
+OBJECTS = $(PROGRAM).obj artbrows.obj
 
 !include $(WXDIR)\src\makeprog.vc
 
index cba4eeb91d7efb4642882460301a6abc8650b791..af024efa8c2ef25d79fa021077d5da6638a971b6 100644 (file)
@@ -8,7 +8,7 @@
 WXDIR = $(%WXWIN)
 
 PROGRAM = arttest
-OBJECTS = $(PROGRAM).obj
+OBJECTS = $(PROGRAM).obj artbrows.obj
 
 !include $(WXDIR)\src\makeprog.wat