1 #ifndef __MODELWINDOW_H__
2 #define __MODELWINDOW_H__
3 
4 #include <CUI/CUIOGLWindow.h>
5 #include <TCFoundation/TCTypedObjectArray.h>
6 #include <TCFoundation/TCVector.h>
7 #include <LDLoader/LDLError.h>
8 #include <LDLib/LDInputHandler.h>
9 #include <LDLib/LDSnapshotTaker.h>
10 #include "LDViewPreferences.h"
11 #include <Commctrl.h>
12 #include <GL/glext.h>
13 #include <GL/wglext.h>
14 
15 #if defined(USE_CPP11) || !defined(_NO_BOOST)
16 #ifdef USE_CPP11
17 #include <thread>
18 #include <mutex>
19 #include <future>
20 #else // USE_CPP11
21 #ifdef WIN32
22 #pragma warning(push)
23 #pragma warning(disable:4244 4512)
24 #endif // WIN32
25 #include <boost/thread.hpp>
26 #ifdef WIN32
27 #pragma warning(pop)
28 #endif // WIN32
29 #endif // !_NO_BOOST
30 #endif // !USE_CPP11
31 
32 
33 class LDrawModelViewer;
34 class TCStringArray;
35 class CUIWindowResizer;
36 class LDHtmlInventory;
37 
38 #define POLL_NONE 0
39 #define POLL_PROMPT 1
40 #define POLL_AUTO 2
41 #define POLL_BACKGROUND 3
42 
43 class ErrorInfo: public TCObject
44 {
45 public:
46 	ErrorInfo(void);
setType(LDLErrorType type)47 	void setType(LDLErrorType type) { m_type = type; }
getType(void)48 	LDLErrorType getType(void) { return m_type; }
49 	void setTypeName(CUCSTR typeName);
getTypeName(void)50 	UCSTR getTypeName(void) const { return m_typeName; }
51 protected:
52 	~ErrorInfo(void);
53 	virtual void dealloc(void);
54 
55 	LDLErrorType m_type;
56 	UCSTR m_typeName;
57 };
58 
59 class ControlInfo: public TCObject
60 {
61 public:
62 	ControlInfo(void);
63 //	HWND handle;
64 //	int controlId;
65 //	RECT originalRect;
66 	LDLErrorType errorType;
67 };
68 
69 typedef TCTypedObjectArray<LDLError> LDLErrorArray;
70 typedef TCTypedObjectArray<ControlInfo> ControlInfoArray;
71 typedef TCTypedObjectArray<ErrorInfo> ErrorInfoArray;
72 
73 class ModelWindow: public CUIOGLWindow
74 {
75 public:
76 	ModelWindow(CUIWindow*, int, int, int, int);
77 	virtual void update(void);
78 	virtual void perspectiveView(void);
79 	virtual BOOL showPreferences(void);
80 	virtual void showErrors(void);
81 	virtual void createErrorWindow(void);
82 	virtual bool isErrorWindowVisible(void) const;
getErrorCount(void)83 	virtual int getErrorCount(void) const { return errorCount; }
getWarningCount(void)84 	virtual int getWarningCount(void) const { return warningCount; }
85 	virtual void setFilename(const char*);
86 	virtual char* getFilename(void);
87 	virtual int loadModel(void);
88 	virtual void mouseWheel(short keyFlags, short zDelta);
89 	virtual void setZoomSpeed(TCFloat);
90 	virtual TCFloat getZoomSpeed(void);
91 	//virtual void setRotationSpeed(TCFloat value);
92 	//virtual void setXRotate(TCFloat value);
93 	//virtual void setYRotate(TCFloat value);
94 	//TCFloat getRotationSpeed(void) { return rotationSpeed; }
95 	virtual void forceRedraw(int = 0);
96 	virtual void recompile(void);
97 	virtual void uncompile(void);
98 	virtual void openGlWillEnd(void);
99 	virtual void zoom(TCFloat);
100 	virtual void setClipZoom(bool);
101 	virtual bool getClipZoom(void);
102 	virtual void reload(void);
103 	virtual void startPolling(void);
104 	virtual BOOL stopPolling(void);
105 	virtual void checkFileForUpdates(void);
106 	virtual void updateFSAA(void);
107 	virtual void setPollSetting(int);
getPollSetting(void)108 	int getPollSetting(void) { return pollSetting; }
109 	BOOL initWindow(void);
110 	//void setNeedsRecompile(void) { needsRecompile = true; }
111 	virtual void resetView(LDVAngle viewAngle = LDVAngleDefault);
112 	virtual void saveDefaultView(void);
113 	virtual void resetDefaultView(void);
114 	virtual void finalSetup(void);
115 	virtual void closeWindow(void);
116 	virtual bool print(void);
117 	virtual bool pageSetup(void);
118 	virtual bool saveSnapshot(void);
119 	void exportModel(void);
120 	virtual bool saveSnapshot(UCSTR saveFilename,
121 		bool fromCommandLine = false, bool notReallyCommandLine = false);
122 	virtual void setViewMode(LDInputHandler::ViewMode mode,
123 		bool examineLatLong, bool saveSetting = true);
124 	void setKeepRightSideUp(bool value, bool saveSetting = true);
getViewMode(void)125 	LDInputHandler::ViewMode getViewMode(void) { return viewMode; }
getModelViewer(void)126 	LDrawModelViewer* getModelViewer(void) { return modelViewer; }
getHPrefsWindow(void)127 	HWND getHPrefsWindow(void) { return hPrefsWindow; }
128 	virtual LRESULT processKeyDown(int keyCode, LPARAM keyData);
129 	virtual LRESULT processKeyUp(int keyCode, LPARAM keyData);
setStatusBar(HWND value)130 	void setStatusBar(HWND value) { hStatusBar = value; }
getStatusBar(void)131 	HWND getStatusBar(void) { return hStatusBar; }
setProgressBar(HWND value)132 	void setProgressBar(HWND value) { hProgressBar = value; }
getProgressBar(void)133 	HWND getProgressBar(void) { return hProgressBar; }
setCancelLoad(void)134 	void setCancelLoad(void) { cancelLoad = true; }
getLoadCanceled(void)135 	bool getLoadCanceled(void) { return loadCanceled; }
136 	bool performHotKey(int hotKeyIndex);
getPrefs(void)137 	LDViewPreferences *getPrefs(void) { return prefs; }
138 	void setSaveZoomToFit(bool value, bool commit = false);
getSaveZoomToFit(void)139 	bool getSaveZoomToFit(void) const { return saveZoomToFit; }
setSaveActualSize(bool value)140 	void setSaveActualSize(bool value) { saveActualSize = value; }
getSaveActualSize(void)141 	bool getSaveActualSize(void) const { return saveActualSize; }
setSaveWidth(int value)142 	void setSaveWidth(int value) { saveWidth = value; }
getSaveWidth(void)143 	int getSaveWidth(void) const { return saveWidth; }
setSaveHeight(int value)144 	void setSaveHeight(int value) { saveHeight = value; }
getSaveHeight(void)145 	int getSaveHeight(void) const { return saveHeight; }
146 	virtual bool setupBitmapRender(int imageWidth, int imageHeight);
147 	virtual bool setupOffscreen(int imageWidth, int imageHeight,
148 		bool antialias = false);
149 	virtual bool setupPBuffer(int imageWidth, int imageHeight,
150 		bool antialias = false);
151 	virtual void cleanupOffscreen(void);
152 	void cleanupRenderSettings(void);
153 	virtual void cleanupPBuffer(void);
154 	virtual void cleanupBitmapRender(void);
155 	virtual void stopAnimation(void);
156 
157 	void orthoView(void);
158 	void boundingBoxToggled(void);
159 
160 	static void initCommonControls(DWORD mask);
161 	static bool chDirFromFilename(CUCSTR filename, UCSTR outFilename);
162 	static int roundUp(int value, int nearest);
alertClass(void)163 	static const char *alertClass(void) { return "ModelWindowAlert"; }
164 	virtual std::string getSaveDir(LDPreferences::SaveOp saveOp);
165 	void updateModelViewerSize();
166 protected:
167 	virtual ~ModelWindow(void);
168 	virtual void dealloc(void);
169 
170 	virtual BOOL setupPFD(void);
171 	virtual LRESULT doCreate(HWND, LPCREATESTRUCT);
172 	virtual void doPaint(void);
173 	virtual void doPostPaint(void);
174 	virtual LRESULT doNCDestroy(void);
175 	virtual LRESULT doDestroy(void);
176 	virtual void drawFPS(void);
177 	virtual void updateFPS(void);
178 	virtual void printSystemError(void);
179 	virtual void setupLighting(void);
180 	virtual void setupMaterial(void);
181 	virtual LRESULT doLButtonDown(WPARAM keyFlags, int xPos, int yPos);
182 	virtual LRESULT doLButtonUp(WPARAM keyFlags, int xPos, int yPos);
183 	virtual LRESULT doRButtonDown(WPARAM keyFlags, int xPos, int yPos);
184 	virtual LRESULT doRButtonUp(WPARAM keyFlags, int xPos, int yPos);
185 	virtual LRESULT doMButtonDown(WPARAM keyFlags, int xPos, int yPos);
186 	virtual LRESULT doMButtonUp(WPARAM keyFlags, int xPos, int yPos);
187 	virtual LRESULT doMouseMove(WPARAM keyFlags, int xPos, int yPos);
188 	virtual LRESULT doCaptureChanged(HWND hNewWnd);
189 	virtual LRESULT doSize(WPARAM, int, int);
190 	virtual LRESULT doMove(int newX, int newY);
191 	virtual LRESULT doShowWindow(BOOL showFlag, LPARAM status);
192 	//virtual void updateSpinRate(void);
193 	//virtual void updateSpinRateXY(int, int);
194 	//virtual void updatePanXY(int xPos, int yPos);
195 	//virtual void updateHeadXY(int xPos, int yPos);
196 	//virtual void updateZoom(int);
197 	virtual void captureMouse(void);
198 	virtual void releaseMouse(void);
199 	//virtual void createPreferences(void);
200 	//virtual void setupPreferences(void);
201 	//virtual BOOL doPreferencesOK(void);
202 	virtual BOOL doErrorOK(void);
203 	//virtual BOOL doPreferencesClick(int controlId, HWND controlHWnd);
204 	virtual BOOL doProgressClick(int controlId, HWND controlHWnd);
205 	virtual BOOL doErrorClick(int controlId, HWND controlHWnd);
206 	virtual BOOL doPageSetupClick(int controlId, HWND controlHWnd);
207 	//virtual void doPreferencesCancel(void);
208 	//virtual void doPreferencesApply(void);
209 	//virtual void doPreferencesFSRefresh(void);
210 	//virtual void doPreferencesStipple(void);
211 	//virtual void doPreferencesSort(void);
212 	virtual void setupErrorWindow(void);
213 	virtual int populateErrorTree(void);
214 	virtual void populateErrorList(void);
215 	virtual void showErrorsIfNeeded(BOOL onlyIfNeeded = TRUE);
216 	virtual BOOL doErrorTreeNotify(LPNMHDR notification);
217 	virtual BOOL doErrorWindowNotify(LPNMHDR notification);
218 	virtual BOOL doErrorTreeKeyDown(LPNMTVKEYDOWN notification);
219 	virtual BOOL doErrorTreeCopy(void);
220 	virtual BOOL doDialogInit(HWND hDlg, HWND hFocusWindow, LPARAM lParam);
221 	//virtual BOOL doDialogVScroll(HWND, int, int, HWND);
222 	virtual BOOL doDialogNotify(HWND hDlg, int controlId,
223 		LPNMHDR notification);
224 	virtual BOOL doDialogHelp(HWND hDlg, LPHELPINFO helpInfo);
225 	virtual BOOL doDialogCommand(HWND, int, int, HWND);
226 	virtual BOOL doDialogSize(HWND hDlg, WPARAM sizeType, int newWidth,
227 		int newHeight);
228 	virtual BOOL doSaveInitDone(OFNOTIFY *ofNotify);
229 	virtual BOOL doErrorSize(WPARAM sizeType, int newWidth, int newHeight);
230 	virtual BOOL doSaveSize(WPARAM sizeType, int newWidth, int newHeight);
231 	virtual BOOL doDialogGetMinMaxInfo(HWND hDlg, LPMINMAXINFO minMaxInfo);
232 	virtual LRESULT doEraseBackground(RECT* updateRect);
233 	virtual LRESULT doTimer(UINT_PTR);
234 	virtual bool getFileInfo(FILETIME*, DWORD*, DWORD*);
235 	virtual bool getFileTime(FILETIME*);
236 	virtual void checkForPart(void);
237 	LDSnapshotTaker::ImageType getSaveImageType(void);
238 	virtual int progressCallback(CUCSTR message, float progress, bool fromImage,
239 		bool showErrors = false);
240 	//static bool staticImageProgressCallback(CUCSTR message, float progress,
241 	//	void* userData);
242 	virtual void hideProgress(void);
243 	virtual void createProgress(void);
244 	virtual void setupProgress(void);
245 	virtual void doProgressCancel(void);
246 	virtual int errorCallback(LDLError* error);
247 	virtual LRESULT windowProc(HWND, UINT, WPARAM, LPARAM);
248 	static LRESULT CALLBACK staticErrorDlgProc(HWND, UINT, WPARAM, LPARAM);
249 	virtual LRESULT errorDlgProc(HWND, UINT, WPARAM, LPARAM);
250 	virtual void registerErrorWindowClass(void);
251 	virtual bool addError(LDLError* error);
252 	virtual HTREEITEM addErrorLine(HTREEITEM parent, CUCSTR line,
253 		LDLError* error, int imageIndex = -1);
254 	virtual void clearErrors(void);
255 	virtual void clearErrorTree(void);
256 	virtual void getTreeViewLine(HWND hTreeView, HTREEITEM hItem,
257 		TCStringArray *lines);
258 	virtual char* getErrorKey(LDLErrorType errorType);
259 	virtual bool showsError(LDLError *error);
260 	virtual BOOL showsErrorType(LDLErrorType errorType);
261 	virtual void swapBuffers(void);
262 	virtual LRESULT doCommand(int itemId, int notifyCode, HWND controlHWnd);
263 	//virtual bool writePng(char *filename, int width, int height,
264 	//	BYTE *buffer, bool saveAlpha);
265 	//virtual bool writeBmp(char *filename, int width, int height,
266 	//	BYTE *buffer);
267 	//virtual bool writeImage(char *filename, int width, int height,
268 	//	BYTE *buffer, char *formatName, bool saveAlpha = false);
269 	//virtual BYTE *grabImage(int &imageWidth, int &imageHeight,
270 	//	bool zoomToFit, BYTE *buffer = NULL, bool *saveAlpha = NULL);
271 	virtual void grabSetup(int &imageWidth, int &imageHeight,
272 		RECT &origRect, bool &origSlowClear);
273 	virtual void grabCleanup(RECT origRect, bool origSlowClear);
274 	virtual bool saveImage(UCSTR filename, int imageWidth, int imageHeight,
275 		bool zoomToFit);
276 	virtual void renderOffscreenImage(void);
277 	virtual void setupSnapshotBackBuffer(int imageWidth, int imageHeight,
278 		RECT &rect);
279 	virtual void cleanupSnapshotBackBuffer(RECT &rect);
280 	virtual bool selectPrinter(PRINTDLG &pd);
281 	virtual bool printPage(const PRINTDLG &pd);
282 	virtual void calcTiling(HDC hPrinterDC, int &bitmapWidth,
283 		int &bitmapHeight, int &numXTiles, int &numYTiles);
284 	virtual void calcTiling(int desiredWidth, int desiredHeight,
285 		int &bitmapWidth, int &bitmapHeight, int &numXTiles,
286 		int &numYTiles);
287 	virtual void sizeView(void);
288 	virtual void setupSaveExtras(void);
289 	virtual void saveImageTypeUpdated(void);
290 	virtual void saveExportTypeUpdated(void);
291 	virtual void saveTypeUpdated(void);
292 	virtual void setupPrintExtras(void);
293 	virtual void setupPageSetupExtras(void);
294 	virtual void updateSaveSizeEnabled(void);
295 	virtual void disableSaveSize(void);
296 	virtual void enableSaveSize(BOOL enable = TRUE);
297 	virtual void updateSaveSeriesEnabled(void);
298 	virtual void disableSaveSeries(void);
299 	virtual void enableSaveSeries(BOOL enable = TRUE);
300 	virtual void updateSaveAllStepsEnabled(void);
301 	virtual void disableSaveAllSteps(void);
302 	virtual void enableSaveAllSteps(BOOL enable = TRUE);
303 	virtual void updateSaveWidth(void);
304 	virtual void updateSaveHeight(void);
305 	virtual void updateSaveDigits(void);
306 	virtual void updateStepSuffix(void);
307 	virtual std::string getSaveDir(void);
308 	static std::string defaultDir(LDPreferences::DefaultDirMode mode,
309 		const char *lastPath, const char *defaultPath);
310 	virtual void fillSnapshotFileTypes(UCSTR fileTypes);
311 	virtual void fillExportFileTypes(UCSTR fileTypes);
312 	virtual bool getSaveFilename(UCSTR saveFilename, int len);
313 	virtual bool calcSaveFilename(UCSTR saveFilename, int len);
314 	virtual void updateSaveFilename(void);
315 	CUCSTR saveExtension(int type = -1) const;
316 	virtual BOOL doSaveCommand(int controlId, int notifyCode,
317 		HWND hControlWnd);
318 	virtual BOOL doSaveNotify(int controlId, LPOFNOTIFY notification);
319 	virtual BOOL doSaveClick(int controlId, HWND hControlWnd);
320 	virtual void doSaveOptionsClick(void);
321 	virtual BOOL doSaveKillFocus(int controlId, HWND hControlWnd);
322 	virtual BOOL doPrintCommand(int controlId, int notifyCode,
323 		HWND hControlWnd);
324 	virtual BOOL doPrintClick(int controlId, HWND hControlWnd);
325 	virtual BOOL doPrintKillFocus(int controlId, HWND hControlWnd);
326 	virtual LRESULT doDropFiles(HDROP hDrop);
327 	virtual void updatePrintDPIField(void);
328 	virtual void updatePrintDPI(void);
329 	virtual bool parseDevMode(HGLOBAL hDevMode);
330 	virtual void applyPrefs(void);
331 	virtual bool frontBufferFPS(void);
332 	//virtual bool canSaveAlpha(void);
333 	virtual void makeCurrent(void);
334 	virtual void processModalMessage(MSG msg);
335 	virtual void setStatusText(HWND hStatus, int part, CUCSTR text,
336 		bool redraw = false);
337 	virtual void initFail(char *reason);
338 	void ldlErrorCallback(LDLError *error);
339 	void progressAlertCallback(TCProgressAlert *alert);
340 	void modelViewerAlertCallback(TCAlert *alert);
341 	void redrawAlertCallback(TCAlert *alert);
342 	void loadAlertCallback(TCAlert *alert);
343 	void captureAlertCallback(TCAlert *alert);
344 	void releaseAlertCallback(TCAlert *alert);
345 	void snapshotTakerAlertCallback(TCAlert *alert);
346 	void populateErrorInfos(void);
347 	BOOL setAllErrorsSelected(bool selected);
348 	void setupMultisample(void);
349 
350 	void loadSettings(void);
351 	void loadPrintSettings(void);
352 	void loadSaveSettings(void);
353 
354 	virtual void drawLight(GLenum, TCFloat, TCFloat, TCFloat);
355 	virtual void drawLights(void);
356 	virtual void setupLight(GLenum);
357 	void positionSaveAddOn(void);
358 	void positionSaveOptionsButton(void);
359 
360 #if defined(USE_CPP11) || !defined(_NO_BOOST)
361 	enum RemoteCommands
362 	{
363 		RCUnknown,
364 		RCHighlightLine,
365 		RCGetVersion,
366 	};
367 	RemoteCommands parseRemoteMessage(const char *message, std::string &command,
368 		std::string &data);
369 	void launchRemoteListener(void);
370 	void shutDownRemoteListener(void);
371 	void listenerProc(void);
372 	void listenerProcInner(void);
373 	void remoteProc(HANDLE hPipe);
374 	void processRemoteMessage(char *message);
375 	void highlightLines(const std::string &paths);
376 	void sendVersionResponse(HANDLE hPipe);
377 	void sendResponseMessage(HANDLE hPipe, const char *message);
378 #endif // _NO_BOOST
379 
380 	static UINT_PTR CALLBACK staticPrintHook(HWND hDlg, UINT uiMsg,
381 		WPARAM wParam, LPARAM lParam);
382 	static UINT_PTR CALLBACK staticPageSetupHook(HWND hDlg, UINT uiMsg,
383 		WPARAM wParam, LPARAM lParam);
384 	static UINT_PTR CALLBACK staticSaveHook(HWND hDlg, UINT uiMsg,
385 		WPARAM wParam, LPARAM lParam);
386 	static void swap(int &left, int &right);
387 	static bool altPressed(void);
388 	static TCULong convertKeyModifiers(TCULong osModifiers);
389 	static TCULong getCurrentKeyModifiers(void);
390 	static LDInputHandler::KeyCode convertKeyCode(TCULong osKeyCode);
391 
392 	LDrawModelViewer* modelViewer;
393 	LDInputHandler *inputHandler;
394 	LDSnapshotTaker *snapshotTaker;
395 	DWORD referenceFrameTime;
396 	int numFramesSinceReference;
397 	TCFloat fps;
398 	bool firstFPSPass;
399 	//DWORD lastMoveTime;
400 	//TCFloat rotationSpeed;
401 	//TCFloat distance;
402 	//int lastX;
403 	//int lastY;
404 	//int originalZoomY;
405 	//bool lButtonDown;
406 	//bool rButtonDown;
407 	//bool mButtonDown;
408 	HWND oldMouseWindow;
409 	HWND hPrefsWindow;
410 	int captureCount;
411 	int redrawCount;
412 	int pollSetting;
413 	FILETIME lastWriteTime;
414 	DWORD lastFileSizeHigh;
415 	DWORD lastFileSizeLow;
416 	bool pollTimerRunning;
417 	HWND hProgressWindow;
418 	HWND hProgressCancelButton;
419 	HWND hProgress;
420 	HWND hProgressMessage;
421 	bool cancelLoad;
422 	bool loadCanceled;
423 	DWORD lastProgressUpdate;
424 	bool loading;
425 	bool needsRecompile;
426 	HWND hErrorWindow;
427 	HWND hErrorStatusWindow;
428 	HWND hErrorTree;
429 	HWND hErrorList;
430 	//HWND hErrorOk;
431 	//int errorTreeX;
432 	//int errorTreeY;
433 	//int errorTreeRight;
434 	//int errorTreeBottom;
435 	//int errorOkX;
436 	//int errorOkY;
437 	//int errorOkWidth;
438 	//int errorOkHeight;
439 	//int errorWindowWidth;
440 	WNDPROC originalErrorDlgProc;
441 	LDLErrorArray* errors;
442 	int errorImageIndices[LDLELastError + 2];
443 	bool errorTreePopulated;
444 	ErrorInfoArray *errorInfos;
445 	LDViewPreferences *prefs;
446 	bool applyingPrefs;
447 	bool offscreenActive;
448 	HPBUFFERARB hPBuffer;
449 	HDC hPBufferDC;
450 	HGLRC hPBufferGLRC;
451 	HDC hBitmapRenderDC;
452 	HGLRC hBitmapRenderGLRC;
453 	HBITMAP hRenderBitmap;
454 	HWND hPrintDialog;
455 	HWND hPageSetupDialog;
456 	float printLeftMargin;
457 	float printRightMargin;
458 	float printTopMargin;
459 	float printBottomMargin;
460 	int printOrientation;
461 	int printPaperSize;
462 	int printHDPI;
463 	int printVDPI;
464 	int printLMarginPixels;
465 	int printTMarginPixels;
466 	bool saveActualSize;
467 	int saveWidth;
468 	int saveHeight;
469 	bool saveZoomToFit;
470 	bool saveSeries;
471 	bool ignorePBuffer;
472 	bool ignoreFBO;
473 	bool ignorePixelFormat;
474 	int saveDigits;
475 	HWND hSaveDialog;
476 	HWND hSaveOptionsButton;
477 	HWND hSaveTransBgButton;
478 	HWND hSaveWidthLabel;
479 	HWND hSaveWidth;
480 	HWND hSaveHeightLabel;
481 	HWND hSaveHeight;
482 	HWND hSaveZoomToFitButton;
483 	HWND hSaveDigitsLabel;
484 	HWND hSaveDigitsField;
485 	HWND hSaveDigitsSpin;
486 	HWND hSaveStepSuffixLabel;
487 	HWND hSaveStepSuffixField;
488 	HWND hSaveStepsSameScaleButton;
489 	HWND hStatusBar;
490 	HWND hProgressBar;
491 	bool usePrinterDPI;
492 	int printDPI;
493 	bool printBackground;
494 	HWND hPrintDPI;
495 	int currentAntialiasType;
496 	int saveImageType;
497 	int saveType;
498 	int saveExportType;
499 	bool windowShown;
500 	bool saveAlpha;
501 	bool autoCrop;
502 	bool saveAllSteps;
503 	UCSTR saveStepSuffix;
504 	bool saveStepsSameScale;
505 	LDInputHandler::ViewMode viewMode;
506 	HDC hCurrentDC;
507 	HGLRC hCurrentGLRC;
508 	CUIWindowResizer *errorWindowResizer;
509 	CUIWindowResizer *saveWindowResizer;
510 	bool savingFromCommandLine;
511 	bool skipErrorUpdates;
512 	bool redrawRequested;
513 	bool releasingMouse;
514 	bool userLoad;
515 	int errorCount;
516 	int warningCount;
517 	LDPreferences::SaveOp curSaveOp;
518 #if defined(USE_CPP11) || !defined(_NO_BOOST)
519 	bool remoteListener;
520 #ifdef USE_CPP11
521 	std::thread *listenerThread;
522 	std::mutex mutex;
523 	std::promise<bool> listenerPromise;
524 	std::future<bool> listenerFuture;
525 #else
526 	boost::thread *listenerThread;
527 	boost::mutex mutex;
528 #endif
529 	UINT remoteMessageID;
530 	bool exiting;
531 	std::map<std::string, RemoteCommands> remoteCommandMap;
532 	std::string ldviewVersion;
533 #endif // _NO_BOOST
534 };
535 
536 #endif