📄 tablewidgeteditor.cpp
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "tablewidgeteditor.h"#include <findicondialog_p.h>#include <iconloader_p.h>#include <qdesigner_command_p.h>#include <QtDesigner/QtDesigner>#include <QtCore/QDir>#include <QtCore/QQueue>using namespace qdesigner_internal;TableWidgetEditor::TableWidgetEditor(QDesignerFormWindowInterface *form, QWidget *parent) : QDialog(parent), m_updating(false){ ui.setupUi(this); m_form = form; QIcon resetIcon = createIconSet(QString::fromUtf8("editdelete.png")); ui.deletePixmapItemButton->setIcon(resetIcon); ui.deletePixmapColumnButton->setIcon(resetIcon); ui.deletePixmapRowButton->setIcon(resetIcon); ui.deletePixmapItemButton->setEnabled(false); ui.deletePixmapColumnButton->setEnabled(false); ui.deletePixmapRowButton->setEnabled(false); QIcon upIcon = createIconSet(QString::fromUtf8("up.png")); QIcon downIcon = createIconSet(QString::fromUtf8("down.png")); QIcon minusIcon = createIconSet(QString::fromUtf8("minus.png")); QIcon plusIcon = createIconSet(QString::fromUtf8("plus.png")); ui.newColumnButton->setIcon(plusIcon); ui.deleteColumnButton->setIcon(minusIcon); ui.moveColumnUpButton->setIcon(upIcon); ui.moveColumnDownButton->setIcon(downIcon); ui.newRowButton->setIcon(plusIcon); ui.deleteRowButton->setIcon(minusIcon); ui.moveRowUpButton->setIcon(upIcon); ui.moveRowDownButton->setIcon(downIcon); ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);}TableWidgetEditor::~TableWidgetEditor(){}void TableWidgetEditor::fillContentsFromTableWidget(QTableWidget *tableWidget){ m_updating = true; copyContents(tableWidget, ui.tableWidget); ui.columnsListWidget->clear(); ui.rowsListWidget->clear(); int colCount = ui.tableWidget->columnCount(); for (int col = 0; col < colCount; col++) { QTableWidgetItem *headerItem = ui.tableWidget->horizontalHeaderItem(col); QListWidgetItem *item = new QListWidgetItem(ui.columnsListWidget); item->setFlags(item->flags() | Qt::ItemIsEditable); if (headerItem) { item->setText(headerItem->text()); item->setIcon(headerItem->icon()); } else item->setText(QString("%1").arg(col)); } if (colCount > 0) ui.columnsListWidget->setCurrentRow(0); int rowCount = ui.tableWidget->rowCount(); for (int row = 0; row < rowCount; row++) { QTableWidgetItem *headerItem = ui.tableWidget->verticalHeaderItem(row); QListWidgetItem *item = new QListWidgetItem(ui.rowsListWidget); item->setFlags(item->flags() | Qt::ItemIsEditable); if (headerItem) { item->setText(headerItem->text()); item->setIcon(headerItem->icon()); } else item->setText(QString("%1").arg(row)); } if (rowCount > 0) ui.rowsListWidget->setCurrentRow(0); if (ui.tableWidget->columnCount() > 0 && ui.tableWidget->rowCount() > 0) ui.tableWidget->setCurrentCell(0, 0); m_updating = false; updateEditor();}void TableWidgetEditor::fillTableWidgetFromContents(QTableWidget *tableWidget){ ChangeTableContentsCommand *cmd = new ChangeTableContentsCommand(m_form); cmd->init(tableWidget, ui.tableWidget); m_form->commandHistory()->push(cmd);}void TableWidgetEditor::copyContents(QTableWidget *sourceWidget, QTableWidget *destWidget){ destWidget->clear(); int colCount = sourceWidget->columnCount(); destWidget->setColumnCount(colCount); for (int col = 0; col < colCount; col++) { QTableWidgetItem *origHeaderItem = sourceWidget->horizontalHeaderItem(col); QTableWidgetItem *headerItem = destWidget->horizontalHeaderItem(col); if (origHeaderItem) { if (!headerItem) headerItem = new QTableWidgetItem; headerItem->setText(origHeaderItem->text()); headerItem->setIcon(origHeaderItem->icon()); destWidget->setHorizontalHeaderItem(col, headerItem); } else { if (headerItem) delete headerItem; } } int rowCount = sourceWidget->rowCount(); destWidget->setRowCount(rowCount); for (int row = 0; row < rowCount; row++) { QTableWidgetItem *origHeaderItem = sourceWidget->verticalHeaderItem(row); QTableWidgetItem *headerItem = destWidget->verticalHeaderItem(row); if (origHeaderItem) { if (!headerItem) headerItem = new QTableWidgetItem; headerItem->setText(origHeaderItem->text()); headerItem->setIcon(origHeaderItem->icon()); destWidget->setVerticalHeaderItem(row, headerItem); } else { if (headerItem) delete headerItem; } } for (int col = 0; col < colCount; col++) { for (int row = 0; row < rowCount; row++) { QTableWidgetItem *origItem = sourceWidget->item(row, col); QTableWidgetItem *newItem = destWidget->item(row, col); if (origItem) { QString text = origItem->text(); QIcon icon = origItem->icon(); if (text.isEmpty() && icon.isNull()) { if (newItem) delete newItem; } else { if (!newItem) newItem = new QTableWidgetItem; newItem->setText(text); newItem->setIcon(icon); destWidget->setItem(row, col, newItem); } } else { if (newItem) delete newItem; } } }}void TableWidgetEditor::on_tableWidget_currentCellChanged(int currentRow, int currentCol, int, int){ if (m_updating) return; m_updating = true; ui.rowsListWidget->setCurrentRow(currentRow); ui.columnsListWidget->setCurrentRow(currentCol); m_updating = false; updateEditor(); ui.itemTextLineEdit->selectAll(); ui.itemTextLineEdit->setFocus();}void TableWidgetEditor::on_tableWidget_itemChanged(QTableWidgetItem *){ if (m_updating) return; updateEditor();}void TableWidgetEditor::on_columnsListWidget_currentRowChanged(int col){ if (m_updating) return; m_updating = true; QListWidgetItem *currentRow = ui.rowsListWidget->currentItem(); if (currentRow) { int row = ui.rowsListWidget->currentRow(); ui.tableWidget->setCurrentCell(row, col); } m_updating = false; updateEditor();}void TableWidgetEditor::on_columnsListWidget_itemChanged(QListWidgetItem *item){ if (m_updating) return; QString str = item->text(); int col = ui.columnsListWidget->row(item); QTableWidgetItem *headerItem = ui.tableWidget->horizontalHeaderItem(col); if (!headerItem) headerItem = new QTableWidgetItem; headerItem->setText(str); ui.tableWidget->setHorizontalHeaderItem(col, headerItem);}void TableWidgetEditor::on_rowsListWidget_currentRowChanged(int row){ if (m_updating) return; m_updating = true; QListWidgetItem *currentColumn = ui.columnsListWidget->currentItem(); if (currentColumn) { int col = ui.columnsListWidget->currentRow(); ui.tableWidget->setCurrentCell(row, col); } m_updating = false; updateEditor();}void TableWidgetEditor::on_rowsListWidget_itemChanged(QListWidgetItem *item){ if (m_updating) return; QString str = item->text(); int row = ui.rowsListWidget->row(item); QTableWidgetItem *headerItem = ui.tableWidget->verticalHeaderItem(row); if (!headerItem) headerItem = new QTableWidgetItem; headerItem->setText(str); ui.tableWidget->setVerticalHeaderItem(row, headerItem);}void TableWidgetEditor::updateEditor(){ QListWidgetItem *currentColumn = ui.columnsListWidget->currentItem(); QListWidgetItem *currentRow = ui.rowsListWidget->currentItem(); bool itemsEnabled = false; bool currentItemEnabled = false; bool currentColumnEnabled = false; bool moveColumnUpEnabled = false; bool moveColumnDownEnabled = false; bool currentRowEnabled = false; bool moveRowUpEnabled = false; bool moveRowDownEnabled = false; if (currentColumn) { currentColumnEnabled = true; int idx = ui.columnsListWidget->currentRow(); if (idx > 0) moveColumnUpEnabled = true; if (idx < ui.columnsListWidget->count() - 1) moveColumnDownEnabled = true; } if (currentRow) { currentRowEnabled = true; int idx = ui.rowsListWidget->currentRow(); if (idx > 0) moveRowUpEnabled = true; if (idx < ui.rowsListWidget->count() - 1) moveRowDownEnabled = true; } if (currentColumn && currentRow) currentItemEnabled = true; if (currentColumn || currentRow) itemsEnabled = true; ui.itemsBox->setEnabled(itemsEnabled); ui.textLabel->setEnabled(currentItemEnabled); ui.pixmapLabel->setEnabled(currentItemEnabled); ui.deletePixmapItemButton->setEnabled(currentItemEnabled); ui.previewPixmapItemButton->setEnabled(currentItemEnabled); ui.itemTextLineEdit->setEnabled(currentItemEnabled); ui.renameColumnButton->setEnabled(currentColumnEnabled); ui.deleteColumnButton->setEnabled(currentColumnEnabled); ui.pixmapColumnLabel->setEnabled(currentColumnEnabled); ui.previewPixmapColumnButton->setEnabled(currentColumnEnabled); ui.moveColumnUpButton->setEnabled(moveColumnUpEnabled); ui.moveColumnDownButton->setEnabled(moveColumnDownEnabled); ui.renameRowButton->setEnabled(currentRowEnabled); ui.deleteRowButton->setEnabled(currentRowEnabled); ui.pixmapRowLabel->setEnabled(currentRowEnabled); ui.previewPixmapRowButton->setEnabled(currentRowEnabled); ui.moveRowUpButton->setEnabled(moveRowUpEnabled); ui.moveRowDownButton->setEnabled(moveRowDownEnabled); QString itemText; QIcon itemIcon, columnIcon, rowIcon; if (currentColumn) { int col = ui.columnsListWidget->currentRow(); if (ui.tableWidget->horizontalHeaderItem(col)) columnIcon = ui.tableWidget->horizontalHeaderItem(col)->icon(); } if (currentRow) { int row = ui.rowsListWidget->currentRow(); if (ui.tableWidget->verticalHeaderItem(row)) rowIcon = ui.tableWidget->verticalHeaderItem(row)->icon(); } if (currentColumn && currentRow) { QTableWidgetItem *current = ui.tableWidget->item(ui.rowsListWidget->currentRow(), ui.columnsListWidget->currentRow()); if (current) { itemText = current->text(); itemIcon = current->icon(); } } ui.itemTextLineEdit->setText(itemText); ui.previewPixmapItemButton->setIcon(itemIcon); ui.deletePixmapItemButton->setEnabled(!itemIcon.isNull()); ui.previewPixmapColumnButton->setIcon(columnIcon); ui.deletePixmapColumnButton->setEnabled(!columnIcon.isNull()); ui.previewPixmapRowButton->setIcon(rowIcon); ui.deletePixmapRowButton->setEnabled(!rowIcon.isNull());}void TableWidgetEditor::on_itemTextLineEdit_textEdited(const QString &text){ if (m_updating) return; QListWidgetItem *currentColumn = ui.columnsListWidget->currentItem(); QListWidgetItem *currentRow = ui.rowsListWidget->currentItem(); if (!currentColumn || !currentRow) return; int row = ui.rowsListWidget->currentRow(); int col = ui.columnsListWidget->currentRow(); QTableWidgetItem *curItem = ui.tableWidget->item(row, col); if (!curItem) curItem = new QTableWidgetItem; curItem->setText(text); ui.tableWidget->setItem(row, col, curItem);}void TableWidgetEditor::on_deletePixmapItemButton_clicked(){ QListWidgetItem *currentColumn = ui.columnsListWidget->currentItem(); QListWidgetItem *currentRow = ui.rowsListWidget->currentItem(); if (!currentColumn || !currentRow) return; int row = ui.rowsListWidget->currentRow(); int col = ui.columnsListWidget->currentRow(); QTableWidgetItem *curItem = ui.tableWidget->item(row, col); if (!curItem) curItem = new QTableWidgetItem; curItem->setIcon(QIcon()); ui.tableWidget->setItem(row, col, curItem); ui.previewPixmapItemButton->setIcon(QIcon()); ui.deletePixmapItemButton->setEnabled(false);}void TableWidgetEditor::on_previewPixmapItemButton_clicked(){ QListWidgetItem *currentColumn = ui.columnsListWidget->currentItem(); QListWidgetItem *currentRow = ui.rowsListWidget->currentItem(); if (!currentColumn || !currentRow) return; int row = ui.rowsListWidget->currentRow(); int col = ui.columnsListWidget->currentRow(); QTableWidgetItem *curItem = ui.tableWidget->item(row, col); FindIconDialog dialog(m_form, this); QString file_path; QString qrc_path; QIcon icon; if (curItem) icon = curItem->icon(); if (!icon.isNull()) { file_path = m_form->core()->iconCache()->iconToFilePath(icon); qrc_path = m_form->core()->iconCache()->iconToQrcPath(icon); } dialog.setPaths(qrc_path, file_path); if (dialog.exec()) { file_path = dialog.filePath(); qrc_path = dialog.qrcPath(); if (!file_path.isEmpty()) { icon = m_form->core()->iconCache()->nameToIcon(file_path, qrc_path); if (!curItem) curItem = new QTableWidgetItem; curItem->setIcon(icon); ui.tableWidget->setItem(row, col, curItem); ui.previewPixmapItemButton->setIcon(icon); ui.deletePixmapItemButton->setEnabled(!icon.isNull()); } }}void TableWidgetEditor::moveColumnsLeft(int fromColumn, int toColumn)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -