This commit is contained in:
寂静的羽夏 2022-09-29 11:52:16 +08:00
parent 2dfd84f4d2
commit dc16cb71b8
10 changed files with 164 additions and 30 deletions

View File

@ -37,7 +37,6 @@ HEADERS += \
dialog/centerwindow.h \
dialog/toolwindow.h \
dialog/toolboxwindow.h \
class/settings.h \
plugin/pluginsystem.h \
plugin/iwingtoolplg.h \
class/settingmanager.h \

View File

@ -1,6 +0,0 @@
#include "settings.h"
Settings::Settings()
{
}

View File

@ -1,11 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
class Settings
{
public:
Settings();
};
#endif // SETTINGS_H

View File

@ -10,6 +10,7 @@
#include <QButtonGroup>
#include <QCloseEvent>
#include <QDesktopServices>
#include <QFormLayout>
#include <QHBoxLayout>
#include <QHeaderView>
#include <QMimeDatabase>
@ -37,7 +38,7 @@ CenterWindow::CenterWindow(DMainWindow *parent) : DMainWindow(parent) {
auto scview = new QScrollArea;
scview->setWidget(w);
auto vlayout = new QVBoxLayout(w);
vlayout->setMargin(20);
auto l = new DLabel(tr("Common"), this);
auto font = this->font();
font.setUnderline(true);
@ -48,18 +49,82 @@ CenterWindow::CenterWindow(DMainWindow *parent) : DMainWindow(parent) {
vlayout->addWidget(l);
vlayout->addSpacing(5);
cbauto = new DCheckBox(tr("AutoStart"), this);
vlayout->setMargin(20);
connect(cbauto, &DCheckBox::toggled, this, [=](bool v) {
});
vlayout->addWidget(cbauto, Qt::AlignTop);
vlayout->addSpacing(10);
l = new DLabel(tr("Shortcut"), this);
l->setFont(font);
vlayout->addWidget(l);
vlayout->addSpacing(5);
auto gw = new QWidget(w);
vlayout->addWidget(gw);
auto flayout = new QFormLayout(gw);
kseqTool = new DKeySequenceEdit(gw);
connect(kseqTool, &DKeySequenceEdit::editingFinished, this,
[=](const QKeySequence &keySequence) {
});
flayout->addRow(tr("ToolBox:"), kseqTool);
auto hlayout = new QHBoxLayout(gw);
cbMod = new DComboBox(gw);
cbMod->addItems({"Ctrl", "Shift", "Alt", "Super"});
cbMod->setCurrentIndex(0);
hlayout->addWidget(cbMod);
cbMouseBtn = new DComboBox(gw);
cbMouseBtn->addItems(
{tr("Left"), tr("Right"), tr("Middle"), tr("XButton1"), tr("XButton2")});
cbMouseBtn->setCurrentIndex(2);
hlayout->addWidget(cbMouseBtn);
flayout->addRow(tr("ToolWin:"), hlayout);
vlayout->addSpacing(10);
l = new DLabel(tr("Config"), this);
l->setFont(font);
vlayout->addWidget(l);
vlayout->addSpacing(5);
auto group = new DButtonBox(this);
QList<DButtonBoxButton *> blist;
auto b = new DButtonBoxButton(tr("Export"), this);
connect(b, &DButtonBoxButton::clicked, this, [=] {
});
blist.append(b);
b = new DButtonBoxButton(tr("Import"), this);
connect(b, &DButtonBoxButton::clicked, this, [=] {
});
blist.append(b);
b = new DButtonBoxButton(tr("Reset"), this);
connect(b, &DButtonBoxButton::clicked, this, [=] {
});
blist.append(b);
group->setButtonList(blist, false);
vlayout->addWidget(group);
vlayout->addSpacing(10);
l = new DLabel(tr("Software"), this);
l->setFont(font);
vlayout->addWidget(l);
vlayout->addSpacing(5);
vlayout->addWidget(new DLabel(QString(tr("%1 , Ver %2 , by WingSummer."))
.arg(qApp->applicationName())
.arg(qApp->applicationVersion())));
vlayout->addStretch();
tabs->addTab(w, tr("General"));
// Hotkeys
w = new QWidget(this);
vlayout = new QVBoxLayout(w);
auto group = new DButtonBox(this);
group = new DButtonBox(this);
vlayout->setMargin(20);
QList<DButtonBoxButton *> blist;
auto b = new DButtonBoxButton(tr("Add"), this);
blist.clear(); // 征用
b = new DButtonBoxButton(tr("Add"), this);
connect(b, &DButtonBoxButton::clicked, this, &CenterWindow::on_addHotkey);
blist.append(b);
b = new DButtonBoxButton(tr("Remove"), this);
@ -137,7 +202,7 @@ CenterWindow::CenterWindow(DMainWindow *parent) : DMainWindow(parent) {
auto tvlayout = new QVBoxLayout;
auto gridsize = 40; // 默认 40 先
auto gw = new QWidget(w);
gw = new QWidget(w);
gw->setFixedSize(gridsize * 3, gridsize * 3);
auto mlayout = new QGridLayout(gw);
mlayout->setMargin(1);
@ -513,9 +578,42 @@ void CenterWindow::enableSelectedHotkeys(bool enable) {
}
}
void CenterWindow::on_editToolWin() {}
void CenterWindow::on_editToolWin() {
auto sels = lstoolwin->selectedItems().count();
if (sels != 1) {
DMessageManager::instance()->sendMessage(this, ProgramIcon,
tr("PleaseSelectOne"));
return;
}
auto index = lstoolwin->currentRow();
ToolEditDialog d(wintoolinfos[index]);
if (d.exec()) {
auto res = d.getResult();
wintoolinfos[index] = res;
auto item = lstoolwin->item(index);
item->setIcon(
Utilities::trimIconFromInfo(plgsys->plugin(res.pluginIndex), res));
item->setText(res.isPlugin ? res.process
: QFileInfo(res.process).fileName());
item->setToolTip(res.process);
}
}
void CenterWindow::on_removeToolWin() {}
void CenterWindow::on_removeToolWin() {
auto sels = lstoolwin->selectionModel()->selectedRows();
QVector<int> nums;
for (auto &item : sels) {
nums.append(item.row());
}
std::sort(nums.begin(), nums.end(), std::greater<int>());
for (auto index : nums) {
wintoolinfos.removeAt(index);
auto item = lstoolwin->takeItem(index);
delete item;
}
}
void CenterWindow::on_clearToolWin() {
lstoolwin->clear();
@ -531,8 +629,19 @@ void CenterWindow::on_addToolWin() {
auto index = lstoolwin->currentRow();
if (index < 0) {
wintoolinfos.append(res);
auto item = new QListWidgetItem(
Utilities::trimIconFromInfo(plgsys->plugin(res.pluginIndex), res),
res.isPlugin ? res.process : QFileInfo(res.process).fileName());
item->setToolTip(res.process);
lstoolwin->addItem(item);
} else {
wintoolinfos.insert(index + 1, res);
auto item = new QListWidgetItem(
Utilities::trimIconFromInfo(plgsys->plugin(res.pluginIndex), res),
res.isPlugin ? res.process : QFileInfo(res.process).fileName());
item->setToolTip(res.process);
lstoolwin->insertItem(index + 1, item);
}
}
}

View File

@ -6,7 +6,9 @@
#include "plugin/pluginsystem.h"
#include "utilities.h"
#include <DCheckBox>
#include <DComboBox>
#include <DDialog>
#include <DKeySequenceEdit>
#include <DListWidget>
#include <DMainWindow>
#include <DMenu>
@ -91,6 +93,9 @@ private:
DIconButton *lbls[9] = {nullptr};
DKeySequenceEdit *kseqTool;
DComboBox *cbMod, *cbMouseBtn;
private:
QMap<Hotkey *, ToolStructInfo> scinfos; // 用于 Hotkeys
QList<Hotkey *> hotkeys; // Hotkeys 方便进行检索

View File

@ -109,12 +109,12 @@ void ShortCutEditDialog::on_accept() {
res.provider = sel->provider();
res.pluginIndex = ps->getSelectedIndex();
} else {
res.process = fcedit->text();
if (res.process.isEmpty()) {
DMessageManager::instance()->sendMessage(this, ProgramIcon,
tr("NoProcessSet"));
return;
}
res.process = fcedit->text();
}
res.params = dledit->text();

View File

@ -12,6 +12,11 @@ class ToolBoxWindow : public DDialog {
public:
ToolBoxWindow(DMainWindow *parent = nullptr);
signals:
void addItem(QListWidgetItem *item, int index = -1); // -1 表示追加
void rmItem(int index); // -1 表示清空
void mvItem(int from, int to);
private:
DListWidget *lstool;
};

View File

@ -81,12 +81,12 @@ void ToolEditDialog::on_accept() {
res.provider = sel->provider();
res.pluginIndex = ps->getSelectedIndex();
} else {
res.process = fcedit->text();
if (res.process.isEmpty()) {
DMessageManager::instance()->sendMessage(this, ProgramIcon,
tr("NoProcessSet"));
return;
}
res.process = fcedit->text();
}
res.params = dledit->text();

View File

@ -49,6 +49,7 @@ int main(int argc, char *argv[]) {
a.setOrganizationName("WingCloud");
a.setApplicationName(QObject::tr("WingTool"));
a.setApplicationVersion("1.0.0");
a.setApplicationLicense("AGPL-3.0");
QIcon picon = ProgramIcon;
a.setProductIcon(picon);
@ -128,8 +129,10 @@ int main(int argc, char *argv[]) {
QObject::connect(&systray, &QSystemTrayIcon::activated,
[&w](QSystemTrayIcon::ActivationReason reason) {
if (reason == QSystemTrayIcon::ActivationReason::Trigger)
if (reason == QSystemTrayIcon::ActivationReason::Trigger) {
w.show(CenterWindow::TabPage::General);
Utilities::activeWindowFromDock(w.winId());
}
});
Dtk::Widget::moveToCenter(&w);

View File

@ -4,7 +4,9 @@
#include "plugin/iwingtoolplg.h"
#include <QIcon>
#include <QKeySequence>
#include <QMimeDatabase>
#include <QString>
#include <QtDBus>
#define ProgramIcon QIcon(":/images/logo.svg")
#define ICONRES(name) QIcon(":/images/" name ".png")
@ -28,14 +30,42 @@ struct ToolStructInfo {
Q_DECLARE_METATYPE(ToolStructInfo)
class PluginSystem;
class Utilities {
public:
static bool activeWindowFromDock(quintptr winId) {
bool bRet = true;
// new interface use application as id
QDBusInterface dockDbusInterface("com.deepin.dde.daemon.Dock",
"/com/deepin/dde/daemon/Dock",
"com.deepin.dde.daemon.Dock");
QDBusReply<void> reply = dockDbusInterface.call("ActivateWindow", winId);
if (!reply.isValid()) {
qDebug() << "call com.deepin.dde.daemon.Dock failed" << reply.error();
bRet = false;
}
return bRet;
}
static QIcon processPluginIcon(IWingToolPlg *plg) {
if (plg->pluginIcon().isNull()) {
return ICONRES("plugin");
}
return plg->pluginIcon();
}
static QIcon trimIconFromInfo(IWingToolPlg *plg, ToolStructInfo &info) {
if (info.isPlugin) {
if (plg == nullptr)
return QIcon();
return plg->pluginIcon();
} else {
QMimeDatabase db;
auto t = db.mimeTypeForFile(info.process);
return QIcon::fromTheme(t.iconName(), QIcon(t.iconName()));
}
}
};
#endif // UTILIES_H