PowerModeler/source/dbBrowser.cpp

373 lines
12 KiB
C++
Raw Normal View History

#include "dbBrowser.h"
#include "ui_dbBrowser.h"
#include "mainwindow.h"
#include "attributeView.h"
#include <QTabBar>
#include <QRegularExpressionValidator>
DatabaseBrowser::DatabaseBrowser(QWidget *parent)
: QWidget(parent)
, ui(new Ui::DatabaseBrowser)
, m_pMainWindow(nullptr)
{
ui->setupUi(this);
m_previousTabIndex = -1;
//正则表达式,只能输入数字
QRegularExpression regExp("[0-9]+");
QRegularExpressionValidator* validator = new QRegularExpressionValidator(regExp, this);
ui->lineEditPage->setValidator(validator);
2025-03-24 19:55:01 +08:00
2025-03-25 17:58:48 +08:00
connect(ui->tabWidget, &QTabWidget::tabCloseRequested, this, &DatabaseBrowser::onTabCloseRequested);
connect(ui->tabWidget, &QTabWidget::currentChanged, this, &DatabaseBrowser::onCurrentTabChanged);
2025-03-27 21:01:25 +08:00
connect(ui->btnSelect, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_selectRecord);
2025-03-27 21:01:25 +08:00
connect(ui->btnAdd, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_addRecord);
connect(ui->btnRemove, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_removeRecord);
connect(ui->btnSave, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_submitChanges);
connect(ui->btnCancle, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_cancleChanges);
connect(ui->btnRefresh, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_refreshData);
connect(ui->btnFirstPage, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_firstPage);
connect(ui->btnPreviousPage, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_previousPage);
connect(ui->btnNextPage, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_nextPage);
connect(ui->btnLastPage, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_lastPage);
connect(ui->lineEditPage, &QLineEdit::returnPressed, this, &DatabaseBrowser::onEditingFinished_page);
}
DatabaseBrowser::~DatabaseBrowser()
{
delete ui;
}
void DatabaseBrowser::setMainWindow(MainWindow* window)
{
m_pMainWindow = window;
}
2025-03-24 19:55:01 +08:00
int DatabaseBrowser::tabIndex(const QString& tabText)
{
for(int i = 0; i < ui->tabWidget->count(); i++)
{
if(ui->tabWidget->tabText(i) == tabText)
return i;
}
return -1;
}
void DatabaseBrowser::addTab_attribute(const QString& connection, ModelAttributeGroup& attributeGroup)
{
2025-03-24 19:55:01 +08:00
QString tabText = attributeGroup.strModelName + "/" + attributeGroup.strGroupName;
int index = tabIndex(tabText);
if(index != -1)
{
ui->tabWidget->setCurrentIndex(index);
return;
}
2025-03-25 17:58:48 +08:00
AttributeView* view = new AttributeView(attributeGroup, ui->tabWidget, connection);
connect(view, &AttributeView::showMessage, this, &DatabaseBrowser::onShowMessage);
connect(view->model(), &AttributeTableModel::showMessage, this, &DatabaseBrowser::onShowMessage);
connect(view->model(), &AttributeTableModel::syncDataStatus, this, &DatabaseBrowser::onSyncDataStatus);
2025-04-11 17:14:17 +08:00
connect(view->delegate(), &AttributeTableDelegate::showMessage, this, &DatabaseBrowser::onShowMessage);
2025-03-24 19:55:01 +08:00
index = ui->tabWidget->addTab(view, QIcon(":/img/images/icon_hierarchy.png"), tabText);
//添加自定义按钮
2025-03-24 19:55:01 +08:00
/*QPushButton* closeBtn = new QPushButton("");
closeBtn->setProperty("index", index);
connect(closeBtn, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClick_tabCloseBtn);
closeBtn->setFixedSize(12, 12);
closeBtn->setStyleSheet("QPushButton\n"
"{\n"
" border-image: url(:/img/images/btn_close_default.png);\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" border-image: url(:/img/images/btn_close_hover.png);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" border-image: url(:/img/images/btn_close_pressed.png);\n"
"}");
QTabBar* tabBar = ui->tabWidget->tabBar();
2025-03-24 19:55:01 +08:00
tabBar->setTabButton(index, QTabBar::RightSide, closeBtn);*/
ui->tabWidget->setCurrentIndex(index);
}
2025-04-17 15:34:43 +08:00
void DatabaseBrowser::closeTab_attribute(ModelAttributeGroup& attributeGroup)
{
if(attributeGroup.groupID == -1) //关闭该模型下所有打开的tab
{
//int tabCount = ui->tabWidget->count();
for(int i = 0; i < ui->tabWidget->count(); i++)
{
if(ui->tabWidget->tabText(i).contains(attributeGroup.strModelName + "/"))
{
onTabCloseRequested(i);
i--;
}
}
2025-04-17 15:34:43 +08:00
}
else //关闭具体的tab
{
QString tabText = attributeGroup.strModelName + "/" + attributeGroup.strGroupName;
int index = tabIndex(tabText);
if(index == -1)
return;
onTabCloseRequested(index);
}
2025-04-17 15:34:43 +08:00
}
void DatabaseBrowser::closeAllTab_attribute()
{
int tabCount = ui->tabWidget->count();
for(int index = 0; index < tabCount; index++)
onTabCloseRequested(0);
}
2025-03-25 17:58:48 +08:00
void DatabaseBrowser::onTabCloseRequested(int index)
{
2025-03-24 19:55:01 +08:00
/*QObject* sender = QObject::sender();
QPushButton* button = qobject_cast<QPushButton*>(sender);
if(!button)
return;
int index = button->property("index").toInt();*/
QWidget* widget = ui->tabWidget->widget(index);
ui->tabWidget->removeTab(index);
delete widget;
}
2025-03-25 17:58:48 +08:00
void DatabaseBrowser::onCurrentTabChanged(int index)
{
if(m_previousTabIndex != -1)
{
ui->tabWidget->setTabIcon(m_previousTabIndex, QIcon(":/img/images/icon_hierarchy_unchecked.png"));
}
m_previousTabIndex = index;
2025-03-25 17:58:48 +08:00
if(index == -1) //最后一个tab关闭时会触发
{
ui->btnSelect->setEnabled(false);
ui->btnAdd->setEnabled(false);
ui->btnRemove->setEnabled(false);
ui->btnCancle->setEnabled(false);
ui->btnRefresh->setEnabled(false);
ui->btnSave->setEnabled(false);
ui->btnCancle->setEnabled(false);
2025-04-25 16:44:32 +08:00
ui->btnFirstPage->setEnabled(false);
ui->btnPreviousPage->setEnabled(false);
ui->btnNextPage->setEnabled(false);
ui->btnLastPage->setEnabled(false);
2025-03-25 17:58:48 +08:00
ui->recordInfo->clear();
ui->lineEditPage->setEnabled(false);
ui->lineEditPage->setText("1");
2025-03-25 17:58:48 +08:00
return;
}
ui->tabWidget->setTabIcon(m_previousTabIndex, QIcon(":/img/images/icon_hierarchy.png"));
2025-03-25 17:58:48 +08:00
QWidget* widget = ui->tabWidget->widget(index);
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
ui->btnSelect->setEnabled(true);
ui->btnAdd->setEnabled(true);
ui->btnRemove->setEnabled(true);
ui->btnCancle->setEnabled(true);
ui->btnRefresh->setEnabled(true);
2025-04-25 16:44:32 +08:00
ui->btnFirstPage->setEnabled(true);
ui->btnPreviousPage->setEnabled(true);
ui->btnNextPage->setEnabled(true);
ui->btnLastPage->setEnabled(true);
ui->lineEditPage->setEnabled(true);
2025-03-25 17:58:48 +08:00
attributeView->active();
}
}
void DatabaseBrowser::onBtnClicked_selectRecord()
{
emit openAttributeSelector();
}
2025-03-27 21:01:25 +08:00
void DatabaseBrowser::onBtnClicked_addRecord()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
{
int row = model->rowCount(); //当前插入都是在最后一行
/*QModelIndex currentIndex = view->currentIndex();
if(currentIndex.row() != -1)
row = currentIndex.row();*/
model->insertRecord(row);
ui->btnSave->setEnabled(true);
ui->btnCancle->setEnabled(true);
2025-03-27 21:01:25 +08:00
}
}
}
void DatabaseBrowser::onBtnClicked_removeRecord()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
{
/*QModelIndex currentIndex = view->currentIndex();
2025-03-27 21:01:25 +08:00
int row = currentIndex.row();
if( row != -1)
{
2025-03-27 21:01:25 +08:00
model->removeRecord(row);
ui->btnSave->setEnabled(true);
ui->btnCancle->setEnabled(true);
}*/
model->removeRecord();
ui->btnSave->setEnabled(true);
ui->btnCancle->setEnabled(true);
2025-03-27 21:01:25 +08:00
}
}
}
void DatabaseBrowser::onBtnClicked_submitChanges()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
{
model->submitChanges();
attributeView->syncChangeRecord();
}
}
}
void DatabaseBrowser::onBtnClicked_cancleChanges()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
model->cancleChanges();
}
}
void DatabaseBrowser::onBtnClicked_refreshData()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
model->refresh();
}
}
void DatabaseBrowser::onBtnClicked_firstPage()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
model->firstPage();
}
}
void DatabaseBrowser::onBtnClicked_previousPage()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
model->previousPage();
}
}
void DatabaseBrowser::onBtnClicked_nextPage()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
model->nextPage();
}
}
void DatabaseBrowser::onBtnClicked_lastPage()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
model->lastPage();
}
}
void DatabaseBrowser::onEditingFinished_page()
{
QWidget* widget = ui->tabWidget->currentWidget();
AttributeView* attributeView = qobject_cast<AttributeView*>(widget);
if(attributeView)
{
QTableView* view = attributeView->view();
AttributeTableModel* model = attributeView->model();
if(view && model)
{
QString strPage = ui->lineEditPage->text();
2025-04-25 16:44:32 +08:00
bool result = model->setCurrentPage(strPage.toInt());
if(!result)
ui->lineEditPage->setText(QString::number(model->currentPage()));
}
}
}
void DatabaseBrowser::onSyncDataStatus(bool hasModifiedData, const PaginationInfo& paginationInfo)
{
ui->btnSave->setEnabled(hasModifiedData);
ui->btnCancle->setEnabled(hasModifiedData);
QString recordInfo = QString::fromWCharArray(L"共 %1 条记录").arg(paginationInfo.totalEntries);
ui->recordInfo->setText(recordInfo);
ui->lineEditPage->setText(QString::number(paginationInfo.currentPage));
}
void DatabaseBrowser::onShowMessage(MessageDialogType type,const QString& strTitle,const QString& strContent)
{
if(m_pMainWindow)
m_pMainWindow->showMessageDialog(type, strTitle, strContent);
}