]> git.saurik.com Git - wxWidgets.git/commitdiff
1. deprecate redundantly sounding wxArtProvider::FooProvider() to just Foo()
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 23 Sep 2006 20:16:18 +0000 (20:16 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 23 Sep 2006 20:16:18 +0000 (20:16 +0000)
2. wxArtProvider::Remove() now really only removes the provider without
   deleting it, Delete() does delete it
3. moreover, ~wxArtProvider removes the provider as well so there is almost
   no need to call Delete() explicitly any more

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41398 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/artprov.tex
include/wx/artprov.h
samples/artprov/arttest.cpp
src/common/artprov.cpp
src/common/artstd.cpp
src/gtk/artgtk.cpp
src/univ/theme.cpp
src/univ/themes/gtk.cpp
src/univ/themes/mono.cpp
src/univ/themes/win32.cpp

index 690fd24b3936972aedd38178c8e0bf57343b2039..8c2b6d4aaf5a4e567f16fe3e134b51a3432a402e 100644 (file)
@@ -13,7 +13,7 @@ replace standard art with their own version. All
 that is needed is to derive a class from wxArtProvider, override its
 \helpref{CreateBitmap}{wxartprovidercreatebitmap} method and register the
 provider with
 that is needed is to derive a class from wxArtProvider, override its
 \helpref{CreateBitmap}{wxartprovidercreatebitmap} method and register the
 provider with
-\helpref{wxArtProvider::PushProvider}{wxartproviderpushprovider}:
+\helpref{wxArtProvider::Push}{wxartproviderpush}:
 
 \begin{verbatim}
   class MyProvider : public wxArtProvider
 
 \begin{verbatim}
   class MyProvider : public wxArtProvider
@@ -25,7 +25,7 @@ provider with
     { ... }
   };
   ...
     { ... }
   };
   ...
-  wxArtProvider::PushProvider(new MyProvider);
+  wxArtProvider::Push(new MyProvider);
 \end{verbatim}
 
 There's another way of taking advantage of this class: you can use it in your code and use
 \end{verbatim}
 
 There's another way of taking advantage of this class: you can use it in your code and use
@@ -34,6 +34,7 @@ platform native icons as provided by \helpref{wxArtProvider::GetBitmap}{wxartpro
 possible as of wxWidgets 2.3.3, the set of wxArtProvider bitmaps is too
 small). 
 
 possible as of wxWidgets 2.3.3, the set of wxArtProvider bitmaps is too
 small). 
 
+
 \membersection{Identifying art resources}\label{artprovideridentifying}
 
 Every bitmap is known to wxArtProvider under an unique ID that is used by when
 \membersection{Identifying art resources}\label{artprovideridentifying}
 
 Every bitmap is known to wxArtProvider under an unique ID that is used by when
@@ -74,8 +75,8 @@ constants in the \helpref{artprov}{sampleartprovider} sample):
 \item wxART\_MISSING\_IMAGE      
 \end{itemize}
 
 \item wxART\_MISSING\_IMAGE      
 \end{itemize}
 
-Additionally, any string recognized by custom art providers registered using
-\helpref{PushProvider}{wxartproviderpushprovider} may be used.
+Additionally, any string recognized by custom art providers registered using 
+\helpref{Push}{wxartproviderpush} may be used.
 
 \wxheading{GTK+ Note}
 
 
 \wxheading{GTK+ Note}
 
@@ -88,6 +89,7 @@ by GTK+ follow the
 icons, so wxArtProvider may return {\tt wxNullBitmap} or {\tt wxNullIcon}.
 Default theme is typically installed in {\tt /usr/share/icons/hicolor}.
 
 icons, so wxArtProvider may return {\tt wxNullBitmap} or {\tt wxNullIcon}.
 Default theme is typically installed in {\tt /usr/share/icons/hicolor}.
 
+
 \membersection{Clients}\label{artproviderclients}
 
 Client is the entity that calls wxArtProvider's GetBitmap or GetIcon
 \membersection{Clients}\label{artproviderclients}
 
 Client is the entity that calls wxArtProvider's GetBitmap or GetIcon
