From c2ea8f3f0a6483a55a8234c59c1377303528c38f Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 13 Jul 2014 14:21:50 +0200 Subject: [PATCH] added self-adjusting tooltips to the top-level toolbar buttons --- apps/opencs/view/render/scenewidget.cpp | 2 +- apps/opencs/view/render/worldspacewidget.cpp | 2 +- apps/opencs/view/widget/pushbutton.cpp | 21 ++++++++++++-------- apps/opencs/view/widget/pushbutton.hpp | 10 +++++++--- apps/opencs/view/widget/scenetoolmode.cpp | 20 ++++++++++++++++--- apps/opencs/view/widget/scenetoolmode.hpp | 7 +++++-- 6 files changed, 44 insertions(+), 18 deletions(-) diff --git a/apps/opencs/view/render/scenewidget.cpp b/apps/opencs/view/render/scenewidget.cpp index 8f6b74765f..5cad25b254 100644 --- a/apps/opencs/view/render/scenewidget.cpp +++ b/apps/opencs/view/render/scenewidget.cpp @@ -56,7 +56,7 @@ namespace CSVRender CSVWidget::SceneToolMode *SceneWidget::makeLightingSelector (CSVWidget::SceneToolbar *parent) { - CSVWidget::SceneToolMode *tool = new CSVWidget::SceneToolMode (parent); + CSVWidget::SceneToolMode *tool = new CSVWidget::SceneToolMode (parent, "Lighting Mode"); /// \todo replace icons tool->addButton (":door.png", "day", diff --git a/apps/opencs/view/render/worldspacewidget.cpp b/apps/opencs/view/render/worldspacewidget.cpp index 33f27c8bae..d3413a29dd 100644 --- a/apps/opencs/view/render/worldspacewidget.cpp +++ b/apps/opencs/view/render/worldspacewidget.cpp @@ -57,7 +57,7 @@ void CSVRender::WorldspaceWidget::selectDefaultNavigationMode() CSVWidget::SceneToolMode *CSVRender::WorldspaceWidget::makeNavigationSelector ( CSVWidget::SceneToolbar *parent) { - CSVWidget::SceneToolMode *tool = new CSVWidget::SceneToolMode (parent); + CSVWidget::SceneToolMode *tool = new CSVWidget::SceneToolMode (parent, "Camera Mode"); /// \todo replace icons /// \todo consider user-defined button-mapping diff --git a/apps/opencs/view/widget/pushbutton.cpp b/apps/opencs/view/widget/pushbutton.cpp index 35bed1627d..056e548fbc 100644 --- a/apps/opencs/view/widget/pushbutton.cpp +++ b/apps/opencs/view/widget/pushbutton.cpp @@ -4,11 +4,11 @@ #include #include -void CSVWidget::PushButton::setExtendedToolTip (const std::string& text) +void CSVWidget::PushButton::setExtendedToolTip (const QString& text) { - std::string tooltip = text; + QString tooltip = text; - if (tooltip.empty()) + if (tooltip.isEmpty()) tooltip = "(Tool tip not implemented yet)"; switch (mType) @@ -29,7 +29,7 @@ void CSVWidget::PushButton::setExtendedToolTip (const std::string& text) break; } - setToolTip (QString::fromUtf8 (tooltip.c_str())); + setToolTip (tooltip); } void CSVWidget::PushButton::keyPressEvent (QKeyEvent *event) @@ -57,16 +57,16 @@ void CSVWidget::PushButton::mouseReleaseEvent (QMouseEvent *event) QPushButton::mouseReleaseEvent (event); } -CSVWidget::PushButton::PushButton (const QIcon& icon, Type type, const std::string& tooltip, +CSVWidget::PushButton::PushButton (const QIcon& icon, Type type, const QString& tooltip, QWidget *parent) -: QPushButton (icon, "", parent), mKeepOpen (false), mType (type) +: QPushButton (icon, "", parent), mKeepOpen (false), mType (type), mToolTip (tooltip) { setCheckable (type==Type_Mode); setExtendedToolTip (tooltip); } -CSVWidget::PushButton::PushButton (Type type, const std::string& tooltip, QWidget *parent) -: QPushButton (parent), mKeepOpen (false), mType (type) +CSVWidget::PushButton::PushButton (Type type, const QString& tooltip, QWidget *parent) +: QPushButton (parent), mKeepOpen (false), mType (type), mToolTip (tooltip) { setCheckable (type==Type_Mode); setExtendedToolTip (tooltip); @@ -75,4 +75,9 @@ CSVWidget::PushButton::PushButton (Type type, const std::string& tooltip, QWidge bool CSVWidget::PushButton::hasKeepOpen() const { return mKeepOpen; +} + +QString CSVWidget::PushButton::getBaseToolTip() const +{ + return mToolTip; } \ No newline at end of file diff --git a/apps/opencs/view/widget/pushbutton.hpp b/apps/opencs/view/widget/pushbutton.hpp index 099cba3580..9b90bd0c66 100644 --- a/apps/opencs/view/widget/pushbutton.hpp +++ b/apps/opencs/view/widget/pushbutton.hpp @@ -21,10 +21,11 @@ namespace CSVWidget bool mKeepOpen; Type mType; + QString mToolTip; private: - void setExtendedToolTip (const std::string& text); + void setExtendedToolTip (const QString& text); protected: @@ -37,14 +38,17 @@ namespace CSVWidget public: /// \param push Do not maintain a toggle state - PushButton (const QIcon& icon, Type type, const std::string& tooltip = "", + PushButton (const QIcon& icon, Type type, const QString& tooltip = "", QWidget *parent = 0); /// \param push Do not maintain a toggle state - PushButton (Type type, const std::string& tooltip = "", + PushButton (Type type, const QString& tooltip = "", QWidget *parent = 0); bool hasKeepOpen() const; + + /// Return tooltip used at construction (without any button-specific modifications) + QString getBaseToolTip() const; }; } diff --git a/apps/opencs/view/widget/scenetoolmode.cpp b/apps/opencs/view/widget/scenetoolmode.cpp index 412959c7c4..9a97924a8b 100644 --- a/apps/opencs/view/widget/scenetoolmode.cpp +++ b/apps/opencs/view/widget/scenetoolmode.cpp @@ -8,8 +8,20 @@ #include "scenetoolbar.hpp" #include "pushbutton.hpp" -CSVWidget::SceneToolMode::SceneToolMode (SceneToolbar *parent) -: SceneTool (parent), mButtonSize (parent->getButtonSize()), mIconSize (parent->getIconSize()) +void CSVWidget::SceneToolMode::adjustToolTip (const PushButton *activeMode) +{ + QString toolTip = mToolTip; + + toolTip += "

Currently selected: " + activeMode->getBaseToolTip(); + + toolTip += "

(left click to change mode)"; + + setToolTip (toolTip); +} + +CSVWidget::SceneToolMode::SceneToolMode (SceneToolbar *parent, const QString& toolTip) +: SceneTool (parent), mButtonSize (parent->getButtonSize()), mIconSize (parent->getIconSize()), + mToolTip (toolTip) { mPanel = new QFrame (this, Qt::Popup); @@ -30,7 +42,7 @@ void CSVWidget::SceneToolMode::showPanel (const QPoint& position) } void CSVWidget::SceneToolMode::addButton (const std::string& icon, const std::string& id, - const std::string& tooltip) + const QString& tooltip) { PushButton *button = new PushButton (QIcon (QPixmap (icon.c_str())), PushButton::Type_Mode, tooltip, mPanel); @@ -48,6 +60,7 @@ void CSVWidget::SceneToolMode::addButton (const std::string& icon, const std::st { setIcon (button->icon()); button->setChecked (true); + adjustToolTip (button); } } @@ -66,6 +79,7 @@ void CSVWidget::SceneToolMode::selected() iter2->first->setChecked (iter2==iter); setIcon (iter->first->icon()); + adjustToolTip (iter->first); emit modeChanged (iter->second); } } \ No newline at end of file diff --git a/apps/opencs/view/widget/scenetoolmode.hpp b/apps/opencs/view/widget/scenetoolmode.hpp index 5f18f712f9..92f031fe7e 100644 --- a/apps/opencs/view/widget/scenetoolmode.hpp +++ b/apps/opencs/view/widget/scenetoolmode.hpp @@ -22,15 +22,18 @@ namespace CSVWidget std::map mButtons; // widget, id int mButtonSize; int mIconSize; + QString mToolTip; + + void adjustToolTip (const PushButton *activeMode); public: - SceneToolMode (SceneToolbar *parent); + SceneToolMode (SceneToolbar *parent, const QString& toolTip); virtual void showPanel (const QPoint& position); void addButton (const std::string& icon, const std::string& id, - const std::string& tooltip = ""); + const QString& tooltip = ""); signals: