comac_desk_app/PostProcessing/Graph2DSettings.cpp

458 lines
17 KiB
C++

#include "Graph2DSettings.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QStandardItemModel>
#include "ElaText.h"
#include "ElaPivot.h"
#include "ElaTabWidget.h"
#include "ElaScrollPageArea.h"
#include "ElaCheckBox.h"
#include "ElaComboBox.h"
#include "ElaMessageButton.h"
#include "ElaMultiSelectComboBox.h"
#include "ElaPlainTextEdit.h"
#include "ElaProgressBar.h"
#include "ElaRadioButton.h"
#include "ElaScrollPageArea.h"
#include "ElaSlider.h"
#include "ElaSpinBox.h"
#include "ElaText.h"
#include "ElaToggleButton.h"
#include "ElaToggleSwitch.h"
#include "ElaListView.h"
#include "ElaScrollBar.h"
#include "ElaTheme.h"
#include "ElaLineEdit.h"
#include "ElaScrollArea.h"
#include "ElaDoubleSpinBox.h"
#include <QListWidget>
namespace pst
{
Graph2DSettings::Graph2DSettings(QWidget* parent, Cure2DType type)
: T_BasePage(parent)
, m_variableValueIndex(-1)
, page2RowCount(0)
{
//设置基本布局属性
setFixedWidth(300);
setContentsMargins(0, 0, 0, 0);
}
Graph2DSettings::~Graph2DSettings()
{
}
void Graph2DSettings::setCurveList(const QList<QString>& curveList)
{
}
void Graph2DSettings::addCurveToList(QString curveName)
{
}
void Graph2DSettings::clearCurveList()
{
}
void Graph2DSettings::setCurrentFixedValueIndex(int index)
{
m_variableValueIndex = index;
}
int Graph2DSettings::getCurrentVariableValueIndex() const
{
return m_variableValueIndex;
}
void Graph2DSettings::updateUI()
{
_titleFontSize = 14;
_contentWidth = 290;
//添加选项卡UI 数据 显示
addTopTabPivotUI();
//添加曲线列表UI
addCurveListUI();
//添加变量轴UI
addVariableAxistUI();
setVariableValue();
//固定值UI
addFiexedValueToUI();
setFixedValue();
//类别UI
addCategaryToUI();
setCategoryData();
ElaCheckBox* _checkBox1 = new ElaCheckBox("归一化", this);
ElaCheckBox* _checkBox2 = new ElaCheckBox("dB", this);
ElaScrollPageArea* _dateOperationArea = new ElaScrollPageArea(this);
_dateOperationArea->setMaximumWidth(_contentWidth);
_dateOperationArea->setFixedHeight(60);
QGridLayout* _categoryLayoutH = new QGridLayout(_dateOperationArea);
_categoryLayoutH->addWidget(_checkBox1, 0, 0);
_categoryLayoutH->addWidget(_checkBox2, 0, 1);
_page1Layout->addWidget(_dateOperationArea);
_page1Layout->addStretch();
_page1Layout->setContentsMargins(10, 10, 10, 0);
//---------- 第二页内容
//QWidget* page2CentralWidget = new QWidget(this);
_page2Layout = new QGridLayout(m_page2CentralWidget);
addXAxisSettingUI();
addYAxisSettingUI();
/* _page2Layout->addWidget(_titleVText, 1, 0);
_page2Layout->addWidget(_titleVEdit, 1, 1);*/
QSpacerItem* horizontalSpacer = new QSpacerItem(40, 20,
QSizePolicy::Expanding, QSizePolicy::Expanding);
_page2Layout->addItem(horizontalSpacer, ++page2RowCount, 0);
_page2Layout->setContentsMargins(10, 10, 10, 0);
addCentralWidget(m_tabWidget, true, true, 0);
connect(m_variableAxisValue, QOverload<int>::of(&ElaComboBox::currentIndexChanged),
this, &Graph2DSettings::slot_variableAxisChanged);
}
void Graph2DSettings::setCategaryData(const QList<QString>& categaryList)
{
m_categoryValueList = categaryList;
}
QList<QString> Graph2DSettings::getCategaryData() const
{
return m_categoryValueList;
}
QString Graph2DSettings::getFontFamilyString(const QString& font)
{
if (font == "宋体")
{
return "SimSun";
}
else if (font == "微软雅黑")
{
return "Microsoft YaHei";
}
return QString();
}
void Graph2DSettings::addTopTabPivotUI()
{
//选项卡切换标题
ElaPivot* _pivot = new ElaPivot(this);
_pivot->setPivotSpacing(12);
_pivot->setMarkWidth(40);
_pivot->appendPivot("数据");
_pivot->appendPivot("显示");
_pivot->setCurrentIndex(0);
_pivot->setTextPixelSize(16);
setCustomWidget(_pivot);
//---------- 第一页内容
m_page1CentralWidget = new QWidget(this);
m_page2CentralWidget = new QWidget(this);
//选项卡视图
m_tabWidget = new ElaTabWidget(this);
m_tabWidget->tabBar()->hide();
m_tabWidget->addTab(m_page1CentralWidget, "");
m_tabWidget->addTab(m_page2CentralWidget, "");
connect(_pivot, &ElaPivot::pivotClicked, this, [=](int index) {
m_tabWidget->setCurrentIndex(index);
});
_page1Layout = new QVBoxLayout(m_page1CentralWidget);
}
void Graph2DSettings::addCurveListUI()
{
ElaText* listText = new ElaText("曲线", this);
listText->setTextPixelSize(_titleFontSize);
m_curveNameListView = new ElaListView(this);
m_curveNameListView->setFixedHeight(150);
QStandardItemModel* model = new QStandardItemModel(m_curveNameListView);
for (size_t i = 0; i < 10; i++)
{
model->appendRow(new QStandardItem(QString("曲线%1").arg(i)));
}
m_curveNameListView->setModel(model);
ElaScrollBar* listViewFloatScrollBar = new ElaScrollBar(m_curveNameListView->verticalScrollBar(), m_curveNameListView);
listViewFloatScrollBar->setIsAnimation(true);
QVBoxLayout* listLayout = new QVBoxLayout();
listLayout->addWidget(m_curveNameListView);
_page1Layout->addWidget(listText);
_page1Layout->addLayout(listLayout);
}
void Graph2DSettings::addVariableAxistUI()
{
//变量轴
ElaText* variableAxisText = new ElaText("变量轴", this);
variableAxisText->setTextPixelSize(_titleFontSize);
m_variableAxisValue = new ElaComboBox(this);
_page1Layout->addWidget(variableAxisText);
_page1Layout->addWidget(m_variableAxisValue);
}
void Graph2DSettings::setFixedValue()
{
for (int num = 0, index = 0; num < m_FixedVariableValueList.size(); num++)
{
if (num == m_variableValueIndex)
{
continue;
}
const auto& i = m_FixedVariableValueList[num];
ElaText* _phiText2 = new ElaText(i.first, this);
_phiText2->setTextPixelSize(_titleFontSize);
ElaComboBox* _phiComboBox2 = new ElaComboBox(this);
QStringList _phiComboList2{ i.second };
_phiComboBox2->addItems(_phiComboList2);
_fixedValueLayoutH->addWidget(_phiText2, index, 0);
_fixedValueLayoutH->addWidget(_phiComboBox2, index++, 1);
m_currentFixedValueWidgets.append({ _phiText2, _phiComboBox2 });
}
}
void Graph2DSettings::setVariableValue()
{
for (auto i : m_FixedVariableValueList)
{
m_variableAxisValue->addItem(i.first);
}
m_variableAxisValue->setCurrentIndex(m_variableValueIndex);
}
void Graph2DSettings::addFiexedValueToUI()
{
//固定值
ElaText* _fixedValueText = new ElaText("固定值", this);
_fixedValueText->setTextPixelSize(_titleFontSize);
//固定值布局
QWidget* _fixedValueArea = new QWidget(this);
_fixedValueArea->setMaximumWidth(_contentWidth);
_fixedValueArea->setStyleSheet("background:transparent;");
_fixedValueLayoutH = new QGridLayout(_fixedValueArea);
ElaScrollArea* _elaScrollArea = new ElaScrollArea(this);
_elaScrollArea->setWidget(_fixedValueArea);
_elaScrollArea->setWidgetResizable(true);
_elaScrollArea->setFixedHeight(100);
_elaScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
_elaScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
_page1Layout->addWidget(_fixedValueText);
_page1Layout->addWidget(_elaScrollArea);
}
void Graph2DSettings::addCategaryToUI()
{
//类别
ElaText* _categoryText = new ElaText("类别", this);
_categoryText->setTextPixelSize(_titleFontSize);
//固定值布局
m_categryValue = new ElaComboBox(this);
_page1Layout->addWidget(_categoryText);
_page1Layout->addWidget(m_categryValue);
}
void Graph2DSettings::setCategoryData()
{
for (auto i : m_categoryValueList)
{
m_categryValue->addItem(i);
}
}
void Graph2DSettings::addXAxisSettingUI()
{
ElaText* _axisX = new ElaText("横轴", this);
_axisX->setTextPixelSize(_titleFontSize);
//横轴标题
ElaText* _titleHTextX = new ElaText("横轴标题", this);
_titleHTextX->setTextPixelSize(_titleFontSize);
_titleHEditX = new ElaLineEdit(this);
_titleHEditX->setText("x轴");
//字体
ElaText* _fontFamilyTextX = new ElaText("字体", this);
_fontFamilyTextX->setTextPixelSize(_titleFontSize);
_fontFamilyComboBoxX = new ElaComboBox(this);
QStringList _fontFamilyComboListX{
"宋体",
"微软雅黑",
};
_fontFamilyComboBoxX->addItems(_fontFamilyComboListX);
//字号
ElaText* _fontSizeTextX = new ElaText("字号", this);
_fontSizeTextX->setTextPixelSize(_titleFontSize);
_fontSizeInputX = new ElaSpinBox(this);
//最小值
ElaText* _minTextX = new ElaText("起点", this);
_minTextX->setTextPixelSize(_titleFontSize);
_minInputX = new ElaDoubleSpinBox(this);
_minInputX->setMinimum(-100000.0);
//最大值
ElaText* _maxTextX = new ElaText("终点", this);
_maxTextX->setTextPixelSize(_titleFontSize);
_maxInputX = new ElaDoubleSpinBox(this);
_maxInputX->setMinimum(-100000.0);
//步长
ElaText* _stepTextX = new ElaText("步长", this);
_stepTextX->setTextPixelSize(_titleFontSize);
_setpInputX = new ElaDoubleSpinBox(this);
_setpInputX->setMinimum(0.00001);
//页面2的布局
_page2Layout->addWidget(_axisX, page2RowCount, 0);
_page2Layout->addWidget(_titleHTextX, ++page2RowCount, 0);
_page2Layout->addWidget(_titleHEditX, page2RowCount, 1);
_page2Layout->addWidget(_fontFamilyTextX, ++page2RowCount, 0);
_page2Layout->addWidget(_fontFamilyComboBoxX, page2RowCount, 1);
_page2Layout->addWidget(_fontSizeTextX, ++page2RowCount, 0);
_page2Layout->addWidget(_fontSizeInputX, page2RowCount, 1);
_page2Layout->addWidget(_minTextX, ++page2RowCount, 0);
_page2Layout->addWidget(_minInputX, page2RowCount, 1);
_page2Layout->addWidget(_maxTextX, page2RowCount, 2);
_page2Layout->addWidget(_maxInputX, page2RowCount, 3);
_page2Layout->addWidget(_stepTextX, ++page2RowCount, 0);
_page2Layout->addWidget(_setpInputX, page2RowCount, 1);
connect(_titleHEditX, &ElaLineEdit::textChanged,
this, [this]() {emit signal_XAxisTitleNameChanged(_titleHEditX->text()); });
connect(_fontFamilyComboBoxX, QOverload<int>::of(&ElaComboBox::currentIndexChanged),
this, [this]() {emit signal_XAxisTitleFontFamilyChanged(
getFontFamilyString(_fontFamilyComboBoxX->currentText())); });
connect(_fontSizeInputX, QOverload<int>::of(&ElaSpinBox::valueChanged),
this, [this]() {emit signal_XAxisTitleFontSizeChanged(_fontSizeInputX->value()); });
connect(_minInputX, QOverload<double>::of(&ElaDoubleSpinBox::valueChanged),
this, [this]() {emit signal_XAxisMinValueChanged(_minInputX->value()); });
connect(_maxInputX, QOverload<double>::of(&ElaDoubleSpinBox::valueChanged),
this, [this]() {emit signal_XAxisMaxValueChanged(_maxInputX->value()); });
connect(_setpInputX, QOverload<double>::of(&ElaDoubleSpinBox::valueChanged),
this, [this] {emit signal_XAxisStepValueChanged(_setpInputX->value()); });
_setpInputX->setValue(5);
_maxInputX->setValue(50);
_fontSizeInputX->setValue(12);
_minInputX->setValue(10);
_fontFamilyComboBoxX->setCurrentIndex(0);
}
void Graph2DSettings::addYAxisSettingUI()
{
ElaText* _axisY = new ElaText("纵轴", this);
_axisY->setTextPixelSize(_titleFontSize);
//横轴标题
ElaText* _titleHTextY = new ElaText("纵轴标题", this);
_titleHTextY->setTextPixelSize(_titleFontSize);
_titleHEditY = new ElaLineEdit(this);
_titleHEditY->setText("y轴");
//字体
ElaText* _fontFamilyTextY = new ElaText("字体", this);
_fontFamilyTextY->setTextPixelSize(_titleFontSize);
_fontFamilyComboBoxY = new ElaComboBox(this);
QStringList _fontFamilyComboListY{
"微软雅黑",
"宋体",
};
_fontFamilyComboBoxY->addItems(_fontFamilyComboListY);
//字号
ElaText* _fontSizeTextY = new ElaText("字号", this);
_fontSizeTextY->setTextPixelSize(_titleFontSize);
_fontSizeInputY = new ElaSpinBox(this);
//最小值
ElaText* _minTextY = new ElaText("起点", this);
_minTextY->setTextPixelSize(_titleFontSize);
_minInputY = new ElaDoubleSpinBox(this);
_minInputY->setMinimum(-100000.0);
//最大值
ElaText* _maxTextY = new ElaText("终点", this);
_maxTextY->setTextPixelSize(_titleFontSize);
_maxInputY = new ElaDoubleSpinBox(this);
_maxInputY->setMinimum(-100000.0);
//步长
ElaText* _stepTextY = new ElaText("步长", this);
_stepTextY->setTextPixelSize(_titleFontSize);
_setpInputY = new ElaDoubleSpinBox(this);
_setpInputY->setMinimum(0.00001);
//页面2的布局
_page2Layout->addWidget(_axisY, ++page2RowCount, 0);
_page2Layout->addWidget(_titleHTextY, ++page2RowCount, 0);
_page2Layout->addWidget(_titleHEditY, page2RowCount, 1);
_page2Layout->addWidget(_fontFamilyTextY, ++page2RowCount, 0);
_page2Layout->addWidget(_fontFamilyComboBoxY, page2RowCount, 1);
_page2Layout->addWidget(_fontSizeTextY, ++page2RowCount, 0);
_page2Layout->addWidget(_fontSizeInputY, page2RowCount, 1);
_page2Layout->addWidget(_minTextY, ++page2RowCount, 0);
_page2Layout->addWidget(_minInputY, page2RowCount, 1);
_page2Layout->addWidget(_maxTextY, page2RowCount, 2);
_page2Layout->addWidget(_maxInputY, page2RowCount, 3);
_page2Layout->addWidget(_stepTextY, ++page2RowCount, 0);
_page2Layout->addWidget(_setpInputY, page2RowCount, 1);
connect(_titleHEditY, &ElaLineEdit::textChanged,
this, [this]() {emit signal_YAxisTitleNameChanged(_titleHEditY->text()); });
connect(_fontFamilyComboBoxY, QOverload<int>::of(&ElaComboBox::currentIndexChanged),
this, [this]() {emit signal_YAxisTitleFontFamilyChanged(
getFontFamilyString(_fontFamilyComboBoxY->currentText())); });
connect(_fontSizeInputY, QOverload<int>::of(&ElaSpinBox::valueChanged),
this, [this]() {emit signal_YAxisTitleFontSizeChanged(_fontSizeInputY->value()); });
connect(_minInputY, QOverload<double>::of(&ElaDoubleSpinBox::valueChanged),
this, [this]() {emit signal_YAxisMinValueChanged(_minInputY->value()); });
connect(_maxInputY, QOverload<double>::of(&ElaDoubleSpinBox::valueChanged),
this, [this]() {emit signal_YAxisMaxValueChanged(_maxInputY->value()); });
connect(_setpInputY, QOverload<double>::of(&ElaDoubleSpinBox::valueChanged),
this, [this] {emit signal_YAxisStepValueChanged(_setpInputY->value()); });
_setpInputY->setValue(5);
_maxInputY->setValue(50);
_minInputY->setValue(10);
_fontSizeInputY->setValue(12);
_fontFamilyComboBoxY->setCurrentIndex(0);
}
void Graph2DSettings::setFixedVariableValue(
const QList<QPair<QString, QList<QString>>>& fixedValueList)
{
m_FixedVariableValueList = fixedValueList;
}
void Graph2DSettings::slot_variableAxisChanged(int index)
{
//清除原有数据
m_variableValueIndex = index;
for (auto i : m_currentFixedValueWidgets)
{
_fixedValueLayoutH->removeWidget(i.first);
_fixedValueLayoutH->removeWidget(i.second);
delete i.first; i.first = nullptr;
delete i.second; i.second = nullptr;
}
m_currentFixedValueWidgets.clear();
//添加新数据
setFixedValue();
}
}