]> git.sesse.net Git - vlc/commitdiff
Support for passing an argument from subject to observer
authorClément Stenac <zorglub@videolan.org>
Sat, 3 Dec 2005 16:02:32 +0000 (16:02 +0000)
committerClément Stenac <zorglub@videolan.org>
Sat, 3 Dec 2005 16:02:32 +0000 (16:02 +0000)
34 files changed:
modules/gui/skins2/controls/ctrl_button.cpp
modules/gui/skins2/controls/ctrl_button.hpp
modules/gui/skins2/controls/ctrl_generic.cpp
modules/gui/skins2/controls/ctrl_generic.hpp
modules/gui/skins2/controls/ctrl_list.cpp
modules/gui/skins2/controls/ctrl_list.hpp
modules/gui/skins2/controls/ctrl_radialslider.cpp
modules/gui/skins2/controls/ctrl_radialslider.hpp
modules/gui/skins2/controls/ctrl_slider.cpp
modules/gui/skins2/controls/ctrl_slider.hpp
modules/gui/skins2/controls/ctrl_text.cpp
modules/gui/skins2/controls/ctrl_text.hpp
modules/gui/skins2/controls/ctrl_tree.cpp
modules/gui/skins2/controls/ctrl_tree.hpp
modules/gui/skins2/controls/ctrl_video.cpp
modules/gui/skins2/controls/ctrl_video.hpp
modules/gui/skins2/src/anim_bitmap.hpp
modules/gui/skins2/src/generic_window.cpp
modules/gui/skins2/src/generic_window.hpp
modules/gui/skins2/src/tooltip.cpp
modules/gui/skins2/src/tooltip.hpp
modules/gui/skins2/utils/observer.hpp
modules/gui/skins2/utils/position.hpp
modules/gui/skins2/utils/var_bool.cpp
modules/gui/skins2/utils/var_bool.hpp
modules/gui/skins2/utils/var_list.hpp
modules/gui/skins2/utils/var_percent.cpp
modules/gui/skins2/utils/var_percent.hpp
modules/gui/skins2/utils/var_text.cpp
modules/gui/skins2/utils/var_text.hpp
modules/gui/skins2/utils/var_tree.hpp
modules/gui/skins2/vars/equalizer.cpp
modules/gui/skins2/vars/equalizer.hpp
modules/gui/skins2/vars/playtree.cpp

index eec39d7edd210d829ce42fbaaf2ad25afc8d71f9..c97cb1d7063500c64528c1478174d927bc97adbd 100644 (file)
@@ -131,7 +131,7 @@ void CtrlButton::setImage( AnimBitmap *pImg )
 }
 
 
-void CtrlButton::onUpdate( Subject<AnimBitmap> &rBitmap )
+void CtrlButton::onUpdate( Subject<AnimBitmap, void*> &rBitmap, void *arg )
 {
     notifyLayout();
 }
index eb88a06b5aa19f0ebfd88f3fb392a49ec962c830..45747524b66dbd1cf3a464f669237c6834bae0d6 100644 (file)
@@ -34,7 +34,7 @@ class CmdGeneric;
 
 
 /// Base class for button controls
-class CtrlButton: public CtrlGeneric, public Observer<AnimBitmap>
+class CtrlButton: public CtrlGeneric, public Observer<AnimBitmap, void*>
 {
     public:
         /// Create a button with 3 images
@@ -88,7 +88,7 @@ class CtrlButton: public CtrlGeneric, public Observer<AnimBitmap>
         void setImage( AnimBitmap *pImg );
 
         /// Method called when an animated bitmap changes
-        virtual void onUpdate( Subject<AnimBitmap> &rBitmap );
+        virtual void onUpdate( Subject<AnimBitmap, void*> &rBitmap, void* );
 };
 
 
index e19fb28ed6c04eba1c314c5af0beb9e3824461d5..00c9ba0162dd032b8366789e7251f87fa4ccf02a 100644 (file)
@@ -155,7 +155,7 @@ bool CtrlGeneric::isVisible() const
 }
 
 
-void CtrlGeneric::onUpdate( Subject<VarBool> &rVariable )
+void CtrlGeneric::onUpdate( Subject<VarBool, void*> &rVariable, void *arg  )
 {
     // Is it the visibility variable ?
     if( &rVariable == m_pVisible )
index 861c45976f92d16a16c268db8749a5a8efaed87c..e76c9287674fba58e94423b35c3e88c811da041c 100644 (file)
@@ -41,7 +41,7 @@ class VarBool;
 
 
 /// Base class for controls
-class CtrlGeneric: public SkinObject, public Observer<VarBool>
+class CtrlGeneric: public SkinObject, public Observer<VarBool, void*>
 {
     public:
         virtual ~CtrlGeneric();
@@ -128,7 +128,7 @@ class CtrlGeneric: public SkinObject, public Observer<VarBool>
         VarBool *m_pVisible;
 
         /// Method called when an observed bool variable is changed
-        virtual void onUpdate( Subject<VarBool> &rVariable );
+        virtual void onUpdate( Subject<VarBool, void*> &rVariable , void* );
 };
 
 typedef CountedPtr<CtrlGeneric> CtrlGenericPtr;
index e533a1e9f571eabd5041d3923f17c2c31e4e0944..4a6a4afebe6e0402ec5d3e7d5e4cedfa05ff7d91 100644 (file)
@@ -72,14 +72,14 @@ CtrlList::~CtrlList()
 }
 
 
-void CtrlList::onUpdate( Subject<VarList> &rList )
+void CtrlList::onUpdate( Subject<VarList, void*> &rList, void *arg  )
 {
     autoScroll();
     m_pLastSelected = NULL;
 }
 
 
