DYT/Source/src/ui/MainFrame.cpp
2024-11-22 23:11:48 +08:00

155 lines
4.7 KiB
C++

#include "MainFrame.h"
#include <assert.h>
#include <QStyleOption>
#include <QPainter>
#include <QGridLayout>
#include <QPushButton>
#include <qDebug>
#include "ui/MainWindow.h"
#include "ui/Menu/FileManagerMenu.h"
#include "ui/Menu/ViewManagerMenu.h"
#include "ui/Menu/PlanManagerMenu.h"
#include "ui/Menu/DynamicDisplayMenu.h"
#include "ui/Menu/SystemManagerMenu.h"
#include "ui/Menu/PlayManagerMenu.h"
#include "viewer/QtOsgViewWidget.h"
#include "chartPlot/FitCurveDialog.h"
#include "chartPlot/SurfaceDialog.h"
#include "ui/Menu/ChartPlotMenu.h" // lz 20140914
#include "ui_MainFrame.h"
MainFrame* s_instance { nullptr };
MainFrame::MainFrame(QWidget *parent) :
FramelessWindow(parent),
ui(new Ui::MainFrame)
{
ui->setupUi(this);
assert(nullptr == s_instance);
s_instance = this;
ui->titleFrame->SetMainWidget(this);
ui->titleFrame->SetTitle(tr("Dyt"));
ui->titleFrame->InitMenuWidget();
ui->titleFrame->InitSkinMemu();
ui->titleFrame->SetSysButton(FrameTitleBar::FTB_ICON | FrameTitleBar::FTB_MENU |
FrameTitleBar::FTB_SKIN | FrameTitleBar::FTB_MIN | FrameTitleBar::FTB_MAX | FrameTitleBar::FTB_CLOSE);
InitUI();
SetTitleBar(ui->titleFrame);
}
MainFrame::~MainFrame()
{
delete ui;
assert(nullptr != s_instance);
s_instance = nullptr;
}
MainFrame& MainFrame::Get() {
return *s_instance;
}
void MainFrame::paintEvent(QPaintEvent* event) {
QStyleOption opt;
opt.initFrom(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
void MainFrame::OnMenuTrigged() {
qDebug() << __FUNCTION__;
QPushButton* btn = reinterpret_cast<QPushButton*>(sender());
if (!menuWidget_.contains(btn)) {
qDebug() << __FUNCTION__ << "not find btn:" << btn->objectName();
return;
}
int index = menuWidget_.value(btn, -1);
SetCurrentMenu(index);
}
void MainFrame::SetCurrentMenu(int index) {
if (index < 0 || index >= ui->menuWidget->count()) {
qDebug() << __FUNCTION__ << "index:" << index << " menu widget count:" << ui->menuWidget->count();
return;
}
ui->menuWidget->setCurrentIndex(index);
}
void MainFrame::InitUI() {
QGridLayout* layout = new QGridLayout(ui->mainWindow);
layout->setContentsMargins(0, 0, 0, 0);
FileManagerMenu* fileMenu = new FileManagerMenu(this);
AddMenuWidget("file_manager", tr("file manager"), fileMenu);
AddMenuWidget("view_manager", tr("view manager"), new ViewManagerMenu(this));
AddMenuWidget("plan_manager", tr("plan manager"), new PlanManagerMenu(this));
AddMenuWidget("dynamic_display", tr("dynamic display"), new DynamicDisplayMenu(this));
SystemManagerMenu* system_ = new SystemManagerMenu(this);
AddMenuWidget("system_manager", tr("system manager"), system_);
PlayManagerMenu* playMenu = new PlayManagerMenu(this);
AddMenuWidget("play_manager", tr("play manager"), playMenu);
// ChartPlotMenu *chartMenu = new ChartPlotMenu(this);
// AddMenuWidget("chartPlot_manager", tr("chartPlot manager"), chartMenu);
MainWindow* mainWindow = new MainWindow(this);
layout->addWidget(mainWindow);
QtOsgViewWidget* viewWidget = mainWindow->GetViewWidget();
connect(fileMenu, &FileManagerMenu::LoadDyt, viewWidget, &QtOsgViewWidget::OnLoadDyt);
//connect(chartMenu, &ChartPlotMenu::signalAddCurve, mainWindow->GetFitCurveDlg(), &FitCurveDialog::slotAddSeries);
//connect(chartMenu, &ChartPlotMenu::signalDelCurve, mainWindow->GetFitCurveDlg(), &FitCurveDialog::slotDelCurve);
//connect(chartMenu, &ChartPlotMenu::signalAddLgCurve, mainWindow->GetFitYLgCurveDlg(), &FitCurveDialog::slotAddSeries);
//connect(chartMenu, &ChartPlotMenu::signalDelLgCurve, mainWindow->GetFitYLgCurveDlg(), &FitCurveDialog::slotDelCurve);
//connect(chartMenu, &ChartPlotMenu::signalAddSurfaceCurve, mainWindow->GetSurfaceDlg(), &SurfaceDialog::slotAddSeries);
connect(system_, &SystemManagerMenu::signalShowUISetting, mainWindow, &MainWindow::slotShowUISetting);
if (ui->menuWidget->count() > 0) {
ui->menuWidget->setCurrentIndex(0);
menuWidget_.isEmpty() ? assert(false) : menuWidget_.key(0)->setChecked(true);
qDebug() << __FUNCTION__ << "menu set current";
}
}
void MainFrame::AddMenuWidget(const QString& name, const QString& text, QWidget* widget) {
if (nullptr == widget) {
qDebug() << __FUNCTION__ << "widget is nullptr";
return;
}
QPushButton* btn = ui->titleFrame->InsertPushButtonMenu(text, menuWidget_.count());
if (nullptr == btn) {
return;
}
btn->setObjectName(name);
connect(btn, &QPushButton::clicked, this, &MainFrame::OnMenuTrigged);
int index = ui->menuWidget->addWidget(widget);
menuWidget_.insert(btn, index);
}