From 3565aad630864ecdbe53fdaa501ea708555b3c7c Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Sun, 30 Apr 2023 18:30:36 -0400 Subject: New upstream version 3.4.4+dfsg. --- .../guiSQLiteStudio/common/datawidgetmapper.h | 4 +- .../guiSQLiteStudio/common/dbcombobox.cpp | 6 ++ SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.h | 5 ++ .../guiSQLiteStudio/common/extactioncontainer.cpp | 2 +- .../guiSQLiteStudio/common/extactioncontainer.h | 22 +++++-- .../guiSQLiteStudio/common/extlineedit.cpp | 12 +++- SQLiteStudio3/guiSQLiteStudio/common/extlineedit.h | 2 + .../guiSQLiteStudio/common/immediatetooltip.cpp | 43 ++++++++++++ .../guiSQLiteStudio/common/immediatetooltip.h | 22 +++++++ .../guiSQLiteStudio/common/mouseshortcut.cpp | 77 ++++++++++++++++++++++ .../guiSQLiteStudio/common/mouseshortcut.h | 59 +++++++++++++++++ 11 files changed, 244 insertions(+), 10 deletions(-) create mode 100644 SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.cpp create mode 100644 SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.h create mode 100644 SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp create mode 100644 SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.h (limited to 'SQLiteStudio3/guiSQLiteStudio/common') diff --git a/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h b/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h index 8ee4636..2174f54 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h +++ b/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h @@ -27,8 +27,8 @@ class DataWidgetMapper : public QObject private: struct MappingEntry { - QWidget* widget = nullptr; - int columnIndex = 0; + QWidget* widget = nullptr; + int columnIndex = 0; QString propertyName; }; diff --git a/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.cpp b/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.cpp index 303a37a..273aab3 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.cpp @@ -8,6 +8,7 @@ DbComboBox::DbComboBox(QWidget* parent) : QComboBox(parent) dbComboModel->setCombo(this); setModel(dbComboModel); setEditable(false); + connect(dbComboModel, SIGNAL(listCleared()), this, SLOT(handleListCleared())); } DbListModel* DbComboBox::getModel() const @@ -24,3 +25,8 @@ Db* DbComboBox::currentDb() const { return dbComboModel->getDb(currentIndex()); } + +void DbComboBox::handleListCleared() +{ + emit currentTextChanged(QString()); +} diff --git a/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.h b/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.h index 39814a6..602c20e 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.h +++ b/SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.h @@ -9,6 +9,8 @@ class Db; class DbComboBox : public QComboBox { + Q_OBJECT + public: explicit DbComboBox(QWidget* parent = nullptr); @@ -18,6 +20,9 @@ class DbComboBox : public QComboBox private: DbListModel* dbComboModel = nullptr; + + private slots: + void handleListCleared(); }; #endif // DBCOMBOBOX_H diff --git a/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.cpp b/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.cpp index 1203582..bb49985 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.cpp @@ -129,7 +129,7 @@ void ExtActionContainer::createAction(int action, QAction* qAction, const QObjec qAction->setParent(owner); actionMap[action] = qAction; - QObject::connect(qAction, SIGNAL(triggered()), receiver, slot); + QObject::connect(qAction, SIGNAL(triggered(bool)), receiver, slot); container->addAction(qAction); } diff --git a/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.h b/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.h index 159d4e5..dbec385 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.h +++ b/SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.h @@ -1,7 +1,6 @@ #ifndef extactionCONTAINER_H #define extactionCONTAINER_H -#include "iconmanager.h" #include "config_builder.h" #include "extactionprototype.h" #include @@ -18,6 +17,7 @@ class QActionGroup; class QToolBar; class QSignalMapper; class QMenu; +class Icon; #define CFG_SHORTCUTS_METANAME "Shortcuts" @@ -58,7 +58,21 @@ class QMenu; } \ } -#define GET_SHORTCUTS(Type) ExtActionContainer::getAllShortcutSequences(Cfg::getShortcuts##Type##Instance()->ShortcutsCategory##Type) +/** + * @def Finds shortcut config category instance. + * Finds CfgCategory containing CfgEntry instances of all shortcuts defined for class \arg Type. + * For example: GET_SHORTCUTS_CATEGORY(EditorWindow)->getTitle() + * @return CfgCategory instance of a shortcuts configuration used for specified class. + */ +#define GET_SHORTCUTS_CATEGORY(Type) Cfg::getShortcuts##Type##Instance()->ShortcutsCategory##Type + +/** + * @def Finds shortcut config entry instance. + * Finds CfgEntry used to store shortcut for enumerated action with \arg ActionName in the class \arg Type. + * For example: GET_SHORTCUT_ENTRY(EditorWindow, EXEC_QUERY)->get().toString() + * @return CfgEntry instance of a shortcut config entry. + */ +#define GET_SHORTCUT_ENTRY(Type, ActionName) Cfg::getShortcuts##Type##Instance()->ShortcutsCategory##Type.getEntryByName(#ActionName) class GUI_API_EXPORT ExtActionContainer { @@ -224,7 +238,7 @@ void ExtActionContainer::removeAction(ExtActionPrototype* action, int toolbar) return; ActionDetails* dets = nullptr; - for (ActionDetails* d : extraActions[clsName][toolbar]) + for (ActionDetails*& d : extraActions[clsName][toolbar]) { if (d->action == action) { @@ -248,7 +262,7 @@ QList ExtActionContainer::getInstances() { QList typedInstances; T* typedInstance = nullptr; - for (ExtActionContainer* instance : instances) + for (ExtActionContainer*& instance : instances) { typedInstance = dynamic_cast(instance); if (typedInstance) diff --git a/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.cpp b/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.cpp index 2ac6531..325e93c 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.cpp @@ -56,15 +56,21 @@ void ExtLineEdit::setClearButtonEnabled(bool enable) return; } connect(clearAction, SIGNAL(triggered()), this, SLOT(checkForValueErased())); + connect(this, SIGNAL(textEdited(QString)), this, SLOT(checkForValueErased(QString))); } } void ExtLineEdit::checkForValueErased() { - if (text().isEmpty()) - return; + nextClearingIsFromButton = true; +} + +void ExtLineEdit::checkForValueErased(const QString& text) +{ + if (nextClearingIsFromButton && text.isEmpty()) + emit valueErased(); - emit valueErased(); + nextClearingIsFromButton = false; } bool ExtLineEdit::getExpanding() const diff --git a/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.h b/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.h index df2eaf6..81f189a 100644 --- a/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.h +++ b/SQLiteStudio3/guiSQLiteStudio/common/extlineedit.h @@ -34,10 +34,12 @@ class GUI_API_EXPORT ExtLineEdit : public QLineEdit bool expanding = false; int expandingMinWidth = 0; int expandingMaxWidth = -1; + bool nextClearingIsFromButton = false; private slots: void handleTextChanged(); void checkForValueErased(); + void checkForValueErased(const QString &text); signals: void valueErased(); diff --git a/SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.cpp b/SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.cpp new file mode 100644 index 0000000..45531be --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.cpp @@ -0,0 +1,43 @@ +#include "immediatetooltip.h" +#include "common/unused.h" +#include +#include +#include +#include + +ImmediateTooltip::ImmediateTooltip(QWidget* parent) + : QObject(parent) +{ + parent->setMouseTracking(true); + parent->installEventFilter(this); +} + +bool ImmediateTooltip::eventFilter(QObject* obj, QEvent* event) +{ + UNUSED(obj); + switch (event->type()) + { + case QEvent::Enter: + { + QEnterEvent* e = dynamic_cast(event); + QToolTip::showText(e->globalPos(), toolTip); + break; + } + case QEvent::Leave: + QToolTip::hideText(); + break; + default: + break; + } + return false; +} + +const QString& ImmediateTooltip::getToolTip() const +{ + return toolTip; +} + +void ImmediateTooltip::setToolTip(const QString& newToolTip) +{ + toolTip = newToolTip; +} diff --git a/SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.h b/SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.h new file mode 100644 index 0000000..27ffacc --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.h @@ -0,0 +1,22 @@ +#ifndef IMMEDIATETOOLTIP_H +#define IMMEDIATETOOLTIP_H + +#include + +class ImmediateTooltip : public QObject +{ + Q_OBJECT + public: + explicit ImmediateTooltip(QWidget *parent = nullptr); + + const QString& getToolTip() const; + void setToolTip(const QString& newToolTip); + + protected: + bool eventFilter(QObject *obj, QEvent *event) override; + + private: + QString toolTip; +}; + +#endif // IMMEDIATETOOLTIP_H diff --git a/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp b/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp new file mode 100644 index 0000000..51fb524 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp @@ -0,0 +1,77 @@ +#include "mouseshortcut.h" +#include +#include +#include + +MouseShortcut::MouseShortcut(ClickType type, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QObject* parent) + : QObject(parent), type(type), buttons(buttons), modifiers(modifiers) +{ +} + +MouseShortcut* MouseShortcut::forButton(ClickType type, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QObject* receiver, const char* slot, QObject* parent) +{ + MouseShortcut* instance = new MouseShortcut(type, buttons, modifiers, parent); + connect(instance, SIGNAL(activated(QPoint)), receiver, slot); + parent->installEventFilter(instance); + return instance; +} + +MouseShortcut* MouseShortcut::forWheel(Qt::KeyboardModifiers modifiers, QObject* parent) +{ + return new MouseShortcut(Wheel, Qt::MouseButtons(), modifiers, parent); +} + +MouseShortcut* MouseShortcut::forWheel(Qt::KeyboardModifiers modifiers, QObject* parent, const char* slot) +{ + MouseShortcut* instance = new MouseShortcut(Wheel, Qt::MouseButtons(), modifiers, parent); + connect(instance, SIGNAL(wheelActivated(int)), parent, slot); + parent->installEventFilter(instance); + return instance; +} + +MouseShortcut* MouseShortcut::forWheel(Qt::KeyboardModifiers modifiers, QObject* receiver, const char* slot, QObject* parent) +{ + MouseShortcut* instance = new MouseShortcut(Wheel, Qt::MouseButtons(), modifiers, parent); + connect(instance, SIGNAL(wheelActivated(int)), receiver, slot); + parent->installEventFilter(instance); + return instance; +} + +void MouseShortcut::enableDebug() +{ + debug = true; +} + +bool MouseShortcut::eventFilter(QObject* object, QEvent* event) +{ + if (debug && event->type() != QEvent::Paint) + qDebug() << event; + + if ((event->type() == QEvent::MouseButtonPress && type == SingleClick && attributesMatch(event)) || + (event->type() == QEvent::MouseButtonDblClick && type == DoubleClick && attributesMatch(event))) + { + emit activated(dynamic_cast(event)->globalPos()); + return true; + } + + if (event->type() == QEvent::Wheel && type == Wheel) + { + QWheelEvent* wheelEvent = dynamic_cast(event); + if (modifiers == wheelEvent->modifiers()) + { + emit wheelActivated(wheelEvent->angleDelta().y()); + return true; + } + } + + return QObject::eventFilter(object, event); +} + +bool MouseShortcut::attributesMatch(QEvent* event) +{ + QMouseEvent* mouseEvent = dynamic_cast(event); + if (!mouseEvent) + return false; + + return (buttons.testFlag(mouseEvent->button())) && (modifiers == mouseEvent->modifiers()); +} diff --git a/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.h b/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.h new file mode 100644 index 0000000..e400a24 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.h @@ -0,0 +1,59 @@ +#ifndef MOUSESHORTCUT_H +#define MOUSESHORTCUT_H + +#include + +class MouseShortcut : public QObject +{ + Q_OBJECT + + public: + enum ClickType + { + SingleClick, + DoubleClick, + Wheel + }; + + static MouseShortcut* forButton(MouseShortcut::ClickType type, + Qt::MouseButtons buttons, + Qt::KeyboardModifiers modifiers, + QObject* receiver, + const char* slot, + QObject *parent); + + static MouseShortcut* forWheel(Qt::KeyboardModifiers modifiers, + QObject *parent = 0); + + static MouseShortcut* forWheel(Qt::KeyboardModifiers modifiers, + QObject *parent, + const char *slot); + static MouseShortcut* forWheel(Qt::KeyboardModifiers modifiers, + QObject* receiver, + const char* slot, + QObject* parent); + + void enableDebug(); + + protected: + MouseShortcut(MouseShortcut::ClickType type, + Qt::MouseButtons buttons, + Qt::KeyboardModifiers modifiers, + QObject *parent = 0); + + bool eventFilter(QObject *object, QEvent *event); + + private: + bool attributesMatch(QEvent* event); + + MouseShortcut::ClickType type; + Qt::MouseButtons buttons; + Qt::KeyboardModifiers modifiers; + bool debug = false; + + signals: + void activated(const QPoint& pos); + void wheelActivated(int delta); +}; + +#endif // MOUSESHORTCUT_H -- cgit v1.2.3