-void CtrlList::onUpdate( Subject<VarPercent> &rPercent )
+void CtrlList::onUpdate( Subject<VarPercent, void*> &rPercent, void *arg  )
 {
     // Get the size of the control
     const Position *pPos = getPosition();
index b757b301d621832d7346a0e5c4fbc82ef224142b..685b849baa3189ec2ed22afff4df46db68867921 100644 (file)
@@ -35,8 +35,8 @@ class GenericBitmap;
 
 
 /// Class for control list
-class CtrlList: public CtrlGeneric, public Observer<VarList>,
-    public Observer<VarPercent>
+class CtrlList: public CtrlGeneric, public Observer<VarList, void*>,
+    public Observer<VarPercent, void *>
 {
     public:
         CtrlList( intf_thread_t *pIntf, VarList &rList,
@@ -88,10 +88,10 @@ class CtrlList: public CtrlGeneric, public Observer<VarList>,
         int m_lastPos;
 
         /// Method called when the list variable is modified
-        virtual void onUpdate( Subject<VarList> &rList );
+        virtual void onUpdate( Subject<VarList, void*> &rList, void* );
 
         /// Method called when the position variable of the list is modified
-        virtual void onUpdate( Subject<VarPercent> &rPercent );
+        virtual void onUpdate( Subject<VarPercent, void*> &rPercent, void*  );
 
         /// Called when the position is set
         virtual void onPositionChange();
index 24df9a694135732c4da37981104d7bb72b6f7ac1..7bdafa8d2bfcebdf7983150a7d0c33f118435cb0 100644 (file)
@@ -98,7 +98,8 @@ void CtrlRadialSlider::draw( OSGraphics &rImage, int xDest, int yDest )
 }
 
 
-void CtrlRadialSlider::onUpdate( Subject<VarPercent> &rVariable )
+void CtrlRadialSlider::onUpdate( Subject<VarPercent,void*> &rVariable,
+                                 void *arg  )
 {
     m_position = (int)( m_rVariable.get() * m_numImg );
     notifyLayout( m_width, m_height );
index c0a75fe8cf63fda3a48e2b4382047c49820b4f04..df01307e23b502223e7f30a3924830a7e57e9e28 100644 (file)
@@ -36,7 +36,7 @@ class VarPercent;
 
 
 /// Radial slider
-class CtrlRadialSlider: public CtrlGeneric, public Observer<VarPercent>
+class CtrlRadialSlider: public CtrlGeneric, public Observer<VarPercent, void*>
 {
     public:
         /// Create a radial slider with the given image, which must be
@@ -86,7 +86,7 @@ class CtrlRadialSlider: public CtrlGeneric, public Observer<VarPercent>
         DEFINE_CALLBACK( CtrlRadialSlider, Move )
 
         /// Method called when the observed variable is modified
-        virtual void onUpdate( Subject<VarPercent> &rVariable );
+        virtual void onUpdate( Subject<VarPercent,void*> &rVariable, void* );
 
         /// Change the position of the cursor, with the given position of
         /// the mouse (relative to the layout). Is blocking is true, the
index 1973d5f2abccca131ac57102e166e3cde2b29609..864e49ab90a8668833cda7b19dfb592ffec4c79e 100644 (file)
@@ -159,7 +159,8 @@ void CtrlSliderCursor::draw( OSGraphics &rImage, int xDest, int yDest )
 }
 
 
-void CtrlSliderCursor::onUpdate( Subject<VarPercent> &rVariable )
+void CtrlSliderCursor::onUpdate( Subject<VarPercent,void*> &rVariable,
+                                 void *arg  )
 {
     // The position has changed
     refreshLayout();
@@ -425,7 +426,7 @@ void CtrlSliderBg::associateCursor( CtrlSliderCursor &rCursor )
 }
 
 
-void CtrlSliderBg::onUpdate( Subject<VarPercent> &rVariable )
+void CtrlSliderBg::onUpdate( Subject<VarPercent, void*> &rVariable, void*arg )
 {
     m_position = (int)( m_rVariable.get() * (m_nbHoriz * m_nbVert - 1) );
     notifyLayout( m_bgWidth, m_bgHeight );
index ea1903651f7f40115899b3eac2240ae490c2d49e..b6c97bc092e1afb0c50c1a6617574d0d0545ea4d 100644 (file)
@@ -37,7 +37,7 @@ class VarPercent;
 
 
 /// Cursor of a slider
-class CtrlSliderCursor: public CtrlGeneric, public Observer<VarPercent>
+class CtrlSliderCursor: public CtrlGeneric, public Observer<VarPercent, void*>
 {
     public:
         /// Create a cursor with 3 images (which are NOT copied, be careful)
@@ -98,7 +98,7 @@ class CtrlSliderCursor: public CtrlGeneric, public Observer<VarPercent>
         const Bezier &m_rCurve;
 
         /// Method called when the position variable is modified
-        virtual void onUpdate( Subject<VarPercent> &rVariable );
+        virtual void onUpdate( Subject<VarPercent,void*> &rVariable, void * );
 
         /// Method to compute the resize factors
         void getResizeFactors( float &rFactorX, float &rFactorY ) const;
@@ -109,7 +109,7 @@ class CtrlSliderCursor: public CtrlGeneric, public Observer<VarPercent>
 
 
 /// Slider background
-class CtrlSliderBg: public CtrlGeneric, public Observer<VarPercent>
+class CtrlSliderBg: public CtrlGeneric, public Observer<VarPercent, void*>
 {
     public:
         CtrlSliderBg( intf_thread_t *pIntf,
@@ -157,7 +157,7 @@ class CtrlSliderBg: public CtrlGeneric, public Observer<VarPercent>
         int m_position;
 
         /// Method called when the observed variable is modified
-        virtual void onUpdate( Subject<VarPercent> &rVariable );
+        virtual void onUpdate( Subject<VarPercent,void*> &rVariable, void* );
 
         /// Method to compute the resize factors
         void getResizeFactors( float &rFactorX, float &rFactorY ) const;
index 9e3a9df90d98264c82859a53147b16a714a6925f..e71aa1ff8bf77ef7f606a0aa364b1d524903cec7 100644 (file)
@@ -214,7 +214,7 @@ void CtrlText::setText( const UString &rText, uint32_t color )
 }
 
 
-void CtrlText::onUpdate( Subject<VarText> &rVariable )
+void CtrlText::onUpdate( Subject<VarText, void*> &rVariable, void* arg )
 {
     displayText( m_rVariable.get() );
 }
index 490d4e501e51e4f5bf236893e6cc5764201e5bdc..31c2a7f1b16b3f0cbeed39dd6c884a4e9639b119 100644 (file)
@@ -38,7 +38,7 @@ class VarText;
 
 
 /// Class for control text
-class CtrlText: public CtrlGeneric, public Observer<VarText>
+class CtrlText: public CtrlGeneric, public Observer<VarText, void*>
 {
     public:
         enum Align_t
@@ -122,7 +122,7 @@ class CtrlText: public CtrlGeneric, public Observer<VarText>
         DEFINE_CALLBACK( CtrlText, UpdateText );
 
         /// Method called when the observed variable is modified
-        virtual void onUpdate( Subject<VarText> &rVariable );
+        virtual void onUpdate( Subject<VarText,void*> &rVariable, void* );
 
         /// Display the text on the control
         void displayText( const UString &rText );
index 3bbd3c0635519df2058f1a7761897bb8f9c6a276..3dce075d2f7fceed7d1055834a1786b19f69334f 100644 (file)
@@ -130,13 +130,14 @@ int CtrlTree::maxItems()
 }
 
 
-void CtrlTree::onUpdate( Subject<VarTree> &rTree )
+void CtrlTree::onUpdate( Subject<VarTree, int> &rTree,  int arg )
 {
+    fprintf( stderr, "Doing update type %i\n", arg );
     autoScroll();
     m_pLastSelected = NULL;
 }
 
-void CtrlTree::onUpdate( Subject<VarPercent> &rPercent )
+void CtrlTree::onUpdate( Subject<VarPercent, void*> &rPercent, void* arg)
 {
     // Determine what is the first item to display
     VarTree::Iterator it = m_rTree.begin();
index f4a39f2d47c32b2bef6f4075532bbaeab1f4b459..e8f13f5ee0143eee9defbd8bfe566601f581c48d 100644 (file)
@@ -33,8 +33,8 @@ class GenericFont;
 class GenericBitmap;
 
 /// Class for control tree
-class CtrlTree: public CtrlGeneric, public Observer<VarTree>,
-    public Observer<VarPercent>
+class CtrlTree: public CtrlGeneric, public Observer<VarTree, int>,
+    public Observer<VarPercent, void*>
 {
     public:
         CtrlTree( intf_thread_t *pIntf,
@@ -102,10 +102,10 @@ class CtrlTree: public CtrlGeneric, public Observer<VarTree>,
         VarTree::Iterator m_lastPos;
 
         /// Method called when the tree variable is modified
-        virtual void onUpdate( Subject<VarTree> &rTree );
+        virtual void onUpdate( Subject<VarTree, int> &rTree , int);
 
         // Method called when the position variable of the tree is modified
-        virtual void onUpdate( Subject<VarPercent> &rPercent );
+        virtual void onUpdate( Subject<VarPercent, void *> &rPercent , void *);
 
         /// Called when the position is set
         virtual void onPositionChange();
index 6bedf51ff0806d4a0641ca2f2ce1b313b74377d7..ca1b4c57f8fc2e40d7db839c58872ff3137b4b6e 100644 (file)
@@ -109,7 +109,7 @@ void CtrlVideo::draw( OSGraphics &rImage, int xDest, int yDest )
 }
 
 
-void CtrlVideo::onUpdate( Subject<VarBox> &rVoutSize )
+void CtrlVideo::onUpdate( Subject<VarBox, void *> &rVoutSize, void *arg )
 {
     int newWidth = ((VarBox&)rVoutSize).getWidth() + m_xShift;
     int newHeight = ((VarBox&)rVoutSize).getHeight() + m_yShift;
index a0303d819e1c104648c7c6023158f7011e3bca44..de19407d737cb3c90f60b6a2e29e81949704f235 100644 (file)
@@ -30,7 +30,7 @@
 class VoutWindow;
 
 /// Control video
-class CtrlVideo: public CtrlGeneric, public Observer<VarBox>
+class CtrlVideo: public CtrlGeneric, public Observer<VarBox, void*>
 {
     public:
         CtrlVideo( intf_thread_t *pIntf, GenericLayout &rLayout,
@@ -56,7 +56,7 @@ class CtrlVideo: public CtrlGeneric, public Observer<VarBox>
         virtual string getType() const { return "video"; }
 
         /// Method called when the vout size is updated
-        virtual void onUpdate( Subject<VarBox> &rVoutSize );
+        virtual void onUpdate( Subject<VarBox,void*> &rVoutSize, void* );
 
     private:
         /// Vout window
index 2339c4e4148ecde57d6a1b1f5bbde98a4a176ca1..5b7a7d9f26d5c9ef742af76338228480e4957501 100644 (file)
@@ -34,7 +34,8 @@ class OSTimer;
 
 
 /// Animated bitmap
-class AnimBitmap: public SkinObject, public Box, public Subject<AnimBitmap>
+class AnimBitmap: public SkinObject, public Box,
+                  public Subject<AnimBitmap, void*>
 {
     public:
         AnimBitmap( intf_thread_t *pIntf, const GenericBitmap &rBitmap );
index 4710ae2d0d2345bc19dbad48ae8b553404942cba..36593bd474923cf9fa57dda35850eb5946ada64b 100644 (file)
@@ -122,7 +122,7 @@ void GenericWindow::toggleOnTop( bool onTop ) const
 }
 
 
-void GenericWindow::onUpdate( Subject<VarBool> &rVariable )
+void GenericWindow::onUpdate( Subject<VarBool, void*> &rVariable, void*arg )
 {
     if( m_varVisible.get() )
     {
index 890deb5b2bffe98446e2392ff5c22c9025c15242..f2110f26c17943d79416d5eaef95722490e11fd0 100644 (file)
@@ -41,7 +41,7 @@ class WindowManager;
 
 
 /// Generic window class
-class GenericWindow: public SkinObject, public Observer<VarBool>
+class GenericWindow: public SkinObject, public Observer<VarBool, void*>
 {
     private:
         friend class WindowManager;
@@ -120,7 +120,7 @@ class GenericWindow: public SkinObject, public Observer<VarBool>
         mutable VarBoolImpl m_varVisible;
 
         /// Method called when the observed variable is modified
-        virtual void onUpdate( Subject<VarBool> &rVariable );
+        virtual void onUpdate( Subject<VarBool, void*> &rVariable , void*);
 };
 
 
index f8f37b2065f67c34d70da21f0248cb96512f0218..4d6ac943912c9168a904f48f25a7bd8850ee9e28 100644 (file)
@@ -74,7 +74,7 @@ void Tooltip::hide()
 }
 
 
-void Tooltip::onUpdate( Subject<VarText> &rVariable )
+void Tooltip::onUpdate( Subject<VarText, void*> &rVariable , void *arg)
 {
     // Redisplay the tooltip
     displayText( ((VarText&)rVariable).get() );
index 2e6648737ec04dea66f93787fc114b1bf246d789..0f375e51f71507c215bc859254192db2586673d4 100644 (file)
@@ -35,7 +35,7 @@ class OSGraphics;
 class UString;
 
 
-class Tooltip: public SkinObject, public Observer<VarText>
+class Tooltip: public SkinObject, public Observer<VarText, void*>
 {
     public:
         /// Create a tooltip with the given font and delay (in milliseconds)
@@ -65,7 +65,7 @@ class Tooltip: public SkinObject, public Observer<VarText>
         int m_xPos, m_yPos;
 
         /// Method called when the observed variable is modified
-        virtual void onUpdate( Subject<VarText> &rVariable );
+        virtual void onUpdate( Subject<VarText,void*> &rVariable, void * );
 
         /// Display text of the tooltip
         void displayText( const UString &rText );
index a7adee3f23f35d5cd90b82aa33b2ed2f95a5a7ac..e62fa93c5114cf30afbeca3faa8968949807db1c 100644 (file)
 #include <set>
 
 // Forward declaration
-template <class S> class Observer;
+template <class S, class ARG> class Observer;
 
 
 /// Template for subjects in the Observer design pattern
-template <class S> class Subject
+template <class S, class ARG> class Subject
 {
     public:
         virtual ~Subject() {}
@@ -45,23 +45,23 @@ template <class S> class Subject
 
         /// Add an observer to this subject
         /// Note: adding twice the same observer is not harmful
-        virtual void addObserver( Observer<S>* pObserver )
+        virtual void addObserver( Observer<S, ARG>* pObserver )
         {
             m_observers.insert( pObserver );
         }
 
         /// Remove an observer from this subject
         /// Note: removing twice the same observer is not harmful
-        virtual void delObserver( Observer<S>* pObserver )
+        virtual void delObserver( Observer<S, ARG>* pObserver )
         {
             m_observers.erase( pObserver );
         }
 
         /// Notify the observers when the status has changed
-        virtual void notify()
+        virtual void notify( ARG arg )
         {
             // This stupid gcc 3.2 needs "typename"
-            typename set<Observer<S>*>::const_iterator iter;
+            typename set<Observer<S, ARG>*>::const_iterator iter;
             for( iter = m_observers.begin(); iter != m_observers.end();
                  iter++ )
             {
@@ -70,27 +70,30 @@ template <class S> class Subject
                     fprintf( stderr, "iter NULL !\n" );
                     return;
                 }
-                (*iter)->onUpdate( *this );
+                (*iter)->onUpdate( *this , arg );
             }
         }
 
+        /// Notify without any argument
+        virtual void notify() { notify( NULL ); }
+
     protected:
         Subject() {}
 
     private:
         /// Set of observers for this subject
-        set<Observer<S>*> m_observers;
+        set<Observer<S, ARG>*> m_observers;
 };
 
 
 /// Template for observers in the Observer design pattern
-template <class S> class Observer
+template <class S, class ARG> class Observer
 {
     public:
         virtual ~Observer() {}
 
         /// Method called when the subject is modified
-        virtual void onUpdate( Subject<S> &rSubject ) = 0;
+        virtual void onUpdate( Subject<S,ARG> &rSubject , ARG arg) = 0;
 
     protected:
         Observer() {}
index 30baecdf429c432045ebf52d15f2aa5a90507054..7eb7a6f6da2d18b09c46b0d680a3ed3e95c973d1 100644 (file)
@@ -109,7 +109,7 @@ class Position
 
 
 /// Variable implementing the Box interface
-class VarBox: public Variable, public Box, public Subject<VarBox>
+class VarBox: public Variable, public Box, public Subject<VarBox, void*>
 {
     public:
         VarBox( intf_thread_t *pIntf, int width = 0, int height = 0 );
index b1ac55e993e7fc43525dda4c39ab9e6923100878..37703a0b0d7a766b1463e892936e526c968ce395 100644 (file)
@@ -60,7 +60,7 @@ VarBoolAndBool::~VarBoolAndBool()
 }
 
 
-void VarBoolAndBool::onUpdate( Subject<VarBool> &rVariable )
+void VarBoolAndBool::onUpdate( Subject<VarBool,void *> &rVariable, void *arg )
 {
     notify();
 }
@@ -82,7 +82,7 @@ VarBoolOrBool::~VarBoolOrBool()
 }
 
 
-void VarBoolOrBool::onUpdate( Subject<VarBool> &rVariable )
+void VarBoolOrBool::onUpdate( Subject<VarBool,void*> &rVariable , void*arg)
 {
     notify();
 }
@@ -101,7 +101,7 @@ VarNotBool::~VarNotBool()
 }
 
 
-void VarNotBool::onUpdate( Subject<VarBool> &rVariable )
+void VarNotBool::onUpdate( Subject<VarBool, void*> &rVariable, void*arg )
 {
     notify();
 }
index 0c1daadc38c23b36d82d1cc7a567036fd874656d..fb4f4e4a26c46607dd739cc86bac6c4e837e81ee 100644 (file)
@@ -30,7 +30,7 @@
 
 
 /// Interface for read-only boolean variable
-class VarBool: public Variable, public Subject<VarBool>
+class VarBool: public Variable, public Subject<VarBool, void *>
 {
     public:
         /// Get the variable type
@@ -89,7 +89,7 @@ class VarBoolImpl: public VarBool
 
 
 /// Conjunction of two boolean variables (AND)
-class VarBoolAndBool: public VarBool, public Observer<VarBool>
+class VarBoolAndBool: public VarBool, public Observer<VarBool, void*>
 {
     public:
         VarBoolAndBool( intf_thread_t *pIntf, VarBool &rVar1, VarBool &rVar2 );
@@ -99,7 +99,7 @@ class VarBoolAndBool: public VarBool, public Observer<VarBool>
         virtual bool get() const { return m_rVar1.get() && m_rVar2.get(); }
 
         // Called when one of the observed variables is changed
-        void onUpdate( Subject<VarBool> &rVariable );
+        void onUpdate( Subject<VarBool, void*> &rVariable, void* );
 
     private:
         /// Boolean variables
@@ -108,7 +108,7 @@ class VarBoolAndBool: public VarBool, public Observer<VarBool>
 
 
 /// Disjunction of two boolean variables (OR)
-class VarBoolOrBool: public VarBool, public Observer<VarBool>
+class VarBoolOrBool: public VarBool, public Observer<VarBool, void*>
 {
     public:
         VarBoolOrBool( intf_thread_t *pIntf, VarBool &rVar1, VarBool &rVar2 );
@@ -118,7 +118,7 @@ class VarBoolOrBool: public VarBool, public Observer<VarBool>
         virtual bool get() const { return m_rVar1.get() || m_rVar2.get(); }
 
         // Called when one of the observed variables is changed
-        void onUpdate( Subject<VarBool> &rVariable );
+        void onUpdate( Subject<VarBool, void*> &rVariable, void* );
 
     private:
         /// Boolean variables
@@ -127,7 +127,7 @@ class VarBoolOrBool: public VarBool, public Observer<VarBool>
 
 
 /// Negation of a boolean variable (NOT)
-class VarNotBool: public VarBool, public Observer<VarBool>
+class VarNotBool: public VarBool, public Observer<VarBool, void*>
 {
     public:
         VarNotBool( intf_thread_t *pIntf, VarBool &rVar );
@@ -137,7 +137,7 @@ class VarNotBool: public VarBool, public Observer<VarBool>
         virtual bool get() const { return !m_rVar.get(); }
 
         // Called when the observed variable is changed
-        void onUpdate( Subject<VarBool> &rVariable );
+        void onUpdate( Subject<VarBool, void*> &rVariable, void* );
 
     private:
         /// Boolean variable
index d6f0863a01800e419efa71a2b5fd263e88077440..65498371b7668613b4227982542b919c752ecec6 100644 (file)
@@ -34,7 +34,7 @@
 
 
 /// List variable
-class VarList: public Variable, public Subject<VarList>
+class VarList: public Variable, public Subject<VarList, void* >
 {
     public:
         VarList( intf_thread_t *pIntf );
index 75ecc2ef370eb21bf7217c1e8d50d8c2c207cd0c..a3c89f27f8fd7e0d60337f96f201ac3eabb92ccb 100644 (file)
@@ -43,7 +43,7 @@ void VarPercent::set( float percentage )
     if( m_value != percentage )
     {
         m_value = percentage;
-        notify();
+        notify( NULL );
     }
 }
 
index ef705182e17c79e59693e637030370696b20138a..0f2a7d380ada8aedde28c0855f1231d1b6b65bee 100644 (file)
@@ -32,7 +32,7 @@ class VarPercent;
 
 
 /// Percentage variable
-class VarPercent: public Variable, public Subject<VarPercent>
+class VarPercent: public Variable, public Subject<VarPercent, void*>
 {
     public:
         VarPercent( intf_thread_t *pIntf ): Variable( pIntf ), m_value( 0 ) {}
index 9ede9fe9c24e75b8b1e7c4065fe44cd89310354c..bb9a032e1eeb45cce38b059ec062822a96eee5e4 100644 (file)
@@ -185,7 +185,7 @@ void VarText::set( const UString &rText )
 }
 
 
-void VarText::onUpdate( Subject<VarPercent> &rVariable )
+void VarText::onUpdate( Subject<VarPercent, void*> &rVariable, void *arg )
 {
     UString newText = get();
     // If the text has changed, notify the observers
@@ -197,7 +197,7 @@ void VarText::onUpdate( Subject<VarPercent> &rVariable )
 }
 
 
-void VarText::onUpdate( Subject<VarText> &rVariable )
+void VarText::onUpdate( Subject<VarText,void*> &rVariable, void *arg )
 {
     UString newText = get();
     // If the text has changed, notify the observers
index 17bca93ca2bafbddb5584949f496c34c4fec4106..ad74c0dcd642904fdabb3b86e20bf7283b2b4df8 100644 (file)
@@ -32,8 +32,9 @@
 
 
 /// String variable
-class VarText: public Variable, public Subject<VarText>,
-               public Observer<VarPercent>, public Observer< VarText >
+class VarText: public Variable, public Subject<VarText, void*>,
+               public Observer<VarPercent, void*>,
+               public Observer< VarText,void*>
 {
     public:
         // Set substVars to true to replace "$X" variables in the text
@@ -48,8 +49,8 @@ class VarText: public Variable, public Subject<VarText>,
         virtual const UString get() const;
 
         /// Methods called when an observed variable is modified
-        virtual void onUpdate( Subject<VarPercent> &rVariable );
-        virtual void onUpdate( Subject<VarText> &rVariable );
+        virtual void onUpdate( Subject<VarPercent, void*> &rVariable, void* );
+        virtual void onUpdate( Subject<VarText, void*> &rVariable, void* );
 
     private:
         /// Variable type
index 101d3188aa440ea537332fe3c591c5fdf0e2ca55..9e9b8d3b88f7649bf4b84117184a76ac5eed0e61 100644 (file)
@@ -2,7 +2,7 @@
  * var_tree.hpp
  *****************************************************************************
  * Copyright (C) 2005 VideoLAN
- * $Id: var_bool.hpp 9934 2005-02-15 13:55:08Z courmisch $
+ * $Id$
  *
  * Authors: Antoine Cellerier <dionoea@videolan.org>
  *
@@ -32,7 +32,7 @@
 #include "var_percent.hpp"
 
 /// Tree variable
-class VarTree: public Variable, public Subject<VarTree>
+class VarTree: public Variable, public Subject<VarTree, int>
 {
     public:
         VarTree( intf_thread_t *pIntf );
index 87fca34fcb999419fc23c48ad6deb4abe437c61a..6057390f55b2d0fc9339e8b5a504899fb151f9a6 100644 (file)
@@ -77,7 +77,7 @@ VariablePtr EqualizerBands::getBand( int band )
 }
 
 
-void EqualizerBands::onUpdate( Subject<VarPercent> &rBand )
+void EqualizerBands::onUpdate( Subject<VarPercent,void*> &rBand, void *arg )
 {
     // Make sure we are not called from set()
     if (!m_isUpdating)
index 48bc031b78e5c87f88c5f2671206b03be9412ae4..7c8668ed5e07103cf27079bfd18e4532dba418ee 100644 (file)
@@ -29,7 +29,7 @@
 
 
 /// Variable for graphical equalizer
-class EqualizerBands: public SkinObject, public Observer<VarPercent>
+class EqualizerBands: public SkinObject, public Observer<VarPercent, void*>
 {
     public:
         /// Number of bands
@@ -52,7 +52,7 @@ class EqualizerBands: public SkinObject, public Observer<VarPercent>
         bool m_isUpdating;
 
         /// Callback for band updates
-        virtual void onUpdate( Subject<VarPercent> &rBand );
+        virtual void onUpdate( Subject<VarPercent, void*> &rBand , void *);
 };
 
 
index d63fa28a0f8830bca7e18d6104d9861506f1f5e6..66d18c832a63f38b587c6467d76953eeb7aec1d8 100644 (file)
@@ -78,7 +78,7 @@ void Playtree::delSelected()
         }
     }
     buildTree();
-    notify();
+    notify( 1 );
 }
 
 void Playtree::action( VarTree *pItem )
@@ -106,7 +106,7 @@ void Playtree::action( VarTree *pItem )
 void Playtree::onChange()
 {
     buildTree();
-    notify();
+    notify( 1 );
 }
 
 void Playtree::onUpdate( int id )
@@ -125,7 +125,7 @@ void Playtree::onUpdate( int id )
         msg_Warn(getIntf(), "Cannot find node with id %d", id );
     }
     // TODO update only the right node
-    notify();
+    notify( 0 );
 }
 
 void Playtree::buildNode( playlist_item_t *pNode, VarTree &rTree )