00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef SOQT
00025 # include <Inventor/Qt/SoQtColorEditor.h>
00026 #elif defined(_WIN32)
00027 # include <Inventor/Win/SoWinColorEditor.h>
00028 #else // _WIN32
00029
00030 #ifndef _SO_XT_COLOR_EDITOR_
00031 #define _SO_XT_COLOR_EDITOR_
00032
00033 #include <Xm/Xm.h>
00034 #include <Inventor/SbColor.h>
00035 #include <Inventor/misc/SoCallbackList.h>
00036 #include <Inventor/Xt/SoXtComponent.h>
00037
00038 class SoBase;
00039 class SoNodeSensor;
00040 class SoMFColor;
00041 class SoPathList;
00042 class SoSFColor;
00043 class SoSensor;
00044 class SoXtClipboard;
00045 class SoXtColorPatch;
00046 class SoXtColorWheel;
00047 class SoXtColorSlider;
00048
00049 class SoMFUInt32;
00050
00051 struct _ColorEditorCBData;
00052
00053
00054 typedef void SoXtColorEditorCB(void *userData, const SbColor *color);
00055
00057
00058
00059
00060
00061
00063
00086 class SoXtColorEditor : public SoXtComponent {
00087
00088 public:
00089
00094 enum Sliders {
00098 NONE,
00102 INTENSITY,
00106 RGB,
00110 HSV,
00114 RGB_V,
00118 RGB_HSV
00119 };
00120
00125 enum UpdateFrequency {
00129 CONTINUOUS,
00133 AFTER_ACCEPT
00134 };
00135
00139 SoXtColorEditor(SoWidget parent = NULL,
00140 const char *name = NULL,
00141 SbBool buildInsideParent = TRUE);
00145 ~SoXtColorEditor();
00146
00161 void attach(SoSFColor *color, SoBase *node);
00166 void attach(SoMFColor *color, int index, SoBase *node);
00171 void attach(SoMFUInt32 *color, int index, SoBase *node);
00172
00178 void detach();
00182 SbBool isAttached() { return attached; }
00183
00189 inline void addColorChangedCallback(SoXtColorEditorCB *f, void *userData = NULL);
00193 inline void removeColorChangedCallback(SoXtColorEditorCB *f, void *userData = NULL);
00194
00199 void setColor(const SbColor &color);
00203 const SbColor & getColor() { return baseRGB; }
00204
00219 void setWYSIWYG(SbBool trueOrFalse);
00223 SbBool isWYSIWYG() { return WYSIWYGmode; }
00224
00228 void setCurrentSliders(SoXtColorEditor::Sliders whichSliders);
00232 SoXtColorEditor::Sliders getCurrentSliders() { return whichSliders; }
00233
00237 void setUpdateFrequency(SoXtColorEditor::UpdateFrequency freq);
00241 SoXtColorEditor::UpdateFrequency getUpdateFrequency() { return updateFreq; }
00242
00243 private:
00244
00245
00246
00247
00248 SoEXTENDER
00249 SoXtColorEditor(SoWidget parent,
00250 const char *name,
00251 SbBool buildInsideParent,
00252 SbBool buildNow);
00253
00254
00255 virtual SbString getDefaultWidgetName() const;
00256 virtual SbString getDefaultTitle() const;
00257 virtual SbString getDefaultIconTitle() const;
00258
00259 private:
00260
00261
00262 SoWidget buildWidget(SoWidget parent);
00263 static void visibilityChangeCB(void *pt, SbBool visible);
00264
00265
00266 SoWidget mgrWidget;
00267 SbBool WYSIWYGmode;
00268 Sliders whichSliders;
00269 SbColor baseRGB;
00270 float baseHSV[3];
00271 SbBool ignoreCallback;
00272 SoXtColorSlider *sliders[6];
00273 SoXtColorWheel *wheel;
00274 SoXtColorPatch *current, *previous;
00275 _ColorEditorCBData *dataId;
00276 SbPList menuItems;
00277 SoXtColorEditor::UpdateFrequency updateFreq;
00278
00279
00280 SbBool attached;
00281 SoBase *editNode;
00282 SoSFColor *colorSF;
00283 SoMFColor *colorMF;
00284 SoNodeSensor *colorSensor;
00285 SoCallbackList *callbackList;
00286 int index;
00287
00288
00289
00290 SoMFUInt32 *colorUInt32MF;
00291 float transparency;
00292
00293
00294 SoXtClipboard *clipboard;
00295 void copy(Time eventTime);
00296 void paste(Time eventTime);
00297 void pasteDone(SoPathList *pathList);
00298 static void pasteDoneCB(void *userData, SoPathList *pathList);
00299
00300
00301 SoWidget acceptButton, slidersForm, buttonsForm, wheelForm;
00302
00303
00304 SoWidget buildPulldownMenu(SoWidget parent);
00305 SoWidget buildControls(SoWidget parent);
00306 SoWidget buildSlidersForm(SoWidget parent);
00307
00308 void doSliderLayout();
00309 void doDynamicTopLevelLayout();
00310 int numberOfSliders(SoXtColorEditor::Sliders slider);
00311
00312
00313 void doUpdates();
00314
00315
00316 void fieldChanged();
00317 static void fieldChangedCB(void *, SoSensor *);
00318
00319
00320 static void wheelCallback(void *, const float hsv[3]);
00321 void wheelChanged(const float hsv[3]);
00322 static void sliderCallback(void *, float);
00323 void sliderChanged(short id, float value);
00324 static void buttonsCallback(SoWidget, _ColorEditorCBData *, XtPointer);
00325 void buttonPressed(short id);
00326 static void editMenuCallback(SoWidget, _ColorEditorCBData *, XmAnyCallbackStruct *);
00327 static void sliderMenuCallback(SoWidget, _ColorEditorCBData *, XtPointer);
00328
00329 static void menuDisplay(SoWidget, SoXtColorEditor *editor, XtPointer);
00330
00331
00332 void constructorCommon(SbBool buildNow);
00333
00334 void initStrings( void );
00335
00336 };
00337
00338
00339 void
00340 SoXtColorEditor::addColorChangedCallback(SoXtColorEditorCB *f, void *userData)
00341 {
00342 callbackList->addCallback((SoCallbackListCB *)f, userData);
00343 }
00344
00345 void
00346 SoXtColorEditor::removeColorChangedCallback(SoXtColorEditorCB *f, void *userData)
00347 {
00348 callbackList->removeCallback((SoCallbackListCB *)f, userData);
00349 }
00350
00351 #endif
00352
00353 #endif // _WIN32
00354
00355
00356