00001 /***************************************************************************** 00002 * ctrl_move.hpp 00003 ***************************************************************************** 00004 * Copyright (C) 2003 the VideoLAN team 00005 * $Id: 67e813fe2bd9103c783721bfdb57985045daf471 $ 00006 * 00007 * Authors: Cyril Deguet <asmax@via.ecp.fr> 00008 * Olivier Teulière <ipkiss@via.ecp.fr> 00009 * 00010 * This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU General Public License along 00021 * with this program; if not, write to the Free Software Foundation, Inc., 00022 * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 00023 *****************************************************************************/ 00024 00025 #ifndef CTRL_MOVE_HPP 00026 #define CTRL_MOVE_HPP 00027 00028 #include "../commands/cmd_generic.hpp" 00029 #include "../utils/fsm.hpp" 00030 #include "ctrl_flat.hpp" 00031 00032 class TopWindow; 00033 class WindowManager; 00034 00035 00036 /// Control for moving windows 00037 class CtrlMove: public CtrlFlat 00038 { 00039 public: 00040 CtrlMove( intf_thread_t *pIntf, WindowManager &rWindowManager, 00041 CtrlFlat &rCtrl, TopWindow &rWindow, 00042 const UString &rHelp, VarBool *pVisible ); 00043 virtual ~CtrlMove() { } 00044 00045 /// Handle an event 00046 virtual void handleEvent( EvtGeneric &rEvent ); 00047 00048 /// Check whether coordinates are inside the decorated control 00049 virtual bool mouseOver( int x, int y ) const; 00050 00051 /// Draw the control on the given graphics 00052 virtual void draw( OSGraphics &rImage, int xDest, int yDest ); 00053 00054 /// Set the position and the associated layout of the decorated control 00055 virtual void setLayout( GenericLayout *pLayout, 00056 const Position &rPosition ); 00057 virtual void unsetLayout( ); 00058 00059 /// Get the position of the decorated control in the layout, if any 00060 virtual const Position *getPosition() const; 00061 00062 /// Method called when the control is resized 00063 virtual void onResize(); 00064 00065 /// Get the type of control (custom RTTI) 00066 virtual string getType() const { return m_rCtrl.getType(); } 00067 00068 private: 00069 FSM m_fsm; 00070 /// Window manager 00071 WindowManager &m_rWindowManager; 00072 /// Decorated CtrlFlat 00073 CtrlFlat &m_rCtrl; 00074 /// The window moved by this control 00075 TopWindow &m_rWindow; 00076 /// The last received event 00077 EvtGeneric *m_pEvt; 00078 /// Position of the click that started the move 00079 int m_xPos, m_yPos; 00080 00081 /// Callback objects 00082 DEFINE_CALLBACK( CtrlMove, MovingMoving ) 00083 DEFINE_CALLBACK( CtrlMove, StillMoving ) 00084 DEFINE_CALLBACK( CtrlMove, MovingStill ) 00085 }; 00086 00087 #endif
1.5.6