@@ -125,6 +127,15 @@ See the \helpref{artprov}{sampleartprovider} sample for an example of wxArtProvi
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
+
+\membersection{wxArtProvider::\destruct{wxArtProvider}}\label{wxartproviderdtor}
+
+\func{}{\destruct{wxArtProvider}}{\void}
+
+The destructor automatically removes the provider from the provider stack used
+by \helpref{GetBitmap}{wxartprovidergetbitmap}.
+
+
 \membersection{wxArtProvider::CreateBitmap}\label{wxartprovidercreatebitmap}
 
 \func{wxBitmap}{CreateBitmap}{\param{const wxArtID\& }{id}, \param{const wxArtClient\& }{client}, \param{const wxSize\& }{size}}
 \membersection{wxArtProvider::CreateBitmap}\label{wxartprovidercreatebitmap}
 
 \func{wxBitmap}{CreateBitmap}{\param{const wxArtID\& }{id}, \param{const wxArtClient\& }{client}, \param{const wxSize\& }{size}}
@@ -151,6 +162,14 @@ This is {\bf not} part of wxArtProvider's public API, use
 \helpref{wxArtProvider::GetIcon}{wxartprovidergeticon}
 to query wxArtProvider for a resource.
 
 \helpref{wxArtProvider::GetIcon}{wxartprovidergeticon}
 to query wxArtProvider for a resource.
 
+
+\membersection{wxArtProvider::Delete}\label{wxartproviderdelete}
+
+\func{static bool}{Delete}{\param{wxArtProvider* }{provider}}
+
+Delete the given \arg{provider}.
+
+
 \membersection{wxArtProvider::GetBitmap}\label{wxartprovidergetbitmap}
 
 \func{static wxBitmap}{GetBitmap}{\param{const wxArtID\& }{id}, \param{const wxArtClient\& }{client = wxART\_OTHER}, \param{const wxSize\& }{size = wxDefaultSize}}
 \membersection{wxArtProvider::GetBitmap}\label{wxartprovidergetbitmap}
 
 \func{static wxBitmap}{GetBitmap}{\param{const wxArtID\& }{id}, \param{const wxArtClient\& }{client = wxART\_OTHER}, \param{const wxSize\& }{size = wxDefaultSize}}
@@ -169,6 +188,7 @@ Query registered providers for bitmap with given ID.
 
 The bitmap if one of registered providers recognizes the ID or wxNullBitmap otherwise.
 
 
 The bitmap if one of registered providers recognizes the ID or wxNullBitmap otherwise.
 
+
 \membersection{wxArtProvider::GetIcon}\label{wxartprovidergeticon}
 
 \func{static wxIcon}{GetIcon}{\param{const wxArtID\& }{id}, \param{const wxArtClient\& }{client = wxART\_OTHER}, \param{const wxSize\& }{size = wxDefaultSize}}
 \membersection{wxArtProvider::GetIcon}\label{wxartprovidergeticon}
 
 \func{static wxIcon}{GetIcon}{\param{const wxArtID\& }{id}, \param{const wxArtClient\& }{client = wxART\_OTHER}, \param{const wxSize\& }{size = wxDefaultSize}}
@@ -183,38 +203,42 @@ Returns a suitable size hint for the given {\it wxArtClient}. If
 otherwise return the size from the topmost wxArtProvider. {\it wxDefaultSize} may be 
 returned if the client doesn't have a specified size, like wxART\_OTHER for example.
 
 otherwise return the size from the topmost wxArtProvider. {\it wxDefaultSize} may be 
 returned if the client doesn't have a specified size, like wxART\_OTHER for example.
 
-\membersection{wxArtProvider::InsertProvider}\label{wxartproviderinsertprovider}
 
 
-\func{static void}{InsertProvider}{\param{wxArtProvider* }{provider}}
+\membersection{wxArtProvider::Insert}\label{wxartproviderinsert}
+
+\func{static void}{Insert}{\param{wxArtProvider* }{provider}}
 
 Register new art provider and add it to the bottom of providers stack (i.e.
 it will be queried as the last one).
 
 \wxheading{See also}
 
 
 Register new art provider and add it to the bottom of providers stack (i.e.
 it will be queried as the last one).
 
 \wxheading{See also}
 
-\helpref{PushProvider}{wxartproviderpushprovider}
+\helpref{Push}{wxartproviderpush}
+
 
 
-\membersection{wxArtProvider::PopProvider}\label{wxartproviderctor}
+\membersection{wxArtProvider::Pop}\label{wxartproviderctor}
 
 
-\func{static bool}{PopProvider}{\void}
+\func{static bool}{Pop}{\void}
 
 Remove latest added provider and delete it.
 
 
 Remove latest added provider and delete it.
 
-\membersection{wxArtProvider::PushProvider}\label{wxartproviderpushprovider}
 
 
-\func{static void}{PushProvider}{\param{wxArtProvider* }{provider}}
+\membersection{wxArtProvider::Push}\label{wxartproviderpush}
+
+\func{static void}{Push}{\param{wxArtProvider* }{provider}}
 
 Register new art provider and add it to the top of providers stack (i.e. it
 will be queried as the first provider).
 
 \wxheading{See also}
 
 
 Register new art provider and add it to the top of providers stack (i.e. it
 will be queried as the first provider).
 
 \wxheading{See also}
 
-\helpref{InsertProvider}{wxartproviderinsertprovider}
+\helpref{Insert}{wxartproviderinsert}
+
 
 
-\membersection{wxArtProvider::RemoveProvider}\label{wxartproviderremoveprovider}
+\membersection{wxArtProvider::Remove}\label{wxartproviderremove}
 
 
-\func{static bool}{RemoveProvider}{\param{wxArtProvider* }{provider}}
+\func{static bool}{Remove}{\param{wxArtProvider* }{provider}}
 
 
-Remove a provider from the stack. The provider must have been added previously
-and is {\it not} deleted.
+Remove a provider from the stack if it is on it. The provider is {\emph not} 
+deleted, unlike when using \helpref{Delete()}{wxartproviderdelete}.
 
 
index 535d6767fadb2816c1af5060cda7b86360ffba19..61cb8c518d6c6d2b63bbf53fba955e1311cebf1b 100644 (file)
@@ -112,20 +112,27 @@ typedef wxString wxArtID;
 class WXDLLEXPORT wxArtProvider : public wxObject
 {
 public:
 class WXDLLEXPORT wxArtProvider : public wxObject
 {
 public:
+    // Dtor removes the provider from providers stack if it's still on it
+    virtual ~wxArtProvider();
+
+
     // Add new provider to the top of providers stack (i.e. the provider will
     // Add new provider to the top of providers stack (i.e. the provider will
-    // be querier first of all).
-    static void PushProvider(wxArtProvider *provider);
+    // be queried first of all).
+    static void Push(wxArtProvider *provider);
 
     // Add new provider to the bottom of providers stack (i.e. the provider
     // will be queried as the last one).
 
     // Add new provider to the bottom of providers stack (i.e. the provider
     // will be queried as the last one).
-    static void InsertProvider(wxArtProvider *provider);
+    static void Insert(wxArtProvider *provider);
 
     // Remove latest added provider and delete it.
 
     // Remove latest added provider and delete it.
-    static bool PopProvider();
+    static bool Pop();
+
+    // Remove provider from providers stack but don't delete it.
+    static bool Remove(wxArtProvider *provider);
+
+    // Delete the given provider and remove it from the providers stack.
+    static bool Delete(wxArtProvider *provider);
 
 
-    // Remove provider. The provider must have been added previously!
-    // The provider is _not_ deleted.
-    static bool RemoveProvider(wxArtProvider *provider);
 
     // Query the providers for bitmap with given ID and return it. Return
     // wxNullBitmap if no provider provides it.
 
     // Query the providers for bitmap with given ID and return it. Return
     // wxNullBitmap if no provider provides it.
@@ -143,6 +150,18 @@ public:
     // the topmost provider if platform_dependent = false
     static wxSize GetSizeHint(const wxArtClient& client, bool platform_dependent = false);
 
     // the topmost provider if platform_dependent = false
     static wxSize GetSizeHint(const wxArtClient& client, bool platform_dependent = false);
 
+#if WXWIN_COMPATIBILITY_2_6
+    // use the corresponding methods without redundant "Provider" suffix
+    wxDEPRECATED( static void PushProvider(wxArtProvider *provider) );
+    wxDEPRECATED( static void InsertProvider(wxArtProvider *provider) );
+    wxDEPRECATED( static bool PopProvider() );
+
+    // use Delete() if this is what you really need, or just delete the
+    // provider pointer, do not use Remove() as it does not delete the pointer
+    // unlike RemoveProvider() which does
+    wxDEPRECATED( static bool RemoveProvider(wxArtProvider *provider) );
+#endif // WXWIN_COMPATIBILITY_2_6
+
 protected:
     friend class wxArtProviderModule;
     // Initializes default provider
 protected:
     friend class wxArtProviderModule;
     // Initializes default provider
index 6d787932ddc25f0121450838eead90bf5176d26c..9a69a2535f0a2c70bc5a05de90afe51f4262aed6 100644 (file)
@@ -216,7 +216,7 @@ void MyFrame::OnBrowser(wxCommandEvent& WXUNUSED(event))
 void MyFrame::OnPlugProvider(wxCommandEvent& event)
 {
     if ( event.IsChecked() )
 void MyFrame::OnPlugProvider(wxCommandEvent& event)
 {
     if ( event.IsChecked() )
-        wxArtProvider::PushProvider(new MyArtProvider);
+        wxArtProvider::Push(new MyArtProvider);
     else
     else
-        wxArtProvider::PopProvider();
+        wxArtProvider::Pop();
 }
 }
index 7661612429045978443a42f530c3ccf6638f6257..dd5cdb4bd5a4c43e2c2086325d9043d5f8fb3ab0 100644 (file)
@@ -90,15 +90,28 @@ void wxArtProviderCache::Clear()
 }
 
 
 }
 
 
-// ----------------------------------------------------------------------------
+// ============================================================================
 // wxArtProvider class
 // wxArtProvider class
-// ----------------------------------------------------------------------------
+// ============================================================================
 
 IMPLEMENT_ABSTRACT_CLASS(wxArtProvider, wxObject)
 
 wxArtProvidersList *wxArtProvider::sm_providers = NULL;
 wxArtProviderCache *wxArtProvider::sm_cache = NULL;
 
 
 IMPLEMENT_ABSTRACT_CLASS(wxArtProvider, wxObject)
 
 wxArtProvidersList *wxArtProvider::sm_providers = NULL;
 wxArtProviderCache *wxArtProvider::sm_cache = NULL;
 
+// ----------------------------------------------------------------------------
+// wxArtProvider ctors/dtor
+// ----------------------------------------------------------------------------
+
+wxArtProvider::~wxArtProvider()
+{
+    Remove(this);
+}
+
+// ----------------------------------------------------------------------------
+// wxArtProvider operations on provider stack
+// ----------------------------------------------------------------------------
+
 /*static*/ void wxArtProvider::CommonAddingProvider()
 {
     if ( !sm_providers )
 /*static*/ void wxArtProvider::CommonAddingProvider()
 {
     if ( !sm_providers )
@@ -110,36 +123,34 @@ wxArtProviderCache *wxArtProvider::sm_cache = NULL;
     sm_cache->Clear();
 }
 
     sm_cache->Clear();
 }
 
-/*static*/ void wxArtProvider::PushProvider(wxArtProvider *provider)
+/*static*/ void wxArtProvider::Push(wxArtProvider *provider)
 {
     CommonAddingProvider();
     sm_providers->Insert(provider);
 }
 
 {
     CommonAddingProvider();
     sm_providers->Insert(provider);
 }
 
