diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts index 38757366..2f08f417 100644 --- a/src/translations/Dyt_zh_CN.ts +++ b/src/translations/Dyt_zh_CN.ts @@ -103,25 +103,30 @@ CodeEdtUI - - &file - - - - - &Import the template - - - - - &save - - - - + matlab editor + + + &bat + + + + + &Control + + + + + &Run + + + + + &Save + + CodeEdtUIClass @@ -446,27 +451,32 @@ MainFrame - + Dyt - + file manager - + simu manager - + play manager - + + window manager + + + + system manager @@ -630,14 +640,6 @@ - - ModelBrowser - - - model elements - - - ModelTreeWidget @@ -951,43 +953,43 @@ QtConeWaveComponentManager - - + + ConeWaveComponent - + Height - + Radius - + levelCount - + levelHeight - + Color1 - + Color2 - + Color3 @@ -1093,28 +1095,28 @@ QtDashedLineComponentManager - - + + DashedLineComponent - + Start - + End - + Radius - + Color @@ -1130,12 +1132,12 @@ QtEntityPropertyManager - + Name - + Transform @@ -1217,13 +1219,13 @@ QtMeshComponetManager - - + + MeshComponent - + Mesh @@ -1273,13 +1275,13 @@ QtPathComponentManager - - + + PathComponent - + Path @@ -1529,42 +1531,42 @@ QtWorkspacePropertyManager - + Name - + Description - + Timestep - + SimMatlab - + MatlabParam - + Wave - + RD - + Report @@ -1687,6 +1689,14 @@ + + WindowManagerMenu + + + WindowManagerMenu + + + WorkSpaceDlg diff --git a/src/ui/DockTitleBar.cpp b/src/ui/DockTitleBar.cpp index ce749a1a..89b061a6 100644 --- a/src/ui/DockTitleBar.cpp +++ b/src/ui/DockTitleBar.cpp @@ -13,7 +13,7 @@ DockTitleBar::DockTitleBar(QWidget* parent) : DockWidgetTitleBar(parent) , ui(new Ui::DockTitleBar) { ui->setupUi(this); - + connect(ui->sys_close, &QPushButton::clicked, this, &DockTitleBar::signalClose); } DockTitleBar::~DockTitleBar() { diff --git a/src/ui/DockWidget.cpp b/src/ui/DockWidget.cpp index f373676f..6115d28e 100644 --- a/src/ui/DockWidget.cpp +++ b/src/ui/DockWidget.cpp @@ -1,17 +1,15 @@ #include "DockWidget.h" -#include #include -#include -#include -#include -#include -#include -#include + +#include "ui/Menu/WindowManagerMenu.h" +#include "common/SpdLogger.h" +#include "ui/MainFrame.h" DockWidgetTitleBar::DockWidgetTitleBar(QWidget* parent) : QWidget(parent) { + } DockWidgetTitleBar::~DockWidgetTitleBar() { @@ -31,6 +29,10 @@ QSize DockWidgetTitleBar::minimumSizeHint() const { DockWidget::DockWidget(const QString& title, QWidget* parent) : QDockWidget(title, parent) { setFeatures(DockWidgetClosable | DockWidgetMovable | DockWidgetFloatable); + WindowManagerMenu* windowManagerMenu = MainFrame::Get().GetMenuManager("window_manager"); + if (nullptr != windowManagerMenu) { + windowManagerMenu->AddDockWidget(this); + } } DockWidget::DockWidget(QWidget* parent) @@ -50,7 +52,17 @@ void DockWidget::setWindowTitle(const QString& text) { } void DockWidget::SetDockWidgetTitleBar(DockWidgetTitleBar* titleBar) { + if (nullptr != titleBar_) { + disconnect(titleBar_, &DockWidgetTitleBar::signalClose, this, &DockWidget::close); + } titleBar_ = titleBar; + if (nullptr == titleBar_) { + LOG_ERROR("DockWidget::SetDockWidgetTitleBar titleBar is nullptr"); + return; + } + + titleBar_->SetTitle(windowTitle()); + connect(titleBar_, &DockWidgetTitleBar::signalClose, this, &DockWidget::close); QDockWidget::setTitleBarWidget(titleBar_); } diff --git a/src/ui/DockWidget.h b/src/ui/DockWidget.h index 1f08472a..5307480d 100644 --- a/src/ui/DockWidget.h +++ b/src/ui/DockWidget.h @@ -18,6 +18,9 @@ public: return minimumSizeHint(); } QSize minimumSizeHint() const override; + +Q_SIGNALS: + void signalClose(); }; class DockWidget : public QDockWidget { diff --git a/src/ui/MainFrame.cpp b/src/ui/MainFrame.cpp index cedba96a..b4bbfe7c 100644 --- a/src/ui/MainFrame.cpp +++ b/src/ui/MainFrame.cpp @@ -16,12 +16,14 @@ #include "ui/Menu/DynamicDisplayMenu.h" #include "ui/Menu/SystemManagerMenu.h" #include "ui/Menu/PlayManagerMenu.h" +#include "ui/Menu/WindowManagerMenu.h" #include "viewer/QtOsgViewWidget.h" #include "chartPlot/FitCurveDialog.h" #include "chartPlot/SurfaceDialog.h" #include "ui/Menu/ChartPlotMenu.h" // lz 20140914 +#include "common/SpdLogger.h" #include "ui_MainFrame.h" @@ -107,6 +109,9 @@ void MainFrame::InitUI() { PlayManagerMenu* playMenu = new PlayManagerMenu(this); AddMenuWidget("play_manager", tr("play manager"), playMenu); + WindowManagerMenu* windowMenu = new WindowManagerMenu(this); + AddMenuWidget("window_manager", tr("window manager"), windowMenu); + SystemManagerMenu* system_ = new SystemManagerMenu(this); AddMenuWidget("system_manager", tr("system manager"), system_); @@ -140,3 +145,20 @@ void MainFrame::AddMenuWidget(const QString& name, const QString& text, QWidget* int index = ui->menuWidget->addWidget(widget); menuWidget_.insert(btn, index); } + +QWidget* MainFrame::GetMenuWidget(const QString& name) { + int index = -1; + for (auto it = menuWidget_.begin(); it != menuWidget_.end(); ++it) { + if (it.key()->objectName() == name) { + index = it.value(); + break; + } + }; + + if (index < 0) { + LOG_INFO("not find menu widget : {}", name.toLocal8Bit().constData()); + return nullptr; + } + + return ui->menuWidget->widget(index); +} diff --git a/src/ui/MainFrame.h b/src/ui/MainFrame.h index b8dbec06..9b139c0d 100644 --- a/src/ui/MainFrame.h +++ b/src/ui/MainFrame.h @@ -20,6 +20,18 @@ public: static MainFrame& Get(); + template + T* GetMenuManager(const QString& name) { + QWidget* widget = GetMenuWidget(name); + if (widget) { + T* t = qobject_cast(widget); + if (t) { + return t; + } + } + return nullptr; + } + protected: void paintEvent(QPaintEvent* event) override; @@ -31,6 +43,7 @@ protected: private: void InitUI(); void AddMenuWidget(const QString& name, const QString& text, QWidget* widget); + QWidget* GetMenuWidget(const QString& name); private: Ui::MainFrame* ui; diff --git a/src/ui/Menu/ViewManagerMenu.cpp b/src/ui/Menu/ViewManagerMenu.cpp index 00d7fce4..fc2eb46d 100644 --- a/src/ui/Menu/ViewManagerMenu.cpp +++ b/src/ui/Menu/ViewManagerMenu.cpp @@ -1,5 +1,6 @@ #include "ViewManagerMenu.h" +#include "ui/DockWidget.h" #include "ui_ViewManagerMenu.h" ViewManagerMenu::ViewManagerMenu(QWidget* parent) diff --git a/src/ui/Menu/WindowManagerMenu.cpp b/src/ui/Menu/WindowManagerMenu.cpp new file mode 100644 index 00000000..ee65a962 --- /dev/null +++ b/src/ui/Menu/WindowManagerMenu.cpp @@ -0,0 +1,49 @@ +#include "ui/Menu/WindowManagerMenu.h" + +#include + +#include "ui/MainFrame.h" +#include "ui/DockWidget.h" +#include "common/SpdLogger.h" + +#include "ui_WindowManagerMenu.h" + +const int DockWidgetRole = Qt::UserRole + 1; + +WindowManagerMenu::WindowManagerMenu(QWidget* parent) + : QWidget(parent) + , ui(new Ui::WindowManagerMenu) { + ui->setupUi(this); + + +} + +WindowManagerMenu::~WindowManagerMenu() { + delete ui; +} + +void WindowManagerMenu::AddDockWidget(DockWidget* dockWidget) { + if (nullptr == dockWidget) { + LOG_ERROR("dockWidget is nullptr"); + return; + } + + QListWidgetItem* item = new QListWidgetItem(dockWidget->windowTitle()); + connect(dockWidget, &DockWidget::windowTitleChanged, [item](const QString& title) { + item->setText(title); + } + ); + + item->setCheckState(Qt::Checked); + connect(ui->listWidget, &QListWidget::itemClicked, [](QListWidgetItem* item) { + bool checked = !(item->checkState() == Qt::Checked); + item->setCheckState(checked ? Qt::Checked : Qt::Unchecked); + item->data(DockWidgetRole).value()->setVisible(checked); + }); + item->setData(DockWidgetRole, QVariant::fromValue(dockWidget)); + ui->listWidget->addItem(item); +} + +void WindowManagerMenu::RemoveDockWidget(class DockWidget* dockWidget) { + +} diff --git a/src/ui/Menu/WindowManagerMenu.h b/src/ui/Menu/WindowManagerMenu.h new file mode 100644 index 00000000..586e2dad --- /dev/null +++ b/src/ui/Menu/WindowManagerMenu.h @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include "workspace/WorkSpace.h" + +namespace Ui { + class WindowManagerMenu; +} + +class WindowManagerMenu : public QWidget { + Q_OBJECT + +public: + WindowManagerMenu(QWidget* parent = 0); + ~WindowManagerMenu() override; + + void AddDockWidget(class DockWidget* dockWidget); + void RemoveDockWidget(class DockWidget* dockWidget); + +protected: + + +private: + Ui::WindowManagerMenu* ui; +}; \ No newline at end of file diff --git a/src/ui/Menu/WindowManagerMenu.ui b/src/ui/Menu/WindowManagerMenu.ui new file mode 100644 index 00000000..1a7225ee --- /dev/null +++ b/src/ui/Menu/WindowManagerMenu.ui @@ -0,0 +1,47 @@ + + + WindowManagerMenu + + + + 0 + 0 + 847 + 91 + + + + WindowManagerMenu + + + + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + QListView::LeftToRight + + + + + + + Qt::Horizontal + + + + 408 + 20 + + + + + + + + + diff --git a/src/ui/ModelBrowser.cpp b/src/ui/ModelBrowser.cpp index cec6925e..3c65d8d0 100644 --- a/src/ui/ModelBrowser.cpp +++ b/src/ui/ModelBrowser.cpp @@ -28,7 +28,6 @@ void ModelBrowser::AttachDock(DockWidget* dockWidget) { dockWidget->setWidget(this); DockTitleBar* dockTitleBar = new DockTitleBar; - dockTitleBar->SetTitle(tr("model elements")); dockWidget->SetDockWidgetTitleBar(dockTitleBar); }