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
00085 class SoXtColorEditor : public SoXtComponent {
00086
00087 public:
00088
00093 enum Sliders {
00097 NONE,
00101 INTENSITY,
00105 RGB,
00109 HSV,
00113 RGB_V,
00117 RGB_HSV
00118 };
00119
00124 enum UpdateFrequency {
00128 CONTINUOUS,
00132 AFTER_ACCEPT
00133 };
00134
00138 SoXtColorEditor(SoWidget parent = NULL,
00139 const char *name = NULL,
00140 SbBool buildInsideParent = TRUE);
00144 ~SoXtColorEditor();
00145
00160 void attach(SoSFColor *color, SoBase *node);
00165 void attach(SoMFColor *color, int index, SoBase *node);
00170 void attach(SoMFUInt32 *color, int index, SoBase *node);
00171
00177 void detach();
00181 SbBool isAttached() { return attached; }
00182
00188 inline void addColorChangedCallback(SoXtColorEditorCB *f, void *userData = NULL);
00192 inline void removeColorChangedCallback(SoXtColorEditorCB *f, void *userData = NULL);
00193
00198 void setColor(const SbColor &color);
00202 const SbColor & getColor() { return baseRGB; }
00203
00218 void setWYSIWYG(SbBool trueOrFalse);
00222 SbBool isWYSIWYG() { return WYSIWYGmode; }
00223
00227 void setCurrentSliders(SoXtColorEditor::Sliders whichSliders);
00231 SoXtColorEditor::Sliders getCurrentSliders() { return whichSliders; }
00232
00236 void setUpdateFrequency(SoXtColorEditor::UpdateFrequency freq);
00240 SoXtColorEditor::UpdateFrequency getUpdateFrequency() { return updateFreq; }
00241
00242 private:
00243
00244
00245
00246
00247 SoEXTENDER
00248 SoXtColorEditor(SoWidget parent,
00249 const char *name,
00250 SbBool buildInsideParent,
00251 SbBool buildNow);
00252
00253
00254 virtual SbString getDefaultWidgetName() const;
00255 virtual SbString getDefaultTitle() const;
00256 virtual SbString getDefaultIconTitle() const;
00257
00258 private:
00259
00260
00261 SoWidget buildWidget(SoWidget parent);
00262 static void visibilityChangeCB(void *pt, SbBool visible);
00263
00264
00265 SoWidget mgrWidget;
00266 SbBool WYSIWYGmode;
00267 Sliders whichSliders;
00268 SbColor baseRGB;
00269 float baseHSV[3];
00270 SbBool ignoreCallback;
00271 SoXtColorSlider *sliders[6];
00272 SoXtColorWheel *wheel;
00273 SoXtColorPatch *current, *previous;
00274 _ColorEditorCBData *dataId;
00275 SbPList menuItems;
00276 SoXtColorEditor::UpdateFrequency updateFreq;
00277
00278
00279 SbBool attached;
00280 SoBase *editNode;
00281 SoSFColor *colorSF;
00282 SoMFColor *colorMF;
00283 SoNodeSensor *colorSensor;
00284 SoCallbackList *callbackList;
00285 int index;
00286
00287
00288
00289 SoMFUInt32 *colorUInt32MF;
00290 float transparency;
00291
00292
00293 SoXtClipboard *clipboard;
00294 void copy(Time eventTime);
00295 void paste(Time eventTime);
00296 void pasteDone(SoPathList *pathList);
00297 static void pasteDoneCB(void *userData, SoPathList *pathList);
00298
00299
00300 SoWidget acceptButton, slidersForm, buttonsForm, wheelForm;
00301
00302
00303 SoWidget buildPulldownMenu(SoWidget parent);
00304 SoWidget buildControls(SoWidget parent);
00305 SoWidget buildSlidersForm(SoWidget parent);
00306
00307 void doSliderLayout();
00308 void doDynamicTopLevelLayout();
00309 int numberOfSliders(SoXtColorEditor::Sliders slider);
00310
00311
00312 void doUpdates();
00313
00314
00315 void fieldChanged();
00316 static void fieldChangedCB(void *, SoSensor *);
00317
00318
00319 static void wheelCallback(void *, const float hsv[3]);
00320 void wheelChanged(const float hsv[3]);
00321 static void sliderCallback(void *, float);
00322 void sliderChanged(short id, float value);
00323 static void buttonsCallback(SoWidget, _ColorEditorCBData *, XtPointer);
00324 void buttonPressed(short id);
00325 static void editMenuCallback(SoWidget, _ColorEditorCBData *, XmAnyCallbackStruct *);
00326 static void sliderMenuCallback(SoWidget, _ColorEditorCBData *, XtPointer);
00327
00328 static void menuDisplay(SoWidget, SoXtColorEditor *editor, XtPointer);
00329
00330
00331 void constructorCommon(SbBool buildNow);
00332
00333 void initStrings( void );
00334
00335 };
00336
00337
00338 void
00339 SoXtColorEditor::addColorChangedCallback(SoXtColorEditorCB *f, void *userData)
00340 {
00341 callbackList->addCallback((SoCallbackListCB *)f, userData);
00342 }
00343
00344 void
00345 SoXtColorEditor::removeColorChangedCallback(SoXtColorEditorCB *f, void *userData)
00346 {
00347 callbackList->removeCallback((SoCallbackListCB *)f, userData);
00348 }
00349
00350 #endif
00351
00352 #endif // _WIN32
00353
00354
00355