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
This commit is contained in:
Václav Slavík
2002-04-06 14:55:16 +00:00
parent 546f34572d
commit ccb42cc5c8
13 changed files with 312 additions and 18 deletions

View 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

View File

@@ -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);
}

View File

@@ -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__

View 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

View 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

View 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->Append(ID_Logs, _T("&Logging test"), _T("Show some logging output"));
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();
}

View File

@@ -10,7 +10,7 @@
WXDIR = $(WXWIN)
TARGET=arttest
OBJECTS = $(TARGET).obj
OBJECTS = $(TARGET).obj artbrows.obj
!include $(WXDIR)\src\makeprog.b32

View File

@@ -13,7 +13,7 @@
WXDIR = $(WXWIN)
TARGET=arttest
OBJECTS=$(TARGET).obj
OBJECTS=$(TARGET).obj artbrows.obj
!include $(WXDIR)\src\makeprog.bcc

View File

@@ -11,7 +11,7 @@
WXDIR = $(WXWIN)
TARGET=arttest
OBJECTS = $(TARGET).obj
OBJECTS = $(TARGET).obj artbrows.obj
!include $(WXDIR)\src\makeprog.msc

View File

@@ -10,7 +10,7 @@
WXDIR = ../..
TARGET=arttest
OBJECTS = $(TARGET).o
OBJECTS = $(TARGET).o artbrows.o
include $(WXDIR)/src/makeprog.g95

View File

@@ -17,7 +17,7 @@ CXX = $(shell wx-config --cxx)
PROGRAM = arttest
OBJECTS = $(PROGRAM).o
OBJECTS = $(PROGRAM).o artbrows.o
# implementation

View File

@@ -12,7 +12,7 @@
WXDIR = $(WXWIN)
PROGRAM=arttest
OBJECTS = $(PROGRAM).obj
OBJECTS = $(PROGRAM).obj artbrows.obj
!include $(WXDIR)\src\makeprog.vc

View File

@@ -8,7 +8,7 @@
WXDIR = $(%WXWIN)
PROGRAM = arttest
OBJECTS = $(PROGRAM).obj
OBJECTS = $(PROGRAM).obj artbrows.obj
!include $(WXDIR)\src\makeprog.wat