#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 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 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(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(); 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(); QComboBox *cmb = (QComboBox *)m_Table->indexWidget(modessl->index(i, 1)); QString src_url = modessl->data(modessl->index(i, 2)).value(); 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; } }