You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.7 KiB
138 lines
4.7 KiB
/*****************************************************************************
|
|
* ctrl_text.hpp
|
|
*****************************************************************************
|
|
* Copyright (C) 2003 the VideoLAN team
|
|
* $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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
|
*****************************************************************************/
|
|
|
|
#ifndef CTRL_TEXT_HPP
|
|
#define CTRL_TEXT_HPP
|
|
|
|
#include "ctrl_generic.hpp"
|
|
#include "../utils/fsm.hpp"
|
|
#include "../utils/observer.hpp"
|
|
#include <string>
|
|
|
|
class GenericFont;
|
|
class GenericBitmap;
|
|
class OSTimer;
|
|
class UString;
|
|
class VarText;
|
|
|
|
|
|
/// Class for control text
|
|
class CtrlText: public CtrlGeneric, public Observer<VarText, void*>
|
|
{
|
|
public:
|
|
enum Align_t
|
|
{
|
|
kLeft,
|
|
kCenter,
|
|
kRight
|
|
};
|
|
|
|
enum Scrolling_t
|
|
{
|
|
// The text starts scrolling automatically if it is larger than the
|
|
// width of the control. The user can still stop it or make it
|
|
// scroll manually with the mouse.
|
|
kAutomatic,
|
|
// Only manual scrolling is allowed (with the mouse)
|
|
kManual,
|
|
// No scrolling of the text is allowed
|
|
kNone
|
|
};
|
|
|
|
/// Create a text control with the optional given color
|
|
CtrlText( intf_thread_t *pIntf, VarText &rVariable,
|
|
const GenericFont &rFont, const UString &rHelp,
|
|
uint32_t color, VarBool *pVisible, Scrolling_t scrollMode,
|
|
Align_t alignment);
|
|
virtual ~CtrlText();
|
|
|
|
/// Handle an event
|
|
virtual void handleEvent( EvtGeneric &rEvent );
|
|
|
|
/// Check whether coordinates are inside the control
|
|
virtual bool mouseOver( int x, int y ) const;
|
|
|
|
/// Draw the control on the given graphics
|
|
virtual void draw( OSGraphics &rImage, int xDest, int yDest );
|
|
|
|
/// Set the text of the control, with an optional color
|
|
/// This takes effect immediatly
|
|
void setText( const UString &rText, uint32_t color = 0xFFFFFFFF );
|
|
|
|
/// Get the type of control (custom RTTI)
|
|
virtual string getType() const { return "text"; }
|
|
|
|
private:
|
|
/// Finite state machine of the control
|
|
FSM m_fsm;
|
|
/// Variable associated to the control
|
|
VarText &m_rVariable;
|
|
/// Callback objects
|
|
DEFINE_CALLBACK( CtrlText, ToManual )
|
|
DEFINE_CALLBACK( CtrlText, ManualMoving )
|
|
DEFINE_CALLBACK( CtrlText, ManualStill )
|
|
DEFINE_CALLBACK( CtrlText, Move )
|
|
/// The last received event
|
|
EvtGeneric *m_pEvt;
|
|
/// Font used to render the text
|
|
const GenericFont &m_rFont;
|
|
/// Color of the text
|
|
uint32_t m_color;
|
|
/// Scrolling mode
|
|
Scrolling_t m_scrollMode;
|
|
/// Type of alignment
|
|
Align_t m_alignment;
|
|
/// Image of the text
|
|
GenericBitmap *m_pImg;
|
|
/// Image of the text, repeated twice and with some blank between;
|
|
/// useful to display a 'circular' moving text...
|
|
GenericBitmap *m_pImgDouble;
|
|
/// Current image (should always be equal to m_pImg or m_pImgDouble)
|
|
GenericBitmap *m_pCurrImg;
|
|
/// Position of the left side of the moving text (always <= 0)
|
|
int m_xPos;
|
|
/// Offset between the mouse pointer and the left side of the
|
|
/// moving text
|
|
int m_xOffset;
|
|
/// Timer to move the text
|
|
OSTimer *m_pTimer;
|
|
|
|
/// Callback for the timer
|
|
DEFINE_CALLBACK( CtrlText, UpdateText );
|
|
|
|
/// Method called when the observed variable is modified
|
|
virtual void onUpdate( Subject<VarText,void*> &rVariable, void* );
|
|
|
|
/// Display the text on the control
|
|
void displayText( const UString &rText );
|
|
|
|
/// Helper function to set the position in the correct interval
|
|
void adjust( int &position );
|
|
|
|
/// Update the behaviour of the text whenever the control size changes
|
|
virtual void onChangePosition();
|
|
};
|
|
|
|
|
|
#endif
|
|
|