Commit 1e34cf51 authored by Cyril Deguet's avatar Cyril Deguet

* all: split GenericWindow into GenericWindow (general interface for

  windows) and TopWindow (implementation for top-level windows)
parent a5ca00dc
...@@ -112,6 +112,8 @@ SOURCES_skins2 = \ ...@@ -112,6 +112,8 @@ SOURCES_skins2 = \
src/theme_loader.hpp \ src/theme_loader.hpp \
src/tooltip.cpp \ src/tooltip.cpp \
src/tooltip.hpp \ src/tooltip.hpp \
src/top_window.cpp \
src/top_window.hpp \
src/var_manager.cpp \ src/var_manager.cpp \
src/var_manager.hpp \ src/var_manager.hpp \
src/vlcproc.cpp \ src/vlcproc.cpp \
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* cmd_layout.cpp * cmd_layout.cpp
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: cmd_layout.cpp,v 1.1 2004/01/03 23:31:33 asmax Exp $ * $Id$
* *
* Authors: Cyril Deguet <asmax@via.ecp.fr> * Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulire <ipkiss@via.ecp.fr> * Olivier Teulire <ipkiss@via.ecp.fr>
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
*****************************************************************************/ *****************************************************************************/
#include "cmd_layout.hpp" #include "cmd_layout.hpp"
#include "../src/generic_window.hpp" #include "../src/top_window.hpp"
#include "../src/generic_layout.hpp" #include "../src/generic_layout.hpp"
#include "../src/theme.hpp" #include "../src/theme.hpp"
...@@ -42,7 +42,7 @@ void CmdLayout::execute() ...@@ -42,7 +42,7 @@ void CmdLayout::execute()
{ {
return; return;
} }
GenericWindow *pWindow = TopWindow *pWindow =
getIntf()->p_sys->p_theme->getWindowById( m_windowId ); getIntf()->p_sys->p_theme->getWindowById( m_windowId );
GenericLayout *pLayout = GenericLayout *pLayout =
getIntf()->p_sys->p_theme->getLayoutById( m_layoutId ); getIntf()->p_sys->p_theme->getLayoutById( m_layoutId );
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#define CMD_SHOW_WINDOW_HPP #define CMD_SHOW_WINDOW_HPP
#include "cmd_generic.hpp" #include "cmd_generic.hpp"
#include "../src/generic_window.hpp" #include "../src/top_window.hpp"
#include "../src/window_manager.hpp" #include "../src/window_manager.hpp"
...@@ -35,7 +35,7 @@ class CmdShowWindow: public CmdGeneric ...@@ -35,7 +35,7 @@ class CmdShowWindow: public CmdGeneric
{ {
public: public:
CmdShowWindow( intf_thread_t *pIntf, WindowManager &rWinManager, CmdShowWindow( intf_thread_t *pIntf, WindowManager &rWinManager,
GenericWindow &rWin ): TopWindow &rWin ):
CmdGeneric( pIntf ), m_rWinManager( rWinManager ), m_rWin( rWin ) {} CmdGeneric( pIntf ), m_rWinManager( rWinManager ), m_rWin( rWin ) {}
virtual ~CmdShowWindow() {} virtual ~CmdShowWindow() {}
...@@ -49,7 +49,7 @@ class CmdShowWindow: public CmdGeneric ...@@ -49,7 +49,7 @@ class CmdShowWindow: public CmdGeneric
/// Reference to the window manager /// Reference to the window manager
WindowManager &m_rWinManager; WindowManager &m_rWinManager;
/// Reference to the window /// Reference to the window
GenericWindow &m_rWin; TopWindow &m_rWin;
}; };
...@@ -58,7 +58,7 @@ class CmdHideWindow: public CmdGeneric ...@@ -58,7 +58,7 @@ class CmdHideWindow: public CmdGeneric
{ {
public: public:
CmdHideWindow( intf_thread_t *pIntf, WindowManager &rWinManager, CmdHideWindow( intf_thread_t *pIntf, WindowManager &rWinManager,
GenericWindow &rWin ): TopWindow &rWin ):
CmdGeneric( pIntf ), m_rWinManager( rWinManager ), m_rWin( rWin ) {} CmdGeneric( pIntf ), m_rWinManager( rWinManager ), m_rWin( rWin ) {}
virtual ~CmdHideWindow() {} virtual ~CmdHideWindow() {}
...@@ -72,7 +72,7 @@ class CmdHideWindow: public CmdGeneric ...@@ -72,7 +72,7 @@ class CmdHideWindow: public CmdGeneric
/// Reference to the window manager /// Reference to the window manager
WindowManager &m_rWinManager; WindowManager &m_rWinManager;
/// Reference to the window /// Reference to the window
GenericWindow &m_rWin; TopWindow &m_rWin;
}; };
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ctrl_generic.cpp * ctrl_generic.cpp
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: ctrl_generic.cpp,v 1.2 2004/02/29 16:49:55 asmax Exp $ * $Id$
* *
* Authors: Cyril Deguet <asmax@via.ecp.fr> * Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulire <ipkiss@via.ecp.fr> * Olivier Teulire <ipkiss@via.ecp.fr>
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "ctrl_generic.hpp" #include "ctrl_generic.hpp"
#include "../src/generic_layout.hpp" #include "../src/generic_layout.hpp"
#include "../src/generic_window.hpp" #include "../src/top_window.hpp"
#include "../src/os_graphics.hpp" #include "../src/os_graphics.hpp"
#include "../utils/position.hpp" #include "../utils/position.hpp"
#include "../utils/var_bool.hpp" #include "../utils/var_bool.hpp"
...@@ -101,7 +101,7 @@ void CtrlGeneric::releaseMouse() const ...@@ -101,7 +101,7 @@ void CtrlGeneric::releaseMouse() const
void CtrlGeneric::notifyTooltipChange() const void CtrlGeneric::notifyTooltipChange() const
{ {
GenericWindow *pWin = getWindow(); TopWindow *pWin = getWindow();
if( pWin ) if( pWin )
{ {
// Notify the window // Notify the window
...@@ -110,7 +110,7 @@ void CtrlGeneric::notifyTooltipChange() const ...@@ -110,7 +110,7 @@ void CtrlGeneric::notifyTooltipChange() const
} }
GenericWindow *CtrlGeneric::getWindow() const TopWindow *CtrlGeneric::getWindow() const
{ {
if( m_pLayout ) if( m_pLayout )
{ {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ctrl_generic.hpp * ctrl_generic.hpp
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: ctrl_generic.hpp,v 1.2 2004/02/29 16:49:55 asmax Exp $ * $Id$
* *
* Authors: Cyril Deguet <asmax@via.ecp.fr> * Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulière <ipkiss@via.ecp.fr> * Olivier Teulière <ipkiss@via.ecp.fr>
...@@ -35,7 +35,7 @@ class EvtGeneric; ...@@ -35,7 +35,7 @@ class EvtGeneric;
class OSGraphics; class OSGraphics;
class GenericLayout; class GenericLayout;
class Position; class Position;
class GenericWindow; class TopWindow;
class VarBool; class VarBool;
...@@ -96,7 +96,7 @@ class CtrlGeneric: public SkinObject, public Observer<VarBool> ...@@ -96,7 +96,7 @@ class CtrlGeneric: public SkinObject, public Observer<VarBool>
virtual void notifyTooltipChange() const; virtual void notifyTooltipChange() const;
/// Get the associated window, if any /// Get the associated window, if any
virtual GenericWindow *getWindow() const; virtual TopWindow *getWindow() const;
/// Overload this method if you want to do something special when /// Overload this method if you want to do something special when
/// the Position object is set /// the Position object is set
......
...@@ -26,13 +26,13 @@ ...@@ -26,13 +26,13 @@
#include "../events/evt_generic.hpp" #include "../events/evt_generic.hpp"
#include "../events/evt_mouse.hpp" #include "../events/evt_mouse.hpp"
#include "../events/evt_motion.hpp" #include "../events/evt_motion.hpp"
#include "../src/generic_window.hpp" #include "../src/top_window.hpp"
#include "../src/window_manager.hpp" #include "../src/window_manager.hpp"
#include "../utils/position.hpp" #include "../utils/position.hpp"
CtrlMove::CtrlMove( intf_thread_t *pIntf, WindowManager &rWindowManager, CtrlMove::CtrlMove( intf_thread_t *pIntf, WindowManager &rWindowManager,
CtrlFlat &rCtrl, GenericWindow &rWindow, CtrlFlat &rCtrl, TopWindow &rWindow,
const UString &rHelp, VarBool *pVisible ): const UString &rHelp, VarBool *pVisible ):
CtrlFlat( pIntf, rHelp, pVisible ), m_fsm( pIntf ), CtrlFlat( pIntf, rHelp, pVisible ), m_fsm( pIntf ),
m_rWindowManager( rWindowManager ), m_rWindowManager( rWindowManager ),
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ctrl_move.hpp * ctrl_move.hpp
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: ctrl_move.hpp,v 1.2 2004/02/29 16:49:55 asmax Exp $ * $Id$
* *
* Authors: Cyril Deguet <asmax@via.ecp.fr> * Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulière <ipkiss@via.ecp.fr> * Olivier Teulière <ipkiss@via.ecp.fr>
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#include "../utils/fsm.hpp" #include "../utils/fsm.hpp"
#include "ctrl_flat.hpp" #include "ctrl_flat.hpp"
class GenericWindow; class TopWindow;
class WindowManager; class WindowManager;
...@@ -38,7 +38,7 @@ class CtrlMove: public CtrlFlat ...@@ -38,7 +38,7 @@ class CtrlMove: public CtrlFlat
{ {
public: public:
CtrlMove( intf_thread_t *pIntf, WindowManager &rWindowManager, CtrlMove( intf_thread_t *pIntf, WindowManager &rWindowManager,
CtrlFlat &rCtrl, GenericWindow &rWindow, CtrlFlat &rCtrl, TopWindow &rWindow,
const UString &rHelp, VarBool *pVisible ); const UString &rHelp, VarBool *pVisible );
virtual ~CtrlMove() {} virtual ~CtrlMove() {}
...@@ -69,7 +69,7 @@ class CtrlMove: public CtrlFlat ...@@ -69,7 +69,7 @@ class CtrlMove: public CtrlFlat
/// Decorated CtrlFlat /// Decorated CtrlFlat
CtrlFlat &m_rCtrl; CtrlFlat &m_rCtrl;
/// The window moved by this control /// The window moved by this control
GenericWindow &m_rWindow; TopWindow &m_rWindow;
/// The last received event /// The last received event
EvtGeneric *m_pEvt; EvtGeneric *m_pEvt;
/// Position of the click that started the move /// Position of the click that started the move
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ctrl_slider.cpp * ctrl_slider.cpp
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: ctrl_slider.cpp,v 1.5 2004/03/02 21:45:15 ipkiss Exp $ * $Id$
* *
* Authors: Cyril Deguet <asmax@via.ecp.fr> * Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulire <ipkiss@via.ecp.fr> * Olivier Teulire <ipkiss@via.ecp.fr>
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include "../events/evt_mouse.hpp" #include "../events/evt_mouse.hpp"
#include "../events/evt_scroll.hpp" #include "../events/evt_scroll.hpp"
#include "../src/generic_bitmap.hpp" #include "../src/generic_bitmap.hpp"
#include "../src/generic_window.hpp" #include "../src/top_window.hpp"
#include "../src/os_factory.hpp" #include "../src/os_factory.hpp"
#include "../src/os_graphics.hpp" #include "../src/os_graphics.hpp"
#include "../utils/position.hpp" #include "../utils/position.hpp"
...@@ -342,7 +342,7 @@ void CtrlSliderBg::handleEvent( EvtGeneric &rEvent ) ...@@ -342,7 +342,7 @@ void CtrlSliderBg::handleEvent( EvtGeneric &rEvent )
// Forward the clic to the cursor // Forward the clic to the cursor
EvtMouse evt( getIntf(), x, y, EvtMouse::kLeft, EvtMouse::kDown ); EvtMouse evt( getIntf(), x, y, EvtMouse::kLeft, EvtMouse::kDown );
GenericWindow *pWin = getWindow(); TopWindow *pWin = getWindow();
if( pWin ) if( pWin )
{ {
EvtEnter evtEnter( getIntf() ); EvtEnter evtEnter( getIntf() );
......
...@@ -27,10 +27,9 @@ ...@@ -27,10 +27,9 @@
#include "../src/os_graphics.hpp" #include "../src/os_graphics.hpp"
CtrlVideo::CtrlVideo( intf_thread_t *pIntf, WindowManager &rWindowManager, CtrlVideo::CtrlVideo( intf_thread_t *pIntf, const UString &rHelp,
const UString &rHelp, VarBool *pVisible ): VarBool *pVisible ):
CtrlGeneric( pIntf, rHelp, pVisible ), m_rWindowManager( rWindowManager ), CtrlGeneric( pIntf, rHelp, pVisible ), m_pVout( NULL )
m_pVout( NULL )
{ {
} }
...@@ -80,8 +79,7 @@ void CtrlVideo::draw( OSGraphics &rImage, int xDest, int yDest ) ...@@ -80,8 +79,7 @@ void CtrlVideo::draw( OSGraphics &rImage, int xDest, int yDest )
if (!m_pVout) if (!m_pVout)
{ {
m_pVout = new VoutWindow( getIntf(), pPos->getLeft(), m_pVout = new VoutWindow( getIntf(), pPos->getLeft(),
pPos->getTop(), m_rWindowManager, false, pPos->getTop(), false, false, *pParent );
false, *pParent );
m_pVout->resize( pPos->getWidth(), pPos->getHeight() ); m_pVout->resize( pPos->getWidth(), pPos->getHeight() );
m_pVout->show(); m_pVout->show();
} }
......
...@@ -27,14 +27,13 @@ ...@@ -27,14 +27,13 @@
#include "ctrl_generic.hpp" #include "ctrl_generic.hpp"
class VoutWindow; class VoutWindow;
class WindowManager;
/// Control video /// Control video
class CtrlVideo: public CtrlGeneric class CtrlVideo: public CtrlGeneric
{ {
public: public:
CtrlVideo( intf_thread_t *pIntf, WindowManager &rWindowManager, CtrlVideo( intf_thread_t *pIntf, const UString &rHelp,
const UString &rHelp, VarBool *pVisible ); VarBool *pVisible );
virtual ~CtrlVideo(); virtual ~CtrlVideo();
/// Handle an event on the control /// Handle an event on the control
...@@ -50,8 +49,6 @@ class CtrlVideo: public CtrlGeneric ...@@ -50,8 +49,6 @@ class CtrlVideo: public CtrlGeneric
virtual void draw( OSGraphics &rImage, int xDest, int yDest ); virtual void draw( OSGraphics &rImage, int xDest, int yDest );
private: private:
/// Window manager
WindowManager &m_rWindowManager;
/// Vout window /// Vout window
VoutWindow *m_pVout; VoutWindow *m_pVout;
}; };
......
...@@ -29,8 +29,7 @@ ...@@ -29,8 +29,7 @@
#include "../src/png_bitmap.hpp" #include "../src/png_bitmap.hpp"
#include "../src/os_factory.hpp" #include "../src/os_factory.hpp"
#include "../src/generic_bitmap.hpp" #include "../src/generic_bitmap.hpp"
#include "../src/generic_window.hpp" #include "../src/top_window.hpp"
#include "../src/vout_window.hpp"
#include "../src/anchor.hpp" #include "../src/anchor.hpp"
#include "../src/ft2_font.hpp" #include "../src/ft2_font.hpp"
#include "../src/theme.hpp" #include "../src/theme.hpp"
...@@ -149,18 +148,18 @@ void Builder::addFont( const BuilderData::Font &rData ) ...@@ -149,18 +148,18 @@ void Builder::addFont( const BuilderData::Font &rData )
void Builder::addWindow( const BuilderData::Window &rData ) void Builder::addWindow( const BuilderData::Window &rData )
{ {
GenericWindow *pWin = TopWindow *pWin =
new GenericWindow( getIntf(), rData.m_xPos, rData.m_yPos, new TopWindow( getIntf(), rData.m_xPos, rData.m_yPos,
m_pTheme->getWindowManager(), m_pTheme->getWindowManager(),
rData.m_dragDrop, rData.m_playOnDrop ); rData.m_dragDrop, rData.m_playOnDrop );
m_pTheme->m_windows[rData.m_id] = GenericWindowPtr( pWin ); m_pTheme->m_windows[rData.m_id] = TopWindowPtr( pWin );
} }
void Builder::addLayout( const BuilderData::Layout &rData ) void Builder::addLayout( const BuilderData::Layout &rData )
{ {
GenericWindow *pWin = m_pTheme->m_windows[rData.m_windowId].get(); TopWindow *pWin = m_pTheme->m_windows[rData.m_windowId].get();
if( pWin == NULL ) if( pWin == NULL )
{ {
msg_Err( getIntf(), "unknown window id: %s", rData.m_windowId.c_str() ); msg_Err( getIntf(), "unknown window id: %s", rData.m_windowId.c_str() );
...@@ -186,7 +185,7 @@ void Builder::addLayout( const BuilderData::Layout &rData ) ...@@ -186,7 +185,7 @@ void Builder::addLayout( const BuilderData::Layout &rData )
void Builder::addAnchor( const BuilderData::Anchor &rData ) void Builder::addAnchor( const BuilderData::Anchor &rData )
{ {
GenericWindow *pWin = m_pTheme->m_windows[rData.m_windowId].get(); TopWindow *pWin = m_pTheme->m_windows[rData.m_windowId].get();
if( pWin == NULL ) if( pWin == NULL )
{ {
msg_Err( getIntf(), "unknown window id: %s", rData.m_windowId.c_str() ); msg_Err( getIntf(), "unknown window id: %s", rData.m_windowId.c_str() );
...@@ -335,7 +334,7 @@ void Builder::addImage( const BuilderData::Image &rData ) ...@@ -335,7 +334,7 @@ void Builder::addImage( const BuilderData::Image &rData )
return; return;
} }
GenericWindow *pWindow = m_pTheme->m_windows[rData.m_windowId].get(); TopWindow *pWindow = m_pTheme->m_windows[rData.m_windowId].get();
if( pWindow == NULL ) if( pWindow == NULL )
{ {
msg_Err( getIntf(), "unknown window id: %s", rData.m_windowId.c_str() ); msg_Err( getIntf(), "unknown window id: %s", rData.m_windowId.c_str() );
...@@ -570,9 +569,8 @@ void Builder::addVideo( const BuilderData::Video &rData ) ...@@ -570,9 +569,8 @@ void Builder::addVideo( const BuilderData::Video &rData )
return; return;
} }
CtrlVideo *pVideo = CtrlVideo *pVideo = new CtrlVideo( getIntf(),
new CtrlVideo( getIntf(), m_pTheme->getWindowManager(), UString( getIntf(), rData.m_help.c_str() ), NULL);
UString( getIntf(), rData.m_help.c_str() ), NULL);
// Compute the position of the control // Compute the position of the control
const Position pos = makePosition( rData.m_leftTop, rData.m_rightBottom, const Position pos = makePosition( rData.m_leftTop, rData.m_rightBottom,
......
...@@ -118,7 +118,7 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme ) ...@@ -118,7 +118,7 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme )
{ {
int leftPos = rAction.find( ".show()" ); int leftPos = rAction.find( ".show()" );
string windowId = rAction.substr( 0, leftPos ); string windowId = rAction.substr( 0, leftPos );
GenericWindow *pWin = pTheme->getWindowById( windowId ); TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin ) if( pWin )
{ {
pCommand = new CmdShowWindow( getIntf(), pTheme->getWindowManager(), pCommand = new CmdShowWindow( getIntf(), pTheme->getWindowManager(),
...@@ -133,7 +133,7 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme ) ...@@ -133,7 +133,7 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme )
{ {
int leftPos = rAction.find( ".hide()" ); int leftPos = rAction.find( ".hide()" );
string windowId = rAction.substr( 0, leftPos ); string windowId = rAction.substr( 0, leftPos );
GenericWindow *pWin = pTheme->getWindowById( windowId ); TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin ) if( pWin )
{ {
pCommand = new CmdHideWindow( getIntf(), pTheme->getWindowManager(), pCommand = new CmdHideWindow( getIntf(), pTheme->getWindowManager(),
...@@ -210,7 +210,7 @@ VarBool *Interpreter::getVarBool( const string &rName, Theme *pTheme ) ...@@ -210,7 +210,7 @@ VarBool *Interpreter::getVarBool( const string &rName, Theme *pTheme )
{ {
int leftPos = rName.find( ".isVisible" ); int leftPos = rName.find( ".isVisible" );
string windowId = rName.substr( 0, leftPos ); string windowId = rName.substr( 0, leftPos );
GenericWindow *pWin = pTheme->getWindowById( windowId ); TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin ) if( pWin )
{ {
return &pWin->getVisibleVar(); return &pWin->getVisibleVar();
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* generic_layout.cpp * generic_layout.cpp
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: generic_layout.cpp,v 1.2 2004/02/29 16:49:55 asmax Exp $ * $Id$
* *
* Authors: Cyril Deguet <asmax@via.ecp.fr> * Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulire <ipkiss@via.ecp.fr> * Olivier Teulire <ipkiss@via.ecp.fr>
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
*****************************************************************************/ *****************************************************************************/
#include "generic_layout.hpp" #include "generic_layout.hpp"
#include "generic_window.hpp" #include "top_window.hpp"
#include "os_factory.hpp" #include "os_factory.hpp"
#include "os_graphics.hpp" #include "os_graphics.hpp"
#include "../controls/ctrl_generic.hpp" #include "../controls/ctrl_generic.hpp"
...@@ -52,7 +52,7 @@ GenericLayout::~GenericLayout() ...@@ -52,7 +52,7 @@ GenericLayout::~GenericLayout()
} }
void GenericLayout::setWindow( GenericWindow *pWindow ) void GenericLayout::setWindow( TopWindow *pWindow )
{ {
m_pWindow = pWindow; m_pWindow = pWindow;
} }
...@@ -61,7 +61,7 @@ void GenericLayout::setWindow( GenericWindow *pWindow ) ...@@ -61,7 +61,7 @@ void GenericLayout::setWindow( GenericWindow *pWindow )
void GenericLayout::onControlCapture( const CtrlGeneric &rCtrl ) void GenericLayout::onControlCapture( const CtrlGeneric &rCtrl )
{ {
// Just forward the request to the window // Just forward the request to the window
GenericWindow *pWindow = getWindow(); TopWindow *pWindow = getWindow();
if( pWindow ) if( pWindow )
{ {
pWindow->onControlCapture( rCtrl ); pWindow->onControlCapture( rCtrl );
...@@ -72,7 +72,7 @@ void GenericLayout::onControlCapture( const CtrlGeneric &rCtrl ) ...@@ -72,7 +72,7 @@ void GenericLayout::onControlCapture( const CtrlGeneric &rCtrl )
void GenericLayout::onControlRelease( const CtrlGeneric &rCtrl ) void GenericLayout::onControlRelease( const CtrlGeneric &rCtrl )
{ {
// Just forward the request to the window // Just forward the request to the window
GenericWindow *pWindow = getWindow(); TopWindow *pWindow = getWindow();
if( pWindow ) if( pWindow )
{ {
pWindow->onControlRelease( rCtrl ); pWindow->onControlRelease( rCtrl );
...@@ -161,7 +161,7 @@ void GenericLayout::resize( int width, int height ) ...@@ -161,7 +161,7 @@ void GenericLayout::resize( int width, int height )
} }
// Resize and refresh the associated window // Resize and refresh the associated window
GenericWindow *pWindow = getWindow(); TopWindow *pWindow = getWindow();
if( pWindow ) if( pWindow )
{ {
// Resize the window // Resize the window
...@@ -191,7 +191,7 @@ void GenericLayout::refreshAll() ...@@ -191,7 +191,7 @@ void GenericLayout::refreshAll()
} }
// Refresh the associated window // Refresh the associated window
GenericWindow *pWindow = getWindow(); TopWindow *pWindow = getWindow();
if( pWindow ) if( pWindow )
{ {
pWindow->refresh( 0, 0, m_width, m_height ); pWindow->refresh( 0, 0, m_width, m_height );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* generic_layout.hpp * generic_layout.hpp
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: generic_layout.hpp,v 1.1 2004/01/03 23:31:33 asmax Exp $ * $Id$
* *
* Authors: Cyril Deguet <asmax@via.ecp.fr> * Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulire <ipkiss@via.ecp.fr> * Olivier Teulire <ipkiss@via.ecp.fr>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include <list> #include <list>
class GenericWindow; class TopWindow;
class OSGraphics; class OSGraphics;
class CtrlGeneric; class CtrlGeneric;
...@@ -60,10 +60,10 @@ class GenericLayout: public SkinObject, public Box ...@@ -60,10 +60,10 @@ class GenericLayout: public SkinObject, public Box
virtual ~GenericLayout(); virtual ~GenericLayout();
/// Attach the layout to a window /// Attach the layout to a window
virtual void setWindow( GenericWindow *pWindow ); virtual void setWindow( TopWindow *pWindow );
/// Get the associated window, if any /// Get the associated window, if any
virtual GenericWindow *getWindow() const { return m_pWindow; } virtual TopWindow *getWindow() const { return m_pWindow; }
/// Called by a control which wants to capture the mouse /// Called by a control which wants to capture the mouse
virtual void onControlCapture( const CtrlGeneric &rCtrl ); virtual void onControlCapture( const CtrlGeneric &rCtrl );
...@@ -104,7 +104,7 @@ class GenericLayout: public SkinObject, public Box ...@@ -104,7 +104,7 @@ class GenericLayout: public SkinObject, public Box
private: private:
/// Parent window of the layout /// Parent window of the layout
GenericWindow *m_pWindow; TopWindow *m_pWindow;
/// Layout size /// Layout size
int m_width, m_height; int m_width, m_height;
int m_minWidth, m_maxWidth; int m_minWidth, m_maxWidth;
......
...@@ -23,39 +23,15 @@ ...@@ -23,39 +23,15 @@
*****************************************************************************/ *****************************************************************************/
#include "generic_window.hpp" #include "generic_window.hpp"
#include "generic_layout.hpp"
#include "os_graphics.hpp"
#include "os_window.hpp" #include "os_window.hpp"
#include "os_factory.hpp" #include "os_factory.hpp"
#include "theme.hpp"
#include "dialogs.hpp"
#include "var_manager.hpp"
#include "../commands/cmd_on_top.hpp"
#include "../controls/ctrl_generic.hpp"
#include "../events/evt_enter.hpp"
#include "../events/evt_focus.hpp"
#include "../events/evt_leave.hpp"
#include "../events/evt_motion.hpp"
#include "../events/evt_mouse.hpp"
#include "../events/evt_key.hpp"
#include "../events/evt_refresh.hpp"
#include "../events/evt_special.hpp"
#include "../events/evt_scroll.hpp"
#include "../utils/position.hpp"
#include "../utils/ustring.hpp"
#include <vlc_keys.h>
GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top, GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top,
WindowManager &rWindowManager,
bool dragDrop, bool playOnDrop, bool dragDrop, bool playOnDrop,
GenericWindow *pParent ): GenericWindow *pParent ):
SkinObject( pIntf ), m_rWindowManager( rWindowManager ), SkinObject( pIntf ), m_left( left ), m_top( top ), m_width( 0 ),
m_left( left ), m_top( top ), m_width( 0 ), m_height( 0 ), m_height( 0 ), m_varVisible( pIntf )
m_isChild( true ), m_pActiveLayout( NULL ), m_pLastHitControl( NULL ),
m_pCapturingControl( NULL ), m_pFocusControl( NULL ), m_varVisible( pIntf ),
m_currModifier( 0 )
{ {
// Get the OSFactory // Get the OSFactory
OSFactory *pOsFactory = OSFactory::instance( getIntf() ); OSFactory *pOsFactory = OSFactory::instance( getIntf() );
...@@ -71,14 +47,6 @@ GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top, ...@@ -71,14 +47,6 @@ GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top,
m_pOsWindow = pOsFactory->createOSWindow( *this, dragDrop, playOnDrop, m_pOsWindow = pOsFactory->createOSWindow( *this, dragDrop, playOnDrop,
pOSParent ); pOSParent );
// Child windows don't need that
if( !pParent )
{
m_isChild = false;
// Register as a moving window
m_rWindowManager.registerWindow( *this );
}
// Observe the visibility variable // Observe the visibility variable
m_varVisible.addObserver( this ); m_varVisible.addObserver( this );
} }
...@@ -86,11 +54,6 @@ GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top, ...@@ -86,11 +54,6 @@ GenericWindow::GenericWindow( intf_thread_t *pIntf, int left, int top,
GenericWindow::~GenericWindow() GenericWindow::~GenericWindow()
{ {
if( !m_isChild )
{
// Unregister from the window manager
m_rWindowManager.unregisterWindow( *this );
}
m_varVisible.delObserver( this ); m_varVisible.delObserver( this );
if( m_pOsWindow ) if( m_pOsWindow )
...@@ -100,227 +63,6 @@ GenericWindow::~GenericWindow() ...@@ -100,227 +63,6 @@ GenericWindow::~GenericWindow()
} }
void GenericWindow::processEvent( EvtFocus &rEvtFocus )
{
// fprintf(stderr, rEvtFocus.getAsString().c_str()) ;
}
void GenericWindow::processEvent( EvtMotion &rEvtMotion )
{
// New control hit by the mouse
CtrlGeneric *pNewHitControl =
findHitControl( rEvtMotion.getXPos() - m_left,
rEvtMotion.getYPos() - m_top );
setLastHit( pNewHitControl );
/// Update the help text
VarManager *pVarManager = VarManager::instance( getIntf() );
if( pNewHitControl )
{
pVarManager->getHelpText().set( pNewHitControl->getHelpText() );
}
// Send a motion event to the hit control, or to the control
// that captured the mouse, if any
CtrlGeneric *pActiveControl = pNewHitControl;
if( m_pCapturingControl )
{
pActiveControl = m_pCapturingControl;
}
if( pActiveControl )
{
// Compute the coordinates relative to the window
int xPos = rEvtMotion.getXPos() - m_left;
int yPos = rEvtMotion.getYPos() - m_top;
// Send a motion event
EvtMotion evt( getIntf(), xPos, yPos );
pActiveControl->handleEvent( evt );
}
}
void GenericWindow::processEvent( EvtLeave &rEvtLeave )
{
// No more hit control
setLastHit( NULL );
if( !m_pCapturingControl )
{
m_rWindowManager.hideTooltip();
}
}
void GenericWindow::processEvent( EvtMouse &rEvtMouse )
{
// Get the control hit by the mouse
CtrlGeneric *pNewHitControl = findHitControl( rEvtMouse.getXPos(),
rEvtMouse.getYPos() );
setLastHit( pNewHitControl );
// Change the focused control
if( rEvtMouse.getAction() == EvtMouse::kDown )
{
// Raise all the windows
m_rWindowManager.raiseAll( *this );
if( pNewHitControl && pNewHitControl->isFocusable() )
{
// If a new control gains the focus, the previous one loses it
if( m_pFocusControl && m_pFocusControl != pNewHitControl )
{
EvtFocus evt( getIntf(), false );
m_pFocusControl->handleEvent( evt );
}
if( pNewHitControl != m_pFocusControl )
{
m_pFocusControl = pNewHitControl;
EvtFocus evt( getIntf(), false );
pNewHitControl->handleEvent( evt );
}
}
else if( m_pFocusControl )
{
// The previous control loses the focus
EvtFocus evt( getIntf(), false );
m_pFocusControl->handleEvent( evt );
m_pFocusControl = NULL;
}
}
// Send a mouse event to the hit control, or to the control
// that captured the mouse, if any
CtrlGeneric *pActiveControl = pNewHitControl;
if( m_pCapturingControl )
{
pActiveControl = m_pCapturingControl;
}
if( pActiveControl )
{
pActiveControl->handleEvent( rEvtMouse );
}
}
void GenericWindow::processEvent( EvtKey &rEvtKey )
{
// Forward the event to the focused control, if any
if( m_pFocusControl )
{
m_pFocusControl->handleEvent( rEvtKey );
return;
}
// Only do the action when the key is down
if( rEvtKey.getAsString().find( "key:down") != string::npos )
{
//XXX not to be hardcoded !
// Ctrl-S = Change skin
if( (rEvtKey.getMod() & EvtInput::kModCtrl) &&
rEvtKey.getKey() == 's' )
{
Dialogs *pDialogs = Dialogs::instance( getIntf() );
if( pDialogs != NULL )
{
pDialogs->showChangeSkin();
}
return;
}
//XXX not to be hardcoded !
// Ctrl-T = Toggle on top
if( (rEvtKey.getMod() & EvtInput::kModCtrl) &&
rEvtKey.getKey() == 't' )
{
CmdOnTop cmd( getIntf() );
cmd.execute();
return;
}
vlc_value_t val;
// Set the key
val.i_int = rEvtKey.getKey();
// Set the modifiers
if( rEvtKey.getMod() & EvtInput::kModAlt )
{
val.i_int |= KEY_MODIFIER_ALT;
}
if( rEvtKey.getMod() & EvtInput::kModCtrl )
{
val.i_int |= KEY_MODIFIER_CTRL;
}
if( rEvtKey.getMod() & EvtInput::kModShift )
{
val.i_int |= KEY_MODIFIER_SHIFT;
}
var_Set( getIntf()->p_vlc, "key-pressed", val );
}
// Always store the modifier, which can be needed for scroll events
m_currModifier = rEvtKey.getMod();
}
void GenericWindow::processEvent( EvtRefresh &rEvtRefresh )
{
// Refresh the given area
refresh( rEvtRefresh.getXStart(), rEvtRefresh.getYStart(),
rEvtRefresh.getWidth(), rEvtRefresh.getHeight() );
}
void GenericWindow::processEvent( EvtScroll &rEvtScroll )
{
// Raise the windows
raise();
// Get the control hit by the mouse
CtrlGeneric *pNewHitControl = findHitControl( rEvtScroll.getXPos(),
rEvtScroll.getYPos());
setLastHit( pNewHitControl );
// Send a mouse event to the hit control, or to the control
// that captured the mouse, if any
CtrlGeneric *pActiveControl = pNewHitControl;
if( m_pCapturingControl )
{
pActiveControl = m_pCapturingControl;
}
if( pActiveControl )
{
pActiveControl->handleEvent( rEvtScroll );
}
else
{
// Treat the scroll event as a hotkey
vlc_value_t val;
if( rEvtScroll.getDirection() == EvtScroll::kUp )
{
val.i_int = KEY_MOUSEWHEELUP;
}
else
{
val.i_int = KEY_MOUSEWHEELDOWN;
}
// Add the modifiers
val.i_int |= m_currModifier;
var_Set( getIntf()->p_vlc, "key-pressed", val );
}
}
void GenericWindow::forwardEvent( EvtGeneric &rEvt, CtrlGeneric &rCtrl )
{
// XXX: We should do some checks here
rCtrl.handleEvent( rEvt );
}
void GenericWindow::show() void GenericWindow::show()
{ {
m_varVisible.set( true ); m_varVisible.set( true );
...@@ -333,16 +75,6 @@ void GenericWindow::hide() ...@@ -333,16 +75,6 @@ void GenericWindow::hide()
} }
void GenericWindow::refresh( int left, int top, int width, int height )
{
if( m_pActiveLayout )
{
m_pActiveLayout->getImage()->copyToWindow( *m_pOsWindow, left, top,
width, height, left, top );
}
}
void GenericWindow::move( int left, int top ) void GenericWindow::move( int left, int top )
{ {
// Update the window coordinates // Update the window coordinates
...@@ -381,97 +113,6 @@ void GenericWindow::toggleOnTop( bool onTop ) const ...@@ -381,97 +113,6 @@ void GenericWindow::toggleOnTop( bool onTop ) const
} }
void GenericWindow::setActiveLayout( GenericLayout *pLayout )
{
pLayout->setWindow( this );
m_pActiveLayout = pLayout;
// Get the size of the layout and resize the window
m_width = pLayout->getWidth();
m_height = pLayout->getHeight();
m_pOsWindow->moveResize( m_left, m_top, m_width, m_height );
updateShape();
pLayout->refreshAll();
}
void GenericWindow::updateShape()
{
// Set the shape of the window
if( m_pActiveLayout )
{
OSGraphics *pImage = m_pActiveLayout->getImage();
if( pImage )
{
pImage->applyMaskToWindow( *m_pOsWindow );
}
}
}
const list<Anchor*> GenericWindow::getAnchorList() const
{
return m_anchorList;
}
void GenericWindow::addAnchor( Anchor *pAnchor )
{
m_anchorList.push_back( pAnchor );
}
void GenericWindow::onControlCapture( const CtrlGeneric &rCtrl )
{
// Set the capturing control
m_pCapturingControl = (CtrlGeneric*) &rCtrl;
}
void GenericWindow::onControlRelease( const CtrlGeneric &rCtrl )
{
// Release the capturing control
if( m_pCapturingControl == &rCtrl )
{
m_pCapturingControl = NULL;
}
else
{
msg_Dbg( getIntf(), "Control had not captured the mouse" );
}
// Send an enter event to the control under the mouse, if it doesn't
// have received it yet
if( m_pLastHitControl && m_pLastHitControl != &rCtrl )
{
EvtEnter evt( getIntf() );
m_pLastHitControl->handleEvent( evt );
// Show the tooltip
m_rWindowManager.hideTooltip();
UString tipText = m_pLastHitControl->getTooltipText();
if( tipText.length() > 0 )
{
// Set the tooltip text variable
VarManager *pVarManager = VarManager::instance( getIntf() );
pVarManager->getTooltipText().set( tipText );
m_rWindowManager.showTooltip();
}
}
}
void GenericWindow::onTooltipChange( const CtrlGeneric &rCtrl )
{
// Check that the control is the active one
if( m_pLastHitControl && m_pLastHitControl == &rCtrl )
{
// Set the tooltip text variable
VarManager *pVarManager = VarManager::instance( getIntf() );
pVarManager->getTooltipText().set( rCtrl.getTooltipText() );
}
}
void GenericWindow::onUpdate( Subject<VarBool> &rVariable ) void GenericWindow::onUpdate( Subject<VarBool> &rVariable )
{ {
if( m_varVisible.get() ) if( m_varVisible.get() )
...@@ -487,13 +128,6 @@ void GenericWindow::onUpdate( Subject<VarBool> &rVariable ) ...@@ -487,13 +128,6 @@ void GenericWindow::onUpdate( Subject<VarBool> &rVariable )
void GenericWindow::innerShow() void GenericWindow::innerShow()
{ {
// First, refresh the layout and update the shape of the window
if( m_pActiveLayout )
{
updateShape();
m_pActiveLayout->refreshAll();
}
if( m_pOsWindow ) if( m_pOsWindow )
{ {
m_pOsWindow->show( m_left, m_top ); m_pOsWindow->show( m_left, m_top );
...@@ -509,89 +143,3 @@ void GenericWindow::innerHide() ...@@ -509,89 +143,3 @@ void GenericWindow::innerHide()
} }
} }
CtrlGeneric *GenericWindow::findHitControl( int xPos, int yPos )
{
if( m_pActiveLayout == NULL )
{
return NULL;
}
// Get the controls in the active layout
const list<LayeredControl> &ctrlList = m_pActiveLayout->getControlList();
list<LayeredControl>::const_reverse_iterator iter;
// New control hit by the mouse
CtrlGeneric *pNewHitControl = NULL;
// Loop on the control list to find the uppest hit control
for( iter = ctrlList.rbegin(); iter != ctrlList.rend(); iter++ )
{
// Get the position of the control in the layout
const Position *pos = (*iter).m_pControl->getPosition();
if( pos != NULL )
{
// Compute the coordinates of the mouse relative to the control
int xRel = xPos - pos->getLeft();
int yRel = yPos - pos->getTop();
CtrlGeneric *pCtrl = (*iter).m_pControl;
// Control hit ?
if( pCtrl->isVisible() && pCtrl->mouseOver( xRel, yRel ) )
{
pNewHitControl = (*iter).m_pControl;
break;
}
}
else
{
msg_Dbg( getIntf(), "Control at NULL position" );
}
}
// If the hit control has just been entered, send it an enter event
if( pNewHitControl && (pNewHitControl != m_pLastHitControl) )
{
// Don't send the event if another control captured the mouse
if( !m_pCapturingControl || (m_pCapturingControl == pNewHitControl ) )
{
EvtEnter evt( getIntf() );
pNewHitControl->handleEvent( evt );
if( !m_pCapturingControl )
{
// Show the tooltip
m_rWindowManager.hideTooltip();
UString tipText = pNewHitControl->getTooltipText();
if( tipText.length() > 0 )
{
// Set the tooltip text variable
VarManager *pVarManager = VarManager::instance( getIntf() );
pVarManager->getTooltipText().set( tipText );
m_rWindowManager.showTooltip();
}
}
}
}
return pNewHitControl;
}
void GenericWindow::setLastHit( CtrlGeneric *pNewHitControl )
{
// Send a leave event to the left control
if( m_pLastHitControl && (pNewHitControl != m_pLastHitControl) )
{
// Don't send the event if another control captured the mouse
if( !m_pCapturingControl || (m_pCapturingControl == m_pLastHitControl))
{
EvtLeave evt( getIntf() );
m_pLastHitControl->handleEvent( evt );
}
}
m_pLastHitControl = pNewHitControl;
}
...@@ -26,15 +26,9 @@ ...@@ -26,15 +26,9 @@
#define GENERIC_WINDOW_HPP #define GENERIC_WINDOW_HPP
#include "skin_common.hpp" #include "skin_common.hpp"
#include "../utils/pointer.hpp"
#include "../utils/var_bool.hpp" #include "../utils/var_bool.hpp"
#include <list>
class Anchor;
class OSWindow; class OSWindow;
class OSGraphics;
class GenericLayout;
class CtrlGeneric;
class EvtGeneric; class EvtGeneric;
class EvtFocus; class EvtFocus;
class EvtLeave; class EvtLeave;
...@@ -43,7 +37,6 @@ class EvtMouse; ...@@ -43,7 +37,6 @@ class EvtMouse;
class EvtKey; class EvtKey;
class EvtRefresh; class EvtRefresh;
class EvtScroll; class EvtScroll;
class WindowManager;
/// Generic window class /// Generic window class
...@@ -51,22 +44,18 @@ class GenericWindow: public SkinObject, public Observer<VarBool> ...@@ -51,22 +44,18 @@ class GenericWindow: public SkinObject, public Observer<VarBool>
{ {
public: public:
GenericWindow( intf_thread_t *pIntf, int xPos, int yPos, GenericWindow( intf_thread_t *pIntf, int xPos, int yPos,
WindowManager &rWindowManager,
bool dragDrop, bool playOnDrop, bool dragDrop, bool playOnDrop,
GenericWindow *pParent = NULL ); GenericWindow *pParent = NULL );
virtual ~GenericWindow(); virtual ~GenericWindow();
/// Methods to process OS events. /// Methods to process OS events.
virtual void processEvent( EvtFocus &rEvtFocus ); virtual void processEvent( EvtFocus &rEvtFocus ) {}
virtual void processEvent( EvtMotion &rEvtMotion ); virtual void processEvent( EvtMotion &rEvtMotion ) {}
virtual void processEvent( EvtMouse &rEvtMouse ); virtual void processEvent( EvtMouse &rEvtMouse ) {}
virtual void processEvent( EvtLeave &rEvtLeave ); virtual void processEvent( EvtLeave &rEvtLeave ) {}
virtual void processEvent( EvtKey &rEvtKey ); virtual void processEvent( EvtKey &rEvtKey ) {}
virtual void processEvent( EvtRefresh &rEvtRefresh ); virtual void processEvent( EvtRefresh &rEvtRefresh ) {}
virtual void processEvent( EvtScroll &rEvtScroll ); virtual void processEvent( EvtScroll &rEvtScroll ) {}
/// Forward an event to a control
virtual void forwardEvent( EvtGeneric &rEvt, CtrlGeneric &rCtrl );
// Show the window // Show the window
virtual void show(); virtual void show();
...@@ -75,7 +64,7 @@ class GenericWindow: public SkinObject, public Observer<VarBool> ...@@ -75,7 +64,7 @@ class GenericWindow: public SkinObject, public Observer<VarBool>
virtual void hide(); virtual void hide();
// Refresh an area of the window // Refresh an area of the window
virtual void refresh( int left, int top, int width, int height ); virtual void refresh( int left, int top, int width, int height ) {}
/// Move the window /// Move the window
virtual void move( int left, int top ); virtual void move( int left, int top );
...@@ -92,21 +81,6 @@ class GenericWindow: public SkinObject, public Observer<VarBool> ...@@ -92,21 +81,6 @@ class GenericWindow: public SkinObject, public Observer<VarBool>
/// Toggle the window on top /// Toggle the window on top
virtual void toggleOnTop( bool onTop ) const; virtual void toggleOnTop( bool onTop ) const;
/// Change the active layout
virtual void setActiveLayout( GenericLayout *pLayout );
/// 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 coordinates of the window /// Get the coordinates of the window
virtual int getLeft() const { return m_left; } virtual int getLeft() const { return m_left; }
virtual int getTop() const { return m_top; } virtual int getTop() const { return m_top; }
...@@ -116,55 +90,27 @@ class GenericWindow: public SkinObject, public Observer<VarBool> ...@@ -116,55 +90,27 @@ class GenericWindow: public SkinObject, public Observer<VarBool>
/// Give access to the visibility variable /// Give access to the visibility variable
VarBool &getVisibleVar() { return m_varVisible; } VarBool &getVisibleVar() { return m_varVisible; }
/// Get the list of the anchors of this window protected:
virtual const list<Anchor*> getAnchorList() const; /// Actually show the window
virtual void innerShow();
/// Actually hide the window
virtual void innerHide();
/// Add an anchor to this window /// Get the OS window
virtual void addAnchor( Anchor *pAnchor ); OSWindow *getOSWindow() const { return m_pOsWindow; }
private: private:
/// Window manager
WindowManager &m_rWindowManager;
/// Window position and size /// Window position and size
int m_left, m_top, m_width, m_height; int m_left, m_top, m_width, m_height;
/// Flag set if the window has a parent
bool m_isChild;
/// OS specific implementation /// OS specific implementation
OSWindow *m_pOsWindow; OSWindow *m_pOsWindow;
/// 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;
/// List of the anchors of this window
list<Anchor*> m_anchorList;
/// Variable for the visibility of the window /// Variable for the visibility of the window
VarBoolImpl m_varVisible; VarBoolImpl m_varVisible;
/// Current key modifier (also used for mouse)
int m_currModifier;
/// Method called when the observed variable is modified /// Method called when the observed variable is modified
virtual void onUpdate( Subject<VarBool> &rVariable ); virtual void onUpdate( Subject<VarBool> &rVariable );
// Actually show the window
virtual void innerShow();
// Actually hide the window
virtual void innerHide();
/// 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<GenericWindow> GenericWindowPtr;
#endif #endif
...@@ -51,14 +51,14 @@ void Theme::loadConfig() ...@@ -51,14 +51,14 @@ void Theme::loadConfig()
return; return;
// Initialization // Initialization
map<string, GenericWindowPtr>::const_iterator it; map<string, TopWindowPtr>::const_iterator it;
int i = 0; int i = 0;
int x, y, v, scan; int x, y, v, scan;
// Get config for each window // Get config for each window
for( it = m_windows.begin(); it != m_windows.end(); it++ ) for( it = m_windows.begin(); it != m_windows.end(); it++ )
{ {
GenericWindow *pWin = (*it).second.get(); TopWindow *pWin = (*it).second.get();
// Get config // Get config
scan = sscanf( &save[i * 13], "(%4d,%4d,%1d)", &x, &y, &v ); scan = sscanf( &save[i * 13], "(%4d,%4d,%1d)", &x, &y, &v );
...@@ -81,14 +81,14 @@ void Theme::saveConfig() ...@@ -81,14 +81,14 @@ void Theme::saveConfig()
// Initialize char where config is stored // Initialize char where config is stored
char *save = new char[400]; char *save = new char[400];
map<string, GenericWindowPtr>::const_iterator it; map<string, TopWindowPtr>::const_iterator it;
int i = 0; int i = 0;
int x, y; int x, y;
// Save config of every window // Save config of every window
for( it = m_windows.begin(); it != m_windows.end(); it++ ) for( it = m_windows.begin(); it != m_windows.end(); it++ )
{ {
GenericWindow *pWin = (*it).second.get(); TopWindow *pWin = (*it).second.get();
// Print config // Print config
x = pWin->getLeft(); x = pWin->getLeft();
y = pWin->getTop(); y = pWin->getTop();
...@@ -126,9 +126,9 @@ GenericFont *Theme::getFontById( const string &id ) ...@@ -126,9 +126,9 @@ GenericFont *Theme::getFontById( const string &id )
FIND_OBJECT( GenericFontPtr, m_fonts ); FIND_OBJECT( GenericFontPtr, m_fonts );
} }
GenericWindow *Theme::getWindowById( const string &id ) TopWindow *Theme::getWindowById( const string &id )
{ {
FIND_OBJECT( GenericWindowPtr, m_windows ); FIND_OBJECT( TopWindowPtr, m_windows );
} }
GenericLayout *Theme::getLayoutById( const string &id ) GenericLayout *Theme::getLayoutById( const string &id )
......
...@@ -51,7 +51,7 @@ class Theme: public SkinObject ...@@ -51,7 +51,7 @@ class Theme: public SkinObject
GenericBitmap *getBitmapById( const string &id ); GenericBitmap *getBitmapById( const string &id );
GenericFont *getFontById( const string &id ); GenericFont *getFontById( const string &id );
GenericWindow *getWindowById( const string &id ); TopWindow *getWindowById( const string &id );
GenericLayout *getLayoutById( const string &id ); GenericLayout *getLayoutById( const string &id );
CtrlGeneric *getControlById( const string &id ); CtrlGeneric *getControlById( const string &id );
...@@ -65,7 +65,7 @@ class Theme: public SkinObject ...@@ -65,7 +65,7 @@ class Theme: public SkinObject
/// Store the fonts by ID /// Store the fonts by ID
map<string, GenericFontPtr> m_fonts; map<string, GenericFontPtr> m_fonts;
/// Store the windows by ID /// Store the windows by ID
map<string, GenericWindowPtr> m_windows; map<string, TopWindowPtr> m_windows;
/// Store the layouts by ID /// Store the layouts by ID
map<string, GenericLayoutPtr> m_layouts; map<string, GenericLayoutPtr> m_layouts;
/// Store the controls by ID /// Store the controls by ID
......
/*****************************************************************************
* top_window.cpp
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id$
*
* Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulire <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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* 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.
*****************************************************************************/
#include "top_window.hpp"
#include "generic_layout.hpp"
#include "os_graphics.hpp"
#include "os_window.hpp"
#include "os_factory.hpp"
#include "theme.hpp"
#include "dialogs.hpp"
#include "var_manager.hpp"
#include "../commands/cmd_on_top.hpp"
#include "../controls/ctrl_generic.hpp"
#include "../events/evt_enter.hpp"
#include "../events/evt_focus.hpp"
#include "../events/evt_leave.hpp"
#include "../events/evt_motion.hpp"
#include "../events/evt_mouse.hpp"
#include "../events/evt_key.hpp"
#include "../events/evt_refresh.hpp"
#include "../events/evt_special.hpp"
#include "../events/evt_scroll.hpp"
#include "../utils/position.hpp"
#include "../utils/ustring.hpp"
#include <vlc_keys.h>
TopWindow::TopWindow( intf_thread_t *pIntf, int left, int top,
WindowManager &rWindowManager,
bool dragDrop, bool playOnDrop ):
GenericWindow( pIntf, left, top, dragDrop, playOnDrop,
NULL),
m_rWindowManager( rWindowManager ), m_pActiveLayout( NULL ),
m_pLastHitControl( NULL ), m_pCapturingControl( NULL ),
m_pFocusControl( NULL ), m_currModifier( 0 )
{
// Register as a moving window
m_rWindowManager.registerWindow( *this );
}
TopWindow::~TopWindow()
{
// Unregister from the window manager
m_rWindowManager.unregisterWindow( *this );
}
void TopWindow::processEvent( EvtFocus &rEvtFocus )
{
// fprintf(stderr, rEvtFocus.getAsString().c_str()) ;
}
void TopWindow::processEvent( EvtMotion &rEvtMotion )
{
// New control hit by the mouse
CtrlGeneric *pNewHitControl =
findHitControl( rEvtMotion.getXPos() - getLeft(),
rEvtMotion.getYPos() - getTop() );
setLastHit( pNewHitControl );
/// Update the help text
VarManager *pVarManager = VarManager::instance( getIntf() );
if( pNewHitControl )
{
pVarManager->getHelpText().set( pNewHitControl->getHelpText() );
}
// Send a motion event to the hit control, or to the control
// that captured the mouse, if any
CtrlGeneric *pActiveControl = pNewHitControl;
if( m_pCapturingControl )
{
pActiveControl = m_pCapturingControl;
}
if( pActiveControl )
{
// Compute the coordinates relative to the window
int xPos = rEvtMotion.getXPos() - getLeft();
int yPos = rEvtMotion.getYPos() - getTop();
// Send a motion event
EvtMotion evt( getIntf(), xPos, yPos );
pActiveControl->handleEvent( evt );
}
}
void TopWindow::processEvent( EvtLeave &rEvtLeave )
{
// No more hit control
setLastHit( NULL );
if( !m_pCapturingControl )
{
m_rWindowManager.hideTooltip();
}
}
void TopWindow::processEvent( EvtMouse &rEvtMouse )
{
// Get the control hit by the mouse
CtrlGeneric *pNewHitControl = findHitControl( rEvtMouse.getXPos(),
rEvtMouse.getYPos() );
setLastHit( pNewHitControl );
// Change the focused control
if( rEvtMouse.getAction() == EvtMouse::kDown )
{
// Raise all the windows
m_rWindowManager.raiseAll( *this );
if( pNewHitControl && pNewHitControl->isFocusable() )
{
// If a new control gains the focus, the previous one loses it
if( m_pFocusControl && m_pFocusControl != pNewHitControl )
{
EvtFocus evt( getIntf(), false );
m_pFocusControl->handleEvent( evt );
}
if( pNewHitControl != m_pFocusControl )
{
m_pFocusControl = pNewHitControl;
EvtFocus evt( getIntf(), false );
pNewHitControl->handleEvent( evt );
}
}
else if( m_pFocusControl )
{
// The previous control loses the focus
EvtFocus evt( getIntf(), false );
m_pFocusControl->handleEvent( evt );
m_pFocusControl = NULL;
}
}
// Send a mouse event to the hit control, or to the control
// that captured the mouse, if any
CtrlGeneric *pActiveControl = pNewHitControl;
if( m_pCapturingControl )
{
pActiveControl = m_pCapturingControl;
}
if( pActiveControl )
{
pActiveControl->handleEvent( rEvtMouse );
}
}
void TopWindow::processEvent( EvtKey &rEvtKey )
{
// Forward the event to the focused control, if any
if( m_pFocusControl )
{
m_pFocusControl->handleEvent( rEvtKey );
return;
}
// Only do the action when the key is down
if( rEvtKey.getAsString().find( "key:down") != string::npos )
{
//XXX not to be hardcoded !
// Ctrl-S = Change skin
if( (rEvtKey.getMod() & EvtInput::kModCtrl) &&
rEvtKey.getKey() == 's' )
{
Dialogs *pDialogs = Dialogs::instance( getIntf() );
if( pDialogs != NULL )
{
pDialogs->showChangeSkin();
}
return;
}
//XXX not to be hardcoded !
// Ctrl-T = Toggle on top
if( (rEvtKey.getMod() & EvtInput::kModCtrl) &&
rEvtKey.getKey() == 't' )
{
CmdOnTop cmd( getIntf() );
cmd.execute();
return;
}
vlc_value_t val;
// Set the key
val.i_int = rEvtKey.getKey();
// Set the modifiers
if( rEvtKey.getMod() & EvtInput::kModAlt )
{
val.i_int |= KEY_MODIFIER_ALT;
}
if( rEvtKey.getMod() & EvtInput::kModCtrl )
{
val.i_int |= KEY_MODIFIER_CTRL;
}
if( rEvtKey.getMod() & EvtInput::kModShift )
{
val.i_int |= KEY_MODIFIER_SHIFT;
}
var_Set( getIntf()->p_vlc, "key-pressed", val );
}
// Always store the modifier, which can be needed for scroll events
m_currModifier = rEvtKey.getMod();
}
void TopWindow::processEvent( EvtRefresh &rEvtRefresh )
{
// Refresh the given area
refresh( rEvtRefresh.getXStart(), rEvtRefresh.getYStart(),
rEvtRefresh.getWidth(), rEvtRefresh.getHeight() );
}
void TopWindow::processEvent( EvtScroll &rEvtScroll )
{
// Raise the windows
raise();
// Get the control hit by the mouse
CtrlGeneric *pNewHitControl = findHitControl( rEvtScroll.getXPos(),
rEvtScroll.getYPos());
setLastHit( pNewHitControl );
// Send a mouse event to the hit control, or to the control
// that captured the mouse, if any
CtrlGeneric *pActiveControl = pNewHitControl;
if( m_pCapturingControl )
{
pActiveControl = m_pCapturingControl;
}
if( pActiveControl )
{
pActiveControl->handleEvent( rEvtScroll );
}
else
{
// Treat the scroll event as a hotkey
vlc_value_t val;
if( rEvtScroll.getDirection() == EvtScroll::kUp )
{
val.i_int = KEY_MOUSEWHEELUP;
}
else
{
val.i_int = KEY_MOUSEWHEELDOWN;
}
// Add the modifiers
val.i_int |= m_currModifier;
var_Set( getIntf()->p_vlc, "key-pressed", val );
}
}
void TopWindow::forwardEvent( EvtGeneric &rEvt, CtrlGeneric &rCtrl )
{
// XXX: We should do some checks here
rCtrl.handleEvent( rEvt );
}
void TopWindow::refresh( int left, int top, int width, int height )
{
if( m_pActiveLayout )
{
m_pActiveLayout->getImage()->copyToWindow( *getOSWindow(), left, top,
width, height, left, top );
}
}
void TopWindow::setActiveLayout( GenericLayout *pLayout )
{
pLayout->setWindow( this );
m_pActiveLayout = pLayout;
// Get the size of the layout and resize the window
resize( pLayout->getWidth(), pLayout->getHeight() );
updateShape();
pLayout->refreshAll();
}
void TopWindow::innerShow()
{
// First, refresh the layout and update the shape of the window
if( m_pActiveLayout )
{
updateShape();
m_pActiveLayout->refreshAll();
}
// Show the window
GenericWindow::innerShow();
}
void TopWindow::updateShape()
{
// Set the shape of the window
if( m_pActiveLayout )
{
OSGraphics *pImage = m_pActiveLayout->getImage();
if( pImage )
{
pImage->applyMaskToWindow( *getOSWindow() );
}
}
}
const list<Anchor*> TopWindow::getAnchorList() const
{
return m_anchorList;
}
void TopWindow::addAnchor( Anchor *pAnchor )
{
m_anchorList.push_back( pAnchor );
}
void TopWindow::onControlCapture( const CtrlGeneric &rCtrl )
{
// Set the capturing control
m_pCapturingControl = (CtrlGeneric*) &rCtrl;
}
void TopWindow::onControlRelease( const CtrlGeneric &rCtrl )
{
// Release the capturing control
if( m_pCapturingControl == &rCtrl )
{
m_pCapturingControl = NULL;
}
else
{
msg_Dbg( getIntf(), "Control had not captured the mouse" );
}
// Send an enter event to the control under the mouse, if it doesn't
// have received it yet
if( m_pLastHitControl && m_pLastHitControl != &rCtrl )
{
EvtEnter evt( getIntf() );
m_pLastHitControl->handleEvent( evt );
// Show the tooltip
m_rWindowManager.hideTooltip();
UString tipText = m_pLastHitControl->getTooltipText();
if( tipText.length() > 0 )
{
// Set the tooltip text variable
VarManager *pVarManager = VarManager::instance( getIntf() );
pVarManager->getTooltipText().set( tipText );
m_rWindowManager.showTooltip();
}
}
}
void TopWindow::onTooltipChange( const CtrlGeneric &rCtrl )
{
// Check that the control is the active one
if( m_pLastHitControl && m_pLastHitControl == &rCtrl )
{
// Set the tooltip text variable
VarManager *pVarManager = VarManager::instance( getIntf() );
pVarManager->getTooltipText().set( rCtrl.getTooltipText() );
}
}
CtrlGeneric *TopWindow::findHitControl( int xPos, int yPos )
{
if( m_pActiveLayout == NULL )
{
return NULL;
}
// Get the controls in the active layout
const list<LayeredControl> &ctrlList = m_pActiveLayout->getControlList();
list<LayeredControl>::const_reverse_iterator iter;
// New control hit by the mouse
CtrlGeneric *pNewHitControl = NULL;
// Loop on the control list to find the uppest hit control
for( iter = ctrlList.rbegin(); iter != ctrlList.rend(); iter++ )
{
// Get the position of the control in the layout
const Position *pos = (*iter).m_pControl->getPosition();
if( pos != NULL )
{
// Compute the coordinates of the mouse relative to the control
int xRel = xPos - pos->getLeft();
int yRel = yPos - pos->getTop();
CtrlGeneric *pCtrl = (*iter).m_pControl;
// Control hit ?
if( pCtrl->isVisible() && pCtrl->mouseOver( xRel, yRel ) )
{
pNewHitControl = (*iter).m_pControl;
break;
}
}
else
{
msg_Dbg( getIntf(), "Control at NULL position" );
}
}
// If the hit control has just been entered, send it an enter event
if( pNewHitControl && (pNewHitControl != m_pLastHitControl) )
{
// Don't send the event if another control captured the mouse
if( !m_pCapturingControl || (m_pCapturingControl == pNewHitControl ) )
{
EvtEnter evt( getIntf() );
pNewHitControl->handleEvent( evt );
if( !m_pCapturingControl )
{
// Show the tooltip
m_rWindowManager.hideTooltip();
UString tipText = pNewHitControl->getTooltipText();
if( tipText.length() > 0 )
{
// Set the tooltip text variable
VarManager *pVarManager = VarManager::instance( getIntf() );
pVarManager->getTooltipText().set( tipText );
m_rWindowManager.showTooltip();
}
}
}
}
return pNewHitControl;
}
void TopWindow::setLastHit( CtrlGeneric *pNewHitControl )
{
// Send a leave event to the left control
if( m_pLastHitControl && (pNewHitControl != m_pLastHitControl) )
{
// Don't send the event if another control captured the mouse
if( !m_pCapturingControl || (m_pCapturingControl == m_pLastHitControl))
{
EvtLeave evt( getIntf() );
m_pLastHitControl->handleEvent( evt );
}
}
m_pLastHitControl = pNewHitControl;
}
/*****************************************************************************
* top_window.hpp
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id$
*
* Authors: Cyril Deguet <asmax@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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* 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.
*****************************************************************************/
#ifndef TOP_WINDOW_HPP
#define TOP_WINDOW_HPP
#include "generic_window.hpp"
#include "../utils/pointer.hpp"
#include <list>
class Anchor;
class OSWindow;
class OSGraphics;
class GenericLayout;
class CtrlGeneric;
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( EvtRefresh &rEvtRefresh );
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 );
/// 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 list of the anchors of this window
virtual const list<Anchor*> getAnchorList() const;
/// Add an anchor to this window
virtual void addAnchor( Anchor *pAnchor );
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;
/// List of the anchors of this window
list<Anchor*> m_anchorList;
/// 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 );
};
typedef CountedPtr<TopWindow> TopWindowPtr;
#endif
...@@ -27,9 +27,8 @@ ...@@ -27,9 +27,8 @@
VoutWindow::VoutWindow( intf_thread_t *pIntf, int left, int top, VoutWindow::VoutWindow( intf_thread_t *pIntf, int left, int top,
WindowManager &rWindowManager,
bool dragDrop, bool playOnDrop, GenericWindow &rParent ): bool dragDrop, bool playOnDrop, GenericWindow &rParent ):
GenericWindow( pIntf, left, top, rWindowManager, dragDrop, playOnDrop, GenericWindow( pIntf, left, top, dragDrop, playOnDrop,
&rParent ) &rParent )
{ {
} }
......
...@@ -32,7 +32,6 @@ class VoutWindow: public GenericWindow ...@@ -32,7 +32,6 @@ class VoutWindow: public GenericWindow
{ {
public: public:
VoutWindow( intf_thread_t *pIntf, int xPos, int yPos, VoutWindow( intf_thread_t *pIntf, int xPos, int yPos,
WindowManager &rWindowManager,
bool dragDrop, bool playOnDrop, GenericWindow &rParent ); bool dragDrop, bool playOnDrop, GenericWindow &rParent );
virtual ~VoutWindow(); virtual ~VoutWindow();
}; };
......
...@@ -42,14 +42,14 @@ WindowManager::~WindowManager() ...@@ -42,14 +42,14 @@ WindowManager::~WindowManager()
} }
void WindowManager::registerWindow( GenericWindow &rWindow ) void WindowManager::registerWindow( TopWindow &rWindow )
{ {
// Add the window to the set // Add the window to the set
m_allWindows.insert( &rWindow ); m_allWindows.insert( &rWindow );
} }
void WindowManager::unregisterWindow( GenericWindow &rWindow ) void WindowManager::unregisterWindow( TopWindow &rWindow )
{ {
// Erase every possible reference to the window // Erase every possible reference to the window
m_allWindows.erase( &rWindow ); m_allWindows.erase( &rWindow );
...@@ -58,7 +58,7 @@ void WindowManager::unregisterWindow( GenericWindow &rWindow ) ...@@ -58,7 +58,7 @@ void WindowManager::unregisterWindow( GenericWindow &rWindow )
} }
void WindowManager::startMove( GenericWindow &rWindow ) void WindowManager::startMove( TopWindow &rWindow )
{ {
// Rebuild the set of moving windows // Rebuild the set of moving windows
m_movingWindows.clear(); m_movingWindows.clear();
...@@ -126,7 +126,7 @@ void WindowManager::stopMove() ...@@ -126,7 +126,7 @@ void WindowManager::stopMove()
} }
void WindowManager::move( GenericWindow &rWindow, int left, int top ) const void WindowManager::move( TopWindow &rWindow, int left, int top ) const
{ {
// Compute the real move offset // Compute the real move offset
int xOffset = left - rWindow.getLeft(); int xOffset = left - rWindow.getLeft();
...@@ -144,7 +144,7 @@ void WindowManager::move( GenericWindow &rWindow, int left, int top ) const ...@@ -144,7 +144,7 @@ void WindowManager::move( GenericWindow &rWindow, int left, int top ) const
} }
void WindowManager::raiseAll( GenericWindow &rWindow ) const void WindowManager::raiseAll( TopWindow &rWindow ) const
{ {
// Raise all the windows // Raise all the windows
WinSet_t::const_iterator it; WinSet_t::const_iterator it;
...@@ -194,7 +194,7 @@ void WindowManager::toggleOnTop() ...@@ -194,7 +194,7 @@ void WindowManager::toggleOnTop()
void WindowManager::buildDependSet( WinSet_t &rWinSet, void WindowManager::buildDependSet( WinSet_t &rWinSet,
GenericWindow *pWindow ) TopWindow *pWindow )
{ {
// pWindow is in the set // pWindow is in the set
rWinSet.insert( pWindow ); rWinSet.insert( pWindow );
...@@ -213,7 +213,7 @@ void WindowManager::buildDependSet( WinSet_t &rWinSet, ...@@ -213,7 +213,7 @@ void WindowManager::buildDependSet( WinSet_t &rWinSet,
} }
void WindowManager::checkAnchors( GenericWindow *pWindow, void WindowManager::checkAnchors( TopWindow *pWindow,
int &xOffset, int &yOffset ) const int &xOffset, int &yOffset ) const
{ {
WinSet_t::const_iterator itMov, itSta; WinSet_t::const_iterator itMov, itSta;
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#define WINDOW_MANAGER_HPP #define WINDOW_MANAGER_HPP
#include "skin_common.hpp" #include "skin_common.hpp"
#include "generic_window.hpp" #include "top_window.hpp"
#include <list> #include <list>
#include <map> #include <map>
#include <set> #include <set>
...@@ -50,13 +50,13 @@ class WindowManager: public SkinObject ...@@ -50,13 +50,13 @@ class WindowManager: public SkinObject
/// Add a window to the list of known windows. Necessary if you want /// Add a window to the list of known windows. Necessary if you want
/// your window to be movable... /// your window to be movable...
void registerWindow( GenericWindow &rWindow ); void registerWindow( TopWindow &rWindow );
/// Remove a previously registered window /// Remove a previously registered window
void unregisterWindow( GenericWindow &rWindow ); void unregisterWindow( TopWindow &rWindow );
/// Tell the window manager that a move is initiated for pWindow. /// Tell the window manager that a move is initiated for pWindow.
void startMove( GenericWindow &rWindow ); void startMove( TopWindow &rWindow );
/// Tell the window manager that the current move ended. /// Tell the window manager that the current move ended.
void stopMove(); void stopMove();
...@@ -64,10 +64,10 @@ class WindowManager: public SkinObject ...@@ -64,10 +64,10 @@ class WindowManager: public SkinObject
/// Move the pWindow window to (left, top), and move all its /// Move the pWindow window to (left, top), and move all its
/// anchored windows. /// anchored windows.
/// If a new anchoring is detected, the windows will move accordingly. /// If a new anchoring is detected, the windows will move accordingly.
void move( GenericWindow &rWindow, int left, int top ) const; void move( TopWindow &rWindow, int left, int top ) const;
/// Raise all the windows, rWindow being above the others /// Raise all the windows, rWindow being above the others
void raiseAll( GenericWindow &rWindow ) const; void raiseAll( TopWindow &rWindow ) const;
/// Show all the registered windows /// Show all the registered windows
void showAll() const; void showAll() const;
...@@ -76,10 +76,10 @@ class WindowManager: public SkinObject ...@@ -76,10 +76,10 @@ class WindowManager: public SkinObject
void hideAll() const; void hideAll() const;
/// Show the given window /// Show the given window
void show( GenericWindow &rWindow ) { rWindow.show(); } void show( TopWindow &rWindow ) { rWindow.show(); }
/// Hide the given window /// Hide the given window
void hide( GenericWindow &rWindow ) { rWindow.hide(); } void hide( TopWindow &rWindow ) { rWindow.hide(); }
/// Toggle all the windows on top /// Toggle all the windows on top
void toggleOnTop(); void toggleOnTop();
...@@ -104,7 +104,7 @@ class WindowManager: public SkinObject ...@@ -104,7 +104,7 @@ class WindowManager: public SkinObject
private: private:
/// Some useful typedefs for lazy people like me /// Some useful typedefs for lazy people like me
typedef set<GenericWindow*> WinSet_t; typedef set<TopWindow*> WinSet_t;
typedef list<Anchor*> AncList_t; typedef list<Anchor*> AncList_t;
/// This map represents the graph of anchored windows: it associates /// This map represents the graph of anchored windows: it associates
...@@ -112,7 +112,7 @@ class WindowManager: public SkinObject ...@@ -112,7 +112,7 @@ class WindowManager: public SkinObject
/// This is not transitive, i.e. if a is in m_dep[b] and if b is in /// This is not transitive, i.e. if a is in m_dep[b] and if b is in
/// m_dep[c], it doesn't mean that a is in m_dep[c] (in fact, it /// m_dep[c], it doesn't mean that a is in m_dep[c] (in fact, it
/// would be extremely rare...) /// would be extremely rare...)
map<GenericWindow*, WinSet_t> m_dependencies; map<TopWindow*, WinSet_t> m_dependencies;
/// Store all the windows /// Store all the windows
WinSet_t m_allWindows; WinSet_t m_allWindows;
/// Store the moving windows; this set is updated at every start of /// Store the moving windows; this set is updated at every start of
...@@ -130,11 +130,11 @@ class WindowManager: public SkinObject ...@@ -130,11 +130,11 @@ class WindowManager: public SkinObject
Tooltip *m_pTooltip; Tooltip *m_pTooltip;
/// Recursively build a set of windows anchored to the one given. /// Recursively build a set of windows anchored to the one given.
void buildDependSet( WinSet_t &rWinSet, GenericWindow *pWindow ); void buildDependSet( WinSet_t &rWinSet, TopWindow *pWindow );
/// Check anchoring: this function updates xOffset and yOffset, /// Check anchoring: this function updates xOffset and yOffset,
/// to take care of a new anchoring (if any) /// to take care of a new anchoring (if any)
void checkAnchors( GenericWindow *pWindow, void checkAnchors( TopWindow *pWindow,
int &xOffset, int &yOffset ) const; int &xOffset, int &yOffset ) const;
}; };
......
...@@ -61,7 +61,6 @@ ...@@ -61,7 +61,6 @@
<Bitmap id="stop_disabled" file="stop_disabled.png" alphacolor="#FF0000"/> <Bitmap id="stop_disabled" file="stop_disabled.png" alphacolor="#FF0000"/>
<Bitmap id="stop_onclick" file="stop_onclick.png" alphacolor="#FF0000"/> <Bitmap id="stop_onclick" file="stop_onclick.png" alphacolor="#FF0000"/>
<Bitmap id="volume_radial" file="volume.png" alphacolor="#FF0000"/> <Bitmap id="volume_radial" file="volume.png" alphacolor="#FF0000"/>
<Bitmap id="vout" file="vout.png" alphacolor="#FF0000"/>
<Font id="default_font" font="FreeSansBold.ttf" size="15"/> <Font id="default_font" font="FreeSansBold.ttf" size="15"/>
<Font id="playlist_font" font="FreeSansBold.ttf" size="12"/> <Font id="playlist_font" font="FreeSansBold.ttf" size="12"/>
......
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