1 #pragma once
2 #include "Gui_Def.h"
3 #include "SliderValue.h"
4 
5 #include <MyGUI_Prerequest.h>
6 //#include <MyGUI_Types.h>
7 #include <MyGUI_WidgetToolTip.h>
8 #include <MyGUI_Enumerator.h>
9 #include <OgreString.h>
10 #include "settings_com.h"
11 
12 
13 namespace Ogre {  class SceneNode;  class Root;  class SceneManager;  class RenderWindow;  class Viewport;  class Light;  }
14 class Scene;  class CData;  class SplineRoad;
15 class App;  class SETTINGS;
16 
17 
18 //  tracks,cars list items - with info for sorting
19 struct TrkL
20 {
21 	std::string name;
22 	const class TrackInfo* ti;  // 0 means user trk
23 	static int idSort;
24 	TrkL();
25 };
26 
27 
28 class CGuiCom : public BGui
29 {
30 public:
31 	App* app;
32 	SETTINGS* pSet;
33 	Scene* sc;
34 	MyGUI::Gui* mGui;
35 
36 	CGuiCom(App* app1);
37 
38 	typedef std::list <std::string> strlist;
39 
40 
41 	///  Gui common   --------------------------
42 
43 	//  resize
44 	void SizeGUI(), doSizeGUI(MyGUI::EnumeratorWidgetPtr);
45 	float GetGuiMargin(int wy);
46 	void setOrigPos(WP wp, const char* relToWnd);
47 	void CreateFonts();
48 
49 	//  tooltip
50 	WP mToolTip;  Ed mToolTipTxt;
51 	void setToolTips(MyGUI::EnumeratorWidgetPtr widgets);
52 	void notifyToolTip(WP sender, const MyGUI::ToolTipInfo& info);
53 	void boundedMove(WP moving, const MyGUI::IntPoint& point);
54 
55 	//  language
56 	bool bGuiReinit;  // lang change
57 	void comboLanguage(CMB);
58 	std::map<std::string, MyGUI::UString> languages; // <short name, display name>
59 
60 	void UnfocusLists();
61 	Btn bnQuit;  void btnQuit(WP);
62 
63 	//  init
64 	void GuiCenterMouse();
65 	void GuiInitTooltip(), GuiInitLang();
66 	//  init tabs
67 	void GuiInitGraphics(), GuiInitTrack(), initMiniPos(int i);
68 
69 	//  main menu
70 	void InitMainMenu();
71 	void btnMainMenu(WP);  void tabMainMenu(Tab tab, size_t id);
72 	MyGUI::TabPtr FindSubTab(WP tab);  // util
73 
74 
75 	///  [Graphics]
76 	SlV(ViewDist);  SlV(Anisotropy);
77 	SlV(TerDetail);  SlV(TerDist);  SV svRoadDist;
78 	SV svTexSize, svTerMtr, svTerTripl;  // detail
79 	SV svTrees, svGrass, svTreesDist, svGrassDist;  // veget
80 	SV svShadowType, svShadowCount, svShadowSize, svShadowDist;  // shadow
81 	SlV(WaterSize);
82 
83 	Ck ckUseImposters, ckImpostorsOnly;
84 	Ck ckWaterReflect, ckWaterRefract;  void chkWater(Ck*);
85 
86 	void comboTexFilter(CMB), cmbAntiAliasing(CMB);
87 	void btnShadows(WP), btnShaders(WP), btnTrGrReset(WP);
88 
89 	Ck ckLimitFps;
90 	SV svLimitFps,svLimitSleep;
91 
92 
93 	//  track path
94 	Ogre::String pathTrk[2];    // 0 read only  1 //U user paths for save
95 	std::string TrkDir();  // path to track dir (from pSet settings)
96 
97 	Ogre::String PathListTrk(int user=-1);
98 	Ogre::String PathListTrkPrv(int user/*=-1*/, Ogre::String track);
99 
100 	bool TrackExists(Ogre::String name);
101 	Ogre::String GetSceneryColor(Ogre::String name, Ogre::String* scenery=0);
102 	std::map<Ogre::String, Ogre::String> scnClr, scnN;
103 
104 
105 	///  [Track]
106 
107 	//  selected track name, user
108 	Ogre::String sListTrack;
109 	bool bListTrackU;
110 
111 	void listTrackChng(Mli2, size_t);
112 	void SortTrkList();
113 	void TrackListUpd(bool resetNotFound=false);
114 
115 	Mli2 trkList;
116 	Ed trkDesc[2];  // description
117 	bool needSort(Mli2 li);
118 
119 	Img imgPrv[2], imgMini[2], imgTer[2];  // view,  mini: road, terrain
120 	Img imgTrkIco1, imgTrkIco2, imgMiniPos[2];
121 	MyGUI::RotatingSkin* imgMiniRot[2];
122 
123 
124 	//  st - road stats,dim  inf - tracks.ini ratings
125 	const static int StTrk = 14, InfTrk = 12;
126 	Txt stTrk[2][StTrk], infTrk[2][InfTrk];  // [2] 2nd set is for champs
127 	Img imStTrk[2][4], imInfTrk[2][InfTrk];
128 
129 	void UpdGuiRdStats(const SplineRoad* rd, const Scene* sc, const Ogre::String& sTrack,
130 		float timeCur, bool reverse=false, int champ=0);
131 	void ReadTrkStats();
132 
133 	//  track views
134 	void btnTrkView1(WP), btnTrkView2(WP), btnTrkFilter(WP);
135 	void ChangeTrackView();
136 	void updTrkListDim();
137 
138 
139 	//  columns, filters  ---
140 	Ck ckTrkFilter;  void chkTrkFilter(Ck*);
141 	Ck ckTrkColVis[COL_VIS];  void chkTrkColVis(Ck*);
142 	SV svTrkFilMin[COL_FIL], svTrkFilMax[COL_FIL];  void slTrkFil(SV*);
143 	void ChkUpd_Col();
144 	Txt txtTracksFAll, txtTracksFCur;
145 
146 	//  const list column widths
147 	const static int colTrk[32];
148 	const static Ogre::String clrsDiff[9], clrsRating[6], clrsLong[10];
149 
150 
151 	//  track find
152 	Ogre::String sTrkFind;
153 	Ed edTrkFind;  void editTrkFind(Ed);
154 
155 	//  list fill
156 	strlist liTracks,liTracksUser;
157 	std::list<TrkL> liTrk;
158 	void FillTrackLists();
159 
160 	void AddTrkL(std::string name, int user, const class TrackInfo* ti);
161 	void trkListNext(int rel);
162 
163 
164 	///  [Screen]
165 	Cmb resList;
166 	void InitGuiScreenRes(), ResizeOptWnd();
167 
168 	CK(VidFullscr);  CK(VidVSync);
169 	void btnResChng(WP);
170 	void comboGraphicsAll(CMB), comboRenderSystem(CMB);
171 
172 };
173