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
00080 class SoWinFullViewer : public SoWinViewer
00081 {
00082 public:
00083
00085 enum BuildFlag
00086 {
00090 BUILD_NONE = 0x00,
00094 BUILD_DECORATION = 0x01,
00098 BUILD_POPUP = 0x02,
00102 BUILD_ALL = 0xff,
00103 };
00104
00112 void setDecoration( SbBool onOrOff );
00113
00117 SbBool isDecoration() { return m_guiFullViewer->isDecoration(); }
00118
00150 void setPopupMenuEnabled( SbBool trueOrFalse );
00151
00156 SbBool isPopupMenuEnabled() { return m_guiFullViewer->isPopupMenuEnabled(); }
00157
00162 static void setDoButtonBar( SbBool onOrOff );
00163
00168 static SbBool isDoButtonBar() { return SoWinFullViewer::doButtonBar; }
00169
00181 SoCallbackList popupPostCallback;
00182
00190 SoCallbackList popupPreCallback;
00191
00196 void setClientPopupMenu( Hmenu hmenu );
00197
00202 SbBool isClientPopupMenuInstalled() { return (hClientPopup!= NULL); }
00203
00207 SoWidget getAppPushButtonParent() const { return appButtonForm; }
00208
00218 void addAppPushButton( SoWidget newButton );
00219
00229 void insertAppPushButton( SoWidget newButton, int index );
00230
00234 void removeAppPushButton( SoWidget oldButton );
00235
00239 int findAppPushButton( SoWidget oldButton ) { return appButtonList->find( oldButton ); }
00240
00244 int lengthAppPushButton() { return appButtonList->getLength(); }
00245
00249 SoWidget getRenderAreaWidget() { return raWidget; }
00250
00251
00252 virtual void setViewing( SbBool onOrOff );
00253 virtual void setCamera( SoCamera* cam );
00254 virtual void hide();
00255 virtual void setHeadlight( SbBool onOrOff );
00256 virtual void setDrawStyle( SoWinViewer::DrawType type,
00257 SoWinViewer::DrawStyle style );
00258 virtual void setBufferingType( SoWinViewer::BufferType type );
00259
00260
00261 SoStereoDialog* getStereoDialog() { return stereoDialogBox; }
00262 void setStereoDialog( SoStereoDialog *newDialog ) { stereoDialogBox = newDialog; }
00263
00267 Hmenu rootPopup;
00268
00272 Hmenu mainPopup;
00273
00277 Hmenu funcPopup;
00278
00282 Hmenu drawPopup;
00283
00287 Hmenu prefPopup;
00288
00295 UINT curPopupDrawItem;
00296
00297
00298
00299
00300 UINT curPopupMoveItem;
00301
00302
00303
00304
00305 UINT curPopupBufferItem;
00306
00310 Hmenu hClientPopup;
00311
00312 void addPushAppButtonCallback( PushAppButtonCB* cb, void* data = NULL )
00313 {
00314 customPushBtnCB = cb;
00315 customPushBtnData = data;
00316 }
00317 void addRedrawAppButtonCallback( RedrawAppButtonCB* cb, void* data = NULL )
00318 {
00319 customRedrawBtnCB = cb;
00320 customRedrawBtnData = data;
00321 }
00322
00323 private:
00324 virtual ~SoWinFullViewer();
00325
00326 SoGuiFullViewer* getGuiFullViewer() const;
00327
00328
00329 float rightWheelVal, leftWheelVal, bottomWheelVal;
00330 SbBool popupEnabled;
00331
00332 private:
00333
00334 SoWinFullViewer( SoWidget parent,
00335 const char* name,
00336 SbBool buildInsideParent,
00337 SoWinFullViewer::BuildFlag flag,
00338 SoWinViewer::Type type,
00339 SbBool buildNow,
00340 SbBool sync );
00341
00342 SoWinFullViewer( SoWidget parent,
00343 const char* name,
00344 SbBool buildInsideParent,
00345 SoWinFullViewer::BuildFlag flag,
00346 SoWinViewer::Type type,
00347 SbBool buildNow,
00348 SbBool sync,
00349 SoGuiFullViewer* guiFullViewer );
00350
00351
00352 SbBool decorationFlag;
00353 SoWidget mgrWidget;
00354 SoWidget raWidget;
00355 SoWidget leftTrimForm, bottomTrimForm, rightTrimForm;
00356
00357 static SbBool doButtonBar;
00358
00359 int SO_WHEEL_DELTA;
00360
00361
00362 SoWidget zoomForm, zoomField, zoomSlider;
00363 SoFieldSensor* zoomSensor;
00364
00365
00366
00367
00368
00369
00370
00371
00372 SoWinGDIThumbWheel* rightWheel, *bottomWheel, *leftWheel , *extraWheel;
00373
00374 SoWidget extraTrimForm;
00375 float extraWheelVal;
00376 char* extraWheelStr;
00377 int extraLabelHeight;
00378 SoWidget extraWheelLabel;
00379
00380
00381
00382 SoWidget vwrButtonForm;
00383
00384 HBRUSH backgroundBrush;
00385
00386 char* rightWheelStr, *bottomWheelStr, *leftWheelStr;
00387 SoWidget rightWheelLabel, bottomWheelLabel, leftWheelLabel;
00388
00389
00390 SbPList* viewerButtonWidgets;
00391
00392
00393
00394
00395
00396 int numFullVwrButtons;
00397
00398
00399
00400
00401 virtual void pushButtonCB( SoWidget w, int id, void* data );
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412 virtual void pushAppButtonCB( SoWidget w, int id, void* data )
00413 {
00414 if ( customPushBtnCB )
00415 customPushBtnCB( w, id, data, customPushBtnData );
00416 }
00417
00418
00419
00420
00421
00422
00423 virtual void redrawAppButtonCB( LPDRAWITEMSTRUCT lpdis )
00424 {
00425 if ( customRedrawBtnCB )
00426 customRedrawBtnCB( lpdis, customRedrawBtnData );
00427 }
00428
00429
00430
00431
00432 SoWidget getButtonWidget() const { return appButtonForm; }
00433
00434
00435 SoWidget popupWidget, *popupToggleWidgets;
00436 SoWidget* drawStyleWidgets, bufferStyleWidgets[3];
00437 char* popupTitle;
00438
00439
00440
00441
00442 SoWidget buildWidget( SoWidget parent );
00443 void buildLeftWheel( SoWidget parent );
00444
00445 virtual void buildDecoration( SoWidget parent );
00446 virtual SoWidget buildLeftTrim( SoWidget parent );
00447 virtual SoWidget buildBottomTrim( SoWidget parent );
00448 virtual SoWidget buildRightTrim( SoWidget parent );
00449 virtual SoWidget buildZoomSlider( SoWidget parent );
00450 SoWidget buildAppButtons( SoWidget parent );
00451 SoWidget buildViewerButtons( SoWidget parent );
00452 virtual void createViewerButtons( SoWidget parent );
00453
00454
00455
00456
00457 virtual void buildPopupMenu();
00458 virtual void openStereoDialog();
00459 virtual void openRecordDialog();
00460 virtual void switchFSAAMode();
00461
00462 virtual void destroyPopupMenu();
00463 void setPopupMenuString( const char* name );
00464 SoWidget buildFunctionsSubmenu( SoWidget popup );
00465 SoWidget buildDrawStyleSubmenu( SoWidget popup );
00466
00467
00468
00469 virtual int displayPopupMenu( int x, int y, Hwnd owner );
00470
00471
00472
00473
00474
00475 void setPrefSheetString( const char* name );
00476 virtual void createPrefSheet();
00477 void createPrefSheetShellAndForm( SoWidget& shell, SoWidget& form );
00478 void createDefaultPrefSheetParts( SoWidget widgetList[], int &num, SoWidget form );
00479 void layoutPartsAndMapPrefSheet( SoWidget widgetList[], int num, SoWidget form, SoWidget shell );
00480 SoWidget createSeekPrefSheetGuts( SoWidget parent );
00481 SoWidget createSeekDistPrefSheetGuts( SoWidget parent );
00482 SoWidget createZoomPrefSheetGuts( SoWidget parent );
00483 SoWidget createClippingPrefSheetGuts( SoWidget parent );
00484 SoWidget createStereoPrefSheetGuts( SoWidget parent );
00485
00486
00487
00488
00489 virtual void rightWheelMotion( float f );
00490 virtual void bottomWheelMotion( float f );
00491 virtual void leftWheelMotion( float f );
00492
00493
00494
00495
00496 virtual void rightWheelStart();
00497 virtual void bottomWheelStart();
00498 virtual void leftWheelStart();
00499 virtual void rightWheelFinish();
00500 virtual void bottomWheelFinish();
00501 virtual void leftWheelFinish();
00502
00503
00504
00505
00506 void setBottomWheelString( const char* name );
00507 void setLeftWheelString( const char* name );
00508 void setRightWheelString( const char* name );
00509
00510
00511
00512
00513
00514 virtual void openViewerHelpCard();
00515
00516
00517 virtual void afterRealizeHook();
00518
00519 virtual void setSeekButton( SbBool onOff );
00520
00521 private:
00522 void constructorCommon( SoWinFullViewer::BuildFlag buildFlag, SbBool buildNow, const char* name );
00523
00524 static void clientResize(HWND handle, int x, int y, int width, int height, BOOL repaint);
00525
00526 SbBool firstBuild;
00527
00528 SoGuiFullViewer* m_guiFullViewer;
00529
00530
00531 SoWidget appButtonForm;
00532 SbPList* appButtonList;
00533 void doAppButtonLayout( int start );
00534
00535 SoStereoDialog* stereoDialogBox;
00536
00537
00538 SbVec2f zoomSldRange;
00539 void setCameraZoom( float zoom );
00540 float getCameraZoom();
00541 void setZoomSliderPosition( float zoom );
00542 void setZoomFieldString( float zoom );
00543
00544 static void zoomSliderCB( SoWidget w, SoWinFullViewer* p, XtPointer* ptr );
00545 static void zoomFieldCB( SoWidget w, SoWinFullViewer* v, XtPointer* ptr );
00546
00547 static void zoomSensorCB( void* v, SoSensor* s );
00548
00549
00550 SoWinBitmapButton* buttonList[10];
00551
00552
00553 SoWidget prefSheetShellWidget;
00554 char* prefSheetStr;
00555
00556
00557 int seekDistWheelVal;
00558 SoWidget seekDistField;
00559
00560
00561 SoWidget clipWheelForm;
00562 int clipNearWheelVal, clipFarWheelVal;
00563 SoWidget clipNearField, clipFarField;
00564
00565
00566 SoWidget stereoWheelForm, stereoField, stereoLabel;
00567 int stereoWheelVal;
00568
00569
00570 static void visibilityChangeCB( void* pt, SbBool visible );
00571
00572
00573 static void rightWheelCB ( SoWinFullViewer* v, XtPointer* d );
00574 static void bottomWheelCB( SoWinFullViewer* v, XtPointer* d );
00575 static void leftWheelCB ( SoWinFullViewer* v, XtPointer* d );
00576
00577
00578 static LRESULT CALLBACK mgrWindowProc( Hwnd hwnd, UINT message,
00579 WPARAM wParam, LPARAM lParam );
00580
00581
00582 static LRESULT CALLBACK btnWindowProc( Hwnd hwnd, UINT message,
00583 WPARAM wParam, LPARAM lParam );
00584
00585
00586 static LRESULT CALLBACK appBtnWindowProc( Hwnd hwnd, UINT message,
00587 WPARAM wParam, LPARAM lParam );
00588
00589
00590 static LRESULT CALLBACK txtWindowProc( Hwnd hwnd, UINT message,
00591 WPARAM wParam, LPARAM lParam );
00592
00593 PushAppButtonCB* customPushBtnCB;
00594 RedrawAppButtonCB* customRedrawBtnCB;
00595 void* customPushBtnData, *customRedrawBtnData;
00596
00597 static int s_isAttRunning;
00598
00599
00600 WNDPROC origBtnWndProc;
00601 WNDPROC origAppBtnWndProc;
00602 WNDPROC origTxtWndProc;
00603
00604
00605
00606 static void drawDecorations( SoWinFullViewer* p, Hwnd hwnd, Hdc hdc );
00607 };
00608
00609 #include <Inventor/Win/SoWinEndStrict.h>
00610 #endif
00611
00612