aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/common
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
commit3565aad630864ecdbe53fdaa501ea708555b3c7c (patch)
treec743e4ad0bad39ebdb2f514c7cc52d34a257ebbe /SQLiteStudio3/guiSQLiteStudio/common
parent1fdc150116cad39aae5c5da407c3312b47a59e3a (diff)
New upstream version 3.4.4+dfsg.upstream/3.4.4+dfsg
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/common')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.cpp6
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/dbcombobox.h5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/extactioncontainer.h22
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/extlineedit.cpp12
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/extlineedit.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.cpp43
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/immediatetooltip.h22
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.cpp77
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/mouseshortcut.h59
11 files changed, 244 insertions, 10 deletions
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 <QString>
@@ -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<T*> ExtActionContainer::getInstances()
{
QList<T*> typedInstances;
T* typedInstance = nullptr;
- for (ExtActionContainer* instance : instances)
+ for (ExtActionContainer*& instance : instances)
{
typedInstance = dynamic_cast<T*>(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 <QEnterEvent>
+#include <QToolTip>
+#include <QWidget>
+#include <QDebug>
+
+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<QEnterEvent*>(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 <QObject>
+
+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 <QMouseEvent>
+#include <QApplication>
+#include <QDebug>
+
+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<QMouseEvent*>(event)->globalPos());
+ return true;
+ }
+
+ if (event->type() == QEvent::Wheel && type == Wheel)
+ {
+ QWheelEvent* wheelEvent = dynamic_cast<QWheelEvent*>(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<QMouseEvent*>(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 <QObject>
+
+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