work save: implement shortcut configurations
This commit is contained in:
parent
f75c9f26cf
commit
d88bab1e20
1
NEWS.md
1
NEWS.md
|
@ -23,6 +23,7 @@ Version 0.6.0
|
|||
- fix: add mutex lock to prevent rare conditions when editor is modifying and the content is read
|
||||
- fix: makefile generated for static / dynamic library projects not right
|
||||
- fix: editors disappeared when close/close all
|
||||
- implement: config shortcuts
|
||||
|
||||
Version 0.5.0
|
||||
- enhancement: support C++ using type alias;
|
||||
|
|
|
@ -49,6 +49,7 @@ SOURCES += \
|
|||
settingsdialog/editorsnippetwidget.cpp \
|
||||
settingsdialog/editortooltipswidget.cpp \
|
||||
settingsdialog/environmentfileassociationwidget.cpp \
|
||||
settingsdialog/environmentshortcutwidget.cpp \
|
||||
settingsdialog/formattergeneralwidget.cpp \
|
||||
settingsdialog/projectcompileparamaterswidget.cpp \
|
||||
settingsdialog/projectcompilerwidget.cpp \
|
||||
|
@ -153,6 +154,7 @@ HEADERS += \
|
|||
settingsdialog/editorsnippetwidget.h \
|
||||
settingsdialog/editortooltipswidget.h \
|
||||
settingsdialog/environmentfileassociationwidget.h \
|
||||
settingsdialog/environmentshortcutwidget.h \
|
||||
settingsdialog/formattergeneralwidget.h \
|
||||
settingsdialog/projectcompileparamaterswidget.h \
|
||||
settingsdialog/projectcompilerwidget.h \
|
||||
|
@ -230,6 +232,7 @@ FORMS += \
|
|||
settingsdialog/editorsnippetwidget.ui \
|
||||
settingsdialog/editortooltipswidget.ui \
|
||||
settingsdialog/environmentfileassociationwidget.ui \
|
||||
settingsdialog/environmentshortcutwidget.ui \
|
||||
settingsdialog/formattergeneralwidget.ui \
|
||||
settingsdialog/projectcompileparamaterswidget.ui \
|
||||
settingsdialog/projectcompilerwidget.ui \
|
||||
|
|
|
@ -4052,6 +4052,11 @@ void MainWindow::showSearchReplacePanel(bool show)
|
|||
mSearchResultTreeModel->setSelectable(show);
|
||||
}
|
||||
|
||||
Ui::MainWindow *MainWindow::mainWidget() const
|
||||
{
|
||||
return ui;
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_btnReplace_clicked()
|
||||
{
|
||||
|
|
|
@ -97,6 +97,8 @@ public:
|
|||
|
||||
QPlainTextEdit* txtLocals();
|
||||
|
||||
Ui::MainWindow* mainWidget() const;
|
||||
|
||||
CPUDialog *cpuDialog() const;
|
||||
|
||||
Debugger *debugger() const;
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
#include "environmentshortcutwidget.h"
|
||||
#include "ui_environmentshortcutwidget.h"
|
||||
#include "../mainwindow.h"
|
||||
#include "../ui_mainwindow.h"
|
||||
|
||||
EnvironmentShortcutWidget::EnvironmentShortcutWidget(const QString& name, const QString& group, QWidget *parent) :
|
||||
SettingsWidget(name,group,parent),
|
||||
ui(new Ui::EnvironmentShortcutWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->tblShortcut->setModel(&mModel);
|
||||
}
|
||||
|
||||
EnvironmentShortcutWidget::~EnvironmentShortcutWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void EnvironmentShortcutWidget::doLoad()
|
||||
{
|
||||
mModel.reload();
|
||||
}
|
||||
|
||||
void EnvironmentShortcutWidget::doSave()
|
||||
{
|
||||
foreach (const PEnvironmentShortCut& shortcut, mModel.shortcuts()) {
|
||||
shortcut->action->setShortcut(QKeySequence::fromString(shortcut->shortcut));
|
||||
shortcut->shortcut = shortcut->action->shortcut().toString();
|
||||
}
|
||||
}
|
||||
|
||||
EnvironmentShortcutModel::EnvironmentShortcutModel(QObject *parent):QAbstractTableModel(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void EnvironmentShortcutModel::reload()
|
||||
{
|
||||
beginResetModel();
|
||||
mShortcuts.clear();
|
||||
QList<QAction*> actions = pMainWindow->findChildren<QAction*>(QString(),Qt::FindDirectChildrenOnly);
|
||||
QList<QMenu*> menus = pMainWindow->mainWidget()->menubar->findChildren<QMenu*>();
|
||||
foreach( const QMenu* menu, menus) {
|
||||
loadShortCutsOfMenu(menu, actions);
|
||||
}
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
int EnvironmentShortcutModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
return mShortcuts.count();
|
||||
}
|
||||
|
||||
int EnvironmentShortcutModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
QVariant EnvironmentShortcutModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid()) {
|
||||
return QVariant();
|
||||
}
|
||||
if (role==Qt::DisplayRole || role == Qt::EditRole) {
|
||||
PEnvironmentShortCut item = mShortcuts[index.row()];
|
||||
switch( index.column()) {
|
||||
case 0:
|
||||
return item->fullPath;
|
||||
case 1:
|
||||
return item->shortcut;
|
||||
}
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
bool EnvironmentShortcutModel::setData(const QModelIndex &index, const QVariant &value, int role)
|
||||
{
|
||||
if (!index.isValid()) {
|
||||
return false;
|
||||
}
|
||||
if (role == Qt::EditRole) {
|
||||
if (index.column()!=1)
|
||||
return false;
|
||||
PEnvironmentShortCut item = mShortcuts[index.row()];
|
||||
item->shortcut = value.toString();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QVariant EnvironmentShortcutModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
if (orientation == Qt::Horizontal) {
|
||||
if (role == Qt::DisplayRole) {
|
||||
switch(section) {
|
||||
case 0:
|
||||
return tr("Function");
|
||||
case 1:
|
||||
return tr("Shortcut");
|
||||
}
|
||||
}
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
Qt::ItemFlags EnvironmentShortcutModel::flags(const QModelIndex &index) const
|
||||
{
|
||||
Qt::ItemFlags flags = Qt::ItemIsEnabled;
|
||||
if (index.isValid() && index.column()==1) {
|
||||
flags.setFlag(Qt::ItemIsEditable);
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
const QList<PEnvironmentShortCut> &EnvironmentShortcutModel::shortcuts() const
|
||||
{
|
||||
return mShortcuts;
|
||||
}
|
||||
|
||||
void EnvironmentShortcutModel::loadShortCutsOfMenu(const QMenu *menu, QList<QAction *> &globalActions)
|
||||
{
|
||||
QList<QAction*> actions = menu->actions();
|
||||
foreach (QAction* action,actions) {
|
||||
PEnvironmentShortCut item = std::make_shared<EnvironmentShortCut>();
|
||||
item->name = action->objectName();
|
||||
item->fullPath = QString("%1 > %2").arg(menu->title(),action->text());
|
||||
item->action = action;
|
||||
item->shortcut = action->shortcut().toString().trimmed();
|
||||
globalActions.removeAll(action);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
#ifndef ENVIRONMENTSHORTCUTWIDGET_H
|
||||
#define ENVIRONMENTSHORTCUTWIDGET_H
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include <QWidget>
|
||||
#include "settingswidget.h"
|
||||
|
||||
namespace Ui {
|
||||
class EnvironmentShortcutWidget;
|
||||
}
|
||||
|
||||
struct EnvironmentShortCut {
|
||||
QString name;
|
||||
QString fullPath;
|
||||
QString shortcut;
|
||||
QAction* action;
|
||||
};
|
||||
|
||||
using PEnvironmentShortCut = std::shared_ptr<EnvironmentShortCut>;
|
||||
class QMenu;
|
||||
class EnvironmentShortcutModel: public QAbstractTableModel {
|
||||
// QAbstractItemModel interface
|
||||
public:
|
||||
explicit EnvironmentShortcutModel(QObject* parent=nullptr);
|
||||
void reload();
|
||||
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
int columnCount(const QModelIndex &parent) const override;
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const override;
|
||||
const QList<PEnvironmentShortCut> &shortcuts() const;
|
||||
private:
|
||||
void loadShortCutsOfMenu(const QMenu * menu, QList<QAction*>& globalActions);
|
||||
private:
|
||||
QList<PEnvironmentShortCut> mShortcuts;
|
||||
};
|
||||
|
||||
class EnvironmentShortcutWidget : public SettingsWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit EnvironmentShortcutWidget(const QString& name, const QString& group, QWidget *parent = nullptr);
|
||||
~EnvironmentShortcutWidget();
|
||||
|
||||
private:
|
||||
Ui::EnvironmentShortcutWidget *ui;
|
||||
|
||||
// SettingsWidget interface
|
||||
protected:
|
||||
void doLoad() override;
|
||||
void doSave() override;
|
||||
private:
|
||||
EnvironmentShortcutModel mModel;
|
||||
};
|
||||
|
||||
#endif // ENVIRONMENTSHORTCUTWIDGET_H
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>EnvironmentShortcutWidget</class>
|
||||
<widget class="QWidget" name="EnvironmentShortcutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QTableView" name="tblShortcut">
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in New Issue