aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llwindow/lllogitechlcd.h
blob: 47a6acd77ea1105efbf8ae3a3b1f309540cb2a46 (plain)
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/** 
 * @file lcd.h
 * @brief Description of the LCD owner class.
 *
 * $LicenseInfo:firstyear=2001&license=viewergpl$
 * 
 * Copyright (c) 2001-2008, Linden Research, Inc.
 * 
 * Second Life Viewer Source Code
 * The source code in this file ("Source Code") is provided by Linden Lab
 * to you under the terms of the GNU General Public License, version 2.0
 * ("GPL"), unless you have obtained a separate licensing agreement
 * ("Other License"), formally executed by you and Linden Lab.  Terms of
 * the GPL can be found in doc/GPL-license.txt in this distribution, or
 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
 * 
 * There are special exceptions to the terms and conditions of the GPL as
 * it is applied to this Source Code. View the full text of the exception
 * in the file doc/FLOSS-exception.txt in this software distribution, or
 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
 * 
 * By copying, modifying or distributing this software, you acknowledge
 * that you have read and understood your obligations described above,
 * and agree to abide by those obligations.
 * 
 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
 * COMPLETENESS OR PERFORMANCE.
 * $/LicenseInfo$
 */

#ifndef LL_LOGITECH_LCD_H
#define LL_LOGITECH_LCD_H

#include <vector>
#include "llFrametimer.h"

class CEzLcd;

// TO Add a new display page groups, duplicate the Region or Debug or Chat class, then modify what's actually displayed (ie how many pages and whats in them)
// in the constructor and update display functions.
// Remember to add in a new enum type for the new display type, and add in functions to actually create/update or remove this page in the SetupDisplayPages function
// And, of course, add the new option to the Menu in llpanelLCDoption.xml, and save details (duplicate the ones for debug or region).

// this defines one pages worth of display items.
class LLLCDSpecificPage
{
public:
	int mPageIndex;
	typedef std::vector<HANDLE> displayItemArray_t;
	// array of indexes that come from the lcd display sdk for specific items being displayed on a given page
	displayItemArray_t mDisplayItemArray;
};

// this defines a group of pages - associated with a specific type of display, like Debug, Linden Account info, region etc
// NOTE this can have more than one page associated with it - so it has an array of cLCDSpecificPage for each page.
class LLLCDPageGroup
{
public:
	LLLCDPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
	virtual ~LLLCDPageGroup();
	virtual void UpdateDetails() = 0; 
	virtual void GetDisplayable() = 0;
	int		mType;
	HANDLE	mHandle;
	typedef std::vector<LLLCDSpecificPage> pageArray_t;
	pageArray_t mPageArray;
	BOOL	mDisplayPage;
protected:

	CEzLcd	*mLCD;
	HICON	mSLIcon;
};


// class that defines the Default page - used if nothing else is enabled
class llDefaultPageGroup : public LLLCDPageGroup
{
public:
	llDefaultPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
	virtual void UpdateDetails();
	virtual void GetDisplayable();
};

// Root class - contains pointers to actual LCD display object, and arrays of page groups to be displayed
class LLLCD
{
public:
	enum
	{
		kLCDDefault,
		kLCDDebug,
		kLCDChat,
		kLCDRegion,
		kLCDLinden,
		kLCDIM,
		kLCDDebugConsole,
		kMaxLCDPageGroups
	};
	LLLCD(HINSTANCE instance);
	~LLLCD();
	void UpdateDisplay();
	bool Enabled();
	BOOL AreZ10Available();
	BOOL IsG15Available();

	typedef std::vector<LLLCDPageGroup *> pageGroupArray_t;
	pageGroupArray_t mPageGroupArray;
	HICON mSLIcon;
	CEzLcd	*mLCD;
private:

	// member functions to display data
	void SetUpDisplayPages();
	LLLCDPageGroup *GetNextPageToDisplay();

	LLLCDPageGroup *mCurrentGroupBeingShown;

	// members
	bool mInited;
	
	int	mPageToShow;
	LLFrameTimer	mDisplayTimer;
	LLFrameTimer	mDebounceTimer;
	HINSTANCE mInstance;		// necessary for loading some icons for the dot matrix LCD display to use
	bool mFirstTimeThru;


	// actual display set up variables
	int mDestinationLCD;
};



#endif