PowerModeler/source/groupSelectionDialog.cpp

170 lines
5.7 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 "groupSelectionDialog.h"
#include "./ui_groupSelectionDialog.h"
#include "maskLayer.h"
#include "mainwindow.h"
#include "sqlQueryExecutor.h"
#include "textColorPreserveDelegate.h"
#include "customBorderContainer.h"
#define itemRole_groupID 1
#define itemRole_isPublic 2
#define itemRole_isNewlyAdded 3
GroupSelectionDialog::GroupSelectionDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::GroupSelectionDialog)
, m_pMainWindow(nullptr)
, m_curModelID(-1)
{
ui->setupUi(this);
if(QSysInfo::kernelType() == "linux")
{
//Linux下默认的Qt::Dialog即使有父窗口也无法按照子窗口的行为进行展示并且最大、最小按钮不好关闭因此需要去掉Dialog属性随之而来的问题是模态无法起作用
setWindowFlags(windowFlags() & ~Qt::Dialog);
setStyleSheet("QDialog{border: 1px solid rgb(205,205,205);border-radius:5px;background-color:rgb(250,250,250);}");
m_customBorderContainer = new CustomBorderContainer(this);
m_customBorderContainer->setOperationOptions(CustomBorderContainer::Movable | CustomBorderContainer::Resizable);
}
initialize();
}
GroupSelectionDialog::~GroupSelectionDialog()
{
delete ui;
}
void GroupSelectionDialog::initialize()
{
m_pMaskLayer = new MaskLayer(this);
TextColorPreserveDelegate* delegate = new TextColorPreserveDelegate(this);
ui->sourceList->setItemDelegate(delegate);
ui->selectedList->setItemDelegate(delegate);
connect(ui->btnSave, &QPushButton::clicked, this, &GroupSelectionDialog::onBtnClicked_save);
connect(ui->btnCancle, &QPushButton::clicked, this, &GroupSelectionDialog::onBtnClicked_cancle);
connect(ui->btnRemoveSelected, &QPushButton::clicked, this, &GroupSelectionDialog::onBtnClicked_removeSelected);
connect(ui->sourceList, &QListWidget::itemDoubleClicked, this, &GroupSelectionDialog::onItemDblCliked_sourceList);
}
void GroupSelectionDialog::setMainWindow(MainWindow* window)
{
m_pMainWindow = window;
ui->sourceList->clear();
ui->selectedList->clear();
if(m_pMainWindow)
{
QString connection = m_pMainWindow->getCurConnection();
const QVector<AttributeGroup> groups = SqlQueryExecutor::instance().getAttributeGroup(connection);
for(const AttributeGroup& group : groups)
{
QListWidgetItem* sourceItem = new QListWidgetItem(group.name);
sourceItem->setFlags(sourceItem->flags() & ~Qt::ItemIsEditable);
sourceItem->setData(Qt::UserRole + itemRole_groupID, group.id);
sourceItem->setData(Qt::UserRole + itemRole_isPublic, group.isPublic);
ui->sourceList->addItem(sourceItem);
}
}
}
void GroupSelectionDialog::setModel(int id)
{
ui->selectedList->clear();
if(!m_pMainWindow || id <= 0)
return;
m_curModelID = id;
QString connection = m_pMainWindow->getCurConnection();
QVector<int> groups = SqlQueryExecutor::instance().getModelGroups(connection, id);
for(int groupID : groups)
{
AttributeGroup group = SqlQueryExecutor::instance().getAttributeGroupData(connection, groupID);
if(group.name.isEmpty())
continue;
QListWidgetItem* item = new QListWidgetItem(group.name);
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
item->setData(Qt::UserRole + itemRole_groupID, group.id);
item->setData(Qt::UserRole + itemRole_isPublic, group.isPublic);
item->setData(Qt::UserRole + itemRole_isNewlyAdded, false);
item->setForeground(QBrush(QColor(128,128,128)));
ui->selectedList->addItem(item);
}
}
void GroupSelectionDialog::showMask()
{
m_pMaskLayer->setGeometry(0, 0, this->width(), this->height());
m_pMaskLayer->show();
}
void GroupSelectionDialog::hideMask()
{
m_pMaskLayer->close();
}
void GroupSelectionDialog::onBtnClicked_save()
{
if(!m_pMainWindow)
{
close();
return;
}
QVector<int> groups;
for(int i = 0; i < ui->selectedList->count(); i++)
{
QListWidgetItem* item = ui->selectedList->item(i);
bool isNewlyAdded = item->data(Qt::UserRole + itemRole_isNewlyAdded).toBool();
if(isNewlyAdded)
groups.append(item->data(Qt::UserRole + itemRole_groupID).toInt());
}
QString connection = m_pMainWindow->getCurConnection();
bool result = SqlQueryExecutor::instance().addModleGroups(connection, m_curModelID, groups);
if(!result)
{
m_pMainWindow->showMessageDialog(type_warning, QString::fromWCharArray(L"错误"),QString::fromWCharArray(L"信息存储失败,详情可见日志文件"));
return;
}
emit addGroups(m_curModelID, groups);
close();
}
void GroupSelectionDialog::onBtnClicked_cancle()
{
close();
}
void GroupSelectionDialog::onBtnClicked_removeSelected()
{
QListWidgetItem* item = ui->selectedList->currentItem();
if(item && !item->data(Qt::UserRole + itemRole_isNewlyAdded).toBool())
{
m_pMainWindow->showMessageDialog(type_warning, QString::fromWCharArray(L"错误"),QString::fromWCharArray(L"该组别不是最新添加,不可移除"));
return;
}
int row = ui->selectedList->currentRow();
item = ui->selectedList->takeItem(row);
if(item)
delete item;
}
void GroupSelectionDialog::onItemDblCliked_sourceList(QListWidgetItem* item)
{
if(item->data(Qt::UserRole + itemRole_isPublic).toBool())
return;
QList<QListWidgetItem*> foundItems = ui->selectedList->findItems(item->text(), Qt::MatchFixedString);
if(foundItems.isEmpty())
{
QListWidgetItem* selectedItem = new QListWidgetItem(*item);
selectedItem->setData(Qt::UserRole + itemRole_isNewlyAdded, true);
ui->selectedList->addItem(selectedItem);
}
}