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_MATERIAL_PALETTE_
00027 #define _SO_WIN_MATERIAL_PALETTE_
00028
00029 #include <Inventor/Win/SoWinBeginStrict.h>
00030 #include <Inventor/sys/port.h>
00031 #include <Inventor/SbBasic.h>
00032 #include <Inventor/misc/SoCallbackList.h>
00033 #include <Inventor/Win/SoWinComponent.h>
00034
00035 class SoBaseColor;
00036 class SoWinClipboard;
00037 class SoWinColorEditor;
00038 class SoNodeSensor;
00039 class SoSensor;
00040 class SoDirectionalLight;
00041 class SoMaterial;
00042 class SoPathList;
00043 class SoWinRenderArea;
00044 class SoSelection;
00045 class SoWinColorSlider;
00046 class SoMFColor;
00047 class SbColor;
00048 class SoBase;
00049 class SoSeparator;
00050 class SoWinPlaneViewer;
00051 class SoOrthographicCamera;
00052 class SoNode;
00053 class SoSelection;
00054 class SoPath;
00055 class SoEventCallback;
00056 class SoWinMaterialEditor;
00057 class SoWinColorEditor;
00058 class SoBoxHighlightRenderAction;
00059 #include <winbase.h>
00060
00061
00062 typedef void SoWinMaterialPaletteCB(void *userData, const SoMaterial *mtl);
00063
00065
00066
00067
00068
00069
00071
00072 {
00073 public:
00074
00075 SoWinMaterialPalette(
00076 SoWidget parent = NULL,
00077 const char *name = NULL,
00078 SbBool buildInsideParent = TRUE);
00079 ~SoWinMaterialPalette();
00080
00081
00082
00083 void attach(SoMaterial *material, int index = 0);
00084 void detach();
00085 SbBool isAttached() { return (material != NULL); }
00086
00087
00088
00089
00090
00091
00092 inline void addMaterialChangedCallback(
00093 SoWinMaterialPaletteCB *f,
00094 void *userData = NULL);
00095 inline void removeMaterialChangedCallback(
00096 SoWinMaterialPaletteCB *f,
00097 void *userData = NULL);
00098
00099
00100
00101 virtual void show();
00102 virtual void hide();
00103
00104
00105 void setMaterial(const SoMaterial &mtl);
00106 const SoMaterial & getMaterial() const { return (*material); }
00107 public:
00108 void windowsPalette();
00109
00110 SbBool alwaysOnTop;
00111 static void staticLocation2EventCB(void *userData,
00112 SoEventCallback *node);
00113 void location2Event(SoEventCallback *node);
00114
00115 void browsePalletteBaseDir();
00116 void setPaletteBaseDir(LPCTSTR newBaseDir);
00117 long getMaxDirCount() { return m_nMaxPathId; };
00118 private:
00119 HWND m_fileBrowser;
00120
00121 static HKEY tgsRegKey;
00122
00123 void makePaletteMenuList(HMENU menuBar);
00124
00125
00126
00127
00128 SoEXTENDER
00129 SoWinMaterialPalette(
00130 SoWidget parent,
00131 const char *name,
00132 SbBool buildInsideParent,
00133 SbBool buildNow);
00134
00135
00136 virtual SbString getDefaultWidgetName() const;
00137 virtual SbString getDefaultTitle() const;
00138 virtual SbString getDefaultIconTitle() const;
00139
00140 private:
00141 unsigned long nCurrEditId ;
00142 HMENU menubar ;
00143
00144
00145 static WBOOL CALLBACK mgrDlgProc( Hwnd hdlg, UINT message,
00146 WPARAM wParam, LPARAM lParam );
00147 static void onCommand(
00148 Hwnd hdlg,
00149 int id,
00150 Hwnd hCtrl,
00151 UINT codeNotify ) ;
00152
00153 void handleMenu(SoWinMaterialPalette *p,
00154 int id ) ;
00155
00156 void initPlacement() ;
00157
00158 SoMaterial *material;
00159 int index;
00160 SoCallbackList *callbackList;
00161
00162
00163 SoWidget mgrWidget;
00164
00165
00166 SbBool ignoreCallback;
00167 SbBool openMaterialList;
00168
00169
00170 SoWinClipboard *clipboard;
00171
00172
00173 SoWinPlaneViewer *paletteRenderArea;
00174 SoSelection *paletteRoot;
00175 SoOrthographicCamera * m_pCamera;
00176 static void staticSelectionCB(void *userData, SoPath *path);
00177 void selectionCB(SoPath * path);
00178
00179 SoSelection *makePalette();
00180 void resetPalette();
00181 SoSeparator *makeRow(SoNode * aShape,long * nodeCnt,SbBool reset = FALSE);
00182 LPCTSTR getMaterialDir();
00183 void setMaterialDir(LPCTSTR dirPath);
00184 SbBool saveMaterial(LPCTSTR fName);
00185 char currentMaterialPath[MAX_PATH];
00186 char* m_materialPath;
00187 void changeMaterialPath(UINT id);
00188 SoWidget m_hScrollBar;
00189 SoWidget m_hStatusText;
00190 SoWidget m_hPaletteName;
00191 int m_nMaxPathId;
00192 void adjustVScrollInfo(long rows);
00193 void scrollCamera(int nScrollCode, short int nPos);
00194
00195 SoBoxHighlightRenderAction * m_pHighlightAction;
00196
00197
00198 SoWinMaterialEditor *m_pMaterialEditor;
00199 SoWinColorEditor *m_pColorEditor;
00200
00201 SoWidget *menuItemsList;
00202
00203 long activeColor;
00204
00205
00206 void copyMaterial(SoMaterial *mat1, int index1,
00207 const SoMaterial *mat2, int index2);
00208
00209
00210 static void pasteDone(void *userData, SoPathList *pathList);
00211
00212
00213 static void materialListCB(void *, const SoMaterial *);
00214
00215 void menuPick(SoWidget, int, XmAnyCallbackStruct *);
00216 void menuDisplay(SoWidget, SoWinMaterialPalette *, XtPointer);
00217
00218
00219 SoWidget buildWidget(SoWidget parent);
00220 SoWidget buildPulldownMenu(SoWidget parent);
00221
00222
00223 void constructorCommon(SbBool buildNow);
00224 };
00225
00226
00227 void
00228 SoWinMaterialPalette::addMaterialChangedCallback(
00229 SoWinMaterialPaletteCB *f,
00230 void *userData)
00231 { callbackList->addCallback((SoCallbackListCB *) f, userData); }
00232
00233 void
00234 SoWinMaterialPalette::removeMaterialChangedCallback(
00235 SoWinMaterialPaletteCB *f,
00236 void *userData)
00237 { callbackList->removeCallback((SoCallbackListCB *) f, userData); }
00238
00239 #include <Inventor/Win/SoWinEndStrict.h>
00240
00241 #endif // _SO_WIN_MATERIAL_PALETTE_
00242
00243
00244