-/*static*/ void wxArtProvider::InsertProvider(wxArtProvider *provider)
+/*static*/ void wxArtProvider::Insert(wxArtProvider *provider)
 {
     CommonAddingProvider();
     sm_providers->Append(provider);
 }
 
 {
     CommonAddingProvider();
     sm_providers->Append(provider);
 }
 
-/*static*/ bool wxArtProvider::PopProvider()
+/*static*/ bool wxArtProvider::Pop()
 {
     wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") );
 {
     wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") );
-    wxCHECK_MSG( sm_providers->GetCount() > 0, false, _T("wxArtProviders stack is empty") );
+    wxCHECK_MSG( !sm_providers->empty(), false, _T("wxArtProviders stack is empty") );
 
     delete sm_providers->GetFirst()->GetData();
 
     delete sm_providers->GetFirst()->GetData();
-    sm_providers->Erase(sm_providers->GetFirst());
     sm_cache->Clear();
     return true;
 }
 
     sm_cache->Clear();
     return true;
 }
 
-/*static*/ bool wxArtProvider::RemoveProvider(wxArtProvider *provider)
+/*static*/ bool wxArtProvider::Remove(wxArtProvider *provider)
 {
     wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") );
 
     if ( sm_providers->DeleteObject(provider) )
     {
 {
     wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") );
 
     if ( sm_providers->DeleteObject(provider) )
     {
-        delete provider;
         sm_cache->Clear();
         return true;
     }
         sm_cache->Clear();
         return true;
     }
@@ -147,13 +158,33 @@ wxArtProviderCache *wxArtProvider::sm_cache = NULL;
     return false;
 }
 
     return false;
 }
 
+/*static*/ bool wxArtProvider::Delete(wxArtProvider *provider)
+{
+    // provider will remove itself from the stack in its dtor
+    delete provider;
+
+    return true;
+}
+
 /*static*/ void wxArtProvider::CleanUpProviders()
 {
 /*static*/ void wxArtProvider::CleanUpProviders()
 {
-    WX_CLEAR_LIST(wxArtProvidersList, *sm_providers);
-    wxDELETE(sm_providers);
-    wxDELETE(sm_cache);
+    if ( sm_providers )
+    {
+        while ( !sm_providers->empty() )
+            delete *sm_providers->begin();
+
+        delete sm_providers;
+        sm_providers = NULL;
+
+        delete sm_cache;
+        sm_cache = NULL;
+    }
 }
 
 }
 
+// ----------------------------------------------------------------------------
+// wxArtProvider: retrieving bitmaps/icons
+// ----------------------------------------------------------------------------
+
 /*static*/ wxBitmap wxArtProvider::GetBitmap(const wxArtID& id,
                                              const wxArtClient& client,
                                              const wxSize& size)
 /*static*/ wxBitmap wxArtProvider::GetBitmap(const wxArtID& id,
                                              const wxArtClient& client,
                                              const wxSize& size)
@@ -253,6 +284,39 @@ wxArtProviderCache *wxArtProvider::sm_cache = NULL;
 #endif // GTK+ 2/else
 }
 
 #endif // GTK+ 2/else
 }
 
