artbrows.cpp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name: artbrows.cpp
  3. // Purpose: wxArtProvider demo - art browser dialog
  4. // Author: Vaclav Slavik
  5. // Modified by:
  6. // Created: 2002/04/05
  7. // Copyright: (c) Vaclav Slavik
  8. // Licence: wxWindows licence
  9. /////////////////////////////////////////////////////////////////////////////
  10. // For compilers that support precompilation, includes "wx/wx.h".
  11. #include "wx/wxprec.h"
  12. #ifdef __BORLANDC__
  13. #pragma hdrstop
  14. #endif
  15. #ifndef WX_PRECOMP
  16. #include "wx/wx.h"
  17. #include "wx/choice.h"
  18. #endif
  19. #include "wx/listctrl.h"
  20. #include "wx/sizer.h"
  21. #include "wx/imaglist.h"
  22. #include "wx/listctrl.h"
  23. #include "artbrows.h"
  24. #define ART_CLIENT(id) \
  25. choice->Append(wxT(#id), (void*)id);
  26. #define ART_ICON(id) \
  27. { \
  28. int ind; \
  29. wxIcon icon = wxArtProvider::GetIcon(id, client, size); \
  30. if ( icon.IsOk() ) \
  31. ind = images->Add(icon); \
  32. else \
  33. ind = 0; \
  34. list->InsertItem(index, wxT(#id), ind); \
  35. list->SetItemPtrData(index, wxPtrToUInt(id)); \
  36. index++; \
  37. }
  38. // ----------------------------------------------------------------------------
  39. // Functions to fill-in all supported art IDs
  40. // ----------------------------------------------------------------------------
  41. static void FillClients(wxChoice *choice)
  42. {
  43. ART_CLIENT(wxART_OTHER)
  44. ART_CLIENT(wxART_BUTTON)
  45. ART_CLIENT(wxART_TOOLBAR)
  46. ART_CLIENT(wxART_MENU)
  47. ART_CLIENT(wxART_FRAME_ICON)
  48. ART_CLIENT(wxART_CMN_DIALOG)
  49. ART_CLIENT(wxART_HELP_BROWSER)
  50. ART_CLIENT(wxART_MESSAGE_BOX) // Keep this last, it's the initial shown one
  51. }
  52. static void FillBitmaps(wxImageList *images, wxListCtrl *list,
  53. int& index,
  54. const wxArtClient& client, const wxSize& size)
  55. {
  56. ART_ICON(wxART_ERROR)
  57. ART_ICON(wxART_QUESTION)
  58. ART_ICON(wxART_WARNING)
  59. ART_ICON(wxART_INFORMATION)
  60. ART_ICON(wxART_ADD_BOOKMARK)
  61. ART_ICON(wxART_DEL_BOOKMARK)
  62. ART_ICON(wxART_HELP_SIDE_PANEL)
  63. ART_ICON(wxART_HELP_SETTINGS)
  64. ART_ICON(wxART_HELP_BOOK)
  65. ART_ICON(wxART_HELP_FOLDER)
  66. ART_ICON(wxART_HELP_PAGE)
  67. ART_ICON(wxART_GO_BACK)
  68. ART_ICON(wxART_GO_FORWARD)
  69. ART_ICON(wxART_GO_UP)
  70. ART_ICON(wxART_GO_DOWN)
  71. ART_ICON(wxART_GO_TO_PARENT)
  72. ART_ICON(wxART_GO_HOME)
  73. ART_ICON(wxART_GOTO_FIRST)
  74. ART_ICON(wxART_GOTO_LAST)
  75. ART_ICON(wxART_PRINT)
  76. ART_ICON(wxART_HELP)
  77. ART_ICON(wxART_TIP)
  78. ART_ICON(wxART_REPORT_VIEW)
  79. ART_ICON(wxART_LIST_VIEW)
  80. ART_ICON(wxART_NEW_DIR)
  81. ART_ICON(wxART_FOLDER)
  82. ART_ICON(wxART_FOLDER_OPEN);
  83. ART_ICON(wxART_GO_DIR_UP)
  84. ART_ICON(wxART_EXECUTABLE_FILE)
  85. ART_ICON(wxART_NORMAL_FILE)
  86. ART_ICON(wxART_TICK_MARK)
  87. ART_ICON(wxART_CROSS_MARK)
  88. ART_ICON(wxART_MISSING_IMAGE)
  89. ART_ICON(wxART_NEW);
  90. ART_ICON(wxART_FILE_OPEN)
  91. ART_ICON(wxART_FILE_SAVE)
  92. ART_ICON(wxART_FILE_SAVE_AS)
  93. ART_ICON(wxART_DELETE);
  94. ART_ICON(wxART_COPY)
  95. ART_ICON(wxART_CUT)
  96. ART_ICON(wxART_PASTE)
  97. ART_ICON(wxART_UNDO)
  98. ART_ICON(wxART_REDO)
  99. ART_ICON(wxART_PLUS)
  100. ART_ICON(wxART_MINUS)
  101. ART_ICON(wxART_QUIT)
  102. ART_ICON(wxART_FIND)
  103. ART_ICON(wxART_FIND_AND_REPLACE)
  104. ART_ICON(wxART_HARDDISK)
  105. ART_ICON(wxART_FLOPPY)
  106. ART_ICON(wxART_CDROM)
  107. ART_ICON(wxART_REMOVABLE)
  108. }
  109. // ----------------------------------------------------------------------------
  110. // Browser implementation
  111. // ----------------------------------------------------------------------------
  112. #include "null.xpm"
  113. wxBEGIN_EVENT_TABLE(wxArtBrowserDialog, wxDialog)
  114. EVT_LIST_ITEM_SELECTED(wxID_ANY, wxArtBrowserDialog::OnSelectItem)
  115. EVT_CHOICE(wxID_ANY, wxArtBrowserDialog::OnChooseClient)
  116. wxEND_EVENT_TABLE()
  117. wxArtBrowserDialog::wxArtBrowserDialog(wxWindow *parent)
  118. : wxDialog(parent, wxID_ANY, wxT("Art resources browser"),
  119. wxDefaultPosition, wxDefaultSize,
  120. wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
  121. {
  122. wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
  123. wxSizer *subsizer;
  124. wxChoice *choice = new wxChoice(this, wxID_ANY);
  125. FillClients(choice);
  126. subsizer = new wxBoxSizer(wxHORIZONTAL);
  127. subsizer->Add(new wxStaticText(this, wxID_ANY, wxT("Client:")), 0, wxALIGN_CENTER_VERTICAL);
  128. subsizer->Add(choice, 1, wxLEFT, 5);
  129. sizer->Add(subsizer, 0, wxALL | wxEXPAND, 10);
  130. subsizer = new wxBoxSizer(wxHORIZONTAL);
  131. m_list = new wxListCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(250, 300),
  132. wxLC_REPORT | wxSUNKEN_BORDER);
  133. m_list->AppendColumn(wxT("wxArtID"));
  134. subsizer->Add(m_list, 1, wxEXPAND | wxRIGHT, 10);
  135. wxSizer *subsub = new wxBoxSizer(wxVERTICAL);
  136. m_text = new wxStaticText(this, wxID_ANY, wxT("Size: 333x333"));
  137. subsub->Add(m_text);
  138. m_canvas = new wxStaticBitmap(this, wxID_ANY, wxBitmap(null_xpm));
  139. subsub->Add(m_canvas);
  140. subsub->Add(100, 100);
  141. subsizer->Add(subsub);
  142. sizer->Add(subsizer, 1, wxEXPAND | wxLEFT|wxRIGHT, 10);
  143. wxButton *ok = new wxButton(this, wxID_OK, wxT("Close"));
  144. ok->SetDefault();
  145. sizer->Add(ok, 0, wxALIGN_RIGHT | wxALL, 10);
  146. SetSizerAndFit(sizer);
  147. choice->SetSelection(choice->GetCount() - 1);
  148. SetArtClient(wxART_MESSAGE_BOX);
  149. }
  150. void wxArtBrowserDialog::SetArtClient(const wxArtClient& client)
  151. {
  152. wxBusyCursor bcur;
  153. wxImageList *img = new wxImageList(16, 16);
  154. img->Add(wxIcon(null_xpm));
  155. int index = 0;
  156. long sel = m_list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
  157. if (sel < 0) sel = 0;
  158. m_list->DeleteAllItems();
  159. FillBitmaps(img, m_list, index, client, wxSize(16, 16));
  160. m_list->AssignImageList(img, wxIMAGE_LIST_SMALL);
  161. m_list->SetColumnWidth(0, wxLIST_AUTOSIZE);
  162. m_list->SetItemState(sel, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
  163. m_client = client;
  164. SetArtBitmap((const char*)m_list->GetItemData(sel), m_client);
  165. }
  166. void wxArtBrowserDialog::OnSelectItem(wxListEvent &event)
  167. {
  168. const char *data = (const char*)event.GetData();
  169. SetArtBitmap(data, m_client, wxDefaultSize);
  170. }
  171. void wxArtBrowserDialog::OnChooseClient(wxCommandEvent &event)
  172. {
  173. const char *data = (const char*)event.GetClientData();
  174. SetArtClient(data);
  175. }
  176. void wxArtBrowserDialog::SetArtBitmap(const wxArtID& id, const wxArtClient& client, const wxSize& size)
  177. {
  178. wxBitmap bmp = wxArtProvider::GetBitmap(id, client, size);
  179. m_canvas->SetSize(bmp.GetWidth(), bmp.GetHeight());
  180. m_canvas->SetBitmap(bmp);
  181. m_text->SetLabel(wxString::Format(wxT("Size: %d x %d"), bmp.GetWidth(), bmp.GetHeight()));
  182. Refresh();
  183. }