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: