1 /**
2  * @file
3  */
4 
5 /*
6 Copyright (C) 2002-2013 UFO: Alien Invasion.
7 
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 
17 See the GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 
23 */
24 
25 #pragma once
26 
27 #include "ui_node_abstractscrollable.h"
28 
29 class uiTextNode : public uiAbstractScrollableNode {
30 public:
31 	void draw(uiNode_t* node);
32 	void onLeftClick(uiNode_t* node, int x, int y) override;
33 	void onRightClick(uiNode_t* node, int x, int y) override;
34 	bool onScroll(uiNode_t* node, int deltaX, int deltaY) override;
35 	void onMouseMove(uiNode_t* node, int x, int y) override;
36 	void onMouseDown(uiNode_t* node, int x, int y, int button) override;
37 	void onMouseUp(uiNode_t* node, int x, int y, int button) override;
38 	void onCapturedMouseMove(uiNode_t* node, int x, int y) override;
39 	void onLoading(uiNode_t* node) override;
40 	void onLoaded(uiNode_t* node) override;
41 	int getCellHeight (uiNode_t* node) override;
42 public:
43 	void validateCache(uiNode_t* node);
44 protected:
45 	void drawText (uiNode_t* node, const char* text, const linkedList_t* list, bool noDraw);
46 	virtual void updateCache (uiNode_t* node);
47 };
48 
49 struct uiBehaviour_t;
50 struct uiAction_s;
51 
52 void UI_TextScrollEnd(const char* nodePath);
53 void UI_TextNodeSelectLine(uiNode_t* node, int num);
54 const char* UI_TextNodeGetSelectedText(uiNode_t* node, int num);
55 
56 void UI_RegisterTextNode(uiBehaviour_t* behaviour);
57 
58 typedef struct {
59 	abstractScrollableExtraData_t super;
60 
61 	int dataID;					/**< ID of a shared data @sa src/client/ui/ui_data.h */
62 	int versionId;				/**< Cached version of the shared data, to check update */
63 
64 	int textLineSelected;		/**< Which line is currently selected? This counts only visible lines). Add textScroll to this value to get total linecount. @sa selectedColor below.*/
65 	const char* textSelected;	/**< Text of the current selected line */
66 	int lineUnderMouse;			/**< UI_TEXT: The line under the mouse, when the mouse is over the node */
67 	int lineHeight;				/**< size between two lines */
68 	int tabWidth;				/**< max size of a tabulation */
69 	int longlines;				/**< what to do with long lines */
70 	bool mousefx;
71 
72 } textExtraData_t;
73 
74 /**
75  * @note text node inherite scrollable node. Scrollable (super) extradata
76  * must not move, else we can't call scrollable functions.
77  */
78 CASSERT(offsetof(textExtraData_t, super) == 0);
79