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_COMPONENT_H_
00027 #define _SO_WIN_COMPONENT_H_
00028
00029 #include <Inventor/Win/SoWinBeginStrict.h>
00030 #include <windows.h>
00031 #include <Inventor/Win/SoWin.h>
00032 #include <Inventor/Win/SoWinDef.h>
00033 #include <Inventor/Gui/SoGuiComponent.h>
00034
00035 #include <Inventor/SbLinear.h>
00036 #include <Inventor/SbString.h>
00037
00038 class SbDict;
00039 class SoWinComponent;
00040 class SoCallbackList;
00041 class SoWinComponentP;
00042
00043 typedef void SoWinComponentCB( void* userData, SoWinComponent* comp );
00044 typedef void SoWinComponentVisibilityCB( void* userData, SbBool visibleFlag );
00045
00114 class SoWinComponent
00115 {
00116 friend class SoWinComponentP;
00117
00118 public:
00119 SoDEPRECATED SoNONUNICODE static void displayHelp(const char* filename, UINT contextID);
00134 SoDEPRECATED static void displayHelp(const SbString& filename, UINT contextID);
00147
00154 virtual void show();
00155
00159 virtual void hide();
00160
00171 SbBool isVisible();
00172
00178 SoWidget getWidget() const { return _baseWidget; }
00179
00185 SbBool isTopLevelShell() const { return m_guiComponent->isTopLevelShell(); }
00186
00191 SoWidget getShellWidget() const { return m_guiComponent->isTopLevelShell() ? parentWidget : NULL; }
00192
00196 SoWidget getParentWidget() const { return parentWidget; }
00197
00201 void setSize( const SbVec2s& size );
00202
00206 SbVec2s getSize();
00207
00211 SbBool setFullScreen( const SbBool enable );
00212
00216 SbBool isFullScreen() const;
00217
00223 void setFullScreenEnable( const SbBool enable );
00224
00229 SbBool isFullScreenEnable( void ) const;
00230
00234 UINT* getDisplay() { return NULL; }
00235
00244 SoNONUNICODE void setTitle( const char* newTitle );
00245
00253 void setTitle( const SbString& newTitle );
00254
00258 SbString getTitle() const { return m_guiComponent->getTitle(); }
00259
00264 SoNONUNICODE void setIconTitle( const char* newIconTitle );
00265
00269 void setIconTitle( const SbString& newIconTitle );
00270
00274 SbString getIconTitle() const { return m_guiComponent->getIconTitle(); }
00275
00295 void setWindowCloseCallback( SoWinComponentCB *func, void* data = NULL )
00296 { windowCloseFunc = func; windowCloseData = data; }
00297
00302 static SoWinComponent* getComponent( SoWidget w );
00303
00308 SbString getWidgetName() const { return m_guiComponent->getWidgetName(); }
00309
00314 SbString getClassName() const { return m_guiComponent->getClassName(); }
00315
00320 SbString helpFileName;
00321
00326 UINT helpContextID;
00327
00332 SbString helpContextString;
00333
00334 private:
00335
00336
00337 virtual ~SoWinComponent();
00338
00339
00340 SoWidget baseWidget() const { return getWidget(); }
00341
00342 static void exitClass();
00343
00344
00345 SoGuiComponent* getGuiComponent() const;
00346
00347 private:
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369 SoWinComponent( SoWidget parent = NULL,
00370 const SbString& name = "",
00371 SbBool buildInsideParent = TRUE,
00372 SbBool sync = TRUE );
00373
00374 SoWinComponent( SoWidget parent,
00375 const SbString& name,
00376 SbBool buildInsideParent,
00377 SbBool sync,
00378 SoGuiComponent* guiComponent );
00379
00380
00381
00382 void setBaseWidget( SoWidget w );
00383
00384
00385
00386 void setClassName( const SbString& n ) { m_guiComponent->setClassName( n ); }
00387
00388
00389
00390
00391
00392
00393
00394 virtual void windowCloseAction();
00395
00396
00397
00398
00399 virtual void afterRealizeHook();
00400 SbBool firstRealize;
00401
00402
00403
00404
00405
00406
00407
00408 virtual SbString getDefaultWidgetName() const;
00409 virtual SbString getDefaultTitle() const;
00410 virtual SbString getDefaultIconTitle() const;
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425 void registerWidget( SoWidget w );
00426 void unregisterWidget( SoWidget w );
00427
00428
00429
00430
00431
00432 void addVisibilityChangeCallback( SoWinComponentVisibilityCB* func,
00433 void* userData = NULL );
00434 void removeVisibilityChangeCallback( SoWinComponentVisibilityCB* func,
00435 void* userData = NULL );
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00447
00454 static void openHelpPage( const SbString& helpPage );
00455
00456
00458
00459 SoWidget buildFormWidget( SoWidget parent );
00460
00461 void setResize( SbBool nResize ) { m_nResizeBaseWidget = nResize; }
00462 SbBool getResize() { return m_nResizeBaseWidget ; }
00463
00464
00465 static HPALETTE _setupColorPalette( HDC );
00466
00467 void unSubclassDialog( Hwnd hWnd );
00468 void subclassDialog( Hwnd hWnd );
00469 void drawDialogIcon( Hwnd hWnd );
00470
00471 static LRESULT CALLBACK dlgWndProc( Hwnd hwnd, UINT message,
00472 WPARAM wParam, LPARAM lParam );
00473 static Hwnd getMDIAncestor( Hwnd win );
00474
00475
00476
00477 SbBool m_nParentIsMDI;
00478
00479 HICON hDlgIcon;
00480
00481 char* windowName;
00482 SbBool buildInside;
00483
00484 static void widgetStructureNotifyCB( SoWidget w, SoWinComponent* c, XEvent* e, Boolean* b );
00485 static void windowCloseActionCB(SoWidget, SoWinComponent *, void *);
00486 static int ChoosePixelFormatOIV( HDC hdc, int pixelType, int glModes, PIXELFORMATDESCRIPTOR* pfd );
00487
00488 private:
00489
00490 void constructorCommon( SoWidget parent, const SbString& name, SbBool buildInsideParent, SbBool sync );
00491
00492
00493
00494
00495
00496 virtual void widgetDestroyed();
00497
00498 SbBool createdShell;
00499 SoWidget parentWidget;
00500 SoWidget _baseWidget;
00501 SbVec2s size;
00502
00503
00504 SbBool visibleState;
00505 SbBool ShellMapped, widgetMapped;
00506 SoCallbackList *visibiltyCBList;
00507 void checkForVisibilityChange();
00508
00509
00510 SbVec2s viewerPos;
00511 SbVec2s viewerSize;
00512 long style, extStyle;
00513
00514 static void shellStructureNotifyCB( SoWidget w, SoWinComponent* c, XEvent* e, Boolean* b );
00515 static void widgetDestroyedCB( SoWidget w, XtPointer p1, XtPointer p2 );
00516
00517
00518 SoWinComponentCB* windowCloseFunc;
00519 void* windowCloseData;
00520
00521
00522
00523 static SbDict* widgetDictionary;
00524
00525
00526
00527 WNDPROC parentWndProc;
00528 WNDPROC origDlgWndProc;
00529
00530
00531
00532 SbBool m_nResizeBaseWidget;
00533
00534 static void OnWmSize( Hwnd hwnd, UINT message,
00535 WPARAM wParam, LPARAM lParam );
00536 static void OnWmPaint( Hwnd hwnd, UINT message,
00537 WPARAM wParam, LPARAM lParam );
00538 static void OnWmDestroy( Hwnd hwnd, UINT message,
00539 WPARAM wParam, LPARAM lParam );
00540
00541
00542 static LRESULT CALLBACK componentWndProc( Hwnd hwnd, UINT message,
00543 WPARAM wParam, LPARAM lParam );
00544 static LRESULT CALLBACK formWindowProc( Hwnd hwnd, UINT message,
00545 WPARAM wParam, LPARAM lParam );
00546
00547
00548 SoGuiComponent* m_guiComponent;
00549 };
00550
00551 #include <Inventor/Win/SoWinEndStrict.h>
00552
00553 #endif // _SO_WIN_COMPONENT_H_
00554
00555