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