1 #ifndef __TOOLBARSTRIP_H__
2 #define __TOOLBARSTRIP_H__
3 
4 #include <CUI/CUIDialog.h>
5 #include <LDLib/LDInputHandler.h>
6 #include "TbButtonInfo.h"
7 
8 class LDViewWindow;
9 class LDViewPreferences;
10 class TCAlert;
11 class TCImage;
12 
13 typedef std::vector<HWND> HwndVector;
14 typedef std::vector<long> LongVector;
15 typedef std::map<long, size_t> LongSizeTMap;
16 typedef std::vector<HIMAGELIST> HImageListVector;
17 typedef std::vector<int> IntVector;
18 typedef std::map<int, int> IntIntMap;
19 typedef std::list<HMENU> HMenuList;
20 typedef std::pair<size_t, int> ImageIndexPair;
21 typedef std::map<UINT, ImageIndexPair> ImageIndexMap;
22 
23 class ToolbarStrip: public CUIDialog
24 {
25 public:
26 	ToolbarStrip(HINSTANCE hInstance);
27 	void create(LDViewWindow *parent);
28 	void show(void);
29 	void hide(void);
30 	void autoSize(void);
getMainToolbar(void)31 	HWND getMainToolbar(void) { return m_hToolbar; }
32 	void updateNumSteps(void);
33 	void updateStep(void);
34 	void enableMainToolbarButton(UINT buttonId, bool enable);
35 	void checksReflect(void);
36 	void viewModeReflect(void);
37 	void activateDeactivatedTooltip(void);
38 protected:
39 	virtual ~ToolbarStrip(void);
40 	virtual void dealloc(void);
41 
42 	virtual BOOL doInitDialog(HWND /*hKbControl*/);
43 	virtual LRESULT doTextFieldChange(int controlId, HWND control);
44 	virtual LRESULT doCommand(int notifyCode, int commandId,
45 		HWND control);
46 	virtual LRESULT doNotify(int controlId, LPNMHDR notification);
47 	virtual LRESULT doInitMenuPopup(HMENU hPopupMenu, UINT uPos,
48 		BOOL fSystemMenu);
49 	virtual LRESULT doEnterMenuLoop(bool isTrackPopupMenu);
50 	virtual LRESULT doExitMenuLoop(bool isTrackPopupMenu);
51 	virtual LRESULT doContextMenu(HWND hWnd, int xPos, int yPos);
52 	virtual LRESULT doTimer(UINT_PTR timerID);
53 
54 	LRESULT doToolbarGetInfotip(TbButtonInfoVector &infos,
55 		LPNMTBGETINFOTIPUC dispInfo);
56 	LRESULT doMainToolbarNotify(int controlId, LPNMHDR notification);
57 	LRESULT doStepToolbarNotify(int controlId, LPNMHDR notification);
58 	LRESULT doMainTbGetButtonInfo(NMTOOLBARUC *notification);
59 	LRESULT doMainToolbarChange(void);
60 	LRESULT doMainToolbarReset(void);
61 	void addTbButtonInfo(TbButtonInfoVector &infos, CUCSTR tooltipText,
62 		int commandId, BYTE style = TBSTYLE_BUTTON,
63 		BYTE state = TBSTATE_ENABLED);
64 	void addTbCheckButtonInfo(TbButtonInfoVector &infos, CUCSTR tooltipText,
65 		int commandId, bool checked, BYTE style = TBSTYLE_CHECK,
66 		BYTE state = TBSTATE_ENABLED);
67 	void addTbStateButtonInfo(TbButtonInfoVector &infos, CUCSTR tooltipText,
68 		IntVector commandIds, int selection, BYTE style = TBSTYLE_BUTTON,
69 		BYTE state = TBSTATE_ENABLED);
70 	void addTbSeparatorInfo(TbButtonInfoVector &infos);
71 	int addToImageList(int commandId);
72 	void populateMainTbButtonInfos(void);
73 	void populateStepTbButtonInfos(void);
74 	void loadMainToolbarMenus(void);
75 	void initMainToolbar(void);
76 	void fillMainToolbar(void);
77 	void initStepToolbar(void);
78 	void initLayout(void);
79 	void initToolbar(HWND hToolbar, TbButtonInfoVector &infos,
80 		HIMAGELIST hImageList);
81 	void modelAlertCallback(TCAlert *alert);
82 	void stepChanged(void);
83 	void enableToolbarButton(HWND hToolbar, UINT buttonId, bool enable);
84 	bool doCheck(bool &value, LPARAM commandId);
85 	void updateContextMenu(void);
86 	void updateWireframeMenu(void);
87 	void updateEdgesMenu(void);
88 	void updatePrimitivesMenu(void);
89 	void updateLightingMenu(void);
90 	void updateBFCMenu(void);
91 	void updateMenuImages(HMENU hMenu, bool topMenu = false);
92 	void updateMenus(void);
93 	void sizeToolbar(HWND hToolbar, int count);
94 
95 	void forceRedraw(void);
96 
97 	void doWireframe(void);
98 	void doSeams(void);
99 	void doEdges(void);
100 	void doPrimitiveSubstitution(void);
101 	void doLighting(void);
102 	void doBfc(void);
103 	void doShowAxes(void);
104 	void doRandomColors(void);
105 	void doAllConditionals(void);
106 	void doConditionalControls(void);
107 	void doCutaway(void);
108 	void doFlatShading(void);
109 	void doStudQuality(void);
110 	void doPartBoundingBoxes(void);
111 	void doSmoothCurves(void);
112 	void doTransDefaultColor(void);
113 	void doFog(void);
114 	void doRemoveHiddenLines(void);
115 	void doShowEdgesOnly(void);
116 	void doConditionalLines(void);
117 	void doHighQualityEdges(void);
118 	void doAlwaysBlack(void);
119 	void doTextureStuds(void);
120 	void doTexmaps(void);
121 	void doQualityLighting(void);
122 	void doSubduedLighting(void);
123 	void doSpecularHighlight(void);
124 	void doAlternateLighting(void);
125 	void doDrawLightDats(void);
126 	void doOptionalStandardLight(void);
127 	void doRedBackFaces(void);
128 	void doGreenFrontFaces(void);
129 	void doBlueNeutralFaces(void);
130 	void doCustomizeMainToolbar(void);
131 	void doMainToolbar(void);
132 	void doStepsToolbar(void);
133 	void doViewMode(void);
134 
135 	void syncViewMode(void);
136 	void checkReflect(bool &value, bool prefsValue, LPARAM commandID);
137 	void doDropDown(LPNMTOOLBAR toolbarNot);
138 
139 	void fillTbButton(TBBUTTON &button, const TbButtonInfo &buttonInfo);
140 	void stepCountChanged(void);
141 
142 	int translateCommandId(int commandId);
143 
144 	LDViewWindow *m_ldviewWindow;
145 	LDViewPreferences *m_prefs;
146 
147 	HWND m_hToolbar;
148 	HWND m_hStepLabel;
149 	HWND m_hStepField;
150 	HWND m_hNumStepsLabel;
151 	HWND m_hStepToolbar;
152 	HWND m_hDeactivatedTooltip;;
153 
154 	HMENU m_hMainToolbarMenu;
155 	HMENU m_hContextMenu;
156 	HMENU m_hWireframeMenu;
157 	HMENU m_hEdgesMenu;
158 	HMENU m_hPrimitivesMenu;
159 	HMENU m_hLightingMenu;
160 	HMENU m_hBFCMenu;
161 
162 	HMODULE m_hGdiPlus;
163 
164 	double m_scaleFactor;
165 	int m_imageSize;
166 	int m_buttonWidth;
167 	int m_buttonHeight;
168 
169 	int m_numSteps;
170 	int m_step;
171 	ucstring m_numStepsFormat;
172 	TbButtonInfoVector m_mainButtonInfos;
173 	TbButtonInfoVector m_stepButtonInfos;
174 	HwndVector m_controls;
175 	int m_stripHeight;
176 	HImageListVector m_imageLists;
177 	IntIntMap m_commandMap;
178 	ImageIndexMap m_imagesMap;
179 	bool have32BitBmps;
180 
181 	int m_stdBitmapStartId;
182 	int m_tbBitmapStartId;
183 	bool m_drawWireframe;
184 	bool m_seams;
185 	bool m_edges;
186 	bool m_primitiveSubstitution;
187 	bool m_lighting;
188 	bool m_bfc;
189 	bool m_showAxes;
190 	bool m_randomColors;
191 	bool m_allConditionals;
192 	bool m_conditionalControls;
193 	bool m_flat;
194 	bool m_lowStuds;
195 	bool m_partBBoxes;
196 	bool m_smoothCurves;
197 	bool m_transDefaultColor;
198 	bool m_modelBoundingBox;
199 	bool m_topmost;
200 	bool m_wireframeCutaway;
201 	bool m_examineLatLong;
202 	bool m_texmaps;
203 	LDInputHandler::ViewMode m_viewMode;
204 
205 	bool m_showMain;
206 	bool m_showSteps;
207 };
208 
209 #endif // __TOOLBARSTRIP_H__
210