From 7e19f91b87a6fcc2970d20af2385dc831899a658 Mon Sep 17 00:00:00 2001 From: HeXiaodong Date: Fri, 10 Nov 2023 10:24:46 +0800 Subject: [PATCH 1/3] feat: Change the UI to DTK style Change the UI to DTK style. Log: Replace Qt style to DTK style. --- CMakeLists.txt | 3 + src/app/CMakeLists.txt | 1 + src/app/main.cpp | 15 +- src/common/CMakeLists.txt | 1 + src/common/widget/elidedlabel.cpp | 6 +- src/common/widget/elidedlabel.h | 4 +- src/framework/CMakeLists.txt | 1 + src/plugins/core/CMakeLists.txt | 3 +- src/plugins/core/core.cpp | 8 - src/plugins/core/mainframe/aboutdialog.cpp | 38 +++-- src/plugins/core/mainframe/aboutdialog.h | 6 +- src/plugins/core/mainframe/plugindialog.cpp | 69 ++++---- src/plugins/core/mainframe/plugindialog.h | 65 ++++---- src/plugins/core/mainframe/progressbar.cpp | 4 +- src/plugins/core/mainframe/progressbar.h | 4 +- src/plugins/core/mainframe/windowkeeper.cpp | 156 +++++++++--------- src/plugins/core/mainframe/windowkeeper.h | 30 ++-- .../core/mainframe/windowstatusbar.cpp | 4 +- src/plugins/core/mainframe/windowstatusbar.h | 4 +- src/plugins/core/mainframe/windowtheme.cpp | 19 --- src/plugins/core/mainframe/windowtheme.h | 17 -- 21 files changed, 233 insertions(+), 225 deletions(-) delete mode 100644 src/plugins/core/mainframe/windowtheme.cpp delete mode 100644 src/plugins/core/mainframe/windowtheme.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 53906452e..047526202 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,6 +88,9 @@ endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wl,--as-need -fPIE") +find_package(Dtk COMPONENTS Widget REQUIRED) +include_directories(${PROJECT_NAME} PRIVATE ${DtkWidget_INCLUDE_DIRS}) + # Use Qt modules no WebEngineWidgets WebChannel set(QtFindModules Core Gui Widgets Concurrent Network DBus) foreach(QtModule ${QtFindModules}) diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 195f7fbb5..5aa72d383 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -8,6 +8,7 @@ target_link_libraries( common ${QtUseModules} ${PkgUseModule} + ${DtkWidget_LIBRARIES} ) install(TARGETS ${PROJECT_NAME} DESTINATION ${RUNTIME_INSTALL_RPEFIX}) diff --git a/src/app/main.cpp b/src/app/main.cpp index 750803eb8..9925a7713 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -6,9 +6,14 @@ #include #include + +#include + #include #include +DWIDGET_USE_NAMESPACE + static const char *const IID = "org.deepin.plugin.unioncode"; static const char *const CORE_PLUGIN = "plugin-core"; static const char *const CORE_NAME = "libplugin-core.so"; @@ -94,9 +99,12 @@ void voidMessageOutput(QtMsgType type, const QMessageLogContext &context, const int main(int argc, char *argv[]) { - QApplication a(argc, argv); - QApplication::setStyle(QStyleFactory::create("Fusion")); + QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + DApplication a(argc, argv); + a.setOrganizationName("deepin"); + a.setQuitOnLastWindowClosed(false); CommandParser::instance().process(); // TODO(Any): put to command processor @@ -118,8 +126,5 @@ int main(int argc, char *argv[]) abort(); } - QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); - QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); - return a.exec(); } diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index c6bc7eb15..066b0bb3b 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -134,6 +134,7 @@ target_link_libraries( ${PROJECT_NAME} unioncode-jsonrpcclient Qt5::Network + ${DtkWidget_LIBRARIES} ) install(TARGETS ${PROJECT_NAME} DESTINATION ${LIBRARY_INSTALL_PREFIX}) diff --git a/src/common/widget/elidedlabel.cpp b/src/common/widget/elidedlabel.cpp index b14354a1a..6ce9b8f22 100644 --- a/src/common/widget/elidedlabel.cpp +++ b/src/common/widget/elidedlabel.cpp @@ -13,7 +13,7 @@ class ElidedLabelPrivate }; ElidedLabel::ElidedLabel(QWidget *parent) - : QLabel (parent) + : DLabel (parent) , d (new ElidedLabelPrivate) { @@ -38,8 +38,8 @@ void ElidedLabel::setText(const QString &text) } else { resultText = d->sourceText; } - QLabel::setText(resultText); - QLabel::setToolTip(text); + DLabel::setText(resultText); + DLabel::setToolTip(text); } QString ElidedLabel::text() diff --git a/src/common/widget/elidedlabel.h b/src/common/widget/elidedlabel.h index 164b543bc..a59d05a6e 100644 --- a/src/common/widget/elidedlabel.h +++ b/src/common/widget/elidedlabel.h @@ -5,10 +5,10 @@ #ifndef ELIDEDLABEL_H #define ELIDEDLABEL_H -#include +#include class ElidedLabelPrivate; -class ElidedLabel : public QLabel +class ElidedLabel : public DTK_WIDGET_NAMESPACE::DLabel { Q_OBJECT ElidedLabelPrivate *const d; diff --git a/src/framework/CMakeLists.txt b/src/framework/CMakeLists.txt index 72e302690..49dbce95b 100644 --- a/src/framework/CMakeLists.txt +++ b/src/framework/CMakeLists.txt @@ -87,6 +87,7 @@ target_link_libraries( stdc++fs ${QtUseModules} ${PkgUseModules} + ${DtkWidget_LIBRARIES} ) target_include_directories(${PROJECT_NAME} diff --git a/src/plugins/core/CMakeLists.txt b/src/plugins/core/CMakeLists.txt index 8b842d0cf..dd414641b 100644 --- a/src/plugins/core/CMakeLists.txt +++ b/src/plugins/core/CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.0.2) project(plugin-core) set(CXX_CPP - mainframe/windowtheme.cpp mainframe/windowkeeper.cpp mainframe/windowstatusbar.cpp mainframe/progressbar.cpp @@ -15,7 +14,6 @@ set(CXX_CPP ) set(CXX_H - mainframe/windowtheme.h mainframe/windowkeeper.h mainframe/windowstatusbar.h mainframe/progressbar.h @@ -42,6 +40,7 @@ target_link_libraries(${PROJECT_NAME} services ${QtUseModules} ${PkgUserModules} + ${DtkWidget_LIBRARIES} ) install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${PLUGIN_INSTALL_PATH}) diff --git a/src/plugins/core/core.cpp b/src/plugins/core/core.cpp index 1de7ab121..764736fba 100644 --- a/src/plugins/core/core.cpp +++ b/src/plugins/core/core.cpp @@ -4,18 +4,11 @@ #include "core.h" #include "mainframe/windowkeeper.h" -#include "mainframe/windowtheme.h" #include "services/window/windowservice.h" #include #include "common/common.h" -#include -#include -#include -#include -#include - using namespace dpfservice; void Core::initialize() @@ -48,7 +41,6 @@ bool Core::start() } WindowKeeper::instace(); - WindowTheme::setTheme(":/dark.css"); QObject::connect(&dpf::Listener::instance(), &dpf::Listener::pluginsStarted, [=] { ActionManager::getInstance()->readUserSetting(); diff --git a/src/plugins/core/mainframe/aboutdialog.cpp b/src/plugins/core/mainframe/aboutdialog.cpp index 1cc7eea2a..2726a70d6 100644 --- a/src/plugins/core/mainframe/aboutdialog.cpp +++ b/src/plugins/core/mainframe/aboutdialog.cpp @@ -5,17 +5,23 @@ #include "aboutdialog.h" #include "common/common.h" +#include +#include +#include +#include +#include + #include -#include -#include #include #include #include +DWIDGET_USE_NAMESPACE + const QString ICON_LOGO_128PX = ":/core/images/unioncode@128.png"; -AboutDialog::AboutDialog(QDialog *parent) - : QDialog(parent) +AboutDialog::AboutDialog(QWidget *parent) + : DAbstractDialog(parent) { setupUi(); } @@ -27,9 +33,13 @@ AboutDialog::~AboutDialog() void AboutDialog::setupUi() { - setWindowTitle(tr("About Deepin Union Code")); + DTitlebar *titleBar = new DTitlebar(); + titleBar = new DTitlebar(); + titleBar->setMenuVisible(false); + titleBar->setTitle(QString(tr("About Deepin Union Code"))); - QLabel *logoLabel = new QLabel; + DLabel *logoLabel = new DLabel(this); + logoLabel->setText("aaa"); logoLabel->setPixmap(QPixmap(ICON_LOGO_128PX)); QString buildDateInfo = tr("
Built on %1 %2 in %3
") @@ -49,23 +59,27 @@ void AboutDialog::setupUi() buildDateInfo, QString::number(QDateTime::currentDateTime().date().year())); - QLabel *copyRightLabel = new QLabel(description); + DLabel *copyRightLabel = new DLabel(description); copyRightLabel->setWordWrap(true); copyRightLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); - connect(copyRightLabel, &QLabel::linkActivated, this, &AboutDialog::handleLinkActivated); + connect(copyRightLabel, &DLabel::linkActivated, this, &AboutDialog::handleLinkActivated); QHBoxLayout *layoutButtons = new QHBoxLayout(); - QPushButton *closeButton = new QPushButton(QPushButton::tr("Close")); - connect(closeButton , &QPushButton::clicked, this, &QDialog::reject); + DPushButton *closeButton = new DPushButton(DPushButton::tr("Close")); + connect(closeButton , &DPushButton::clicked, this, &DAbstractDialog::reject); layoutButtons->addStretch(); layoutButtons->addWidget(closeButton); auto vLayout = new QVBoxLayout(this); + vLayout->setContentsMargins(0, 0, 0, 0); + vLayout->setSpacing(0); + auto detailLayout = new QGridLayout(this); detailLayout->setSizeConstraint(QLayout::SetFixedSize); detailLayout->addWidget(logoLabel , 1, 0, 1, 1); detailLayout->addWidget(copyRightLabel, 0, 4, 4, 5); detailLayout->addLayout(layoutButtons, 4, 4, 1, 5); + vLayout->addWidget(titleBar); vLayout->addLayout(detailLayout); } @@ -74,7 +88,7 @@ void AboutDialog::handleLinkActivated(const QString& link) if (link == "opensourcesoftware" && !bExpand) { QFile file("/usr/share/doc/deepin-unioncode/copyright"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextEdit* textEdit = new QTextEdit(this); + DTextEdit* textEdit = new DTextEdit(this); layout()->addWidget(textEdit); QTextStream stream(&file); @@ -83,7 +97,7 @@ void AboutDialog::handleLinkActivated(const QString& link) setFixedHeight(height() * 2); bExpand = true; } else { - QMessageBox::critical(this, tr("Error"), tr("Failed to open the file.")); + DMessageBox::critical(this, tr("Error"), tr("Failed to open the file.")); } } else { QDesktopServices::openUrl(QUrl(link)); diff --git a/src/plugins/core/mainframe/aboutdialog.h b/src/plugins/core/mainframe/aboutdialog.h index 2ddc255b0..42a236499 100644 --- a/src/plugins/core/mainframe/aboutdialog.h +++ b/src/plugins/core/mainframe/aboutdialog.h @@ -5,13 +5,13 @@ #ifndef ABOUTDIALOG_H #define ABOUTDIALOG_H -#include +#include -class AboutDialog : public QDialog +class AboutDialog : public DTK_WIDGET_NAMESPACE::DAbstractDialog { Q_OBJECT public: - explicit AboutDialog(QDialog *parent = nullptr); + explicit AboutDialog(QWidget *parent = nullptr); virtual ~AboutDialog(); signals: diff --git a/src/plugins/core/mainframe/plugindialog.cpp b/src/plugins/core/mainframe/plugindialog.cpp index 38635c029..3e24a2fa2 100644 --- a/src/plugins/core/mainframe/plugindialog.cpp +++ b/src/plugins/core/mainframe/plugindialog.cpp @@ -9,32 +9,36 @@ #include "framework/lifecycle/pluginmetaobject.h" #include "framework/lifecycle/pluginview.h" +#include + #include #include -#include -#include -#include -#include #include static bool isRestartRequired = false; PluginDialog::PluginDialog(QWidget *parent) - : QDialog(parent), + : DAbstractDialog(parent), view(new dpf::PluginView(this)) { resize(1000, 600); - setWindowTitle(tr("Installed Plugins")); + + DTitlebar *titleBar = new DTitlebar(); + titleBar = new DTitlebar(); + titleBar->setMenuVisible(false); + titleBar->setTitle(QString(tr("Installed Plugins"))); auto vLayout = new QVBoxLayout(this); + vLayout->setContentsMargins(0, 0, 0, 0); + vLayout->setSpacing(0); auto detailLayout = new QHBoxLayout; detailLayout->addWidget(view); - closeButton = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, this); - closeButton->button(QDialogButtonBox::Close)->setText(tr("Close")); + closeButton = new DDialogButtonBox(DDialogButtonBox::Close, Qt::Horizontal, this); + closeButton->button(DDialogButtonBox::Close)->setText(tr("Close")); closeButton->setEnabled(true); - restratRequired = new QLabel(tr(" Restart required."), this); + restratRequired = new DLabel(tr(" Restart required."), this); if (!isRestartRequired) restratRequired->setVisible(false); @@ -48,13 +52,14 @@ PluginDialog::PluginDialog(QWidget *parent) detailLayout->addWidget(detailView); slotCurrentPluginActived(); + vLayout->addWidget(titleBar); vLayout->addLayout(detailLayout); vLayout->addLayout(buttonLayout); QObject::connect(view, &dpf::PluginView::currentPluginActived, this, &PluginDialog::slotCurrentPluginActived); QObject::connect(view, &dpf::PluginView::pluginSettingChanged, this, &PluginDialog::updateRestartRequired); - QObject::connect(closeButton->button(QDialogButtonBox::Close), &QPushButton::clicked, + QObject::connect(closeButton->button(DDialogButtonBox::Close), &DPushButton::clicked, [this] { closeDialog() ;}); } @@ -77,89 +82,89 @@ void PluginDialog::closeDialog() } DetailsView::DetailsView(QWidget *parent) - : QWidget(parent) + : DWidget(parent) { gridLayout = new QGridLayout(this); gridLayout->setContentsMargins(2, 2, 2, 2); - nameLabel = new QLabel(tr("Name:"), this); + nameLabel = new DLabel(tr("Name:"), this); nameLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); - name = new QLabel(this); + name = new DLabel(this); name->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); gridLayout->addWidget(nameLabel, 0, 0, 1, 1); gridLayout->addWidget(name, 0, 1, 1, 1); - versionLabel = new QLabel(tr("Version:"), this); + versionLabel = new DLabel(tr("Version:"), this); versionLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); - version = new QLabel(this); + version = new DLabel(this); version->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); gridLayout->addWidget(versionLabel, 1, 0, 1, 1); gridLayout->addWidget(version, 1, 1, 1, 1); - compatVersionLabel = new QLabel(tr("Compatibility version:"), this); + compatVersionLabel = new DLabel(tr("Compatibility version:"), this); compatVersionLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); - compatVersion = new QLabel(this); + compatVersion = new DLabel(this); compatVersion->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); gridLayout->addWidget(compatVersionLabel, 2, 0, 1, 1); gridLayout->addWidget(compatVersion, 2, 1, 1, 1); - vendorLabel = new QLabel(tr("Vendor:"), this); + vendorLabel = new DLabel(tr("Vendor:"), this); vendorLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); - vendor = new QLabel(this); + vendor = new DLabel(this); vendor->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); gridLayout->addWidget(vendorLabel, 3, 0, 1, 1); gridLayout->addWidget(vendor, 3, 1, 1, 1); - copyrightLabel = new QLabel(tr("Copyright:"), this); + copyrightLabel = new DLabel(tr("Copyright:"), this); copyrightLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); - copyright = new QLabel(this); + copyright = new DLabel(this); copyright->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); gridLayout->addWidget(copyrightLabel, 4, 0, 1, 1); gridLayout->addWidget(copyright, 4, 1, 1, 1); - categoryLabel = new QLabel(tr("Category:"), this); + categoryLabel = new DLabel(tr("Category:"), this); categoryLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); - category = new QLabel(this); + category = new DLabel(this); category->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); gridLayout->addWidget(categoryLabel, 5, 0, 1, 1); gridLayout->addWidget(category, 5, 1, 1, 1); - urlLabel = new QLabel(tr("URL:"), this); + urlLabel = new DLabel(tr("URL:"), this); urlLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); - urlLink = new QLabel(this); + urlLink = new DLabel(this); urlLink->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); gridLayout->addWidget(urlLabel, 6, 0, 1, 1); gridLayout->addWidget(urlLink, 6, 1, 1, 1); vboxLayout_1 = new QVBoxLayout(); - licenseLabel = new QLabel(tr("License:"), this); + licenseLabel = new DLabel(tr("License:"), this); licenseLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); vboxLayout_1->addWidget(licenseLabel); spacerItem_1 = new QSpacerItem(17, 13, QSizePolicy::Minimum, QSizePolicy::Expanding); vboxLayout_1->addItem(spacerItem_1); - license = new QTextEdit(this); + license = new DTextEdit(this); license->setReadOnly(true); gridLayout->addLayout(vboxLayout_1, 7, 0, 1, 1); gridLayout->addWidget(license, 7, 1, 1, 1); vboxLayout_2 = new QVBoxLayout(); - descriptionLabel = new QLabel(tr("Description:"), this); + descriptionLabel = new DLabel(tr("Description:"), this); descriptionLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); vboxLayout_2->addWidget(descriptionLabel); spacerItem_2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); vboxLayout_2->addItem(spacerItem_2); - description = new QTextEdit(this); + description = new DTextEdit(this); description->setReadOnly(true); gridLayout->addLayout(vboxLayout_2, 8, 0, 1, 1); gridLayout->addWidget(description, 8, 1, 1, 1); vboxLayout_3 = new QVBoxLayout(); - dependenciesLabel = new QLabel(tr("Dependencies:"), this); + dependenciesLabel = new DLabel(tr("Dependencies:"), this); dependenciesLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse); vboxLayout_3->addWidget(dependenciesLabel); spacerItem_3 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); vboxLayout_3->addItem(spacerItem_3); - dependencies = new QListWidget(this); + dependencies = new DListWidget(this); gridLayout->addLayout(vboxLayout_3, 9, 0, 1, 1); gridLayout->addWidget(dependencies, 9, 1, 1, 1); } @@ -188,7 +193,7 @@ void DetailsView::update(dpf::PluginMetaObjectPointer plugin) } dependencies->addItems(dependsList); - connect(urlLink, &QLabel::linkActivated, [=](){ + connect(urlLink, &DLabel::linkActivated, [=](){ QDesktopServices::openUrl(QUrl(plugin->urlLink())); }); } diff --git a/src/plugins/core/mainframe/plugindialog.h b/src/plugins/core/mainframe/plugindialog.h index 51c1f238a..123fc0506 100644 --- a/src/plugins/core/mainframe/plugindialog.h +++ b/src/plugins/core/mainframe/plugindialog.h @@ -7,13 +7,18 @@ #include "framework/lifecycle/pluginmetaobject.h" -#include -#include +#include +#include +#include +#include +#include +#include + #include -#include -#include #include +DWIDGET_USE_NAMESPACE + class DetailsView; class QDialogButtonBox; class QLabel; @@ -22,7 +27,7 @@ namespace dpf { class PluginView; } -class PluginDialog : public QDialog +class PluginDialog : public DTK_WIDGET_NAMESPACE::DAbstractDialog { Q_OBJECT @@ -40,12 +45,12 @@ private slots: dpf::PluginView *view = nullptr; DetailsView *detailView = nullptr; - QDialogButtonBox *closeButton = nullptr; - QPushButton *detailsButton = nullptr; - QLabel *restratRequired = nullptr; + DDialogButtonBox *closeButton = nullptr; + DPushButton *detailsButton = nullptr; + DLabel *restratRequired = nullptr; }; -class DetailsView : public QWidget +class DetailsView : public DTK_WIDGET_NAMESPACE::DWidget { Q_OBJECT public: @@ -61,27 +66,27 @@ class DetailsView : public QWidget QSpacerItem *spacerItem_1 = nullptr; QSpacerItem *spacerItem_2 = nullptr; QSpacerItem *spacerItem_3 = nullptr; - QLabel *name = nullptr; - QLabel *version = nullptr; - QLabel *compatVersion = nullptr; - QLabel *vendor = nullptr; - QLabel *copyright = nullptr; - QLabel *category = nullptr; - QLabel *urlLink = nullptr; - QTextEdit *description = nullptr; - QTextEdit *license = nullptr; - QListWidget *dependencies = nullptr; - - QLabel *nameLabel = nullptr; - QLabel *versionLabel = nullptr; - QLabel *compatVersionLabel = nullptr; - QLabel *vendorLabel = nullptr; - QLabel *copyrightLabel = nullptr; - QLabel *categoryLabel = nullptr; - QLabel *urlLabel = nullptr; - QLabel *licenseLabel = nullptr; - QLabel *descriptionLabel = nullptr; - QLabel *dependenciesLabel = nullptr; + DLabel *name = nullptr; + DLabel *version = nullptr; + DLabel *compatVersion = nullptr; + DLabel *vendor = nullptr; + DLabel *copyright = nullptr; + DLabel *category = nullptr; + DLabel *urlLink = nullptr; + DTextEdit *description = nullptr; + DTextEdit *license = nullptr; + DListWidget *dependencies = nullptr; + + DLabel *nameLabel = nullptr; + DLabel *versionLabel = nullptr; + DLabel *compatVersionLabel = nullptr; + DLabel *vendorLabel = nullptr; + DLabel *copyrightLabel = nullptr; + DLabel *categoryLabel = nullptr; + DLabel *urlLabel = nullptr; + DLabel *licenseLabel = nullptr; + DLabel *descriptionLabel = nullptr; + DLabel *dependenciesLabel = nullptr; }; #endif // PLUGINDIALOG_H diff --git a/src/plugins/core/mainframe/progressbar.cpp b/src/plugins/core/mainframe/progressbar.cpp index 1f1092d99..0cd3629d6 100644 --- a/src/plugins/core/mainframe/progressbar.cpp +++ b/src/plugins/core/mainframe/progressbar.cpp @@ -7,6 +7,8 @@ #include #include +DWIDGET_USE_NAMESPACE + class ProgressBarPrivate { friend class ProgressBar; @@ -16,7 +18,7 @@ class ProgressBarPrivate }; ProgressBar::ProgressBar(QWidget *parent) - : QWidget(parent) + : DWidget(parent) , d(new ProgressBarPrivate) { setObjectName("ProgressBar"); diff --git a/src/plugins/core/mainframe/progressbar.h b/src/plugins/core/mainframe/progressbar.h index 5c38bd6c4..1a26c876b 100644 --- a/src/plugins/core/mainframe/progressbar.h +++ b/src/plugins/core/mainframe/progressbar.h @@ -5,10 +5,10 @@ #ifndef PROGRESSBAR_H #define PROGRESSBAR_H -#include +#include class ProgressBarPrivate; -class ProgressBar : public QWidget +class ProgressBar : public DTK_WIDGET_NAMESPACE::DWidget { Q_OBJECT ProgressBarPrivate *const d; diff --git a/src/plugins/core/mainframe/windowkeeper.cpp b/src/plugins/core/mainframe/windowkeeper.cpp index 12eb10b1c..15be0fed1 100644 --- a/src/plugins/core/mainframe/windowkeeper.cpp +++ b/src/plugins/core/mainframe/windowkeeper.cpp @@ -4,6 +4,7 @@ #include "aboutdialog.h" #include "plugindialog.h" +#include "mainwindow.h" #include "windowkeeper.h" #include "windowstatusbar.h" @@ -11,16 +12,18 @@ #include "services/project/projectservice.h" #include "common/common.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include #include -#include #include #include #include @@ -32,10 +35,11 @@ using namespace dpfservice; class WindowKeeperPrivate { WindowKeeperPrivate(); - QHash centrals{}; - QMainWindow *window{nullptr}; + QHash centrals{}; + DMainWindow *window{nullptr}; QActionGroup *navActionGroup{nullptr}; - QToolBar *toolbar{nullptr}; + DToolBar *toolbar{nullptr}; + DMenu *mainMenu{nullptr}; friend class WindowKeeper; }; @@ -45,76 +49,59 @@ WindowKeeperPrivate::WindowKeeperPrivate() } -void WindowKeeper::createFileActions(QMenuBar *menuBar) +void WindowKeeper::createFileActions(DMenu *menu) { qInfo() << __FUNCTION__; - QMenu* fileMenu = new QMenu(); - QAction* actionQuit = new QAction(MWMFA_QUIT); - ActionManager::getInstance()->registerAction(actionQuit, "File.Quit", - MWMFA_QUIT, QKeySequence(Qt::Modifier::CTRL | Qt::Key::Key_Q), - ":/core/images/quit.png"); - QAction::connect(actionQuit, &QAction::triggered, [](){ - qApp->closeAllWindows(); - }); - QAction* actionOpenFile = new QAction(MWMFA_OPEN_FILE); ActionManager::getInstance()->registerAction(actionOpenFile, "File.Open.File", - MWMFA_OPEN_FILE, QKeySequence(Qt::Modifier::CTRL | Qt::Key::Key_O), - ":/core/images/open_file.png"); + MWMFA_OPEN_FILE, QKeySequence(Qt::Modifier::CTRL | Qt::Key::Key_O)); QAction::connect(actionOpenFile, &QAction::triggered, [=](){ QString dir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); - QString filePath = QFileDialog::getOpenFileName(nullptr, DIALOG_OPEN_DOCUMENT_TITLE, dir); + QString filePath = DFileDialog::getOpenFileName(nullptr, DIALOG_OPEN_DOCUMENT_TITLE, dir); if (filePath.isEmpty() && !QFileInfo(filePath).exists()) return; recent.saveOpenedFile(filePath); editor.openFile(filePath); }); - QMenu* menuOpenProject = new QMenu(MWMFA_OPEN_PROJECT); - menuOpenProject->setIcon(QIcon(":/core/images/open_project.png")); - - fileMenu->addAction(actionOpenFile); - fileMenu->addMenu(menuOpenProject); - fileMenu->addAction(actionQuit); - QAction* fileAction = menuBar->addMenu(fileMenu); - fileAction->setText(MWM_FILE); + menu->addAction(actionOpenFile); } -void WindowKeeper::createAnalyzeActions(QMenuBar *menuBar) +void WindowKeeper::createAnalyzeActions(DMenuBar *menuBar) { qInfo() << __FUNCTION__; - QMenu* analyzeMenu = new QMenu(); + DMenu* analyzeMenu = new DMenu(); QAction* buildAction = menuBar->addMenu(analyzeMenu); buildAction->setText(MWM_ANALYZE); } -void WindowKeeper::createBuildActions(QMenuBar *menuBar) +void WindowKeeper::createBuildActions(DMenuBar *menuBar) { qInfo() << __FUNCTION__; - QMenu* buildMenu = new QMenu(); + DMenu* buildMenu = new DMenu(); QAction* buildAction = menuBar->addMenu(buildMenu); buildAction->setText(MWM_BUILD); } -void WindowKeeper::createDebugActions(QMenuBar *menuBar) +void WindowKeeper::createDebugActions(DMenuBar *menuBar) { qInfo() << __FUNCTION__; - QAction* debugAction = menuBar->addMenu(new QMenu()); + QAction* debugAction = menuBar->addMenu(new DMenu()); debugAction->setText(MWM_DEBUG); } -void WindowKeeper::createToolsActions(QMenuBar *menuBar) +void WindowKeeper::createToolsActions(DMenuBar *menuBar) { qInfo() << __FUNCTION__; - auto toolsMenu = new QMenu(MWM_TOOLS); + auto toolsMenu = new DMenu(MWM_TOOLS); menuBar->addMenu(toolsMenu); } -void WindowKeeper::createHelpActions(QMenuBar *menuBar) +void WindowKeeper::createHelpActions(DMenuBar *menuBar) { qInfo() << __FUNCTION__; - auto helpMenu = new QMenu(MWM_HELP); + auto helpMenu = new DMenu(MWM_HELP); menuBar->addMenu(helpMenu); QAction *actionReportBug = new QAction(MWM_REPORT_BUG); @@ -149,14 +136,14 @@ void WindowKeeper::createHelpActions(QMenuBar *menuBar) QAction::connect(actionAboutPlugin, &QAction::triggered, this, &WindowKeeper::showAboutPlugins); } -void WindowKeeper::createStatusBar(QMainWindow *window) +void WindowKeeper::createStatusBar(DMainWindow *window) { qInfo() << __FUNCTION__; - QStatusBar* statusBar = new WindowStatusBar(); + DStatusBar* statusBar = new WindowStatusBar(); window->setStatusBar(statusBar); } -void WindowKeeper::createNavRecent(QToolBar *toolbar) +void WindowKeeper::createNavRecent(DToolBar *toolbar) { qInfo() << __FUNCTION__; if (!toolbar) @@ -173,7 +160,7 @@ void WindowKeeper::createNavRecent(QToolBar *toolbar) toolbar->widgetForAction(navRecent)->setObjectName("Recent"); } -void WindowKeeper::createNavEdit(QToolBar *toolbar) +void WindowKeeper::createNavEdit(DToolBar *toolbar) { qInfo() << __FUNCTION__; if (!toolbar) @@ -190,14 +177,27 @@ void WindowKeeper::createNavEdit(QToolBar *toolbar) toolbar->widgetForAction(navEdit)->setObjectName("Edit"); } -void WindowKeeper::layoutWindow(QMainWindow *window) +void WindowKeeper::createMainMenu(DMenu *menu) +{ + qInfo() << __FUNCTION__; + + if (!menu) + return; + + createFileActions(menu); + + DMenu* menuOpenProject = new DMenu(MWMFA_OPEN_PROJECT); + menu->addMenu(menuOpenProject); +} + +void WindowKeeper::layoutWindow(DMainWindow *window) { qInfo() << __FUNCTION__; if (!d->navActionGroup) d->navActionGroup = new QActionGroup(window); - d->toolbar = new QToolBar(QToolBar::tr("Navigation")); - d->toolbar->setMovable(false); + d->toolbar = new DToolBar(DToolBar::tr("Navigation")); + d->toolbar->setMovable(true); d->toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); QWidget *titleWiget = new QWidget(); @@ -207,20 +207,21 @@ void WindowKeeper::layoutWindow(QMainWindow *window) createNavRecent(d->toolbar); createNavEdit(d->toolbar); - QMenuBar* menuBar = new QMenuBar(); - createFileActions(menuBar); - createBuildActions(menuBar); - createDebugActions(menuBar); - createAnalyzeActions(menuBar); - createToolsActions(menuBar); - createHelpActions(menuBar); + createMainMenu(d->mainMenu); createStatusBar(window); + window->setWindowTitle("Deepin Union Code"); + window->setWindowIcon(QIcon(":/core/images/unioncode@128.png")); window->addToolBar(Qt::LeftToolBarArea, d->toolbar); window->setMinimumSize(QSize(MW_MIN_WIDTH,MW_MIN_HEIGHT)); window->setAttribute(Qt::WA_DeleteOnClose); - window->setMenuBar(menuBar); + + window->titlebar()->setIcon(QIcon(":/core/images/unioncode@128.png")); + window->titlebar()->setTitle(QString(tr("Deepin Union Code"))); + window->titlebar()->setContentsMargins(0, 0, 0, 0); + + window->titlebar()->setMenu(d->mainMenu); } WindowKeeper *WindowKeeper::instace() @@ -242,10 +243,13 @@ WindowKeeper::WindowKeeper(QObject *parent) } if (!d->window) { - d->window = new QMainWindow(); - d->window->setWindowTitle("Deepin Union Code"); - d->window->setWindowIcon(QIcon(":/core/images/unioncode@128.png")); - QObject::connect(d->window, &QMainWindow::destroyed, [&](){ + d->window = new DMainWindow(); + + if (!d->mainMenu) { + d->mainMenu = new DMenu(d->window->titlebar()); + } + + QObject::connect(d->window, &DMainWindow::destroyed, [&](){ d->window->takeCentralWidget(); }); layoutWindow(d->window); @@ -334,7 +338,7 @@ void WindowKeeper::addMenu(AbstractMenu *menu) { qInfo() << __FUNCTION__; - QMenu *inputMenu = static_cast(menu->qMenu()); + DMenu *inputMenu = static_cast(menu->qMenu()); if (!d->window || !inputMenu) return; @@ -381,7 +385,7 @@ void WindowKeeper::addAction(const QString &menuName, AbstractAction *action) if (!action || !inputAction) return; - for (QAction *qAction : d->window->menuBar()->actions()) { + for (QAction *qAction : d->mainMenu->actions()) { if (qAction->text() == menuName) { if (qAction->text() == MWM_FILE) { auto endAction = *(qAction->menu()->actions().rbegin()); @@ -414,22 +418,19 @@ void WindowKeeper::addOpenProjectAction(const QString &name, AbstractAction *act return; QAction *inputAction = static_cast(action->qAction()); - for (QAction *qAction : d->window->menuBar()->actions()) { - if (qAction->text() == MWM_FILE) { - for(QAction *childAction : qAction->menu()->actions()) { - if (childAction->text() == MWMFA_OPEN_PROJECT) { - for (auto langAction : childAction->menu()->menuAction()->menu()->actions()) { - if (name == langAction->text()) { - langAction->menu()->addAction(inputAction); - return; - } - } - auto langMenu = new QMenu(name); - childAction->menu()->addMenu(langMenu); - langMenu->addAction(inputAction); + + foreach (QAction *action, d->mainMenu->actions()) { + if (action->text() == MWMFA_OPEN_PROJECT) { + for (auto langAction : action->menu()->menuAction()->menu()->actions()) { + if (name == langAction->text()) { + langAction->menu()->addAction(inputAction); return; } } + auto langMenu = new DMenu(name); + action->menu()->addMenu(langMenu); + langMenu->addAction(inputAction); + return; } } } @@ -437,6 +438,9 @@ void WindowKeeper::addOpenProjectAction(const QString &name, AbstractAction *act void WindowKeeper::initUserWidget() { qApp->processEvents(); + if (!d->toolbar) + return; + if (d->toolbar->actions().size() > 0) { d->toolbar->actions().at(0)->trigger(); } diff --git a/src/plugins/core/mainframe/windowkeeper.h b/src/plugins/core/mainframe/windowkeeper.h index e5378e74b..da259d014 100644 --- a/src/plugins/core/mainframe/windowkeeper.h +++ b/src/plugins/core/mainframe/windowkeeper.h @@ -15,8 +15,16 @@ #include +#include +#include +#include +#include + #include +DWIDGET_USE_NAMESPACE +DCORE_USE_NAMESPACE + class QAction; class QMainWindow; class QStatusBar; @@ -52,17 +60,19 @@ public slots: private : void showAboutDlg(); void showAboutPlugins(); - void layoutWindow(QMainWindow *window); - void createNavEdit(QToolBar *toolbar); - void createNavRecent(QToolBar *toolbar); - void createStatusBar(QMainWindow *window); - void createHelpActions(QMenuBar *menuBar); - void createToolsActions(QMenuBar *menuBar); - void createDebugActions(QMenuBar *menuBar); - void createBuildActions(QMenuBar *menuBar); - void createFileActions(QMenuBar *menuBar); - void createAnalyzeActions(QMenuBar *menuBar); + void layoutWindow(DMainWindow *window); + void createNavEdit(DToolBar *toolbar); + void createNavRecent(DToolBar *toolbar); + void createStatusBar(DMainWindow *window); + void createHelpActions(DMenuBar *menuBar); + void createToolsActions(DMenuBar *menuBar); + void createDebugActions(DMenuBar *menuBar); + void createBuildActions(DMenuBar *menuBar); + void createFileActions(DMenu *menu); + void createAnalyzeActions(DMenuBar *menuBar); void setNavActionChecked(const QString &actionName, bool checked); + + void createMainMenu(DMenu *mainMenu); }; #endif // WINDOWKEEPER_H diff --git a/src/plugins/core/mainframe/windowstatusbar.cpp b/src/plugins/core/mainframe/windowstatusbar.cpp index 52078b546..9023e6fe6 100644 --- a/src/plugins/core/mainframe/windowstatusbar.cpp +++ b/src/plugins/core/mainframe/windowstatusbar.cpp @@ -6,6 +6,8 @@ #include "progressbar.h" #include "common/common.h" +DWIDGET_USE_NAMESPACE + class WindowStatusBarPrivate { friend class WindowStatusBar; @@ -14,7 +16,7 @@ class WindowStatusBarPrivate }; WindowStatusBar::WindowStatusBar(QWidget *parent) - : QStatusBar(parent) + : DStatusBar(parent) , d(new WindowStatusBarPrivate()) { d->progressBar = new ProgressBar; diff --git a/src/plugins/core/mainframe/windowstatusbar.h b/src/plugins/core/mainframe/windowstatusbar.h index d2f638dd9..d005df350 100644 --- a/src/plugins/core/mainframe/windowstatusbar.h +++ b/src/plugins/core/mainframe/windowstatusbar.h @@ -5,10 +5,10 @@ #ifndef WINDOWSTATUSBAR_H #define WINDOWSTATUSBAR_H -#include +#include class WindowStatusBarPrivate; -class WindowStatusBar : public QStatusBar +class WindowStatusBar : public DTK_WIDGET_NAMESPACE::DStatusBar { Q_OBJECT WindowStatusBarPrivate *const d; diff --git a/src/plugins/core/mainframe/windowtheme.cpp b/src/plugins/core/mainframe/windowtheme.cpp deleted file mode 100644 index 7b8a6fd48..000000000 --- a/src/plugins/core/mainframe/windowtheme.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "windowtheme.h" - -#include -#include -#include - -void WindowTheme::setTheme(const QString &file) -{ - QFile qssFile(file); - if (!qssFile.open(QFile::ReadOnly)) { - qCritical()<< "Failed can't open qss file" << file; - return; - } - qApp->setStyleSheet(qssFile.readAll()); -} diff --git a/src/plugins/core/mainframe/windowtheme.h b/src/plugins/core/mainframe/windowtheme.h deleted file mode 100644 index 1fd33b243..000000000 --- a/src/plugins/core/mainframe/windowtheme.h +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef WINDOWTHEME_H -#define WINDOWTHEME_H - -#include - -class WindowTheme -{ -public: - WindowTheme() = delete; - static void setTheme(const QString &file); -}; - -#endif // WINDOWTHEME_H From 934f4fa47f384c9af43db45f6377bb89e346adca Mon Sep 17 00:00:00 2001 From: HeXiaodong Date: Mon, 13 Nov 2023 15:11:50 +0800 Subject: [PATCH 2/3] feat: DTK Change-Mainwindow and menu DTK Change-Mainwindow and menu. --- src/plugins/core/mainframe/windowkeeper.cpp | 53 ++++++++++++------ src/plugins/core/mainframe/windowkeeper.h | 12 +++-- src/plugins/template/CMakeLists.txt | 1 + src/plugins/template/templatemanager.cpp | 4 +- src/plugins/template/wizard/detailwidget.cpp | 43 ++++++++------- src/plugins/template/wizard/detailwidget.h | 4 +- src/plugins/template/wizard/maindialog.cpp | 56 ++++++++++++-------- src/plugins/template/wizard/maindialog.h | 6 +-- 8 files changed, 108 insertions(+), 71 deletions(-) diff --git a/src/plugins/core/mainframe/windowkeeper.cpp b/src/plugins/core/mainframe/windowkeeper.cpp index 15be0fed1..91faafe09 100644 --- a/src/plugins/core/mainframe/windowkeeper.cpp +++ b/src/plugins/core/mainframe/windowkeeper.cpp @@ -4,7 +4,6 @@ #include "aboutdialog.h" #include "plugindialog.h" -#include "mainwindow.h" #include "windowkeeper.h" #include "windowstatusbar.h" @@ -66,43 +65,46 @@ void WindowKeeper::createFileActions(DMenu *menu) }); menu->addAction(actionOpenFile); + + DMenu* menuOpenProject = new DMenu(MWMFA_OPEN_PROJECT); + menu->addMenu(menuOpenProject); } -void WindowKeeper::createAnalyzeActions(DMenuBar *menuBar) +void WindowKeeper::createAnalyzeActions(DMenu *menu) { qInfo() << __FUNCTION__; DMenu* analyzeMenu = new DMenu(); - QAction* buildAction = menuBar->addMenu(analyzeMenu); + QAction* buildAction = menu->addMenu(analyzeMenu); buildAction->setText(MWM_ANALYZE); } -void WindowKeeper::createBuildActions(DMenuBar *menuBar) +void WindowKeeper::createBuildActions(DMenu *menu) { qInfo() << __FUNCTION__; DMenu* buildMenu = new DMenu(); - QAction* buildAction = menuBar->addMenu(buildMenu); + QAction* buildAction = menu->addMenu(buildMenu); buildAction->setText(MWM_BUILD); } -void WindowKeeper::createDebugActions(DMenuBar *menuBar) +void WindowKeeper::createDebugActions(DMenu *menu) { qInfo() << __FUNCTION__; - QAction* debugAction = menuBar->addMenu(new DMenu()); + QAction* debugAction = menu->addMenu(new DMenu()); debugAction->setText(MWM_DEBUG); } -void WindowKeeper::createToolsActions(DMenuBar *menuBar) +void WindowKeeper::createToolsActions(DMenu *menu) { qInfo() << __FUNCTION__; auto toolsMenu = new DMenu(MWM_TOOLS); - menuBar->addMenu(toolsMenu); + menu->addMenu(toolsMenu); } -void WindowKeeper::createHelpActions(DMenuBar *menuBar) +void WindowKeeper::createHelpActions(DMenu *menu) { qInfo() << __FUNCTION__; auto helpMenu = new DMenu(MWM_HELP); - menuBar->addMenu(helpMenu); + menu->addMenu(helpMenu); QAction *actionReportBug = new QAction(MWM_REPORT_BUG); ActionManager::getInstance()->registerAction(actionReportBug, "Help.Report.Bug", @@ -185,9 +187,17 @@ void WindowKeeper::createMainMenu(DMenu *menu) return; createFileActions(menu); + menu->addSeparator(); - DMenu* menuOpenProject = new DMenu(MWMFA_OPEN_PROJECT); - menu->addMenu(menuOpenProject); + createBuildActions(menu); + createDebugActions(menu); + menu->addSeparator(); + + createAnalyzeActions(menu); + createToolsActions(menu); + menu->addSeparator(); + + createHelpActions(menu); } void WindowKeeper::layoutWindow(DMainWindow *window) @@ -343,15 +353,15 @@ void WindowKeeper::addMenu(AbstractMenu *menu) return; //始终将Helper置末 - for (QAction *action : d->window->menuBar()->actions()) { - if (action->text() == MWM_HELP) { - d->window->menuBar()->insertMenu(action, inputMenu); + for (QAction *action : d->mainMenu->actions()) { + if (action->text() == MWM_TOOLS) { + d->mainMenu->insertMenu(action, inputMenu); return; //提前返回 } } //直接添加到最后 - d->window->menuBar()->addMenu(inputMenu); + d->mainMenu->addMenu(inputMenu); } void WindowKeeper::insertAction(const QString &menuName, @@ -385,6 +395,15 @@ void WindowKeeper::addAction(const QString &menuName, AbstractAction *action) if (!action || !inputAction) return; + if (inputAction->text() == MWMFA_NEW_FILE_OR_PROJECT) { + for (QAction *qAction : d->mainMenu->actions()) { + if (qAction->text() == MWM_BUILD) { + d->mainMenu->insertAction(qAction, inputAction); + return; + } + } + } + for (QAction *qAction : d->mainMenu->actions()) { if (qAction->text() == menuName) { if (qAction->text() == MWM_FILE) { diff --git a/src/plugins/core/mainframe/windowkeeper.h b/src/plugins/core/mainframe/windowkeeper.h index da259d014..ea3cc9fd6 100644 --- a/src/plugins/core/mainframe/windowkeeper.h +++ b/src/plugins/core/mainframe/windowkeeper.h @@ -64,12 +64,14 @@ private : void createNavEdit(DToolBar *toolbar); void createNavRecent(DToolBar *toolbar); void createStatusBar(DMainWindow *window); - void createHelpActions(DMenuBar *menuBar); - void createToolsActions(DMenuBar *menuBar); - void createDebugActions(DMenuBar *menuBar); - void createBuildActions(DMenuBar *menuBar); + + void createHelpActions(DMenu *menu); + void createToolsActions(DMenu *menu); + void createDebugActions(DMenu *menu); + void createBuildActions(DMenu *menu); void createFileActions(DMenu *menu); - void createAnalyzeActions(DMenuBar *menuBar); + void createAnalyzeActions(DMenu *menu); + void setNavActionChecked(const QString &actionName, bool checked); void createMainMenu(DMenu *mainMenu); diff --git a/src/plugins/template/CMakeLists.txt b/src/plugins/template/CMakeLists.txt index c263eb05a..d82b69e60 100644 --- a/src/plugins/template/CMakeLists.txt +++ b/src/plugins/template/CMakeLists.txt @@ -35,6 +35,7 @@ target_link_libraries(${PROJECT_NAME} common ${QtUseModules} ${PkgUserModules} + ${DtkWidget_LIBRARIES} ) install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${PLUGIN_INSTALL_PATH}) diff --git a/src/plugins/template/templatemanager.cpp b/src/plugins/template/templatemanager.cpp index 54ab03ac2..23e1910fa 100644 --- a/src/plugins/template/templatemanager.cpp +++ b/src/plugins/template/templatemanager.cpp @@ -53,13 +53,13 @@ void TemplateManager::addMenu() auto actionInit = [&](QAction *action, QString actionID, QKeySequence key, QString iconFileName){ ActionManager::getInstance()->registerAction(action, actionID, action->text(), key, iconFileName); AbstractAction *actionImpl = new AbstractAction(action); - windowService->addAction(dpfservice::MWM_FILE, actionImpl); + windowService->addAction(dpfservice::MWMFA_NEW_FILE_OR_PROJECT, actionImpl); }; d->newAction.reset(new QAction(MWMFA_NEW_FILE_OR_PROJECT)); actionInit(d->newAction.get(), "Fiel.New.FileOrProject", - QKeySequence(Qt::Modifier::CTRL | Qt::Modifier::SHIFT | Qt::Key::Key_O), ":/template/images/new_project.png"); + QKeySequence(Qt::Modifier::CTRL | Qt::Modifier::SHIFT | Qt::Key::Key_O), QString()); QObject::connect(d->newAction.get(), &QAction::triggered, this, &TemplateManager::newWizard, Qt::DirectConnection); } diff --git a/src/plugins/template/wizard/detailwidget.cpp b/src/plugins/template/wizard/detailwidget.cpp index 0fc83a64a..f0b4ad063 100644 --- a/src/plugins/template/wizard/detailwidget.cpp +++ b/src/plugins/template/wizard/detailwidget.cpp @@ -7,58 +7,61 @@ #include "common/util/custompaths.h" -#include +#include +#include +#include +#include +#include +#include + #include #include -#include -#include -#include -#include -#include + +DWIDGET_USE_NAMESPACE class DetailWidgetPrivate { friend class DetailWidget; QString templatePath; - QMap lineEditMap; - QMap comboBoxMap; + QMap lineEditMap; + QMap comboBoxMap; WizardInfo wizardInfo; }; DetailWidget::DetailWidget(QWidget *parent) - : QScrollArea(parent) + : DScrollArea(parent) , d(new DetailWidgetPrivate()) { } DetailWidget::DetailWidget(const QString &templatePath, QWidget *parent) - : QScrollArea(parent) + : DScrollArea(parent) , d(new DetailWidgetPrivate()) { d->templatePath = templatePath; if (!TemplateParser::readWizardConfig(d->templatePath, d->wizardInfo)) return; - QWidget *widget = new QWidget(); + DWidget *widget = new DWidget(); QVBoxLayout *vLayout = new QVBoxLayout(); widget->setLayout(vLayout); - QLabel *titleLabel = new QLabel(d->wizardInfo.trDisplayName); + DLabel *titleLabel = new DLabel(d->wizardInfo.trDisplayName); vLayout->addWidget(titleLabel); vLayout->addSpacing(10); auto iter = d->wizardInfo.configures.begin(); for (; iter != d->wizardInfo.configures.end(); ++iter) { QHBoxLayout *hLayout = new QHBoxLayout(); - QLabel *label = new QLabel(iter->displayName + ":"); + DLabel *label = new DLabel(iter->displayName + ":"); label->setFixedSize(120, 30); hLayout->addWidget(label, 0, Qt::AlignLeft); hLayout->setStretchFactor(label, 1); if ("lineEdit" == iter->type) { - QLineEdit *lineEdit = new QLineEdit(); + DLineEdit *lineEdit = new DLineEdit(); if (!iter->defaultValues.isEmpty()) { lineEdit->setText(iter->defaultValues.at(0)); } @@ -68,15 +71,15 @@ DetailWidget::DetailWidget(const QString &templatePath, QWidget *parent) d->lineEditMap.insert(iter->key, lineEdit); if (iter->browse) { lineEdit->setFixedSize(300, 30); - lineEdit->setReadOnly(true); + lineEdit->lineEdit()->setReadOnly(true); - QPushButton *browse = new QPushButton(tr("Browse...")); + DPushButton *browse = new DPushButton(tr("Browse...")); browse->setFixedSize(100, 30); hLayout->addWidget(browse, 0, Qt::AlignRight); hLayout->setStretchFactor(browse, 1); - connect(browse, &QPushButton::clicked, [=]() { - QString path = QFileDialog::getExistingDirectory(this, tr("Choose path"), QDir::homePath()); + connect(browse, &DPushButton::clicked, [=]() { + QString path = DFileDialog::getExistingDirectory(this, tr("Choose path"), QDir::homePath()); if (!path.isEmpty()) { lineEdit->setText(path); } @@ -85,7 +88,7 @@ DetailWidget::DetailWidget(const QString &templatePath, QWidget *parent) lineEdit->setFixedSize(400, 30); } } else if ("comboBox" == iter->type) { - QComboBox *comboBox = new QComboBox(); + DComboBox *comboBox = new DComboBox(); comboBox->setFixedSize(400, 30); hLayout->addWidget(comboBox, 0, Qt::AlignLeft); hLayout->setStretchFactor(comboBox, 3); @@ -115,7 +118,7 @@ bool DetailWidget::getGenParams(PojectGenParam ¶m) auto lineEdit = d->lineEditMap.value(key); if (lineEdit->text().trimmed().isEmpty()) { - QMessageBox::critical(this, "tip", "The value of " + key + " is empty"); + DMessageBox::critical(this, "tip", "The value of " + key + " is empty"); return false; } diff --git a/src/plugins/template/wizard/detailwidget.h b/src/plugins/template/wizard/detailwidget.h index 8166d03f6..22d75db89 100644 --- a/src/plugins/template/wizard/detailwidget.h +++ b/src/plugins/template/wizard/detailwidget.h @@ -7,12 +7,12 @@ #include "projectgenerate.h" -#include +#include using namespace templateMgr; class DetailWidgetPrivate; -class DetailWidget : public QScrollArea +class DetailWidget : public DTK_WIDGET_NAMESPACE::DScrollArea { Q_OBJECT public: diff --git a/src/plugins/template/wizard/maindialog.cpp b/src/plugins/template/wizard/maindialog.cpp index 341fc63bb..8bd254135 100644 --- a/src/plugins/template/wizard/maindialog.cpp +++ b/src/plugins/template/wizard/maindialog.cpp @@ -3,22 +3,26 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "maindialog.h" - #include "detailwidget.h" - #include "services/language/languageservice.h" -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include + +#include #include #include -#include #include +#include #include #include +DWIDGET_USE_NAMESPACE using namespace dpfservice; class MainDialogPrivate @@ -26,14 +30,13 @@ class MainDialogPrivate friend class MainDialog; QMap detailWidgetMap; QStackedWidget *detailStackedWidget = nullptr; - QWidget *blankWidget = nullptr; + DWidget *blankWidget = nullptr; }; -MainDialog::MainDialog(QDialog *parent) - : QDialog(parent) +MainDialog::MainDialog(QWidget *parent) + : DAbstractDialog(parent) , d(new MainDialogPrivate()) { - setWindowTitle(tr("New File or Project")); setMinimumSize(850, 550); TemplateVector templateVec; @@ -50,13 +53,18 @@ MainDialog::~MainDialog() void MainDialog::setupUI(TemplateVector &templateVec) { - QLabel * title = new QLabel(tr("Choose a template:")); + DTitlebar *titleBar = new DTitlebar(); + titleBar = new DTitlebar(); + titleBar->setMenuVisible(false); + titleBar->setTitle(QString(tr("New File or Project"))); + + DLabel *title = new DLabel(tr("Choose a template:")); d->detailStackedWidget = new QStackedWidget(); d->blankWidget = new DetailWidget(this); d->detailStackedWidget->addWidget(d->blankWidget); - QTreeView * treeView = new QTreeView(); + DTreeView * treeView = new DTreeView(); treeView->setEditTriggers(QAbstractItemView::NoEditTriggers); treeView->setSelectionMode(QAbstractItemView::SingleSelection); treeView->setSelectionBehavior(QAbstractItemView::SelectItems); @@ -92,7 +100,7 @@ void MainDialog::setupUI(TemplateVector &templateVec) treeView->setModel(standardModel); } - connect(treeView, &QTreeView::clicked, [=](){ + connect(treeView, &DTreeView::clicked, [=](){ QModelIndex index = treeView->selectionModel()->currentIndex(); if (!index.isValid()){ d->detailStackedWidget->setCurrentWidget(d->blankWidget); @@ -134,7 +142,7 @@ void MainDialog::setupUI(TemplateVector &templateVec) QVBoxLayout *vItemLayout = new QVBoxLayout(); vItemLayout->addWidget(treeView); - QWidget *contentWidget = new QWidget(); + DWidget *contentWidget = new DWidget(); QHBoxLayout *hLayout = new QHBoxLayout(); contentWidget->setLayout(hLayout); hLayout->addLayout(vItemLayout); @@ -142,17 +150,17 @@ void MainDialog::setupUI(TemplateVector &templateVec) hLayout->setStretchFactor(vItemLayout, 1); hLayout->setStretchFactor(d->detailStackedWidget, 2); - QWidget *bottomWidget = new QWidget(); + DWidget *bottomWidget = new DWidget(); QHBoxLayout * bottomLayout = new QHBoxLayout(); bottomWidget->setLayout(bottomLayout); - QPushButton *create = new QPushButton(tr("Create")); - QPushButton *cancel = new QPushButton(tr("Cancel")); + DPushButton *create = new DPushButton(tr("Create")); + DPushButton *cancel = new DPushButton(tr("Cancel")); bottomLayout->addStretch(15); bottomLayout->addWidget(create, Qt::AlignRight); bottomLayout->addWidget(cancel, Qt::AlignRight); - connect(create, &QPushButton::clicked, [&](){ + connect(create, &DPushButton::clicked, [&](){ DetailWidget *detailWidget = dynamic_cast(d->detailStackedWidget->currentWidget()); if (detailWidget) { PojectGenParam param; @@ -162,11 +170,15 @@ void MainDialog::setupUI(TemplateVector &templateVec) } }); - connect(cancel, &QPushButton::clicked, [&](){ + connect(cancel, &DPushButton::clicked, [&](){ close(); }); QVBoxLayout *vLayout = new QVBoxLayout(); + vLayout->setContentsMargins(0, 0, 0, 0); + vLayout->setSpacing(0); + + vLayout->addWidget(titleBar); vLayout->addWidget(title); vLayout->addWidget(contentWidget); vLayout->addWidget(bottomWidget); @@ -179,7 +191,7 @@ void MainDialog::generate(const PojectGenParam ¶m) ProjectGenerate projectGen; PojectGenResult result; if (!projectGen.create(result, param)) { - QMessageBox::critical(this, tr("Tip"), result.message); + DMessageBox::critical(this, tr("Tip"), result.message); return; } @@ -192,7 +204,7 @@ void MainDialog::generate(const PojectGenParam ¶m) close(); project.openProject(result.kit, result.language, result.projectPath); } else { - QMessageBox::critical(this, tr("Tip"), tr("Can not find kit.")); + DMessageBox::critical(this, tr("Tip"), tr("Can not find kit.")); } } } else if (param.type == File) { diff --git a/src/plugins/template/wizard/maindialog.h b/src/plugins/template/wizard/maindialog.h index 552cdb3af..5123b41b8 100644 --- a/src/plugins/template/wizard/maindialog.h +++ b/src/plugins/template/wizard/maindialog.h @@ -6,16 +6,16 @@ #define MAINDIALOG_H #include "projectgenerate.h" -#include +#include using namespace templateMgr; class MainDialogPrivate; -class MainDialog : public QDialog +class MainDialog : public DTK_WIDGET_NAMESPACE::DAbstractDialog { Q_OBJECT public: - explicit MainDialog(QDialog *parent = nullptr); + explicit MainDialog(QWidget *parent = nullptr); ~MainDialog(); signals: From 7fed5a193ab43b4c54ecff3337241e80976ab8d2 Mon Sep 17 00:00:00 2001 From: HeXiaodong Date: Tue, 14 Nov 2023 16:08:19 +0800 Subject: [PATCH 3/3] feat: DTK Changed-The window of recent navigation and toolbar The window of recent navigation and toolbar --- assets/translations/en_US.ts | 124 ++++++++++------ assets/translations/zh_CN.ts | 126 ++++++++++------ src/base/CMakeLists.txt | 5 + src/base/abstractcentral.cpp | 11 +- src/common/util/eventdefinitions.h | 4 + src/plugins/collaborators/collaborators.cpp | 4 +- .../core/builtin/actions/edit_20px.svg | 7 + src/plugins/core/builtin/actions/git_20px.svg | 7 + .../core/builtin/actions/recent_20px.svg | 7 + src/plugins/core/builtin/actions/svn_20px.svg | 7 + src/plugins/core/core.qrc | 13 +- src/plugins/core/images/edit.png | Bin 752 -> 0 bytes src/plugins/core/images/edit.svg | 7 + src/plugins/core/images/git.svg | 7 + src/plugins/core/images/recent.png | Bin 264 -> 0 bytes src/plugins/core/images/recent.svg | 7 + src/plugins/core/images/svn.svg | 7 + src/plugins/core/mainframe/windowkeeper.cpp | 27 +++- src/plugins/recent/CMakeLists.txt | 2 + src/plugins/recent/images/recentLogo1.png | Bin 0 -> 67176 bytes src/plugins/recent/images/recentLogo2.png | Bin 0 -> 82804 bytes .../recent/mainframe/displayitemdelegate.cpp | 29 ++-- .../recent/mainframe/displayitemdelegate.h | 8 +- .../recent/mainframe/displayrecentview.cpp | 19 ++- .../recent/mainframe/displayrecentview.h | 4 +- .../recent/mainframe/recentdisplay.cpp | 135 +++++++++++++++--- src/plugins/recent/mainframe/recentdisplay.h | 10 +- src/plugins/recent/recent.qrc | 6 + src/plugins/template/CMakeLists.txt | 2 + .../template/transceiver/templatereceiver.cpp | 31 ++++ .../template/transceiver/templatereceiver.h | 40 ++++++ src/plugins/template/wizard/maindialog.cpp | 2 +- 32 files changed, 516 insertions(+), 142 deletions(-) create mode 100644 src/plugins/core/builtin/actions/edit_20px.svg create mode 100644 src/plugins/core/builtin/actions/git_20px.svg create mode 100644 src/plugins/core/builtin/actions/recent_20px.svg create mode 100644 src/plugins/core/builtin/actions/svn_20px.svg delete mode 100644 src/plugins/core/images/edit.png create mode 100644 src/plugins/core/images/edit.svg create mode 100644 src/plugins/core/images/git.svg delete mode 100644 src/plugins/core/images/recent.png create mode 100644 src/plugins/core/images/recent.svg create mode 100644 src/plugins/core/images/svn.svg create mode 100644 src/plugins/recent/images/recentLogo1.png create mode 100644 src/plugins/recent/images/recentLogo2.png create mode 100644 src/plugins/recent/recent.qrc create mode 100644 src/plugins/template/transceiver/templatereceiver.cpp create mode 100644 src/plugins/template/transceiver/templatereceiver.h diff --git a/assets/translations/en_US.ts b/assets/translations/en_US.ts index d58ae0591..f19a0f37f 100644 --- a/assets/translations/en_US.ts +++ b/assets/translations/en_US.ts @@ -4,20 +4,30 @@ AboutDialog - + About Deepin Union Code - + <br/>Built on %1 %2 in %3<br/> - + <h3>Deepin Union Code %1</h3>%2<br/>Copyright 2019-%3 UnionTech Software Technology Co., Ltd. All rights reserved.<br/><br/>This program is released under <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPL-3.0-or-later</a>; we hope that the scheme will be useful, but we do not guarantee that it will be of economic value or fit for a particular purpose. For more information, see the GNU General Public License. <br/> Thanks to all the <a href="opensourcesoftware">open source software</a> used.<br/> + + + Error + + + + + Failed to open the file. + + AppOutputPane @@ -762,6 +772,22 @@ The dap port is not ready, please retry. + + DPushButton + + + Close + + + + + DToolBar + + + Navigation + + + DebuggerPlugin @@ -783,12 +809,12 @@ The dap port is not ready, please retry. DetailWidget - + Browse... - + Choose path @@ -804,52 +830,52 @@ The dap port is not ready, please retry. DetailsView - + Name: - + Version: - + Compatibility version: - + Vendor: - + Copyright: - + Category: - + URL: - + Description: - + License: - + Dependencies: @@ -857,7 +883,7 @@ The dap port is not ready, please retry. DisplayDocView - + Documents @@ -865,7 +891,7 @@ The dap port is not ready, please retry. DisplayProView - + Projects @@ -1178,38 +1204,38 @@ repos path: %0 MainDialog - + New File or Project - + Choose a template: - + Templates - + Create - + Cancel - - + + Tip - + Can not find kit. @@ -1370,17 +1396,17 @@ repos path: %0 PluginDialog - + Installed Plugins - + Close - + Restart required. @@ -2451,11 +2477,6 @@ storage: %2 Revert All - - - Close - - Find Previous @@ -2550,11 +2571,6 @@ storage: %2 QToolBar - - - Navigation - - Start @@ -2641,12 +2657,32 @@ Delete anyway? RecentDisplay - + + Open File + + + + + Open Project + + + + + New File or Project + + + + + Recent Open + + + + Documents - + Projects @@ -3354,6 +3390,14 @@ Delete anyway? + + WindowKeeper + + + Deepin Union Code + + + XmlStreamReader diff --git a/assets/translations/zh_CN.ts b/assets/translations/zh_CN.ts index e19e0d4ab..36cfea642 100644 --- a/assets/translations/zh_CN.ts +++ b/assets/translations/zh_CN.ts @@ -4,20 +4,30 @@ AboutDialog - + About Deepin Union Code 关于Deepin Union Code - + <br/>Built on %1 %2 in %3<br/> 创建于%1 %2, %3平台 - + <h3>Deepin Union Code %1</h3>%2<br/>Copyright 2019-%3 UnionTech Software Technology Co., Ltd. All rights reserved.<br/><br/>This program is released under <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPL-3.0-or-later</a>; we hope that the scheme will be useful, but we do not guarantee that it will be of economic value or fit for a particular purpose. For more information, see the GNU General Public License. <br/> Thanks to all the <a href="opensourcesoftware">open source software</a> used.<br/> <h3>Deepin Union Code%1</h3>%2<br/>版权 2019-%3 统信软件技术有限公司所有<br/><br/>本程序基于<a href="https://www.gnu.org/licenses/gpl-3.0.html">GPL-3.0-or-later</a>发布;我们希望发布的这款程序有用,但不提供保证,甚至不保证它有经济价值和适合特定用途。详情参见GNU通用公共许可协议。<br/> 致谢所有用到的<a href="opensourcesoftware">开源软件</a>。 + + + Error + 错误 + + + + Failed to open the file. + + AppOutputPane @@ -786,6 +796,22 @@ dap端口未就绪,请重试。 coredump文件错误: + + DPushButton + + + Close + 关闭 + + + + DToolBar + + + Navigation + 导航栏 + + DebuggerPlugin @@ -807,12 +833,12 @@ dap端口未就绪,请重试。 DetailWidget - + Browse... 浏览... - + Choose path 选择路径 @@ -828,52 +854,52 @@ dap端口未就绪,请重试。 DetailsView - + Name: 名称: - + Version: 版本: - + Compatibility version: 兼容版本: - + Vendor: 供应商: - + Copyright: 版权: - + Category: 插件类别: - + URL: URL: - + Description: 说明: - + License: 许可: - + Dependencies: 依赖关系: @@ -881,7 +907,7 @@ dap端口未就绪,请重试。 DisplayDocView - + Documents 文件 @@ -889,7 +915,7 @@ dap端口未就绪,请重试。 DisplayProView - + Projects 工程 @@ -1016,7 +1042,7 @@ dap端口未就绪,请重试。 The path of "%1" is not exist! please check and reopen the project. - "%1" 路径不存在! + "%1" 路径不存在!请检查并重新打开项目。 @@ -1203,38 +1229,38 @@ repos path: %0 MainDialog - + New File or Project 新建文件或工程 - + Choose a template: 选择一个模板: - + Templates 模板 - + Create 创建 - + Cancel 取消 - - + + Tip 提示 - + Can not find kit. 找不到配套工具。 @@ -1395,17 +1421,17 @@ repos path: %0 PluginDialog - + Installed Plugins 已安装的插件 - + Close 关闭 - + Restart required. 需要重启。 @@ -2486,11 +2512,6 @@ storage: %2 Revert All 全部还原 - - - Close - 关闭 - Find Previous @@ -2585,11 +2606,6 @@ storage: %2 QToolBar - - - Navigation - 导航栏 - Start @@ -2677,12 +2693,32 @@ Delete anyway? RecentDisplay - + + Open File + 打开文件 + + + + Open Project + 打开工程 + + + + New File or Project + 新建文件或工程 + + + + Recent Open + 最近打开 + + + Documents 文件 - + Projects 工程 @@ -3396,6 +3432,14 @@ Delete anyway? 应用程序输出(&A) + + WindowKeeper + + + Deepin Union Code + + + XmlStreamReader diff --git a/src/base/CMakeLists.txt b/src/base/CMakeLists.txt index 315504680..e491afaaa 100644 --- a/src/base/CMakeLists.txt +++ b/src/base/CMakeLists.txt @@ -35,4 +35,9 @@ add_library( ${CXX_CPP} ) +target_link_libraries( + ${PROJECT_NAME} + ${DtkWidget_LIBRARIES} + ) + install(TARGETS ${PROJECT_NAME} DESTINATION ${LIBRARY_INSTALL_PREFIX}) diff --git a/src/base/abstractcentral.cpp b/src/base/abstractcentral.cpp index 2a787c966..9173a5cc3 100644 --- a/src/base/abstractcentral.cpp +++ b/src/base/abstractcentral.cpp @@ -4,13 +4,16 @@ #include "abstractcentral.h" +#include + #include -#include + +DWIDGET_USE_NAMESPACE class AbstractCentralPrivate { friend class AbstractCentral; - QWidget *widget; + DWidget *widget; }; AbstractCentral::AbstractCentral(void *qwidget) @@ -21,8 +24,8 @@ AbstractCentral::AbstractCentral(void *qwidget) abort(); } - d->widget = static_cast(qwidget); - QWidget::connect(d->widget, &QWidget::destroyed, + d->widget = static_cast(qwidget); + DWidget::connect(d->widget, &DWidget::destroyed, d->widget, [this](){ delete this; }, Qt::UniqueConnection); diff --git a/src/common/util/eventdefinitions.h b/src/common/util/eventdefinitions.h index 4f49bec5d..73202e81b 100644 --- a/src/common/util/eventdefinitions.h +++ b/src/common/util/eventdefinitions.h @@ -84,6 +84,10 @@ OPI_OBJECT(commandLine, OPI_INTERFACE(build) ) +OPI_OBJECT(projectTemplate, + OPI_INTERFACE(newWizard) + ) + struct AnnotationInfo { struct RoleElem diff --git a/src/plugins/collaborators/collaborators.cpp b/src/plugins/collaborators/collaborators.cpp index b2bcaa959..37dc62b93 100644 --- a/src/plugins/collaborators/collaborators.cpp +++ b/src/plugins/collaborators/collaborators.cpp @@ -21,8 +21,8 @@ bool Collaborators::start() WindowService *windowService = ctx.service(WindowService::name()); if (windowService) { if (windowService->addActionNavigation) { - windowService->addActionNavigation("Git", new AbstractAction(new QAction(QIcon(":/core/images/git.png"), QAction::tr("Git")))); - windowService->addActionNavigation("Svn", new AbstractAction(new QAction(QIcon(":/core/images/subversion.png"), QAction::tr("Svn")))); + windowService->addActionNavigation("Git", new AbstractAction(new QAction(QIcon::fromTheme("git"), QAction::tr("Git")))); + windowService->addActionNavigation("Svn", new AbstractAction(new QAction(QIcon::fromTheme("svn"), QAction::tr("Svn")))); } if (windowService->addCentralNavigation) { windowService->addCentralNavigation("Git", diff --git a/src/plugins/core/builtin/actions/edit_20px.svg b/src/plugins/core/builtin/actions/edit_20px.svg new file mode 100644 index 000000000..1e52f550f --- /dev/null +++ b/src/plugins/core/builtin/actions/edit_20px.svg @@ -0,0 +1,7 @@ + + + ICON / sidebar / edit + + + + \ No newline at end of file diff --git a/src/plugins/core/builtin/actions/git_20px.svg b/src/plugins/core/builtin/actions/git_20px.svg new file mode 100644 index 000000000..5acdb4766 --- /dev/null +++ b/src/plugins/core/builtin/actions/git_20px.svg @@ -0,0 +1,7 @@ + + + ICON / sidebar / Git + + + + \ No newline at end of file diff --git a/src/plugins/core/builtin/actions/recent_20px.svg b/src/plugins/core/builtin/actions/recent_20px.svg new file mode 100644 index 000000000..8dadf5c28 --- /dev/null +++ b/src/plugins/core/builtin/actions/recent_20px.svg @@ -0,0 +1,7 @@ + + + ICON / sidebar / history + + + + \ No newline at end of file diff --git a/src/plugins/core/builtin/actions/svn_20px.svg b/src/plugins/core/builtin/actions/svn_20px.svg new file mode 100644 index 000000000..d93c26839 --- /dev/null +++ b/src/plugins/core/builtin/actions/svn_20px.svg @@ -0,0 +1,7 @@ + + + ICON / sidebar /svn + + + + \ No newline at end of file diff --git a/src/plugins/core/core.qrc b/src/plugins/core/core.qrc index 52e709a79..37e9a1573 100644 --- a/src/plugins/core/core.qrc +++ b/src/plugins/core/core.qrc @@ -46,8 +46,6 @@ images/unioncode@200.png images/debug-step-into.png images/verticalSplit.png - images/edit.png - images/recent.png images/git.png images/subversion.png images/debugger_continue.png @@ -71,5 +69,16 @@ images/open_project.png images/reverse.png images/down_arrow.png + images/recent.svg + images/svn.svg + images/edit.svg + images/git.svg + + + builtin/actions/recent_20px.svg + builtin/actions/svn_20px.svg + builtin/actions/edit_20px.svg + builtin/actions/git_20px.svg + diff --git a/src/plugins/core/images/edit.png b/src/plugins/core/images/edit.png deleted file mode 100644 index 7ad9640535fde6196e4d1f92fa5688d1d15f9a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmVPx%s!2paR9Hvtm(Od|KorNnZ#J-O(Sw2tDk$hdEL5c)6qb-lKw+&v4*uv~{BiQ4 z2Mf}x{sAg@)QjLrT|uOl3QZ=2-4>*R3Kc;?L@9^|4_aEg-FY%4hwc8*up8)Q=MtE_ z%u_r9K1L2|y-+VCG-0>%Oj! ztyC(zmX?;D0@w#&7Qht%%EU199oKb7>f;*$*xYPIngq!A{T)IGBR&Y=4S=GQ@`F;! zi6KHM<*LP{2H^YtHX%d_z##xLvG^yG4ghApUu%8S^Sm3WJ5Z@qHpjN-0ZePHi=O9w zQA+Iw@C3kqbCpt_ZFI702PP&aHfFO~vqDKkk!4xMd_F%Hr^C!2Y$tADx&kPd%j=hy zmrKligqZ`&vW9Kj{!uQMw^plFBYyZ_;#~nuO-aDety0Y++$xxKJqkQA(|g zp^hdM?+73a!!ykM*oZlfbB>7g`1p7>m&=*`f2^H&5CnsbO{*h-AP8;~(KW60dC&76 zGP4N7(1@RECmu!7-de3TOGNh^$GO~99|*(nEi(_8GoV_n4hkVo#OY|c&y84Wolq&Y z9l+PP$M@H*q^)?`0H(8jT*)2LJFT@ZgqU_5#}sATk(vWW!4wk_eV0;xOL9P^>OfM# z#<)}+=meq%&~qTM17R3GXXfLb6k5V(E=egLv~9)lKEF#uR};Q4Q5X@;)oQi-jo*V! ihf$)pr5x1zH~b4C@rE#N=gH^*0000 + + ICON / sidebar / edit + + + + \ No newline at end of file diff --git a/src/plugins/core/images/git.svg b/src/plugins/core/images/git.svg new file mode 100644 index 000000000..5acdb4766 --- /dev/null +++ b/src/plugins/core/images/git.svg @@ -0,0 +1,7 @@ + + + ICON / sidebar / Git + + + + \ No newline at end of file diff --git a/src/plugins/core/images/recent.png b/src/plugins/core/images/recent.png deleted file mode 100644 index 2c2c3691203be2cc3c0d0450cd323bd20681ac87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}hdf;zLn7Rh zQzQ}&SRD9foM7?b+uPeUJUl#ZCPgOsX`JiFds#VI0?0=R| ze43CP8X6jC)2qwkCTk$Yw8QBE12eO;@Ssd(pjHEu87`$qjD9prs z+i++7|9uDM+t>4~5W1Jqwqe7Dn1GOwKMmW{UAVhH&a`~6H<`h)WVYgeg|EkfzG3im L^>bP0l+XkK- + + ICON / sidebar / history + + + + \ No newline at end of file diff --git a/src/plugins/core/images/svn.svg b/src/plugins/core/images/svn.svg new file mode 100644 index 000000000..d93c26839 --- /dev/null +++ b/src/plugins/core/images/svn.svg @@ -0,0 +1,7 @@ + + + ICON / sidebar /svn + + + + \ No newline at end of file diff --git a/src/plugins/core/mainframe/windowkeeper.cpp b/src/plugins/core/mainframe/windowkeeper.cpp index 91faafe09..6a618e7f1 100644 --- a/src/plugins/core/mainframe/windowkeeper.cpp +++ b/src/plugins/core/mainframe/windowkeeper.cpp @@ -17,8 +17,9 @@ #include #include #include +#include -#include +#include #include #include #include @@ -151,7 +152,7 @@ void WindowKeeper::createNavRecent(DToolBar *toolbar) if (!toolbar) return; - QAction* navRecent = new QAction(QIcon(":/core/images/recent.png"), MWNA_RECENT, toolbar); + QAction* navRecent = new QAction(QIcon::fromTheme("recent"), MWNA_RECENT, toolbar); navRecent->setCheckable(true); d->navActionGroup->addAction(navRecent); QAction::connect(navRecent, &QAction::triggered, [=](){ @@ -168,7 +169,7 @@ void WindowKeeper::createNavEdit(DToolBar *toolbar) if (!toolbar) return; - QAction* navEdit = new QAction(QIcon(":/core/images/edit.png"), MWNA_EDIT, toolbar); + QAction* navEdit = new QAction(QIcon::fromTheme("edit"), MWNA_EDIT, toolbar); navEdit->setCheckable(true); d->navActionGroup->addAction(navEdit); QAction::connect(navEdit, &QAction::triggered, [=](){ @@ -200,6 +201,7 @@ void WindowKeeper::createMainMenu(DMenu *menu) createHelpActions(menu); } +#include void WindowKeeper::layoutWindow(DMainWindow *window) { qInfo() << __FUNCTION__; @@ -208,9 +210,20 @@ void WindowKeeper::layoutWindow(DMainWindow *window) d->toolbar = new DToolBar(DToolBar::tr("Navigation")); d->toolbar->setMovable(true); - d->toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + d->toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly); + d->toolbar->setIconSize(QSize(20, 20)); + DPalette palette = window->palette(); + palette.setColor(DPalette::Button, palette.color(DPalette::Window)); + d->toolbar->setPalette(palette); + + QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, + this, [=](){ + DPalette palette = d->toolbar->palette(); + palette.setColor(DPalette::Button, palette.color(DPalette::Window)); + d->toolbar->setPalette(palette); + }); - QWidget *titleWiget = new QWidget(); + DWidget *titleWiget = new DWidget(); titleWiget->setFixedSize(65, 29); d->toolbar->addWidget(titleWiget); @@ -219,7 +232,7 @@ void WindowKeeper::layoutWindow(DMainWindow *window) createMainMenu(d->mainMenu); - createStatusBar(window); + //createStatusBar(window); window->setWindowTitle("Deepin Union Code"); window->setWindowIcon(QIcon(":/core/images/unioncode@128.png")); @@ -333,7 +346,7 @@ void WindowKeeper::addActionNavigation(const QString &id, AbstractAction *action void WindowKeeper::addCentralNavigation(const QString &navName, AbstractCentral *central) { qInfo() << __FUNCTION__; - QWidget* inputWidget = static_cast(central->qWidget()); + DWidget* inputWidget = static_cast(central->qWidget()); if(!central || !inputWidget || navName.isEmpty()) return; diff --git a/src/plugins/recent/CMakeLists.txt b/src/plugins/recent/CMakeLists.txt index d5cbaccfa..c474908a5 100644 --- a/src/plugins/recent/CMakeLists.txt +++ b/src/plugins/recent/CMakeLists.txt @@ -23,6 +23,7 @@ add_library(${PROJECT_NAME} SHARED ${CXX_CPP} ${CXX_H} + recent.qrc ) target_link_libraries(${PROJECT_NAME} @@ -31,6 +32,7 @@ target_link_libraries(${PROJECT_NAME} services ${QtUseModules} ${PkgUserModules} + ${DtkWidget_LIBRARIES} ) install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${PLUGIN_INSTALL_PATH}) diff --git a/src/plugins/recent/images/recentLogo1.png b/src/plugins/recent/images/recentLogo1.png new file mode 100644 index 0000000000000000000000000000000000000000..4528211c98f396f2d3e30831c7c0847e8c160fbf GIT binary patch literal 67176 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 ebTdoY0{N?T-qVT3VA5o1W54a_s|%a4}shrDf# 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 literal 0 HcmV?d00001 diff --git a/src/plugins/recent/mainframe/displayitemdelegate.cpp b/src/plugins/recent/mainframe/displayitemdelegate.cpp index ff4beefc1..453cfe513 100644 --- a/src/plugins/recent/mainframe/displayitemdelegate.cpp +++ b/src/plugins/recent/mainframe/displayitemdelegate.cpp @@ -4,13 +4,20 @@ #include "displayitemdelegate.h" +#include +#include +#include +#include +#include +#include + #include #include #include #include -DisplayItemDelegate::DisplayItemDelegate(QObject *parent) - : QStyledItemDelegate (parent) +DisplayItemDelegate::DisplayItemDelegate(QAbstractItemView *parent) + : DStyledItemDelegate (parent) { } @@ -19,16 +26,20 @@ void DisplayItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &o const QModelIndex &index) const { if (index.isValid()) { + painter->save(); + int textTopAlign = Qt::AlignmentFlag::AlignTop; int textBottomAlign = Qt::AlignmentFlag::AlignBottom; QString filePath = index.data(Qt::DisplayRole).toString(); QString fileName = QFileInfo(filePath).fileName(); + QStyleOptionViewItem drawStyle(option); - initStyleOption(&drawStyle, index); - drawStyle.text = ""; //清空文本绘制 - QStyle *pStyle = drawStyle.widget ? drawStyle.widget->style() : QApplication::style(); - pStyle->drawControl(QStyle::CE_ItemViewItem, &drawStyle, painter, drawStyle.widget); + DStyledItemDelegate::initStyleOption(&drawStyle, index); + painter->setRenderHint(QPainter::Antialiasing); + drawStyle.text = ""; //清空文本绘制 + QStyle *pStyle = drawStyle.widget ? drawStyle.widget->style() : DApplication::style(); + pStyle->drawControl(DStyle::CE_ItemViewItem, &drawStyle, painter, drawStyle.widget); QRect iconRect = pStyle->itemPixmapRect(drawStyle.rect, drawStyle.displayAlignment, drawStyle.icon.pixmap(drawStyle.rect.height())); @@ -39,8 +50,6 @@ void DisplayItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &o QString eliedFileName = drawStyle.fontMetrics.elidedText(fileName, Qt::ElideRight, titleTextRect.width()); pStyle->drawItemText(painter, titleTextRect, drawStyle.displayAlignment, drawStyle.palette, true, eliedFileName); - painter->save(); - //缩小字体 QFont nativeFont(drawStyle.font); nativeFont.setPointSize(drawStyle.font.pointSize() - 1); @@ -56,7 +65,7 @@ void DisplayItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &o painter->drawText(nativeTextRect, textBottomAlign, eliedFilePath); painter->restore(); } else { - return QStyledItemDelegate::paint(painter, option, index); + return DStyledItemDelegate::paint(painter, option, index); } } @@ -71,5 +80,5 @@ QSize DisplayItemDelegate::sizeHint(const QStyleOptionViewItem &option, return {option.rect.width(), option.fontMetrics.height() * 2}; } } - return QStyledItemDelegate::sizeHint(option, index); + return DStyledItemDelegate::sizeHint(option, index); } diff --git a/src/plugins/recent/mainframe/displayitemdelegate.h b/src/plugins/recent/mainframe/displayitemdelegate.h index 6af14ccc0..3e7ac9048 100644 --- a/src/plugins/recent/mainframe/displayitemdelegate.h +++ b/src/plugins/recent/mainframe/displayitemdelegate.h @@ -5,12 +5,14 @@ #ifndef DISPLAYITEMDELEGATE_H #define DISPLAYITEMDELEGATE_H -#include +#include -class DisplayItemDelegate : public QStyledItemDelegate +DWIDGET_USE_NAMESPACE + +class DisplayItemDelegate : public DStyledItemDelegate { public: - explicit DisplayItemDelegate(QObject *parent = nullptr); + explicit DisplayItemDelegate(QAbstractItemView *parent = nullptr); protected: virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, diff --git a/src/plugins/recent/mainframe/displayrecentview.cpp b/src/plugins/recent/mainframe/displayrecentview.cpp index 7df53d197..df481b6b4 100644 --- a/src/plugins/recent/mainframe/displayrecentview.cpp +++ b/src/plugins/recent/mainframe/displayrecentview.cpp @@ -6,6 +6,8 @@ #include "common/common.h" #include "displayitemdelegate.h" +#include + #include #include #include @@ -66,19 +68,16 @@ QList DisplayRecentView::itemsFromFile() } DisplayRecentView::DisplayRecentView(QWidget *parent) - : QListView (parent) + : DListView (parent) , cache({}) , model(new QStandardItemModel(this)) { - QListView::viewport()->setAutoFillBackground(false); - QListView::setAttribute(Qt::WA_TranslucentBackground, true); - QListView::setBackgroundRole(QPalette::Base); - QListView::setModel(model); - QListView::setEditTriggers(QListView::NoEditTriggers); - QListView::setItemDelegate(new DisplayItemDelegate(this)); - QListView::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - QListView::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - QListView::setSelectionMode(QAbstractItemView::NoSelection); + DListView::setModel(model); + DListView::setEditTriggers(DListView::NoEditTriggers); + DListView::setItemDelegate(new DisplayItemDelegate(this)); + DListView::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + DListView::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + DListView::setSelectionMode(QAbstractItemView::NoSelection); } QString DisplayRecentView::cachePath() diff --git a/src/plugins/recent/mainframe/displayrecentview.h b/src/plugins/recent/mainframe/displayrecentview.h index f3d6b5e1e..1cdb7239e 100644 --- a/src/plugins/recent/mainframe/displayrecentview.h +++ b/src/plugins/recent/mainframe/displayrecentview.h @@ -5,12 +5,12 @@ #ifndef DISPLAYRECENTVIEW_H #define DISPLAYRECENTVIEW_H -#include +#include #include class QStandardItemModel; class QStandardItem; -class DisplayRecentView : public QListView +class DisplayRecentView : public DTK_WIDGET_NAMESPACE::DListView { Q_OBJECT QStringList cache; diff --git a/src/plugins/recent/mainframe/recentdisplay.cpp b/src/plugins/recent/mainframe/recentdisplay.cpp index 1872aaf6c..7d2a9cbf3 100644 --- a/src/plugins/recent/mainframe/recentdisplay.cpp +++ b/src/plugins/recent/mainframe/recentdisplay.cpp @@ -3,9 +3,17 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "recentdisplay.h" - #include "displayrecentview.h" +#include "services/window/windowservice.h" +#include "plugins/template/wizard/maindialog.h" + +#include +#include +#include +#include +#include +#include #include #include #include @@ -13,6 +21,8 @@ #include #include +DWIDGET_USE_NAMESPACE + static RecentDisplay *ins{nullptr}; class DisplayProView : public DisplayRecentView @@ -186,39 +196,93 @@ class RecentDisplayPrivate QVBoxLayout *vLayoutDir{nullptr}; DisplayProView *proView{nullptr}; DisplayDocView *docView{nullptr}; - QLabel *dirLabel{nullptr}; - QLabel *docLabel{nullptr}; + DLabel *dirLabel{nullptr}; + DLabel *docLabel{nullptr}; + + DPushButton *btnOpenFile{nullptr}; + DPushButton *btnOpenProject{nullptr}; + DPushButton *btnNewFileOrPro{nullptr}; }; -RecentDisplay::RecentDisplay(QWidget *parent) - : QWidget (parent) +RecentDisplay::RecentDisplay(DWidget *parent) + : DWidget (parent) , d(new RecentDisplayPrivate()) { + DFrame *navFrame = new DFrame(); + DFrame *docFrame = new DFrame(); + DFrame *proFrame = new DFrame(); + + navFrame = new DFrame(); + navFrame->setLineWidth(0); + navFrame->setContentsMargins(0, 0, 0, 0); + DStyle::setFrameRadius(navFrame, 0); + QVBoxLayout *vLayoutNav = new QVBoxLayout(); + QLabel *recentLogo = new QLabel(); + QImageReader maskIimageReader(":/recent/images/recentLogo1.png"); + maskIimageReader.setScaledSize(QSize(200, 143)); + QPixmap logo = QPixmap::fromImage(maskIimageReader.read()); + logo.setDevicePixelRatio(recentLogo->devicePixelRatioF()); + recentLogo->setPixmap(logo); + d->btnOpenFile = new DPushButton(tr("Open File")); + d->btnOpenProject = new DPushButton(tr("Open Project")); + d->btnNewFileOrPro = new DPushButton(tr("New File or Project")); + vLayoutNav->setContentsMargins(50, 200, 50, 200); + vLayoutNav->setSpacing(20); + vLayoutNav->setAlignment(Qt::AlignCenter); + vLayoutNav->addWidget(recentLogo); + vLayoutNav->addWidget(d->btnOpenFile); + vLayoutNav->addWidget(d->btnOpenProject); + vLayoutNav->addWidget(d->btnNewFileOrPro); + navFrame->setLayout(vLayoutNav); + + DLabel *recentTitle = new DLabel(tr("Recent Open")); + recentTitle->setForegroundRole(QPalette::BrightText); + recentTitle->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + DFontSizeManager::instance()->bind(recentTitle, DFontSizeManager::T4, QFont::Medium); + + docFrame->setLineWidth(0); d->docView = new DisplayDocView(); - d->docView->setMinimumWidth(400); - d->docLabel = new QLabel(tr("Documents")); + d->docLabel = new DLabel(tr("Documents")); + d->docLabel->setForegroundRole(QPalette::BrightText); + d->docLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + DFontSizeManager::instance()->bind(d->docLabel, DFontSizeManager::T4, QFont::Medium); d->vLayoutDoc = new QVBoxLayout(); - d->vLayoutDoc->setMargin(40); + d->vLayoutDoc->setContentsMargins(10, 10, 10, 10); d->vLayoutDoc->addWidget(d->docLabel); d->vLayoutDoc->setSpacing(20); d->vLayoutDoc->addWidget(d->docView); - d->vLayoutDoc->setAlignment(d->proView, Qt::AlignRight); + docFrame->setLayout(d->vLayoutDoc); + proFrame->setLineWidth(0); d->proView = new DisplayProView(); - d->proView->setMinimumWidth(400); - d->dirLabel = new QLabel(tr("Projects")); + d->dirLabel = new DLabel(tr("Projects")); + d->dirLabel->setForegroundRole(QPalette::BrightText); + d->dirLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + DFontSizeManager::instance()->bind(d->dirLabel, DFontSizeManager::T4, QFont::Medium); d->vLayoutDir = new QVBoxLayout(); - d->vLayoutDir->setMargin(40); + d->vLayoutDir->setContentsMargins(10, 10, 10, 10); d->vLayoutDir->addWidget(d->dirLabel); d->vLayoutDir->setSpacing(20); d->vLayoutDir->addWidget(d->proView); - d->vLayoutDir->setAlignment(d->docView, Qt::AlignLeft); + proFrame->setLayout(d->vLayoutDir); + + QHBoxLayout *proAndDocLayout = new QHBoxLayout(); + proAndDocLayout->addWidget(proFrame); + proAndDocLayout->addSpacing(0); + proAndDocLayout->addWidget(docFrame); + + QVBoxLayout *recentNavLayout = new QVBoxLayout(); + recentNavLayout->setContentsMargins(20, 0, 25, 20); + recentNavLayout->addSpacing(15); + recentNavLayout->setAlignment(Qt::AlignTop); + recentNavLayout->addWidget(recentTitle); + recentNavLayout->addSpacing(15); + recentNavLayout->addLayout(proAndDocLayout); d->hLayout = new QHBoxLayout(); - d->hLayout->addStretch(); - d->hLayout->addLayout(d->vLayoutDir); - d->hLayout->addLayout(d->vLayoutDoc); - d->hLayout->addStretch(); + d->hLayout->setContentsMargins(0, 0, 0, 0); + d->hLayout->addWidget(navFrame); + d->hLayout->addLayout(recentNavLayout); setLayout(d->hLayout); QObject::connect(d->proView, &QListView::doubleClicked, @@ -228,6 +292,18 @@ RecentDisplay::RecentDisplay(QWidget *parent) QObject::connect(d->docView, &QListView::doubleClicked, this, &RecentDisplay::doDoubleCliekedDocument, Qt::UniqueConnection); + + QObject::connect(d->btnOpenFile, &DPushButton::clicked, + this, &RecentDisplay::btnOpenFileClicked, + Qt::UniqueConnection); + + QObject::connect(d->btnOpenProject, &DPushButton::clicked, + this, &RecentDisplay::btnOpenProjectClicked, + Qt::UniqueConnection); + + QObject::connect(d->btnNewFileOrPro, &DPushButton::clicked, + this, &RecentDisplay::btnNewFileOrProClicked, + Qt::UniqueConnection); } RecentDisplay::~RecentDisplay() @@ -274,3 +350,28 @@ void RecentDisplay::doDoubleCliekedDocument(const QModelIndex &index) editor.openFile(filePath); } +void RecentDisplay::btnOpenFileClicked() +{ + QString dir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); + QString filePath = DFileDialog::getOpenFileName(nullptr, dpfservice::DIALOG_OPEN_DOCUMENT_TITLE, dir); + if (filePath.isEmpty() && !QFileInfo(filePath).exists()) + return; + recent.saveOpenedFile(filePath); + editor.openFile(filePath); +} + +void RecentDisplay::btnOpenProjectClicked() +{ + QString dir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); + QString filePath = DFileDialog::getOpenFileName(nullptr, dpfservice::DIALOG_OPEN_DOCUMENT_TITLE, dir); + if (filePath.isEmpty() && !QFileInfo(filePath).exists()) + return; + recent.saveOpenedFile(filePath); + editor.openFile(filePath); +} + +void RecentDisplay::btnNewFileOrProClicked() +{ + projectTemplate.newWizard(); +} + diff --git a/src/plugins/recent/mainframe/recentdisplay.h b/src/plugins/recent/mainframe/recentdisplay.h index dd9f1f2ad..30c762b3c 100644 --- a/src/plugins/recent/mainframe/recentdisplay.h +++ b/src/plugins/recent/mainframe/recentdisplay.h @@ -5,11 +5,11 @@ #ifndef RECENTDISPLAY_H #define RECENTDISPLAY_H -#include +#include #include "common/common.h" class RecentDisplayPrivate; -class RecentDisplay : public QWidget +class RecentDisplay : public DTK_WIDGET_NAMESPACE::DWidget { Q_OBJECT RecentDisplayPrivate *const d; @@ -19,7 +19,7 @@ class RecentDisplay : public QWidget ProjectLanguage, ProjectWorkspace, }; - explicit RecentDisplay(QWidget *parent = nullptr); + explicit RecentDisplay(DTK_WIDGET_NAMESPACE::DWidget *parent = nullptr); virtual ~RecentDisplay(); static RecentDisplay *instance(); @@ -32,6 +32,10 @@ public slots: private slots: void doDoubleClickedProject(const QModelIndex &index); void doDoubleCliekedDocument(const QModelIndex &index); + + void btnOpenFileClicked(); + void btnOpenProjectClicked(); + void btnNewFileOrProClicked(); }; #endif // RECENTDISPLAY_H diff --git a/src/plugins/recent/recent.qrc b/src/plugins/recent/recent.qrc new file mode 100644 index 000000000..a4c2475ed --- /dev/null +++ b/src/plugins/recent/recent.qrc @@ -0,0 +1,6 @@ + + + images/recentLogo1.png + images/recentLogo2.png + + diff --git a/src/plugins/template/CMakeLists.txt b/src/plugins/template/CMakeLists.txt index d82b69e60..f30246863 100644 --- a/src/plugins/template/CMakeLists.txt +++ b/src/plugins/template/CMakeLists.txt @@ -7,6 +7,7 @@ set(CXX_CPP wizard/maindialog.cpp wizard/templateparser.cpp wizard/projectgenerate.cpp + transceiver/templatereceiver.cpp templatemanager.cpp templateplugin.cpp templateplugin.json @@ -17,6 +18,7 @@ set(CXX_H wizard/maindialog.h wizard/templateparser.h wizard/projectgenerate.h + transceiver/templatereceiver.h templatemanager.h templateplugin.h ) diff --git a/src/plugins/template/transceiver/templatereceiver.cpp b/src/plugins/template/transceiver/templatereceiver.cpp new file mode 100644 index 000000000..6c60b62d4 --- /dev/null +++ b/src/plugins/template/transceiver/templatereceiver.cpp @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "templatereceiver.h" +#include "templatemanager.h" +#include "common/common.h" + +TemplateReceiver::TemplateReceiver(QObject *parent) + : dpf::EventHandler (parent) + , dpf::AutoEventHandlerRegister () +{ + +} + +dpf::EventHandler::Type TemplateReceiver::type() +{ + return dpf::EventHandler::Type::Sync; +} + +QStringList TemplateReceiver::topics() +{ + return { projectTemplate.topic }; +} + +void TemplateReceiver::eventProcess(const dpf::Event &event) +{ + if (event.data() == projectTemplate.newWizard.name) { + TemplateManager::instance()->newWizard(); + } +} diff --git a/src/plugins/template/transceiver/templatereceiver.h b/src/plugins/template/transceiver/templatereceiver.h new file mode 100644 index 000000000..da504b0c5 --- /dev/null +++ b/src/plugins/template/transceiver/templatereceiver.h @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef RECENTRECEIVER_H +#define RECENTRECEIVER_H + +#include + +class TemplateReceiver : public dpf::EventHandler, dpf::AutoEventHandlerRegister +{ + Q_OBJECT + friend class dpf::AutoEventHandlerRegister; +public: + explicit TemplateReceiver(QObject * parent = nullptr); + + static Type type(); + + static QStringList topics(); + + virtual void eventProcess(const dpf::Event& event) override; +}; + +class RecentProxy : public QObject +{ + Q_OBJECT + RecentProxy(){} + RecentProxy(const RecentProxy&) = delete; + +public: + static RecentProxy* instance(); + +signals: + void saveOpenedProject(const QString &kitName, + const QString &language, + const QString &workspace); + void saveOpenedFile(const QString &filePath); +}; + +#endif // RECENTRECEIVER_H diff --git a/src/plugins/template/wizard/maindialog.cpp b/src/plugins/template/wizard/maindialog.cpp index 8bd254135..7204822ec 100644 --- a/src/plugins/template/wizard/maindialog.cpp +++ b/src/plugins/template/wizard/maindialog.cpp @@ -13,10 +13,10 @@ #include #include #include +#include #include #include -#include #include #include #include