]> git.sesse.net Git - vlc/blobdiff - modules/gui/skins2/src/top_window.hpp
skins2: drap&drop enhancement
[vlc] / modules / gui / skins2 / src / top_window.hpp
index e952e69da29ec7da1a10f8c152181cb83c95a030..a64dd49d593bb8f814c6cf9defb5a0f1c53ffa7d 100644 (file)
@@ -1,11 +1,11 @@
 /*****************************************************************************
  * top_window.hpp
  *****************************************************************************
- * Copyright (C) 2003 VideoLAN
+ * Copyright (C) 2003 the VideoLAN team
  * $Id$
  *
  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
- *          Olivier Teulière <ipkiss@via.ecp.fr>
+ *          Olivier Teulière <ipkiss@via.ecp.fr>
  *
  * 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
@@ -17,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., 59 Temple Place - Suite 330, Boston, MA  02111, 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 TOP_WINDOW_HPP
@@ -39,69 +39,103 @@ class WindowManager;
 /// Class to handle top-level windows
 class TopWindow: public GenericWindow
 {
-    public:
-        TopWindow( intf_thread_t *pIntf, int xPos, int yPos,
-                       WindowManager &rWindowManager,
-                       bool dragDrop, bool playOnDrop );
-        virtual ~TopWindow();
-
-        /// Methods to process OS events.
-        virtual void processEvent( EvtFocus &rEvtFocus );
-        virtual void processEvent( EvtMotion &rEvtMotion );
-        virtual void processEvent( EvtMouse &rEvtMouse );
-        virtual void processEvent( EvtLeave &rEvtLeave );
-        virtual void processEvent( EvtKey &rEvtKey );
-        virtual void processEvent( EvtScroll &rEvtScroll );
-
-        /// Forward an event to a control
-        virtual void forwardEvent( EvtGeneric &rEvt, CtrlGeneric &rCtrl );
-
-        // Refresh an area of the window
-        virtual void refresh( int left, int top, int width, int height );
-
-        /// Change the active layout
-        virtual void setActiveLayout( GenericLayout *pLayout );
-
-        /// Get the active layout
-        virtual const GenericLayout& getActiveLayout() const;
-
-        /// Update the shape of the window from the active layout
-        virtual void updateShape();
-
-        /// Called by a control that wants to capture the mouse
-        virtual void onControlCapture( const CtrlGeneric &rCtrl );
-
-        /// Called by a control that wants to release the mouse
-        virtual void onControlRelease( const CtrlGeneric &rCtrl );
-
-        /// Called by a control when its tooltip changed
-        virtual void onTooltipChange( const CtrlGeneric &rCtrl );
-
-    protected:
-        /// Actually show the window
-        virtual void innerShow();
-
-    private:
-        /// Window manager
-        WindowManager &m_rWindowManager;
-        /// Current active layout of the window
-        GenericLayout *m_pActiveLayout;
-        /// Last control on which the mouse was over
-        CtrlGeneric *m_pLastHitControl;
-        /// Control that has captured the mouse
-        CtrlGeneric *m_pCapturingControl;
-        /// Control that has the focus
-        CtrlGeneric *m_pFocusControl;
-        /// Current key modifier (also used for mouse)
-        int m_currModifier;
-
-        /// Find the uppest control in the layout hit by the mouse, and send
-        /// it an enter event if needed
-        CtrlGeneric *findHitControl( int xPos, int yPos );
-
-        /// Update the lastHitControl pointer and send a leave event to the
-        /// right control
-        void setLastHit( CtrlGeneric *pNewHitControl );
+private:
+    friend class WindowManager;
+public:
+    TopWindow( intf_thread_t *pIntf, int xPos, int yPos,
+               WindowManager &rWindowManager,
+               bool dragDrop, bool playOnDrop, bool visible,
+               GenericWindow::WindowType_t type = GenericWindow::TopWindow );
+    virtual ~TopWindow();
+
+    /// Methods to process OS events.
+    virtual void processEvent( EvtFocus &rEvtFocus );
+    virtual void processEvent( EvtMenu &rEvtMenu );
+    virtual void processEvent( EvtMotion &rEvtMotion );
+    virtual void processEvent( EvtMouse &rEvtMouse );
+    virtual void processEvent( EvtLeave &rEvtLeave );
+    virtual void processEvent( EvtKey &rEvtKey );
+    virtual void processEvent( EvtScroll &rEvtScroll );
+    virtual void processEvent( EvtDragDrop &rEvtDragDrop );
+    virtual void processEvent( EvtDragOver &rEvtDragOver );
+    virtual void processEvent( EvtDragLeave &rEvtDragLeave );
+
+    /// Forward an event to a control
+    virtual void forwardEvent( EvtGeneric &rEvt, CtrlGeneric &rCtrl );
+
+    // Refresh an area of the window
+    virtual void refresh( int left, int top, int width, int height );
+
+    /// Get the active layout
+    virtual const GenericLayout& getActiveLayout() const;
+
+    /// Update the shape of the window from the active layout
+    virtual void updateShape();
+
+    /// Called by a control that wants to capture the mouse
+    virtual void onControlCapture( const CtrlGeneric &rCtrl );
+
+    /// Called by a control that wants to release the mouse
+    virtual void onControlRelease( const CtrlGeneric &rCtrl );
+
+    /// Called by a control when its tooltip changed
+    virtual void onTooltipChange( const CtrlGeneric &rCtrl );
+
+    /// Get the "maximized" variable
+    VarBool &getMaximizedVar() { return *m_pVarMaximized; }
+
+    /// Get the initial visibility status
+    bool getInitialVisibility() const { return m_initialVisibility; }
+
+protected:
+    /// Actually show the window
+    virtual void innerShow();
+
+    /// Actually hide the window
+    virtual void innerHide();
+
+private:
+    /**
+     * These methods are only used by the window manager
+     */
+    //@{
+    /// Change the active layout
+    virtual void setActiveLayout( GenericLayout *pLayout );
+    //@}
+
+    /// Initial visibility status
+    bool m_initialVisibility;
+    /// indicator if playback is requested on drag&drop
+    bool m_playOnDrop;
+    /// Window manager
+    WindowManager &m_rWindowManager;
+    /// Current active layout of the window
+    GenericLayout *m_pActiveLayout;
+    /// Last control on which the mouse was over
+    CtrlGeneric *m_pLastHitControl;
+    /// Control that has captured the mouse
+    CtrlGeneric *m_pCapturingControl;
+    /// Control that has the focus
+    CtrlGeneric *m_pFocusControl;
+    /// Control over which drag&drop is hovering
+    CtrlGeneric *m_pDragControl;
+    /// Current key modifier (also used for mouse)
+    int m_currModifier;
+
+    /// Variable for the visibility of the window
+    VarBoolImpl *m_pVarMaximized;
+
+    /**
+     * Find the uppest control in the layout hit by the mouse, and send
+     * it an enter event if needed
+     */
+    CtrlGeneric *findHitControl( int xPos, int yPos );
+
+    /**
+     * Update the lastHitControl pointer and send a leave event to the
+     * right control
+     */
+    void setLastHit( CtrlGeneric *pNewHitControl );
 };
 
 typedef CountedPtr<TopWindow> TopWindowPtr;