]> git.sesse.net Git - vlc/commitdiff
Skins2: Cut #define down to size. Should result in identical functionality.
authorJP Dinger <jpd@videolan.org>
Thu, 10 Sep 2009 08:47:36 +0000 (10:47 +0200)
committerJP Dinger <jpd@videolan.org>
Thu, 10 Sep 2009 08:47:36 +0000 (10:47 +0200)
modules/gui/skins2/commands/cmd_callbacks.hpp

index 521002fc89831dc67868fc14bfe74efe9f2e3157..d3c36dc43742549f1974ee7ec4985e1a62f7fe1a 100644 (file)
@@ -5,6 +5,7 @@
  * $Id$
  *
  * Author: Erwan Tulou      <erwan10 aT videolan doT org >
+ *         JP Dinger        <jpd (at) videolan (dot) org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,9 +17,9 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 #ifndef CMD_CALLBACKS_HPP
 #include "cmd_generic.hpp"
 #include "../src/vlcproc.hpp"
 
+class CmdLabeled : public CmdGeneric
+{
+private:
+    vlc_object_t *m_pObj;
+    vlc_value_t   m_newVal;
+protected:
+    void execute_on( void (VlcProc::*on_label)(vlc_object_t *,vlc_value_t) )
+    {
+        if( !m_pObj )
+            return;
 
-#define ADD_COMMAND( label )                                           \
-class Cmd_##label : public CmdGeneric                                  \
-{                                                                      \
-    public:                                                            \
-        Cmd_##label( intf_thread_t *pIntf,                             \
-            vlc_object_t *pObj, vlc_value_t newVal )                   \
-            : CmdGeneric( pIntf ), m_pObj( pObj ), m_newVal( newVal )  \
-        {                                                              \
-            if( m_pObj )                                               \
-                vlc_object_hold( m_pObj );                             \
-        }                                                              \
-        virtual ~Cmd_##label()                                         \
-        {                                                              \
-            if( m_pObj )                                               \
-                vlc_object_release( m_pObj );                          \
-        }                                                              \
-                                                                       \
-        virtual void execute()                                         \
-        {                                                              \
-            if( !m_pObj )                                              \
-                return;                                                \
-                                                                       \
-            VlcProc* p_VlcProc = VlcProc::instance( getIntf() );       \
-            p_VlcProc->on_##label( m_pObj, m_newVal );                 \
-                                                                       \
-            vlc_object_release( m_pObj );                              \
-            m_pObj =  NULL;                                            \
-        }                                                              \
-                                                                       \
-        virtual string getType() const { return #label ; }              \
-                                                                       \
-    private:                                                           \
-        vlc_object_t* m_pObj;                                          \
-        vlc_value_t   m_newVal;                                        \
+        (VlcProc::instance( getIntf() )->*on_label)( m_pObj, m_newVal );
+
+        vlc_object_release( m_pObj );
+        m_pObj =  NULL;
+    }
+    CmdLabeled( intf_thread_t *pIntf, vlc_object_t *pObj, vlc_value_t newVal )
+              : CmdGeneric( pIntf ), m_pObj( pObj ), m_newVal( newVal )
+    {
+        if( m_pObj )
+            vlc_object_hold( m_pObj );
+    }
+public:
+    virtual ~CmdLabeled() {
+        if( m_pObj )
+            vlc_object_release( m_pObj );
+    }
 };
 
+#define ADD_COMMAND( label )                                            \
+    class Cmd_##label : public CmdLabeled                               \
+    {   public:                                                         \
+        Cmd_##label( intf_thread_t *I, vlc_object_t *O, vlc_value_t V ) \
+                   : CmdLabeled (I, O, V) { }                           \
+        virtual string getType() const { return #label; }               \
+        virtual void execute() { execute_on( &VlcProc::on_##label ); }  \
+    };
 
 ADD_COMMAND( item_current_changed )
 ADD_COMMAND( intf_event_changed )