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

📄 treewidgeteditor.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 "treewidgeteditor.h"#include <findicondialog_p.h>#include <iconloader_p.h>#include <qdesigner_command_p.h>#include <QtDesigner/QtDesigner>#include <QtCore/QDir>#include <QtCore/QQueue>#include <QHeaderView>using namespace qdesigner_internal;TreeWidgetEditor::TreeWidgetEditor(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.deletePixmapItemButton->setEnabled(false);    ui.deletePixmapColumnButton->setEnabled(false);    QIcon upIcon = createIconSet(QString::fromUtf8("up.png"));    QIcon downIcon = createIconSet(QString::fromUtf8("down.png"));    QIcon backIcon = createIconSet(QString::fromUtf8("back.png"));    QIcon forwardIcon = createIconSet(QString::fromUtf8("forward.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.newItemButton->setIcon(plusIcon);    ui.deleteItemButton->setIcon(minusIcon);    ui.moveItemUpButton->setIcon(upIcon);    ui.moveItemDownButton->setIcon(downIcon);    ui.moveItemRightButton->setIcon(forwardIcon);    ui.moveItemLeftButton->setIcon(backIcon);    ui.treeWidget->header()->setMovable(false);}TreeWidgetEditor::~TreeWidgetEditor(){}void TreeWidgetEditor::fillContentsFromTreeWidget(QTreeWidget *treeWidget){    m_updating = true;    copyContents(treeWidget, ui.treeWidget);    ui.listWidget->clear();    QTreeWidgetItem *headerItem = ui.treeWidget->headerItem();    int colCount = ui.treeWidget->columnCount();    for (int col = 0; col < colCount; col++) {        QListWidgetItem *item = new QListWidgetItem(ui.listWidget);        item->setFlags(item->flags() | Qt::ItemIsEditable);        item->setText(headerItem->text(col));        item->setIcon(headerItem->icon(col));    }    if (colCount > 0) {        ui.listWidget->setCurrentRow(0);        if (ui.treeWidget->topLevelItemCount() > 0)            ui.treeWidget->setCurrentItem(ui.treeWidget->topLevelItem(0));    }    m_updating = false;    updateEditor();}void TreeWidgetEditor::fillTreeWidgetFromContents(QTreeWidget *treeWidget){    ChangeTreeContentsCommand *cmd = new ChangeTreeContentsCommand(m_form);    cmd->init(treeWidget, ui.treeWidget);    m_form->commandHistory()->push(cmd);}void TreeWidgetEditor::copyContents(QTreeWidget *sourceWidget, QTreeWidget *destWidget){    destWidget->clear();    int colCount = sourceWidget->columnCount();    destWidget->setColumnCount(colCount);    QTreeWidgetItem *origHeaderItem = sourceWidget->headerItem();    QTreeWidgetItem *headerItem = destWidget->headerItem();    for (int col = 0; col < colCount; col++) {        headerItem->setText(col, origHeaderItem->text(col));        headerItem->setIcon(col, origHeaderItem->icon(col));    }    if (!colCount)        return;    QTreeWidgetItem *lastItem = 0;    for (int i = 0; i < sourceWidget->topLevelItemCount(); i++) {        QTreeWidgetItem *origItem = sourceWidget->topLevelItem(i);        lastItem = new QTreeWidgetItem(destWidget);        lastItem->setFlags(lastItem->flags() | Qt::ItemIsEditable);        for (int j = 0; j < colCount; j++) {            lastItem->setText(j, origItem->text(j));            lastItem->setIcon(j, origItem->icon(j));        }        destWidget->setItemExpanded(lastItem, true);        copyContents(origItem, lastItem);    }}void TreeWidgetEditor::copyContents(QTreeWidgetItem *sourceItem, QTreeWidgetItem *destItem){    int colCount = sourceItem->treeWidget()->columnCount();    for (int i = 0; i < sourceItem->childCount(); i++) {        QTreeWidgetItem *origItem = sourceItem->child(i);        QTreeWidgetItem *item = new QTreeWidgetItem(destItem);        item->setFlags(item->flags() | Qt::ItemIsEditable);        for (int j = 0; j < colCount; j++) {            item->setText(j, origItem->text(j));            item->setIcon(j, origItem->icon(j));        }        item->treeWidget()->setItemExpanded(item, true);        copyContents(origItem, item);    }}void TreeWidgetEditor::on_newItemButton_clicked(){    m_updating = true;    QTreeWidgetItem *curItem = ui.treeWidget->currentItem();    QTreeWidgetItem *newItem = 0;    if (curItem) {        if (curItem->parent())            newItem = new QTreeWidgetItem(curItem->parent(), curItem);        else            newItem = new QTreeWidgetItem(ui.treeWidget, curItem);    } else        newItem = new QTreeWidgetItem(ui.treeWidget);    newItem->setText(0, tr("New Item"));    newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);    ui.treeWidget->setCurrentItem(newItem);    m_updating = false;    updateEditor();}void TreeWidgetEditor::on_newSubItemButton_clicked(){    QTreeWidgetItem *curItem = ui.treeWidget->currentItem();    if (!curItem)        return;    m_updating = true;    QTreeWidgetItem *newItem = new QTreeWidgetItem(curItem);    newItem->setText(0, tr("New Sub Item"));    newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);    ui.treeWidget->setCurrentItem(newItem);    m_updating = false;    updateEditor();}void TreeWidgetEditor::on_deleteItemButton_clicked(){    QTreeWidgetItem *curItem = ui.treeWidget->currentItem();    if (!curItem)        return;    m_updating = true;    QTreeWidgetItem *nextCurrent = 0;    if (curItem->parent()) {        int idx = curItem->parent()->indexOfChild(curItem);        if (idx == curItem->parent()->childCount() - 1)            idx--;        else            idx++;        if (idx < 0)            nextCurrent = curItem->parent();        else            nextCurrent = curItem->parent()->child(idx);    } else {        int idx = ui.treeWidget->indexOfTopLevelItem(curItem);        if (idx == ui.treeWidget->topLevelItemCount() - 1)            idx--;        else            idx++;        if (idx >= 0)            nextCurrent = ui.treeWidget->topLevelItem(idx);    }    delete curItem;    if (nextCurrent)        ui.treeWidget->setCurrentItem(nextCurrent);    m_updating = false;    updateEditor();}void TreeWidgetEditor::on_moveItemUpButton_clicked(){    QTreeWidgetItem *curItem = ui.treeWidget->currentItem();    if (!curItem)        return;    int idx;    if (curItem->parent())        idx = curItem->parent()->indexOfChild(curItem);    else        idx = ui.treeWidget->indexOfTopLevelItem(curItem);    if (idx == 0)        return;    m_updating = true;    QTreeWidgetItem *takenItem = 0;    if (curItem->parent()) {        QTreeWidgetItem *parentItem = curItem->parent();        takenItem = parentItem->takeChild(idx);        parentItem->insertChild(idx - 1, takenItem);    } else {        takenItem = ui.treeWidget->takeTopLevelItem(idx);        ui.treeWidget->insertTopLevelItem(idx - 1, takenItem);    }    ui.treeWidget->setCurrentItem(takenItem);    m_updating = false;    updateEditor();}void TreeWidgetEditor::on_moveItemDownButton_clicked(){    QTreeWidgetItem *curItem = ui.treeWidget->currentItem();    if (!curItem)        return;    int idx, idxCount;    if (curItem->parent()) {        idx = curItem->parent()->indexOfChild(curItem);        idxCount = curItem->parent()->childCount();    } else {        idx = ui.treeWidget->indexOfTopLevelItem(curItem);        idxCount = ui.treeWidget->topLevelItemCount();    }    if (idx == idxCount - 1)        return;    m_updating = true;    QTreeWidgetItem *takenItem = 0;    if (curItem->parent()) {        QTreeWidgetItem *parentItem = curItem->parent();        takenItem = parentItem->takeChild(idx);        parentItem->insertChild(idx + 1, takenItem);    } else {        takenItem = ui.treeWidget->takeTopLevelItem(idx);        ui.treeWidget->insertTopLevelItem(idx + 1, takenItem);    }    ui.treeWidget->setCurrentItem(takenItem);    m_updating = false;    updateEditor();}void TreeWidgetEditor::on_moveItemLeftButton_clicked(){    QTreeWidgetItem *curItem = ui.treeWidget->currentItem();    if (!curItem)        return;    QTreeWidgetItem *parentItem = curItem->parent();    if (!parentItem)        return;    m_updating = true;    QTreeWidgetItem *takenItem = parentItem->takeChild(parentItem->indexOfChild(curItem));    if (parentItem->parent()) {        int idx = parentItem->parent()->indexOfChild(parentItem);        parentItem->parent()->insertChild(idx, takenItem);    } else {        int idx = ui.treeWidget->indexOfTopLevelItem(parentItem);        ui.treeWidget->insertTopLevelItem(idx, takenItem);    }    ui.treeWidget->setCurrentItem(takenItem);    m_updating = false;    updateEditor();}void TreeWidgetEditor::on_moveItemRightButton_clicked(){    QTreeWidgetItem *curItem = ui.treeWidget->currentItem();    if (!curItem)        return;    int idx, idxCount;    if (curItem->parent()) {        idx = curItem->parent()->indexOfChild(curItem);        idxCount = curItem->parent()->childCount();    } else {        idx = ui.treeWidget->indexOfTopLevelItem(curItem);        idxCount = ui.treeWidget->topLevelItemCount();    }    if (idx == idxCount - 1)        return;    m_updating = true;    QTreeWidgetItem *takenItem = 0;    if (curItem->parent()) {        QTreeWidgetItem *parentItem = curItem->parent()->child(idx + 1);        takenItem = curItem->parent()->takeChild(idx);        parentItem->insertChild(0, takenItem);    } else {        QTreeWidgetItem *parentItem = ui.treeWidget->topLevelItem(idx + 1);        takenItem = ui.treeWidget->takeTopLevelItem(idx);        parentItem->insertChild(0, takenItem);    }    ui.treeWidget->setCurrentItem(takenItem);    m_updating = false;    updateEditor();}void TreeWidgetEditor::on_treeWidget_currentItemChanged(QTreeWidgetItem *,            QTreeWidgetItem *){    if (m_updating)        return;    QModelIndex idx = ui.treeWidget->selectionModel()->currentIndex();    m_updating = true;    ui.listWidget->setCurrentRow(idx.column());    m_updating = false;    updateEditor();    ui.itemTextLineEdit->selectAll();    ui.itemTextLineEdit->setFocus();}void TreeWidgetEditor::on_treeWidget_itemChanged(QTreeWidgetItem *){    if (m_updating)        return;    updateEditor();}void TreeWidgetEditor::on_listWidget_currentRowChanged(int){    if (m_updating)        return;    updateEditor();}void TreeWidgetEditor::on_listWidget_itemChanged(QListWidgetItem *item){    if (m_updating)        return;    QString str = item->text();    int row = ui.listWidget->row(item);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -