📄 treewidgeteditor.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 "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 + -