00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _SO_WIN_MATERIAL_EDITOR_
00025 #define _SO_WIN_MATERIAL_EDITOR_
00026
00027 #include <Inventor/Win/SoWinBeginStrict.h>
00028 #include <Inventor/sys/port.h>
00029 #include <Inventor/SbBasic.h>
00030 #include <Inventor/misc/SoCallbackList.h>
00031 #include <Inventor/Win/SoWinComponent.h>
00032
00033 class SoBaseColor;
00034 class SoWinClipboard;
00035 class SoWinColorEditor;
00036 class SoNodeSensor;
00037 class SoSensor;
00038 class SoDirectionalLight;
00039 class SoMaterial;
00040 #ifdef NOTYET
00041 class SoWinMaterialList;
00042 #endif
00043 class SoPathList;
00044 class SoWinRenderArea;
00045 class SoSelection;
00046 class SoWinColorSlider;
00047 class SoMFColor;
00048 class SbColor;
00049 class SoBase;
00050 class SoSeparator;
00051 class SoWinMaterialPalette;
00052
00053 class SoNode;
00054 class SoSFColor;
00055
00056
00060 typedef void SoWinMaterialEditorCB(void *userData, const SoMaterial *mtl);
00061
00063
00064
00065
00066
00067
00069
00097 class SoWinMaterialEditor : public SoWinComponent {
00098 public:
00103 enum UpdateFrequency {
00107 CONTINUOUS,
00111 AFTER_ACCEPT,
00112 };
00113
00117 SoWinMaterialEditor(
00118 SoWidget parent = NULL,
00119 const char *name = NULL,
00120 SbBool buildInsideParent = TRUE);
00124 virtual ~SoWinMaterialEditor();
00125
00130 void attach( SoMaterial *material, int index = 0 );
00131
00135 void detach();
00139 SbBool isAttached() { return (material != NULL); }
00140
00147 inline void addMaterialChangedCallback(
00148 SoWinMaterialEditorCB *f,
00149 void *userData = NULL);
00154 inline void removeMaterialChangedCallback(
00155 SoWinMaterialEditorCB *f,
00156 void *userData = NULL);
00157
00161 void setUpdateFrequency(SoWinMaterialEditor::UpdateFrequency freq);
00165 SoWinMaterialEditor::UpdateFrequency getUpdateFrequency()
00166 { return updateFreq; }
00167
00168
00169
00170 virtual void show();
00171 virtual void hide();
00172
00176 void setMaterial(const SoMaterial &mtl);
00180 const SoMaterial & getMaterial() const { return *localMaterial; }
00181
00182 SbBool alwaysOnTop;
00183 SoWinMaterialPalette * m_pMaterialPalette;
00184 private:
00185
00186
00187
00188
00189
00190 SoEXTENDER
00191 SoWinMaterialEditor(
00192 SoWidget parent,
00193 const char *name,
00194 SbBool buildInsideParent,
00195 SbBool buildNow);
00196
00197
00198 virtual SbString getDefaultWidgetName() const;
00199 virtual SbString getDefaultTitle() const;
00200 virtual SbString getDefaultIconTitle() const;
00201
00202 private:
00203 unsigned long nCurrEditId ;
00204 unsigned long diamondButtonId[4] ;
00205 unsigned long radioButtonId[4] ;
00206 HMENU menubar ;
00207
00208 void layoutAccept() ;
00209
00210 static WBOOL CALLBACK mgrDlgProc( Hwnd hdlg, UINT message,
00211 WPARAM wParam, LPARAM lParam );
00212 static void onCommand(
00213 Hwnd hdlg,
00214 int id,
00215 Hwnd hCtrl,
00216 UINT codeNotify ) ;
00217
00218 void handleEdit(
00219 int nSlider,
00220 Hwnd hEdit,
00221 UINT codeNotify) ;
00222
00223 void handleButtons(SoWinMaterialEditor *p,
00224 SoWidget hCtrl,
00225 int id,
00226 UINT codeNotify) ;
00227
00228 void handleMenu(SoWinMaterialEditor *p,
00229 int id ) ;
00230
00231 void initPlacement() ;
00232
00233
00234
00235
00236 SoNode *material;
00237 SoMaterial *imat;
00238 int index;
00239 SoNodeSensor *sensor;
00240 SoCallbackList *callbackList;
00241 SoWidget acceptButton, diamondButtons[4], radioButtons[4];
00242 SoWinMaterialEditor::UpdateFrequency updateFreq;
00243
00244
00245 SoWidget mgrWidget;
00246 SoWinColorEditor *colorEditor;
00247 SoWinColorSlider *sliders[6];
00248 SbBool changedIt[6];
00249 #ifdef NOTYET
00250 SoWinMaterialList *materialList;
00251 #endif
00252 SbBool ignoreCallback;
00253 SbBool openMaterialList;
00254 static void colorEditorCloseCB(void *, SoWinComponent *);
00255 static void materialListCloseCB(void *, SoWinComponent *);
00256
00257
00258 SoWinClipboard *clipboard;
00259
00260
00261 SoWinRenderArea *renderArea;
00262 SoMaterial *localMaterial;
00263
00264 SoDirectionalLight *light0;
00265 SoDirectionalLight *light1;
00266 SoBaseColor *tileColor;
00267 SoSeparator *root;
00268
00269 long activeColor;
00270
00271
00272 void updateLocalComponents();
00273
00274
00275 void updateColorEditor(SbBool updateTitle = FALSE);
00276
00277
00278
00279 void updateColorSlider(SoWinColorSlider *, const float rgb[3]);
00280
00281
00282 void updateMaterialColor(
00283 SoMFColor *editMtlColor,
00284 SoMFColor *localMtlColor,
00285 const float *rgb,
00286 float intensity);
00287 void updateMaterialColor(
00288 SoSFColor *editMtlColor,
00289 SoMFColor *localMtlColor,
00290 const float *rgb,
00291 float intensity);
00292
00293
00294
00295
00296 void copyMaterial(SoNode *mat1, int index1,
00297 const SoNode *mat2, int index2);
00298
00299
00300
00301 void undoIgnoresIfChanged();
00302
00303
00304 static void pasteDone(void *userData, SoPathList *pathList);
00305
00306
00307 static void materialListCB(void *, const SoMaterial *);
00308 static void colorEditorCB(void *, const SbColor *);
00309 static void ambientSliderCB(void *, float);
00310 static void diffuseSliderCB(void *, float);
00311 static void specularSliderCB(void *, float);
00312 static void emissiveSliderCB(void *, float);
00313 static void shininessSliderCB(void *, float);
00314 static void transparencySliderCB(void *, float);
00315
00316
00317 void menuPick(SoWidget, int, XmAnyCallbackStruct *);
00318 void menuDisplay(SoWidget, SoWinMaterialEditor *, XtPointer);
00319 void radioButtonPick(SoWidget, int, XtPointer);
00320 void diamondButtonPick(SoWidget, int, XtPointer);
00321
00322 static void acceptButtonCB(SoWidget, SoWinMaterialEditor *, XtPointer);
00323
00324
00325 static void sensorCB(void *, SoSensor *);
00326
00327
00328 SoWidget buildWidget(SoWidget parent);
00329 SoWidget buildPulldownMenu(SoWidget parent);
00330 SoWidget buildControls(SoWidget parent);
00331 SoWidget buildSlidersForm(SoWidget parent);
00332
00333 static void visibilityChangeCB(void *pt, SbBool visible);
00334 void activate();
00335 void deactivate();
00336
00337
00338 void constructorCommon(SbBool buildNow);
00339
00340 };
00341
00342
00343
00344 void
00345 SoWinMaterialEditor::addMaterialChangedCallback(
00346 SoWinMaterialEditorCB *f,
00347 void *userData)
00348 { callbackList->addCallback((SoCallbackListCB *) f, userData); }
00349
00350 void
00351 SoWinMaterialEditor::removeMaterialChangedCallback(
00352 SoWinMaterialEditorCB *f,
00353 void *userData)
00354 { callbackList->removeCallback((SoCallbackListCB *) f, userData); }
00355
00356 #include <Inventor/Win/SoWinEndStrict.h>
00357
00358 #endif // _SO_WIN_MATERIAL_EDITOR_
00359
00360