PowerModeler/source/attributeView.cpp

105 lines
4.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "attributeView.h"
#include "attributeTableDelegate.h"
#include "multiLineHeaderView.h"
//#include "sqlQueryExecutor.h"
#include "dataSyncManager.h"
#include <QHeaderView>
#include <QVBoxLayout>
#include <QTimer>
AttributeView::AttributeView(const ModelAttributeGroup& modelAttributeGroup, QWidget* parent, const QString& connection, const QString& tableName)
: QWidget(parent)
, m_connection(connection)
, m_attributeTable(tableName)
, m_modelAttributeGroup(modelAttributeGroup)
{
//需要进行数据同步因此从PublicGroupSyncManager中统一获取数据
m_attributeGroup = DataSyncManager::instance().getGroup(m_modelAttributeGroup.groupID);
m_tableView = new QTableView(this);
m_tableView->setStyleSheet("QTableView::item{padding-left:5px;} QTableView::item:selected{border:1px solid rgb(70,130,180);}");
m_tableView->verticalHeader()->setVisible(false);
m_tableView->setTabKeyNavigation(false); //关闭tab键导航对自定义Eidtor设置焦点时(比如lineEdit)会触发tab键目前尚未清楚为什么
m_tableView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed); //禁用自动触发编辑的所有方式(自定义代理中按要求实现,这里是双击和空格)
m_attributeTableModel = new AttributeTableModel(m_modelAttributeGroup, this, m_connection, m_attributeTable);
m_tableView->setModel(m_attributeTableModel);
m_attributeTableModel->setSelectionModel(m_tableView->selectionModel()); //注意selectionModel()一定要在视图setModel后否则返回的是空指针
m_attributeTableDelegate = new AttributeTableDelegate(m_tableView, m_connection, m_tableView);
m_tableView->setItemDelegate(m_attributeTableDelegate);
//自定义表头
m_multiLinHeader = new MultiLineHeaderView(Qt::Horizontal, this);
QColor bg(246, 246, 246);
QColor border(228, 228, 228);
m_multiLinHeader->setBackgroundColor(bg);
m_multiLinHeader->setBorderColor(border);
//主标题加粗展示
for(int i =0; i < m_attributeTableModel->columnCount(); i++)
{
HeaderLineStyle mainTitleStyle;
mainTitleStyle.font.setBold(true);
m_multiLinHeader->setSectionLineStyle(i, 0, mainTitleStyle);
HeaderLineStyle subTitleStyle;
//subTitleStyle.font.setPointSize(8);
m_multiLinHeader->setSectionLineStyle(i, 1, subTitleStyle);
}
m_tableView->setHorizontalHeader(m_multiLinHeader);
//除了第一列其余列恢复可以手动调整模式并根据外部承载容器的宽度调整section
QTimer::singleShot(1000, this, [=](){
int containerWidth = this->width() - 100;
int totalSize = m_multiLinHeader->length() - m_multiLinHeader->sectionSize(0);
for(int i = 1; i < m_multiLinHeader->count(); i++)
{
//恢复手动调整模式
m_multiLinHeader->setSectionResizeMode(i, QHeaderView::Interactive);
//根据比例计算每个section应当对应的大小
/*double ratio = m_multiLinHeader->sectionSize(i) / (double)totalSize;
int size = containerWidth * ratio;
m_multiLinHeader->resizeSection(i, size);*/
}
});
m_vLayout = new QVBoxLayout(this);
m_vLayout->setSpacing(0);
m_vLayout->setContentsMargins(0, 0, 0, 0);
m_vLayout->addWidget(m_tableView);
this->setLayout(m_vLayout);
}
AttributeView::~AttributeView()
{}
void AttributeView::active()
{
if(m_attributeGroup.isPublic && m_attributeGroup.version != DataSyncManager::instance().getGropuVersion(m_attributeGroup.id))
{
//提示强制刷新
emit showMessage(type_information, QString::fromWCharArray(L"提示"),
QString::fromWCharArray(L"该属性组为公共组,检测到数据发生更新,需要进行强制刷新"));
m_attributeTableModel->forceRefresh();
m_attributeGroup.version = DataSyncManager::instance().getGropuVersion(m_attributeGroup.id);
}
else
m_attributeTableModel->triggerSyncSignal();
}
void AttributeView::setEditable(bool editable)
{
if(editable)
m_tableView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed);
else
m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
void AttributeView::syncChangeRecord()
{
if(m_attributeGroup.isPublic)
{
m_attributeGroup.version++;
DataSyncManager::instance().syncGroupVersion(m_attributeGroup.id, m_attributeGroup.version);
}
}