⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tablewidgeteditor.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************** 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 + -