1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
/*!
\file GUIEditControl.h
\brief
*/
#ifndef GUILIB_GUIEditControl_H
#define GUILIB_GUIEditControl_H
#pragma once
/*
* Copyright (C) 2005-2008 Team XBMC
* http://www.xbmc.org
*
* 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, 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 XBMC; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
#include "GUIButtonControl.h"
#include "utils/Stopwatch.h"
/*!
\ingroup controls
\brief
*/
class CGUIEditControl : public CGUIButtonControl
{
public:
enum INPUT_TYPE {
INPUT_TYPE_TEXT = 0,
INPUT_TYPE_NUMBER,
INPUT_TYPE_SECONDS,
INPUT_TYPE_DATE,
INPUT_TYPE_IPADDRESS,
INPUT_TYPE_PASSWORD,
INPUT_TYPE_PASSWORD_MD5,
INPUT_TYPE_SEARCH,
INPUT_TYPE_FILTER
};
CGUIEditControl(int parentID, int controlID, float posX, float posY,
float width, float height, const CTextureInfo &textureFocus, const CTextureInfo &textureNoFocus,
const CLabelInfo& labelInfo, const std::string &text);
CGUIEditControl(const CGUIButtonControl &button);
virtual ~CGUIEditControl(void);
virtual CGUIEditControl *Clone() const { return new CGUIEditControl(*this); };
virtual bool OnMessage(CGUIMessage &message);
virtual bool OnAction(const CAction &action);
virtual void OnClick();
virtual void SetLabel(const std::string &text);
virtual void SetLabel2(const std::string &text);
virtual CStdString GetLabel2() const;
unsigned int GetCursorPosition() const;
void SetCursorPosition(unsigned int iPosition);
void SetInputType(INPUT_TYPE type, int heading);
void SetTextChangeActions(const std::vector<CGUIActionDescriptor>& textChangeActions) { m_textChangeActions = textChangeActions; };
bool HasTextChangeActions() { return m_textChangeActions.size() > 0; };
protected:
virtual void RenderText();
CStdStringW GetDisplayedText() const;
void RecalcLabelPosition();
void ValidateCursor();
void UpdateText(bool sendUpdate = true);
void OnPasteClipboard();
void OnSMSCharacter(unsigned int key);
void DefaultConstructor();
/*! \brief Clear out the current text input if it's an MD5 password.
\return true if the password is cleared, false otherwise.
*/
bool ClearMD5();
CStdStringW m_text2;
CStdString m_text;
float m_textOffset;
float m_textWidth;
static const int spaceWidth = 5;
unsigned int m_cursorPos;
unsigned int m_cursorBlink;
int m_inputHeading;
INPUT_TYPE m_inputType;
bool m_isMD5;
std::vector<CGUIActionDescriptor> m_textChangeActions;
unsigned int m_smsKeyIndex;
unsigned int m_smsLastKey;
CStopWatch m_smsTimer;
static const char* smsLetters[10];
static const unsigned int smsDelay;
};
#endif
|