diff --git a/modules/gui/src/tools/tool_option.cc b/modules/gui/src/tools/tool_option.cc index 970c8f7797627b550cdea84f80fed4213a07174f..8f54a6c060d0390dab39f6d9c2c4a35230571d6b 100644 --- a/modules/gui/src/tools/tool_option.cc +++ b/modules/gui/src/tools/tool_option.cc @@ -59,5 +59,18 @@ void ToolOptionEnum::Add(const String& text, int tag) tuples_.back().tag=tag; } +ToolOptionButton::ToolOptionButton(const String& key, + const String& verbose_name, + QObject* receiver, + const char *slot_method): + ToolOption(key, verbose_name, ToolOption::BUTTON), slot_method_(slot_method), receiver_(receiver) +{ + +} + +void ToolOptionButton::RunMe() +{ + std::cout << "TOOL RUN ME RUN ME" << std::endl; +} }} diff --git a/modules/gui/src/tools/tool_option.hh b/modules/gui/src/tools/tool_option.hh index 700cac3c6ad846a70772b4d8f3266e05c64bcb74..ac035559eabcdd6fe2b5c95ddb898b3e92c89348 100644 --- a/modules/gui/src/tools/tool_option.hh +++ b/modules/gui/src/tools/tool_option.hh @@ -25,6 +25,7 @@ #include <limits> #include <vector> +#include <iostream> #include <ost/gui/module_config.hh> @@ -37,7 +38,7 @@ class DLLEXPORT_OST_GUI ToolOption : public QObject { Q_OBJECT public: typedef enum { - INT, FLOAT, ENUM + INT, FLOAT, ENUM, BUTTON } Type; protected: ToolOption(const String& key, const String& verbose_name, Type type); @@ -116,11 +117,29 @@ public: ConstIterator Begin() const { return tuples_.begin(); } ConstIterator End() const { return tuples_.end(); } size_t Size() { return tuples_.size(); } + private: std::vector<Tuple> tuples_; int index_; }; +class DLLEXPORT_OST_GUI ToolOptionButton : public ToolOption { + Q_OBJECT +public: + ToolOptionButton(const String& key, + const String& verbose_name, + QObject* receiver, + const char *slot_method); + const char* GetSlotMethod() const { return slot_method_; } + QObject* GetReceiver() const { return receiver_; } +public slots: + void RunMe(); +private: + const char *slot_method_; + QObject* receiver_; +}; + + typedef std::vector<ToolOption*> ToolOptionList; }} diff --git a/modules/gui/src/tools/tool_options_widget.cc b/modules/gui/src/tools/tool_options_widget.cc index 58c175493c4a827125936191e09b4aeeae15f319..8798685556a4f455140cc32780e8456911cb2dbb 100644 --- a/modules/gui/src/tools/tool_options_widget.cc +++ b/modules/gui/src/tools/tool_options_widget.cc @@ -26,6 +26,7 @@ #include <QIntValidator> #include <QDoubleValidator> #include <QSpacerItem> +#include <QPushButton> namespace ost { namespace gui { @@ -74,6 +75,14 @@ QWidget* ToolOptionsWidget::MakeFloatWidget(ToolOptionFloat* opts) return line; } +QWidget* ToolOptionsWidget::MakeButtonWidget(ToolOptionButton* opts) +{ + QPushButton* button=new QPushButton(); + button->setText(QString(opts->GetVerboseName().c_str())); + connect(button, SIGNAL(released()), opts->GetReceiver(), opts->GetSlotMethod()); + return button; +} + void ToolOptionsWidget::Populate() { QGridLayout* grid=new QGridLayout(this); @@ -105,6 +114,9 @@ void ToolOptionsWidget::Populate() case ToolOption::ENUM: widget=MakeEnumWidget(dynamic_cast<ToolOptionEnum*>(opt)); break; + case ToolOption::BUTTON: + widget=MakeButtonWidget(dynamic_cast<ToolOptionButton*>(opt)); + break; } #if defined(__APPLE__) opt_label->setAttribute(Qt::WA_MacSmallSize, true); diff --git a/modules/gui/src/tools/tool_options_widget.hh b/modules/gui/src/tools/tool_options_widget.hh index 42cc48cd1f0b216fe51c1e94e1e24f33477f1f77..24e309f566d54fe2c6ffc7ff317f197e8a0dce50 100644 --- a/modules/gui/src/tools/tool_options_widget.hh +++ b/modules/gui/src/tools/tool_options_widget.hh @@ -87,6 +87,7 @@ private: QWidget* MakeIntWidget(ToolOptionInt* opts); QWidget* MakeEnumWidget(ToolOptionEnum* opts); QWidget* MakeFloatWidget(ToolOptionFloat* opts); + QWidget* MakeButtonWidget(ToolOptionButton* opts); ToolOptions* options_; };