+// ----------------------------------------------------------------------------
+// deprecated wxArtProvider methods
+// ----------------------------------------------------------------------------
+
+#if WXWIN_COMPATIBILITY_2_6
+
+/* static */ void wxArtProvider::PushProvider(wxArtProvider *provider)
+{
+    Push(provider);
+}
+
+/* static */ void wxArtProvider::InsertProvider(wxArtProvider *provider)
+{
+    Insert(provider);
+}
+
+/* static */ bool wxArtProvider::PopProvider()
+{
+    return Pop();
+}
+
+/* static */ bool wxArtProvider::RemoveProvider(wxArtProvider *provider)
+{
+    // RemoveProvider() used to delete the provider being removed so this is
+    // not a typo, we must call Delete() and not Remove() here
+    return Delete(provider);
+}
+
+#endif // WXWIN_COMPATIBILITY_2_6
+
+// ============================================================================
+// wxArtProviderModule
+// ============================================================================
 
 class wxArtProviderModule: public wxModule
 {
 
 class wxArtProviderModule: public wxModule
 {
index 314e609089c8c76089b425dad8e6df69357413ba..c3e4fe994b110ace2d9cd26c0727d4a4a7e7bbc8 100644 (file)
@@ -74,7 +74,7 @@ protected:
 
 /*static*/ void wxArtProvider::InitStdProvider()
 {
 
 /*static*/ void wxArtProvider::InitStdProvider()
 {
-    wxArtProvider::PushProvider(new wxDefaultArtProvider);
+    wxArtProvider::Push(new wxDefaultArtProvider);
 }
 
 #if !defined(__WXGTK20__) || defined(__WXUNIVERSAL__)
 }
 
 #if !defined(__WXGTK20__) || defined(__WXUNIVERSAL__)
index 9d4c51c768147556f7bd44c1bce88855ac09e7e5..d42c6a69b154c5beb5127e08864fb5fe0d8578c3 100644 (file)
@@ -54,7 +54,7 @@ protected:
 
 /*static*/ void wxArtProvider::InitNativeProvider()
 {
 
 /*static*/ void wxArtProvider::InitNativeProvider()
 {
-    wxArtProvider::PushProvider(new wxGTK2ArtProvider);
+    wxArtProvider::Push(new wxGTK2ArtProvider);
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
index ec64045d058492456e22bbf93ee76dcf60893233..2eb31fb1d4af442b68a6e801eec3ef04408a05af 100644 (file)
@@ -137,7 +137,7 @@ wxThemeInfo::wxThemeInfo(Constructor c,
         // has one
         wxArtProvider *art = ms_theme->GetArtProvider();
         if ( art )
         // has one
         wxArtProvider *art = ms_theme->GetArtProvider();
         if ( art )
-            wxArtProvider::PushProvider(art);
+            wxArtProvider::Push(art);
     }
 
     return themeOld;
     }
 
     return themeOld;
index 5715566f5b228407f3f4bb731ca72ccecf7ea45a..e0fd1f8fe1a4cbf2c761a319efce5e0d93125b86 100644 (file)
@@ -563,7 +563,7 @@ wxGTKTheme::~wxGTKTheme()
 {
     delete m_renderer;
     delete m_scheme;
 {
     delete m_renderer;
     delete m_scheme;
-    wxArtProvider::RemoveProvider(m_artProvider);
+    delete m_artProvider;
 }
 
 wxRenderer *wxGTKTheme::GetRenderer()
 }
 
 wxRenderer *wxGTKTheme::GetRenderer()
index 090b85902fadfe5d55b20dbb65a4e891103f8d3b..a4ffd5f06dc280ef11146ea6cb271e1b3728aa9f 100644 (file)
@@ -511,7 +511,7 @@ wxMonoTheme::~wxMonoTheme()
 {
     delete m_renderer;
     delete m_scheme;
 {
     delete m_renderer;
     delete m_scheme;
-    wxArtProvider::RemoveProvider(m_artProvider);
+    delete m_artProvider;
 }
 
 wxRenderer *wxMonoTheme::GetRenderer()
 }
 
 wxRenderer *wxMonoTheme::GetRenderer()
index 0e3ffe146fe4abe8cc0a0309f86b776e966fbe24..5aa723165f47ac701fc80e5f3132ccd957d99bef 100644 (file)
@@ -1069,7 +1069,7 @@ wxWin32Theme::~wxWin32Theme()
 {
     delete m_renderer;
     delete m_scheme;
 {
     delete m_renderer;
     delete m_scheme;
-    wxArtProvider::RemoveProvider(m_artProvider);
+    delete m_artProvider;
 }
 
 wxRenderer *wxWin32Theme::GetRenderer()
 }
 
 wxRenderer *wxWin32Theme::GetRenderer()