Commit 5ed93126 authored by JP Dinger's avatar JP Dinger

Skins2: Cut #define down to size. Should result in identical functionality.

parent 6217711a
......@@ -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
......@@ -27,43 +28,43 @@
#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 )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment