1 #pragma once 2 3 #ifndef TOOLOPTIONS_H 4 #define TOOLOPTIONS_H 5 6 // TnzQt includes 7 #include "toonzqt/checkbox.h" 8 9 // TnzLib includes 10 #include "toonz/tstageobject.h" 11 12 // TnzCore includes 13 #include "tcommon.h" 14 #include "tproperty.h" 15 16 // Qt includes 17 #include <QFrame> 18 #include <QAction> 19 #include <QList> 20 #include <QToolBar> 21 #include <QMap> 22 #include <QLabel> 23 #include <QRadioButton> 24 25 // STD includes 26 #include <map> 27 28 #undef DVAPI 29 #undef DVVAR 30 #ifdef TNZTOOLS_EXPORTS 31 #define DVAPI DV_EXPORT_API 32 #define DVVAR DV_EXPORT_VAR 33 #else 34 #define DVAPI DV_IMPORT_API 35 #define DVVAR DV_IMPORT_VAR 36 #endif 37 38 //============================================================================= 39 40 // Forward declarations 41 42 class TTool; 43 class ToolOptionToolBar; 44 class TPropertyGroup; 45 class TPaletteHandle; 46 class TFrameHandle; 47 class TObjectHandle; 48 class TXsheetHandle; 49 class ToolHandle; 50 class SelectionScaleField; 51 class SelectionRotationField; 52 class SelectionMoveField; 53 class ToolOptionSlider; 54 class ToolOptionIntSlider; 55 class ThickChangeField; 56 class ToolOptionCombo; 57 class ToolOptionCheckbox; 58 class PegbarChannelField; 59 class ToolOptionPairSlider; 60 class ToolOptionControl; 61 class ToolOptionPopupButton; 62 class TXshLevelHandle; 63 class NoScaleField; 64 class PegbarCenterField; 65 class RGBLabel; 66 class MeasuredValueField; 67 class PaletteController; 68 class ClickableLabel; 69 70 class QLabel; 71 class QPushButton; 72 class QPropertyAnimation; 73 class QFrame; 74 class QHBoxLayout; 75 class QComboBox; 76 class QStackedWidget; 77 78 //============================================================================= 79 80 // Preprocessor definitions 81 82 #define TOOL_OPTIONS_LEFT_MARGIN 5 83 84 //============================================================================= 85 86 //*********************************************************************************************** 87 // ToolOptionToolBar declaration 88 //*********************************************************************************************** 89 90 class ToolOptionToolBar final : public QToolBar { 91 public: 92 ToolOptionToolBar(QWidget *parent = 0); 93 94 void addSpacing(int width); 95 }; 96 97 //*********************************************************************************************** 98 // ToolOptionsBox declaration 99 //*********************************************************************************************** 100 101 class ToolOptionsBox : public QFrame { 102 Q_OBJECT 103 104 protected: 105 QMap<std::string, ToolOptionControl *> 106 m_controls; //!< property name -> ToolOptionControl 107 QMap<std::string, QLabel *> m_labels; 108 109 QHBoxLayout *m_layout; 110 111 public: 112 ToolOptionsBox(QWidget *parent, bool isScrollable = true); 113 ~ToolOptionsBox(); 114 115 virtual void 116 updateStatus(); //!< Invokes updateStatus() on all registered controls onStageObjectChange()117 virtual void onStageObjectChange() {} 118 hLayout()119 QHBoxLayout *hLayout() { return m_layout; } 120 void addControl(ToolOptionControl *control); 121 122 ToolOptionControl *control(const std::string &controlName) const; 123 124 QLabel *addLabel(QString name); 125 void addLabel(std::string propName, QLabel *label); 126 void addSeparator(); 127 }; 128 129 //*********************************************************************************************** 130 // ToolOptionControlBuilder declaration 131 //*********************************************************************************************** 132 133 class ToolOptionControlBuilder final : public TProperty::Visitor { 134 ToolOptionsBox *m_panel; 135 TTool *m_tool; 136 TPaletteHandle *m_pltHandle; 137 ToolHandle *m_toolHandle; 138 139 int m_singleValueWidgetType; 140 int m_enumWidgetType; 141 142 public: 143 ToolOptionControlBuilder(ToolOptionsBox *panel, TTool *tool, 144 TPaletteHandle *pltHandle, 145 ToolHandle *toolHandle = 0); 146 147 enum SingleValueWidgetType { SLIDER = 0, FIELD }; setSingleValueWidgetType(int type)148 void setSingleValueWidgetType(int type) { m_singleValueWidgetType = type; } 149 150 enum EnumWidgetType { COMBOBOX = 0, POPUPBUTTON, FONTCOMBOBOX }; setEnumWidgetType(int type)151 void setEnumWidgetType(int type) { m_enumWidgetType = type; } 152 153 private: hLayout()154 QHBoxLayout *hLayout() { return m_panel->hLayout(); } 155 QLabel *addLabel(TProperty *p); 156 157 void visit(TDoubleProperty *p); 158 void visit(TDoublePairProperty *p); 159 void visit(TIntPairProperty *p); 160 void visit(TIntProperty *p); 161 void visit(TBoolProperty *p); 162 void visit(TStringProperty *p); 163 void visit(TEnumProperty *p); 164 void visit(TStyleIndexProperty *p); 165 void visit(TPointerProperty *p); 166 }; 167 168 //*********************************************************************************************** 169 // GenericToolOptionsBox declaration 170 //*********************************************************************************************** 171 172 class GenericToolOptionsBox : public ToolOptionsBox { 173 public: 174 GenericToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 175 int propertyGroupIdx = 0, ToolHandle *toolHandle = 0, 176 bool scrollable = true); 177 }; 178 179 //============================================================================= 180 // 181 // ArrowToolOptionsBox 182 // 183 //============================================================================= 184 185 class ArrowToolOptionsBox final : public ToolOptionsBox { 186 Q_OBJECT 187 188 enum AXIS { Position = 0, Rotation, Scale, Shear, CenterPosition, AllAxis }; 189 190 TPropertyGroup *m_pg; 191 bool m_splined; 192 TTool *m_tool; 193 TFrameHandle *m_frameHandle; 194 TObjectHandle *m_objHandle; 195 TXsheetHandle *m_xshHandle; 196 197 QWidget **m_axisOptionWidgets; 198 QWidget *m_pickWidget; 199 200 // General 201 ToolOptionCombo *m_chooseActiveAxisCombo; 202 ToolOptionCombo *m_pickCombo; 203 // enable to choose the target pegbar from the combobox 204 QComboBox *m_currentStageObjectCombo; 205 206 // Position 207 PegbarChannelField *m_motionPathPosField; 208 PegbarChannelField *m_ewPosField; 209 PegbarChannelField *m_nsPosField; 210 PegbarChannelField *m_zField; 211 NoScaleField *m_noScaleZField; 212 ClickableLabel *m_motionPathPosLabel; 213 ClickableLabel *m_ewPosLabel; 214 ClickableLabel *m_nsPosLabel; 215 ClickableLabel *m_zLabel; 216 217 ToolOptionCheckbox *m_lockEWPosCheckbox; 218 ToolOptionCheckbox *m_lockNSPosCheckbox; 219 220 // SO = Stacked Order 221 ClickableLabel *m_soLabel; 222 PegbarChannelField *m_soField; 223 224 // Rotation 225 ClickableLabel *m_rotationLabel; 226 PegbarChannelField *m_rotationField; 227 228 // Scale 229 ClickableLabel *m_globalScaleLabel; 230 ClickableLabel *m_scaleHLabel; 231 ClickableLabel *m_scaleVLabel; 232 PegbarChannelField *m_globalScaleField; 233 PegbarChannelField *m_scaleHField; 234 PegbarChannelField *m_scaleVField; 235 ToolOptionCheckbox *m_lockScaleHCheckbox; 236 ToolOptionCheckbox *m_lockScaleVCheckbox; 237 ToolOptionCombo *m_maintainCombo; 238 239 // Shear 240 ClickableLabel *m_shearHLabel; 241 ClickableLabel *m_shearVLabel; 242 PegbarChannelField *m_shearHField; 243 PegbarChannelField *m_shearVField; 244 ToolOptionCheckbox *m_lockShearHCheckbox; 245 ToolOptionCheckbox *m_lockShearVCheckbox; 246 247 // Center Position 248 ClickableLabel *m_ewCenterLabel; 249 ClickableLabel *m_nsCenterLabel; 250 PegbarCenterField *m_ewCenterField; 251 PegbarCenterField *m_nsCenterField; 252 ToolOptionCheckbox *m_lockEWCenterCheckbox; 253 ToolOptionCheckbox *m_lockNSCenterCheckbox; 254 255 ToolOptionCheckbox *m_globalKey; 256 257 // enables adjusting value by dragging on the label 258 void connectLabelAndField(ClickableLabel *label, MeasuredValueField *field); 259 260 public: 261 ArrowToolOptionsBox(QWidget *parent, TTool *tool, TPropertyGroup *pg, 262 TFrameHandle *frameHandle, TObjectHandle *objHandle, 263 TXsheetHandle *xshHandle, ToolHandle *toolHandle); 264 265 void updateStatus(); 266 void onStageObjectChange(); 267 268 protected: 269 void showEvent(QShowEvent *); 270 void hideEvent(QShowEvent *); 271 272 void setSplined(bool on); 273 bool isCurrentObjectSplined() const; 274 275 protected slots: onFrameSwitched()276 void onFrameSwitched() { updateStatus(); } 277 // update the object list in combobox 278 void updateStageObjectComboItems(); 279 // syncronize the current item in the combobox to the selected stage object 280 void syncCurrentStageObjectComboItem(); 281 // change the current stage object when user changes it via combobox by hand 282 void onCurrentStageObjectComboActivated(int index); 283 284 void onCurrentAxisChanged(int); 285 }; 286 287 //============================================================================= 288 // 289 // SelectionToolOptionsBox 290 // 291 //============================================================================= 292 293 class DraggableIconView : public QWidget { 294 Q_OBJECT 295 public: QWidget(parent)296 DraggableIconView(QWidget *parent = 0) : QWidget(parent){}; 297 298 protected: 299 // these are used for dragging on the icon to 300 // change the value of the field 301 void mousePressEvent(QMouseEvent *) override; 302 void mouseMoveEvent(QMouseEvent *) override; 303 void mouseReleaseEvent(QMouseEvent *) override; 304 305 signals: 306 void onMousePress(QMouseEvent *event); 307 void onMouseMove(QMouseEvent *event); 308 void onMouseRelease(QMouseEvent *event); 309 }; 310 311 class IconViewField final : public DraggableIconView { 312 Q_OBJECT 313 314 public: 315 enum IconType { 316 Icon_ScalePeg = 0, 317 Icon_Rotation, 318 Icon_Position, 319 Icon_Thickness, 320 Icon_Amount 321 }; 322 323 private: 324 IconType m_iconType; 325 326 protected: 327 QPixmap m_pm[Icon_Amount]; 328 Q_PROPERTY( 329 QPixmap ScalePegPixmap READ getScalePegPixmap WRITE setScalePegPixmap); 330 Q_PROPERTY( 331 QPixmap RotationPixmap READ getRotationPixmap WRITE setRotationPixmap); 332 Q_PROPERTY( 333 QPixmap PositionPixmap READ getPositionPixmap WRITE setPositionPixmap); 334 335 public: 336 IconViewField(QWidget *parent = 0, IconType iconType = Icon_ScalePeg); 337 getScalePegPixmap()338 QPixmap getScalePegPixmap() const { return m_pm[Icon_ScalePeg]; } setScalePegPixmap(const QPixmap & pixmap)339 void setScalePegPixmap(const QPixmap &pixmap) { 340 m_pm[Icon_ScalePeg] = pixmap; 341 } getRotationPixmap()342 QPixmap getRotationPixmap() const { return m_pm[Icon_Rotation]; } setRotationPixmap(const QPixmap & pixmap)343 void setRotationPixmap(const QPixmap &pixmap) { 344 m_pm[Icon_Rotation] = pixmap; 345 } getPositionPixmap()346 QPixmap getPositionPixmap() const { return m_pm[Icon_Position]; } setPositionPixmap(const QPixmap & pixmap)347 void setPositionPixmap(const QPixmap &pixmap) { 348 m_pm[Icon_Position] = pixmap; 349 } 350 351 protected: 352 void paintEvent(QPaintEvent *e); 353 }; 354 355 //----------------------------------------------------------------------------- 356 357 class SelectionToolOptionsBox final : public ToolOptionsBox, 358 public TProperty::Listener { 359 Q_OBJECT 360 361 TTool *m_tool; 362 363 ToolOptionCheckbox *m_setSaveboxCheckbox; 364 bool m_isVectorSelction; 365 QLabel *m_scaleXLabel; 366 SelectionScaleField *m_scaleXField; 367 QLabel *m_scaleYLabel; 368 SelectionScaleField *m_scaleYField; 369 DVGui::CheckBox *m_scaleLink; 370 SelectionRotationField *m_rotationField; 371 QLabel *m_moveXLabel; 372 SelectionMoveField *m_moveXField; 373 QLabel *m_moveYLabel; 374 SelectionMoveField *m_moveYField; 375 ThickChangeField *m_thickChangeField; 376 377 ToolOptionPopupButton *m_capStyle; 378 ToolOptionPopupButton *m_joinStyle; 379 ToolOptionIntSlider *m_miterField; 380 381 public: 382 SelectionToolOptionsBox(QWidget *parent, TTool *tool, 383 TPaletteHandle *pltHandle, ToolHandle *toolHandle); 384 385 void updateStatus(); 386 void onPropertyChanged(); 387 388 protected slots: 389 // addToUndo is only set to false when dragging with the mouse 390 // to set the value. It is set to true on mouse release. 391 void onScaleXValueChanged(bool addToUndo = true); 392 void onScaleYValueChanged(bool addToUndo = true); 393 void onSetSaveboxCheckboxChanged(bool); 394 }; 395 396 //============================================================================= 397 // 398 // GeometricToolOptionsBox 399 // 400 //============================================================================= 401 402 class GeometricToolOptionsBox final : public ToolOptionsBox { 403 Q_OBJECT 404 405 int m_targetType; 406 407 QLabel *m_poligonSideLabel, *m_hardnessLabel; 408 ToolOptionSlider *m_hardnessField; 409 ToolOptionIntSlider *m_poligonSideField; 410 ToolOptionCombo *m_shapeField; 411 ToolOptionCheckbox *m_pencilMode; 412 ToolOptionIntSlider *m_miterField; 413 ToolOptionCheckbox *m_snapCheckbox, *m_smoothCheckbox; 414 ToolOptionCombo *m_snapSensitivityCombo; 415 TTool *m_tool; 416 417 public: 418 GeometricToolOptionsBox(QWidget *parent, TTool *tool, 419 TPaletteHandle *pltHandle, ToolHandle *toolHandle); 420 421 void updateStatus(); 422 423 protected slots: 424 void onShapeValueChanged(int); 425 void onPencilModeToggled(bool); 426 void onJoinStyleChanged(int); 427 }; 428 429 //============================================================================= 430 // 431 // TypeToolOptionsBox 432 // 433 //============================================================================= 434 435 class TypeToolOptionsBox final : public ToolOptionsBox { 436 Q_OBJECT 437 438 TTool *m_tool; 439 440 public: 441 TypeToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 442 ToolHandle *toolHandle); 443 444 void updateStatus(); 445 446 protected slots: 447 void onFieldChanged(); 448 }; 449 450 //============================================================================= 451 // 452 // PaintbrushToolOptionsBox 453 // 454 //============================================================================= 455 456 class PaintbrushToolOptionsBox final : public ToolOptionsBox { 457 Q_OBJECT 458 459 ToolOptionCombo *m_colorMode; 460 ToolOptionCheckbox *m_selectiveMode; 461 462 public: 463 PaintbrushToolOptionsBox(QWidget *parent, TTool *tool, 464 TPaletteHandle *pltHandle, ToolHandle *toolHandle); 465 466 void updateStatus(); 467 468 protected slots: 469 void onColorModeChanged(int); 470 }; 471 472 //============================================================================= 473 // 474 // FullColorFillToolOptionsBox 475 // 476 //============================================================================= 477 478 class FullColorFillToolOptionsBox final : public ToolOptionsBox { 479 Q_OBJECT 480 481 public: 482 FullColorFillToolOptionsBox(QWidget *parent, TTool *tool, 483 TPaletteHandle *pltHandle, 484 ToolHandle *toolHandle); 485 }; 486 487 //============================================================================= 488 // 489 // FillToolOptionsBox 490 // 491 //============================================================================= 492 493 class FillToolOptionsBox final : public ToolOptionsBox { 494 Q_OBJECT 495 496 int m_targetType; 497 QLabel *m_fillDepthLabel; 498 ToolOptionCombo *m_colorMode, *m_toolType; 499 ToolOptionCheckbox *m_selectiveMode, *m_segmentMode, *m_onionMode, 500 *m_multiFrameMode, *m_autopaintMode; 501 ToolOptionPairSlider *m_fillDepthField; 502 503 public: 504 FillToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 505 ToolHandle *toolHandle); 506 507 void updateStatus(); 508 509 protected slots: 510 void onColorModeChanged(int); 511 void onToolTypeChanged(int); 512 void onOnionModeToggled(bool); 513 void onMultiFrameModeToggled(bool); 514 }; 515 516 //============================================================================= 517 // 518 // BrushToolOptionsBox 519 // 520 //============================================================================= 521 522 class BrushToolOptionsBox final : public ToolOptionsBox { 523 Q_OBJECT 524 525 TTool *m_tool; 526 527 ToolOptionCheckbox *m_pencilMode; 528 QLabel *m_hardnessLabel; 529 ToolOptionSlider *m_hardnessField; 530 ToolOptionPopupButton *m_joinStyleCombo; 531 ToolOptionIntSlider *m_miterField; 532 ToolOptionCombo *m_presetCombo; 533 ToolOptionCheckbox *m_snapCheckbox; 534 ToolOptionCombo *m_snapSensitivityCombo; 535 QPushButton *m_addPresetButton; 536 QPushButton *m_removePresetButton; 537 538 private: 539 class PresetNamePopup; 540 PresetNamePopup *m_presetNamePopup; 541 void filterControls(); 542 543 public: 544 BrushToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 545 ToolHandle *toolHandle); 546 547 void updateStatus(); 548 549 protected slots: 550 551 void onPencilModeToggled(bool); 552 void onAddPreset(); 553 void onRemovePreset(); 554 }; 555 556 //============================================================================= 557 // 558 // EraserToolOptionsBox 559 // 560 //============================================================================= 561 562 class EraserToolOptionsBox final : public ToolOptionsBox { 563 Q_OBJECT 564 565 ToolOptionCheckbox *m_pencilMode, *m_invertMode, *m_multiFrameMode; 566 ToolOptionCombo *m_toolType, *m_colorMode; 567 QLabel *m_hardnessLabel; 568 ToolOptionSlider *m_hardnessField; 569 570 public: 571 EraserToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 572 ToolHandle *toolHandle); 573 574 void updateStatus(); 575 576 protected slots: 577 void onPencilModeToggled(bool); 578 void onToolTypeChanged(int); 579 void onColorModeChanged(int); 580 }; 581 582 //============================================================================= 583 // 584 // RulerToolOptionsBox 585 // 586 //============================================================================= 587 588 class RulerToolOptionsBox final : public ToolOptionsBox { 589 Q_OBJECT 590 591 MeasuredValueField *m_Xfld; 592 MeasuredValueField *m_Yfld; 593 MeasuredValueField *m_Wfld; 594 MeasuredValueField *m_Hfld; 595 MeasuredValueField *m_Afld; 596 MeasuredValueField *m_Lfld; 597 598 QLabel *m_XpixelFld; 599 QLabel *m_YpixelFld; 600 QLabel *m_WpixelFld; 601 QLabel *m_HpixelFld; 602 603 TTool *m_tool; 604 605 public: 606 RulerToolOptionsBox(QWidget *parent, TTool *tool); 607 608 void updateValues(bool isRasterLevelEditing, double X, double Y, double W, 609 double H, double A, double L, int Xpix = 0, int Ypix = 0, 610 int Wpix = 0, int Hpix = 0); 611 612 void resetValues(); 613 }; 614 615 //============================================================================= 616 // 617 // TapeToolOptionsBox 618 // 619 //============================================================================= 620 621 class TapeToolOptionsBox final : public ToolOptionsBox { 622 Q_OBJECT 623 624 ToolOptionCheckbox *m_smoothMode, *m_joinStrokesMode; 625 ToolOptionCombo *m_toolMode, *m_typeMode; 626 QLabel *m_autocloseLabel; 627 ToolOptionSlider *m_autocloseField; 628 629 public: 630 TapeToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 631 ToolHandle *toolHandle); 632 633 void updateStatus(); 634 635 protected slots: 636 void onToolTypeChanged(int); 637 void onToolModeChanged(int); 638 void onJoinStrokesModeChanged(); 639 }; 640 641 //============================================================================= 642 // 643 // RGBPickerToolOptionsBox 644 // 645 //============================================================================= 646 647 class RGBPickerToolOptionsBox final : public ToolOptionsBox { 648 Q_OBJECT 649 ToolOptionCheckbox *m_realTimePickMode; 650 // label with background color 651 RGBLabel *m_currentRGBLabel; 652 653 public: 654 RGBPickerToolOptionsBox(QWidget *parent, TTool *tool, 655 TPaletteHandle *pltHandle, ToolHandle *toolHandle, 656 PaletteController *paletteController); 657 void updateStatus(); 658 protected slots: 659 void updateRealTimePickLabel(const QColor &); 660 }; 661 662 //============================================================================= 663 // 664 // StylePickerToolOptionsBox 665 // 666 //============================================================================= 667 668 class StylePickerToolOptionsBox final : public ToolOptionsBox { 669 Q_OBJECT 670 ToolOptionCheckbox *m_realTimePickMode; 671 672 QLabel *m_currentStyleLabel; 673 674 public: 675 StylePickerToolOptionsBox(QWidget *parent, TTool *tool, 676 TPaletteHandle *pltHandle, ToolHandle *toolHandle, 677 PaletteController *paletteController); 678 void updateStatus(); 679 protected slots: 680 void updateRealTimePickLabel(const int, const int, const int); 681 }; 682 683 //============================================================================= 684 // 685 // ShiftTraceToolOptionBox 686 // shown only when "Edit Shift" mode is active 687 // 688 //============================================================================= 689 690 class ShiftTraceToolOptionBox final : public ToolOptionsBox { 691 Q_OBJECT 692 QFrame *m_prevFrame, *m_afterFrame; 693 QRadioButton *m_prevRadioBtn, *m_afterRadioBtn; 694 QPushButton *m_resetPrevGhostBtn, *m_resetAfterGhostBtn; 695 TTool *m_tool; 696 void resetGhost(int index); 697 698 protected: 699 void showEvent(QShowEvent *) override; 700 void hideEvent(QShowEvent *); 701 702 public: 703 ShiftTraceToolOptionBox(QWidget *parent = 0, TTool *tool = 0); 704 void updateStatus() override; 705 protected slots: 706 void onResetPrevGhostBtnPressed(); 707 void onResetAfterGhostBtnPressed(); 708 void onPrevRadioBtnClicked(); 709 void onAfterRadioBtnClicked(); 710 void updateColors(); 711 }; 712 713 //============================================================================= 714 // 715 // ZoomToolOptionsBox 716 // 717 //============================================================================= 718 719 class ZoomToolOptionsBox final : public ToolOptionsBox { 720 Q_OBJECT 721 722 public: 723 ZoomToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 724 ToolHandle *toolHandle); 725 }; 726 727 //============================================================================= 728 // 729 // RotateToolOptionsBox 730 // 731 //============================================================================= 732 733 class RotateToolOptionsBox final : public ToolOptionsBox { 734 Q_OBJECT 735 736 public: 737 RotateToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 738 ToolHandle *toolHandle); 739 }; 740 741 //============================================================================= 742 // 743 // HandToolOptionsBox 744 // 745 //============================================================================= 746 747 class HandToolOptionsBox final : public ToolOptionsBox { 748 Q_OBJECT 749 750 public: 751 HandToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, 752 ToolHandle *toolHandle); 753 }; 754 755 //----------------------------------------------------------------------------- 756 757 class DVAPI ToolOptions final : public QFrame { 758 Q_OBJECT 759 760 int m_width, m_height; 761 std::map<TTool *, ToolOptionsBox *> m_panels; 762 QWidget *m_panel; 763 764 public: 765 ToolOptions(); 766 ~ToolOptions(); 767 getPanel()768 QWidget *getPanel() const { return m_panel; } 769 770 protected: 771 void showEvent(QShowEvent *); 772 void hideEvent(QShowEvent *); 773 774 public slots: 775 776 void onToolSwitched(); 777 void onToolChanged(); 778 void onStageObjectChange(); 779 780 signals: 781 // used in ComboViewer to handle Tab focus 782 void newPanelCreated(); 783 784 // void toolOptionChange(); 785 }; 786 787 #endif // PANE_H 788