1 /***************************************************************************** 2 * ctrl_move.hpp 3 ***************************************************************************** 4 * Copyright (C) 2003 the VideoLAN team 5 * $Id: d564c00019d99d85b00e4067e4355f11ae003844 $ 6 * 7 * Authors: Cyril Deguet <asmax@via.ecp.fr> 8 * Olivier Teulière <ipkiss@via.ecp.fr> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License along 21 * with this program; if not, write to the Free Software Foundation, Inc., 22 * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 23 *****************************************************************************/ 24 25 #ifndef CTRL_MOVE_HPP 26 #define CTRL_MOVE_HPP 27 28 #include "../commands/cmd_generic.hpp" 29 #include "../utils/fsm.hpp" 30 #include "ctrl_flat.hpp" 31 32 class TopWindow; 33 class WindowManager; 34 35 36 /// Control for moving windows 37 class CtrlMove: public CtrlFlat 38 { 39 public: 40 CtrlMove( intf_thread_t *pIntf, WindowManager &rWindowManager, 41 CtrlFlat &rCtrl, TopWindow &rWindow, 42 const UString &rHelp, VarBool *pVisible ); ~CtrlMove()43 virtual ~CtrlMove() { } 44 45 /// Handle an event 46 virtual void handleEvent( EvtGeneric &rEvent ); 47 48 /// Check whether coordinates are inside the decorated control 49 virtual bool mouseOver( int x, int y ) const; 50 51 /// Draw the control on the given graphics 52 virtual void draw( OSGraphics &rImage, int xDest, int yDest, int w, int h ); 53 54 /// Set the position and the associated layout of the decorated control 55 virtual void setLayout( GenericLayout *pLayout, 56 const Position &rPosition ); 57 virtual void unsetLayout( ); 58 59 /// Get the position of the decorated control in the layout, if any 60 virtual const Position *getPosition() const; 61 62 /// Method called when the control is resized 63 virtual void onResize(); 64 65 /// Get the type of control (custom RTTI) getType() const66 virtual std::string getType() const { return m_rCtrl.getType(); } 67 68 private: 69 FSM m_fsm; 70 /// Window manager 71 WindowManager &m_rWindowManager; 72 /// Decorated CtrlFlat 73 CtrlFlat &m_rCtrl; 74 /// The window moved by this control 75 TopWindow &m_rWindow; 76 /// The last received event 77 EvtGeneric *m_pEvt; 78 /// Position of the click that started the move 79 int m_xPos, m_yPos; 80 81 /// Callback objects 82 DEFINE_CALLBACK( CtrlMove, MovingMoving ) 83 DEFINE_CALLBACK( CtrlMove, StillMoving ) 84 DEFINE_CALLBACK( CtrlMove, MovingStill ) 85 }; 86 87 #endif 88