XSteam/src/xsteam_src_edit_ui.cpp
2024-10-29 07:39:29 +08:00

241 lines
8.2 KiB
C++

#include "xsteam_src_edit_ui.h"
xsteam_src_edit_ui::xsteam_src_edit_ui()
{
init_src_edit_ui();
load_src_data_view(_data.s_data);
}
xsteam_src_edit_ui::~xsteam_src_edit_ui()
{
}
void xsteam_src_edit_ui::init_table_view_style()
{
m_Table->setSelectionBehavior(QAbstractItemView::SelectRows);
m_Table->setSelectionMode(QAbstractItemView::SingleSelection);
m_Table->setSortingEnabled(false);
m_Table->verticalHeader()->hide();
m_Table->setWordWrap(false);
m_Table->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
m_Table->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
m_Table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
m_Table->setShowGrid(false);
m_Table->setFrameShape(QFrame::NoFrame);
m_Table->horizontalHeader()->setStretchLastSection(true);
m_Table->setColumnWidth(0, m_Table->width() / 5);
}
void xsteam_src_edit_ui::init_src_edit_ui()
{
setWindowTitle(tr("XSteam源数据"));
src_group = new QGroupBox(tr("源信息表"));
src_group->setObjectName("SRC_GROUP");
gr_Layout = new QVBoxLayout();
main_Layout = new QVBoxLayout;
foot_Layout = new QHBoxLayout;
m_Table = new QTableView;
m_Model = new QStandardItemModel();
m_Model->setHorizontalHeaderLabels(ex_src_table_head_tips);
m_Table->setModel(m_Model);
m_Save_Data = new QPushButton(tr("保存"));
m_Update_Src_Data = new QPushButton(tr("更新"));
foot_Layout->addSpacerItem(sparcer_Item);
foot_Layout->addWidget(m_Save_Data);
foot_Layout->addWidget(m_Update_Src_Data);
foot_Layout->addSpacerItem(sparcer_Item);
gr_Layout->addWidget(m_Table);
gr_Layout->addLayout(foot_Layout);
gr_Layout->setStretch(0, 8);
gr_Layout->setStretch(1, 2);
gr_Layout->setContentsMargins(2, 2, 2, 2);
src_group->setLayout(gr_Layout);
main_Layout->addWidget(src_group);
setLayout(main_Layout);
init_table_view_style();
connect_slots();
}
void xsteam_src_edit_ui::connect_slots()
{
m_Table->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_Table, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slots_rightMenu(QPoint)));
connect(m_Save_Data, SIGNAL(clicked()), this, SLOT(slots_save_done()));
connect(m_Update_Src_Data, SIGNAL(clicked()), this, SLOT(slots_update_src_data()));
}
void xsteam_src_edit_ui::load_src_data_view(std::vector<SrcData> src_data)
{
// 把数据加载到tableView
m_Model->clear();
m_Model->setHorizontalHeaderLabels(ex_src_table_head_tips);
int i = 0;
for (auto &k : src_data)
{
int x = i++;
m_Model->setItem(x, 0, new QStandardItem(QString::fromStdString(k.src_name)));
QComboBox *cmb = new QComboBox();
cmb->addItems(src_type);
if (k.src_type == GIT_MODE::TAG)
{
cmb->setCurrentIndex(1);
}
else
{
cmb->setCurrentIndex(0);
}
m_Table->setIndexWidget(m_Model->index(x, 1), cmb);
m_Model->setItem(x, 2, new QStandardItem(QString::fromStdString(k.src_url)));
}
m_Table->setModel(m_Model);
}
void xsteam_src_edit_ui::slots_rightMenu(const QPoint &pos)
{
QTableView *signalSrc = (QTableView *)sender(); // 获取到了发送该信号按钮的指针
QModelIndex index = signalSrc->indexAt(pos);
if (index.row() > -1)
{
// 创建菜单对象
QMenu *m_Menu = new QMenu(this);
QAction *pNewTask = new QAction(tr("新建源"), this);
QAction *pDeleteTask = new QAction(tr("删除源"), this);
pNewTask->setData(1);
pDeleteTask->setData(2);
pNewTask->setObjectName(signalSrc->objectName());
pDeleteTask->setObjectName(signalSrc->objectName());
// 把QAction对象添加到菜单上
m_Menu->addAction(pNewTask);
m_Menu->addAction(pDeleteTask);
// 连接鼠标右键点击信号
connect(pNewTask, SIGNAL(triggered()), this, SLOT(slots_on_task_event()));
connect(pDeleteTask, SIGNAL(triggered()), this, SLOT(slots_on_task_event()));
// 在鼠标右键点击的地方显示菜单
m_Menu->exec(QCursor::pos());
QList<QAction *> list = m_Menu->actions();
foreach (QAction *pAction, list)
delete pAction;
delete m_Menu;
}
}
void xsteam_src_edit_ui::slots_on_task_event()
{
QAction *pEven = qobject_cast<QAction *>(this->sender());
int iType = pEven->data().toInt();
switch (iType)
{
case 1:
object_add_src();
break;
case 2:
object_delete_src();
break;
default:
break;
}
}
void xsteam_src_edit_ui::object_add_src()
{
/*
m_Model->insertRow(m_Model->rowCount());
QComboBox *cmb = new QComboBox();
cmb->addItems(src_type);
m_Table->setIndexWidget(m_Model->index(4, 1), cmb);
*/
int index = m_Model->rowCount();
m_Model->setItem(index, 0, new QStandardItem(QString::fromStdString("")));
QComboBox *cmb = new QComboBox();
cmb->addItems(src_type);
m_Table->setIndexWidget(m_Model->index(index, 1), cmb);
m_Model->setItem(index, 2, new QStandardItem(QString::fromStdString("")));
}
void xsteam_src_edit_ui::object_delete_src()
{
int curRow = m_Table->currentIndex().row();
int curRows = m_Table->model()->rowCount();
qInfo() << curRows - 1;
if (curRows - 1 <= 0)
{
xsteam_msg_error(this, "不能删除唯一源");
return;
}
if (curRow > -1)
{
QAbstractItemModel *modessl = m_Table->model();
QModelIndex indextemp = modessl->index(curRow, 0);
QString _name = modessl->data(indextemp).value<QString>();
if (_name == "")
{
modessl->removeRow(curRow);
}
else
{
for (auto it = _data.s_data.begin(); it != _data.s_data.end();)
{
if (it->src_name == _name.toStdString())
{
_data.s_data.erase(it);
modessl->removeRow(curRow);
m_Table->setModel(modessl);
}
else
{
++it;
}
}
}
}
}
void xsteam_src_edit_ui::slots_save_done()
{
int curRow = m_Table->model()->rowCount();
_data.s_data.clear();
if (curRow > -1)
{
QAbstractItemModel *modessl = m_Table->model();
for (int i = 0; i <= curRow - 1; i++)
{
SrcData _src_data = {};
QString src_name = modessl->data(modessl->index(i, 0)).value<QString>();
QComboBox *cmb = (QComboBox *)m_Table->indexWidget(modessl->index(i, 1));
QString src_url = modessl->data(modessl->index(i, 2)).value<QString>();
if(src_name==""){
xsteam_msg_tip(nullptr,""+QString::number(curRow)+"行源名字不允许为空!");
return;
}
if(src_url==""){
xsteam_msg_tip(nullptr,""+QString::number(curRow)+"行源地址不允许为空!");
return;
}
_src_data.src_name = src_name.toStdString();
if (cmb->currentIndex() == GIT_MODE::TAG)
{
_src_data.src_type = GIT_MODE::TAG;
}
else
{
_src_data.src_type = GIT_MODE::BRANCH;
}
_src_data.src_url = src_url.toStdString();
_data.s_data.push_back(_src_data);
}
}
load_src_data_view(_data.s_data);
xsteam_save_data_write();
emit signals_update();
}
void xsteam_src_edit_ui::slots_update_src_data()
{
// true-->update all
// false-->update selected
if (xsteam_msg_select(nullptr, tr("是否更新所有数据源数据到本地?")))
{
xsteam_git *_xs_git = new xsteam_git(); // 457140
for (auto x : _data.s_data)
{
_xs_git->branch_or_tags_set_opts("", x.src_name);
_xs_git->branch_or_tags_remote_array();
}
delete _xs_git;
_xs_git = nullptr;
}
}