00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00024 #ifndef __vtkKWThumbWheel_h
00025 #define __vtkKWThumbWheel_h
00026
00027 #include "vtkKWCompositeWidget.h"
00028
00029 class vtkKWLabel;
00030 class vtkKWEntry;
00031 class vtkKWPushButton;
00032 class vtkKWTopLevel;
00033
00034 class KWWidgets_EXPORT vtkKWThumbWheel : public vtkKWCompositeWidget
00035 {
00036
00037 public:
00038 static vtkKWThumbWheel* New();
00039 vtkTypeRevisionMacro(vtkKWThumbWheel,vtkKWCompositeWidget);
00040 void PrintSelf(ostream& os, vtkIndent indent);
00041
00043
00044 virtual void SetValue(double v);
00045 vtkGetMacro(Value, double);
00047
00049
00051 vtkSetMacro(MinimumValue, double);
00052 vtkGetMacro(MinimumValue, double);
00053 vtkSetMacro(ClampMinimumValue, int);
00054 vtkGetMacro(ClampMinimumValue, int);
00055 vtkBooleanMacro(ClampMinimumValue, int);
00057
00059
00061 vtkSetMacro(MaximumValue, double);
00062 vtkGetMacro(MaximumValue, double);
00063 vtkSetMacro(ClampMaximumValue, int);
00064 vtkGetMacro(ClampMaximumValue, int);
00065 vtkBooleanMacro(ClampMaximumValue, int);
00067
00069
00070 virtual void SetRange(double min, double max)
00071 { this->SetMinimumValue(min); this->SetMaximumValue(max); };
00072 virtual void SetRange(const double *range)
00073 { this->SetRange(range[0], range[1]); };
00075
00077
00084 virtual void SetResolution(double r);
00085 vtkGetMacro(Resolution, double);
00086 vtkSetMacro(ClampResolution, int);
00087 vtkGetMacro(ClampResolution, int);
00088 vtkBooleanMacro(ClampResolution, int);
00090
00092
00094 enum
00095 {
00096 InteractionModeNone = 0,
00097 InteractionModeLinearMotion,
00098 InteractionModeNonLinearMotion,
00099 InteractionModeToggleCenterIndicator
00100 };
00101
00102 virtual void SetInteractionMode(int mode, int v);
00103 virtual int GetInteractionMode(int mode);
00104 virtual void SetInteractionModeToNone(int mode)
00105 { this->SetInteractionMode(
00106 mode, vtkKWThumbWheel::InteractionModeNone); };
00107 virtual void SetInteractionModeToLinear(int mode)
00108 { this->SetInteractionMode(
00109 mode, vtkKWThumbWheel::InteractionModeLinearMotion); };
00110 virtual void SetInteractionModeToNonLinear(int mode)
00111 { this->SetInteractionMode(
00112 mode, vtkKWThumbWheel::InteractionModeNonLinearMotion); };
00113 virtual void SetInteractionModeToToggleCenterIndicator(int mode)
00114 { this->SetInteractionMode(
00115 mode, vtkKWThumbWheel::InteractionModeToggleCenterIndicator); };
00116 virtual char *GetInteractionModeAsString(int mode);
00118
00120
00127 vtkSetClampMacro(LinearThreshold, double, 0.0, 1.0);
00128 vtkGetMacro(LinearThreshold, double);
00130
00132
00135 vtkSetMacro(NonLinearMaximumMultiplier, double);
00136 vtkGetMacro(NonLinearMaximumMultiplier, double);
00138
00140
00142 virtual void SetThumbWheelWidth(int v);
00143 vtkGetMacro(ThumbWheelWidth, int);
00144 virtual void SetThumbWheelHeight(int v);
00145 vtkGetMacro(ThumbWheelHeight, int);
00146 virtual void SetThumbWheelSize(int w, int h)
00147 { this->SetThumbWheelWidth(w); this->SetThumbWheelHeight(h); };
00148 virtual void SetLength(int v) { this->SetThumbWheelWidth(v); };
00150
00152
00156 virtual void SetResizeThumbWheel(int flag);
00157 vtkGetMacro(ResizeThumbWheel, int);
00158 vtkBooleanMacro(ResizeThumbWheel, int);
00160
00162
00165 vtkSetMacro(DisplayThumbWheelPositionIndicator, int);
00166 vtkGetMacro(DisplayThumbWheelPositionIndicator, int);
00167 vtkBooleanMacro(DisplayThumbWheelPositionIndicator, int);
00168 vtkSetVector3Macro(ThumbWheelPositionIndicatorColor, double);
00169 vtkGetVectorMacro(ThumbWheelPositionIndicatorColor, double, 3);
00171
00173
00175 virtual void SetDisplayThumbWheelCenterIndicator(int flag);
00176 vtkGetMacro(DisplayThumbWheelCenterIndicator, int);
00177 vtkBooleanMacro(DisplayThumbWheelCenterIndicator, int);
00178 virtual void ToggleDisplayThumbWheelCenterIndicator();
00180
00182
00186 virtual void SetSizeOfNotches(double v);
00187 vtkGetMacro(SizeOfNotches, double);
00189
00191
00192 virtual void SetDisplayEntry(int flag);
00193 vtkGetMacro(DisplayEntry, int);
00194 vtkBooleanMacro(DisplayEntry, int);
00195 vtkGetObjectMacro(Entry, vtkKWEntry);
00197
00199
00200 virtual void SetDisplayLabel(int flag);
00201 vtkGetMacro(DisplayLabel, int);
00202 vtkBooleanMacro(DisplayLabel, int);
00203 virtual vtkKWLabel* GetLabel();
00205
00207
00209 virtual void SetDisplayEntryAndLabelOnTop(int flag);
00210 vtkGetMacro(DisplayEntryAndLabelOnTop, int);
00211 vtkBooleanMacro(DisplayEntryAndLabelOnTop, int);
00213
00215
00217 vtkSetMacro(PopupMode, int);
00218 vtkGetMacro(PopupMode, int);
00219 vtkBooleanMacro(PopupMode, int);
00220 vtkGetObjectMacro(PopupPushButton, vtkKWPushButton);
00222
00224
00228 virtual void SetExpandEntry(int flag);
00229 vtkGetMacro(ExpandEntry, int);
00230 vtkBooleanMacro(ExpandEntry, int);
00232
00234
00265 virtual void SetCommand(vtkObject *object, const char *method);
00266 virtual void SetStartCommand(vtkObject *object, const char *method);
00267 virtual void SetEndCommand(vtkObject *object, const char *method);
00268 virtual void SetEntryCommand(vtkObject *object, const char *method);
00270
00272
00281 enum
00282 {
00283 ThumbWheelValueChangingEvent = 10000,
00284 ThumbWheelValueChangedEvent,
00285 ThumbWheelValueStartChangingEvent
00286 };
00287
00289
00292 virtual void SetBalloonHelpString(const char *str);
00293
00295
00297 void Bind();
00298 void UnBind();
00300
00307 virtual void UpdateEnableState();
00308
00310
00311 virtual void ResizeThumbWheelCallback();
00312 virtual void DisplayPopupCallback();
00313 virtual void WithdrawPopupCallback();
00314 virtual void EntryValueCallback(const char*);
00315 virtual void StartLinearMotionCallback();
00316 virtual void PerformLinearMotionCallback();
00317 virtual void StartNonLinearMotionCallback();
00318 virtual void PerformNonLinearMotionCallback();
00319 virtual void StopMotionCallback();
00321
00322
00323
00324 protected:
00325 vtkKWThumbWheel();
00326 ~vtkKWThumbWheel();
00327
00329 virtual void CreateWidget();
00330
00331 double Value;
00332 double MinimumValue;
00333 int ClampMinimumValue;
00334 double MaximumValue;
00335 int ClampMaximumValue;
00336 double Resolution;
00337 int ClampResolution;
00338 double NonLinearMaximumMultiplier;
00339 double LinearThreshold;
00340
00341 int ThumbWheelWidth;
00342 int ThumbWheelHeight;
00343 double SizeOfNotches;
00344 double ThumbWheelPositionIndicatorColor[3];
00345
00346 int ResizeThumbWheel;
00347 int DisplayLabel;
00348 int DisplayEntry;
00349 int DisplayEntryAndLabelOnTop;
00350 int DisplayThumbWheelPositionIndicator;
00351 int DisplayThumbWheelCenterIndicator;
00352 int PopupMode;
00353 int ExpandEntry;
00354
00355 char *Command;
00356 char *StartCommand;
00357 char *EndCommand;
00358 char *EntryCommand;
00359
00360 virtual void InvokeThumbWheelCommand(const char *command, double value);
00361 virtual void InvokeCommand(double value);
00362 virtual void InvokeStartCommand(double value);
00363 virtual void InvokeEndCommand(double value);
00364 virtual void InvokeEntryCommand(double value);
00365
00366 double ThumbWheelShift;
00367
00368 int InteractionModes[3];
00369
00370 vtkKWLabel *ThumbWheel;
00371 vtkKWEntry *Entry;
00372 vtkKWLabel *Label;
00373 vtkKWTopLevel *TopLevel;
00374 vtkKWPushButton *PopupPushButton;
00375
00376 void CreateEntry();
00377 void CreateLabel();
00378 void UpdateThumbWheelImage(double pos = -1.0);
00379 void PackWidget();
00380 double GetMousePositionInThumbWheel();
00381
00382
00383
00384 int State;
00385 enum WidgetState
00386 {
00387 Idle,
00388 InMotion
00389 };
00390
00391 class LinearMotionState
00392 {
00393 public:
00394 double Value;
00395 double ThumbWheelShift;
00396 double MousePosition;
00397 int InPerform;
00398 };
00399
00400 class NonLinearMotionState
00401 {
00402 public:
00403 double Value;
00404 double Increment;
00405 int InPerform;
00406 };
00407
00408
00409 LinearMotionState StartLinearMotionState;
00410 NonLinearMotionState StartNonLinearMotionState;
00411
00412 int InInvokeCommand;
00413
00414 void RefreshValue();
00415
00416
00417
00418 private:
00419 vtkKWThumbWheel(const vtkKWThumbWheel&);
00420 void operator=(const vtkKWThumbWheel&);
00421 };
00422
00423 #endif
00424
00425