1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
|
#ifndef EDITOR_H
#define EDITOR_H
#include "db/db.h"
#include "mdichild.h"
#include "common/extactioncontainer.h"
#include "guiSQLiteStudio_global.h"
#include <QWidget>
namespace Ui {
class EditorWindow;
}
class SqlQueryModel;
class QComboBox;
class QActionGroup;
class DbListModel;
class QLabel;
class QLineEdit;
class ExtLineEdit;
class IntValidator;
class FormView;
class SqlQueryItem;
class SqlEditor;
class DbComboBox;
CFG_KEY_LIST(EditorWindow, QObject::tr("SQL editor window"),
CFG_KEY_ENTRY(EXEC_QUERY, Qt::Key_F9, QObject::tr("Execute query"))
CFG_KEY_ENTRY(EXEC_ONE_QUERY, Qt::CTRL + Qt::Key_F9, QObject::tr("Execute single query under cursor"))
CFG_KEY_ENTRY(EXEC_ALL_QUERIES, Qt::SHIFT + Qt::Key_F9, QObject::tr("Execute all queries in editor"))
CFG_KEY_ENTRY(EXPLAIN_QUERY, Qt::Key_F8, QObject::tr("Execute \"%1\" query").arg("EXPLAIN"))
CFG_KEY_ENTRY(PREV_DB, Qt::CTRL + Qt::Key_Up, QObject::tr("Switch current working database to previous on the list"))
CFG_KEY_ENTRY(NEXT_DB, Qt::CTRL + Qt::Key_Down, QObject::tr("Switch current working database to next on the list"))
CFG_KEY_ENTRY(SHOW_NEXT_TAB, Qt::ALT + Qt::Key_Right, QObject::tr("Go to next editor tab"))
CFG_KEY_ENTRY(SHOW_PREV_TAB, Qt::ALT + Qt::Key_Left, QObject::tr("Go to previous editor tab"))
CFG_KEY_ENTRY(FOCUS_RESULTS_BELOW, Qt::ALT + Qt::Key_PageDown, QObject::tr("Move keyboard input focus to the results view below"))
CFG_KEY_ENTRY(FOCUS_EDITOR_ABOVE, Qt::ALT + Qt::Key_PageUp, QObject::tr("Move keyboard input focus to the SQL editor above"))
CFG_KEY_ENTRY(DELETE_SINGLE_HISTORY_SQL, QKeySequence::Delete, QObject::tr("Delete selected SQL history entries"))
)
class GUI_API_EXPORT EditorWindow : public MdiChild
{
Q_OBJECT
public:
enum class ResultsDisplayMode
{
SEPARATE_TAB = 0,
BELOW_QUERY = 1
};
enum Action
{
EXEC_QUERY,
EXEC_ONE_QUERY,
EXEC_ALL_QUERIES,
EXPLAIN_QUERY,
RESULTS_IN_TAB,
RESULTS_BELOW,
CURRENT_DB,
NEXT_DB,
PREV_DB,
SHOW_NEXT_TAB,
SHOW_PREV_TAB,
FOCUS_RESULTS_BELOW,
FOCUS_EDITOR_ABOVE,
CLEAR_HISTORY,
EXPORT_RESULTS,
CREATE_VIEW_FROM_QUERY,
DELETE_SINGLE_HISTORY_SQL
};
Q_ENUM(Action)
enum QueryExecMode
{
DEFAULT,
SINGLE,
ALL
};
enum ToolBar
{
TOOLBAR_MAIN
};
enum class ActionGroup
{
RESULTS_POSITIONING
};
explicit EditorWindow(QWidget *parent = 0);
EditorWindow(const EditorWindow& editor);
~EditorWindow();
static void staticInit();
static void insertAction(ExtActionPrototype* action, ToolBar toolbar = TOOLBAR_MAIN);
static void insertActionBefore(ExtActionPrototype* action, Action beforeAction, ToolBar toolbar = TOOLBAR_MAIN);
static void insertActionAfter(ExtActionPrototype* action, Action afterAction, ToolBar toolbar = TOOLBAR_MAIN);
static void removeAction(ExtActionPrototype* action, ToolBar toolbar = TOOLBAR_MAIN);
QSize sizeHint() const;
QAction* getAction(Action action);
QString getQueryToExecute(QueryExecMode querySelectionMode = DEFAULT);
bool setCurrentDb(Db* db);
void setContents(const QString& sql);
QString getContents() const;
void execute();
QToolBar* getToolBar(int toolbar) const;
SqlEditor* getEditor() const;
bool isUncommitted() const;
QString getQuitUncommittedConfirmMessage() const;
Db* getCurrentDb();
protected:
void changeEvent(QEvent *e);
QVariant saveSession();
bool restoreSession(const QVariant& sessionValue);
Icon* getIconNameForMdiWindow();
QString getTitleForMdiWindow();
private:
static void createStaticActions();
static void loadTabsMode();
void init();
void createActions();
void createDbCombo();
void setupDefShortcuts();
void selectCurrentQuery(bool fallBackToPreviousIfNecessary = false);
void updateShortcutTips();
void setupSqlHistoryMenu();
bool processBindParams(QString& sql, QHash<QString, QVariant>& queryParams);
static const int queryLimitForSmartExecution = 100;
static ResultsDisplayMode resultsDisplayMode;
static QHash<Action,QAction*> staticActions;
static QHash<ActionGroup,QActionGroup*> staticActionGroups;
Ui::EditorWindow *ui = nullptr;
SqlQueryModel* resultsModel = nullptr;
QHash<ActionGroup,QActionGroup*> actionGroups;
DbComboBox* dbCombo = nullptr;
int sqlEditorNum = 1;
qint64 lastQueryHistoryId = 0;
QString lastSuccessfulQuery;
QMenu* sqlHistoryMenu = nullptr;
bool settingSqlContents = false;
private slots:
void execQuery(bool explain = false, QueryExecMode querySelectionMode = DEFAULT);
void execOneQuery();
void execAllQueries();
void explainQuery();
void dbChanged();
void executionSuccessful();
void executionFailed(const QString& errorText);
void storeExecutionInHistory();
void updateResultsDisplayMode();
void prevDb();
void nextDb();
void showNextTab();
void showPrevTab();
void focusResultsBelow();
void focusEditorAbove();
void historyEntrySelected(const QModelIndex& current, const QModelIndex& previous);
void historyEntryActivated(const QModelIndex& current);
void deleteSelectedSqlHistory();
void clearHistory();
void sqlHistoryContextMenuRequested(const QPoint &pos);
void exportResults();
void createViewFromQuery();
void updateState();
void checkTextChangedForSession();
void queryHighlightingConfigChanged(const QVariant& enabled);
public slots:
void refreshValidDbObjects();
};
GUI_API_EXPORT int qHash(EditorWindow::ActionGroup action);
#endif // EDITOR_H
|