00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _SO_WIN_FULL_VIEWER_
00027 #define _SO_WIN_FULL_VIEWER_
00028
00029 #include <Inventor/Win/SoWinBeginStrict.h>
00030
00031 #include <Inventor/Win/viewers/SoWinViewer.h>
00032 #include <Inventor/SbPList.h>
00033 #include <Inventor/Gui/viewers/SoGuiFullViewer.h>
00034
00035
00036 class SoFieldSensor;
00037 class SoWinBitmapButton;
00038 class SoWinGDIThumbWheel;
00039 class SoStereoDialog;
00040
00041 typedef void PushAppButtonCB( SoWidget w, int id, void* pushData, void* userData );
00042 typedef void RedrawAppButtonCB( LPDRAWITEMSTRUCT lpdis, void* userData ) ;
00043
00045
00046
00047
00048
00049
00050
00051
00052
00054
00079 class SoWinFullViewer : public SoWinViewer
00080 {
00081 public:
00082
00084 enum BuildFlag
00085 {
00089 BUILD_NONE = 0x00,
00093 BUILD_DECORATION = 0x01,
00097 BUILD_POPUP = 0x02,
00101 BUILD_ALL = 0xff,
00102 };
00103
00111 void setDecoration( SbBool onOrOff );
00112
00116 SbBool isDecoration() { return m_guiFullViewer->isDecoration(); }
00117
00148 void setPopupMenuEnabled( SbBool trueOrFalse );
00149
00154 SbBool isPopupMenuEnabled() { return m_guiFullViewer->isPopupMenuEnabled(); }
00155
00160 static void setDoButtonBar( SbBool onOrOff );
00161
00166 static SbBool isDoButtonBar() { return SoWinFullViewer::doButtonBar; }
00167
00179 SoCallbackList popupPostCallback;
00180
00188 SoCallbackList popupPreCallback;
00189
00194 void setClientPopupMenu( Hmenu hmenu );
00195
00200 SbBool isClientPopupMenuInstalled() { return (hClientPopup!= NULL); }
00201
00205 SoWidget getAppPushButtonParent() const { return appButtonForm; }
00206
00216 void addAppPushButton( SoWidget newButton );
00217
00227 void insertAppPushButton( SoWidget newButton, int index );
00228
00232 void removeAppPushButton( SoWidget oldButton );
00233
00237 int findAppPushButton( SoWidget oldButton ) { return appButtonList->find( oldButton ); }
00238
00242 int lengthAppPushButton() { return appButtonList->getLength(); }
00243
00247 SoWidget getRenderAreaWidget() { return raWidget; }
00248
00249
00250 virtual void setViewing( SbBool onOrOff );
00251 virtual void setCamera( SoCamera* cam );
00252 virtual void hide();
00253
00254
00255 SoStereoDialog* getStereoDialog() { return stereoDialogBox; }
00256 void setStereoDialog( SoStereoDialog *newDialog ) { stereoDialogBox = newDialog; }
00257
00261 Hmenu rootPopup;
00262
00266 Hmenu mainPopup;
00267
00271 Hmenu funcPopup;
00272
00276 Hmenu drawPopup;
00277
00281 Hmenu prefPopup;
00282
00289 UINT curPopupDrawItem;
00290
00291
00292
00293
00294 UINT curPopupMoveItem;
00295
00296
00297
00298
00299 UINT curPopupBufferItem;
00300
00304 Hmenu hClientPopup;
00305
00306 void addPushAppButtonCallback( PushAppButtonCB* cb, void* data = NULL )
00307 {
00308 customPushBtnCB = cb;
00309 customPushBtnData = data;
00310 }
00311 void addRedrawAppButtonCallback( RedrawAppButtonCB* cb, void* data = NULL )
00312 {
00313 customRedrawBtnCB = cb;
00314 customRedrawBtnData = data;
00315 }
00316
00317 private:
00318 virtual ~SoWinFullViewer();
00319
00320 SoGuiFullViewer* getGuiFullViewer() const;
00321
00322
00323 float rightWheelVal, leftWheelVal, bottomWheelVal;
00324 SbBool popupEnabled;
00325
00326 private:
00327
00328 SoWinFullViewer( SoWidget parent,
00329 const char* name,
00330 SbBool buildInsideParent,
00331 SoWinFullViewer::BuildFlag flag,
00332 SoWinViewer::Type type,
00333 SbBool buildNow,
00334 SbBool sync );
00335
00336 SoWinFullViewer( SoWidget parent,
00337 const char* name,
00338 SbBool buildInsideParent,
00339 SoWinFullViewer::BuildFlag flag,
00340 SoWinViewer::Type type,
00341 SbBool buildNow,
00342 SbBool sync,
00343 SoGuiFullViewer* guiFullViewer );
00344
00345
00346 SbBool decorationFlag;
00347 SoWidget mgrWidget;
00348 SoWidget raWidget;
00349 SoWidget leftTrimForm, bottomTrimForm, rightTrimForm;
00350
00351 static SbBool doButtonBar;
00352
00353 int SO_WHEEL_DELTA;
00354
00355
00356 SoWidget zoomForm, zoomField, zoomSlider;
00357 SoFieldSensor* zoomSensor;
00358
00359
00360
00361
00362
00363
00364
00365
00366 SoWinGDIThumbWheel* rightWheel, *bottomWheel, *leftWheel , *extraWheel;
00367
00368 SoWidget extraTrimForm;
00369 float extraWheelVal;
00370 char* extraWheelStr;
00371 int extraLabelHeight;
00372 SoWidget extraWheelLabel;
00373
00374
00375
00376 SoWidget vwrButtonForm;
00377
00378 HBRUSH backgroundBrush;
00379
00380 char* rightWheelStr, *bottomWheelStr, *leftWheelStr;
00381 SoWidget rightWheelLabel, bottomWheelLabel, leftWheelLabel;
00382
00383
00384 SbPList* viewerButtonWidgets;
00385
00386
00387
00388
00389
00390 int numFullVwrButtons;
00391
00392
00393
00394
00395 virtual void pushButtonCB( SoWidget w, int id, void* data );
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406 virtual void pushAppButtonCB( SoWidget w, int id, void* data )
00407 {
00408 if ( customPushBtnCB )
00409 customPushBtnCB( w, id, data, customPushBtnData );
00410 }
00411
00412
00413
00414
00415
00416
00417 virtual void redrawAppButtonCB( LPDRAWITEMSTRUCT lpdis )
00418 {
00419 if ( customRedrawBtnCB )
00420 customRedrawBtnCB( lpdis, customRedrawBtnData );
00421 }
00422
00423
00424
00425
00426 SoWidget getButtonWidget() const { return appButtonForm; }
00427
00428
00429 SoWidget popupWidget, *popupToggleWidgets;
00430 SoWidget* drawStyleWidgets, bufferStyleWidgets[3];
00431 char* popupTitle;
00432
00433
00434
00435
00436 SoWidget buildWidget( SoWidget parent );
00437 void buildLeftWheel( SoWidget parent );
00438
00439 virtual void buildDecoration( SoWidget parent );
00440 virtual SoWidget buildLeftTrim( SoWidget parent );
00441 virtual SoWidget buildBottomTrim( SoWidget parent );
00442 virtual SoWidget buildRightTrim( SoWidget parent );
00443 virtual SoWidget buildZoomSlider( SoWidget parent );
00444 SoWidget buildAppButtons( SoWidget parent );
00445 SoWidget buildViewerButtons( SoWidget parent );
00446 virtual void createViewerButtons( SoWidget parent );
00447
00448
00449
00450
00451 virtual void buildPopupMenu();
00452 virtual void openStereoDialog();
00453 virtual void openRecordDialog();
00454 virtual void switchFSAAMode();
00455
00456 virtual void destroyPopupMenu();
00457 void setPopupMenuString( const char* name );
00458 SoWidget buildFunctionsSubmenu( SoWidget popup );
00459 SoWidget buildDrawStyleSubmenu( SoWidget popup );
00460
00461
00462
00463 virtual int displayPopupMenu( int x, int y, Hwnd owner );
00464
00465
00466
00467
00468
00469 void setPrefSheetString( const char* name );
00470 virtual void createPrefSheet();
00471 void createPrefSheetShellAndForm( SoWidget& shell, SoWidget& form );
00472 void createDefaultPrefSheetParts( SoWidget widgetList[], int &num, SoWidget form );
00473 void layoutPartsAndMapPrefSheet( SoWidget widgetList[], int num, SoWidget form, SoWidget shell );
00474 SoWidget createSeekPrefSheetGuts( SoWidget parent );
00475 SoWidget createSeekDistPrefSheetGuts( SoWidget parent );
00476 SoWidget createZoomPrefSheetGuts( SoWidget parent );
00477 SoWidget createClippingPrefSheetGuts( SoWidget parent );
00478 SoWidget createStereoPrefSheetGuts( SoWidget parent );
00479
00480
00481
00482
00483 virtual void rightWheelMotion( float f );
00484 virtual void bottomWheelMotion( float f );
00485 virtual void leftWheelMotion( float f );
00486
00487
00488
00489
00490 virtual void rightWheelStart();
00491 virtual void bottomWheelStart();
00492 virtual void leftWheelStart();
00493 virtual void rightWheelFinish();
00494 virtual void bottomWheelFinish();
00495 virtual void leftWheelFinish();
00496
00497
00498
00499
00500 void setBottomWheelString( const char* name );
00501 void setLeftWheelString( const char* name );
00502 void setRightWheelString( const char* name );
00503
00504
00505
00506
00507
00508 virtual void openViewerHelpCard();
00509
00510
00511 virtual void afterRealizeHook();
00512
00513 virtual void setSeekButton( SbBool onOff );
00514
00515 private:
00516 void constructorCommon( SoWinFullViewer::BuildFlag buildFlag, SbBool buildNow, const char* name );
00517
00518 static void clientResize(HWND handle, int x, int y, int width, int height, BOOL repaint);
00519
00520 SbBool firstBuild;
00521
00522 SoGuiFullViewer* m_guiFullViewer;
00523
00524
00525 SoWidget appButtonForm;
00526 SbPList* appButtonList;
00527 void doAppButtonLayout( int start );
00528
00529 SoStereoDialog* stereoDialogBox;
00530
00531
00532 SbVec2f zoomSldRange;
00533 void setCameraZoom( float zoom );
00534 float getCameraZoom();
00535 void setZoomSliderPosition( float zoom );
00536 void setZoomFieldString( float zoom );
00537
00538 static void zoomSliderCB( SoWidget w, SoWinFullViewer* p, XtPointer* ptr );
00539 static void zoomFieldCB( SoWidget w, SoWinFullViewer* v, XtPointer* ptr );
00540
00541 static void zoomSensorCB( void* v, SoSensor* s );
00542
00543
00544 SoWinBitmapButton* buttonList[10];
00545
00546
00547 SoWidget prefSheetShellWidget;
00548 char* prefSheetStr;
00549
00550
00551 int seekDistWheelVal;
00552 SoWidget seekDistField;
00553
00554
00555 SoWidget clipWheelForm;
00556 int clipNearWheelVal, clipFarWheelVal;
00557 SoWidget clipNearField, clipFarField;
00558
00559
00560 SoWidget stereoWheelForm, stereoField, stereoLabel;
00561 int stereoWheelVal;
00562
00563
00564 static void visibilityChangeCB( void* pt, SbBool visible );
00565
00566
00567 static void rightWheelCB ( SoWinFullViewer* v, XtPointer* d );
00568 static void bottomWheelCB( SoWinFullViewer* v, XtPointer* d );
00569 static void leftWheelCB ( SoWinFullViewer* v, XtPointer* d );
00570
00571
00572 static LRESULT CALLBACK mgrWindowProc( Hwnd hwnd, UINT message,
00573 WPARAM wParam, LPARAM lParam );
00574
00575
00576 static LRESULT CALLBACK btnWindowProc( Hwnd hwnd, UINT message,
00577 WPARAM wParam, LPARAM lParam );
00578
00579
00580 static LRESULT CALLBACK appBtnWindowProc( Hwnd hwnd, UINT message,
00581 WPARAM wParam, LPARAM lParam );
00582
00583
00584 static LRESULT CALLBACK txtWindowProc( Hwnd hwnd, UINT message,
00585 WPARAM wParam, LPARAM lParam );
00586
00587 PushAppButtonCB* customPushBtnCB;
00588 RedrawAppButtonCB* customRedrawBtnCB;
00589 void* customPushBtnData, *customRedrawBtnData;
00590
00591 static int s_isAttRunning;
00592
00593
00594 WNDPROC origBtnWndProc;
00595 WNDPROC origAppBtnWndProc;
00596 WNDPROC origTxtWndProc;
00597
00598
00599
00600 static void drawDecorations( SoWinFullViewer* p, Hwnd hwnd, Hdc hdc );
00601 };
00602
00603 #include <Inventor/Win/SoWinEndStrict.h>
00604 #endif
00605
00606