📄 qdesigner_command.cpp
字号:
}// ---- InsertRowCommand ----InsertRowCommand::InsertRowCommand(QDesignerFormWindowInterface *formWindow) : QDesignerFormWindowCommand(tr("Insert Row"), formWindow){}void InsertRowCommand::init(QWidget *widget, int row){ m_widget = widget; m_row = row;}void InsertRowCommand::redo(){}void InsertRowCommand::undo(){}// ---- ContainerWidgetCommand ----ContainerWidgetCommand::ContainerWidgetCommand(QDesignerFormWindowInterface *formWindow) : QDesignerFormWindowCommand(QString(), formWindow){}ContainerWidgetCommand::~ContainerWidgetCommand(){}QDesignerContainerExtension *ContainerWidgetCommand::containerExtension() const{ QExtensionManager *mgr = core()->extensionManager(); return qt_extension<QDesignerContainerExtension*>(mgr, m_containerWidget);}void ContainerWidgetCommand::init(QWidget *containerWidget){ m_containerWidget = containerWidget; if (QDesignerContainerExtension *c = containerExtension()) { m_index = c->currentIndex(); m_widget = c->widget(m_index); }}void ContainerWidgetCommand::removePage(){ if (QDesignerContainerExtension *c = containerExtension()) { c->remove(m_index); m_widget->hide(); m_widget->setParent(formWindow()); }}void ContainerWidgetCommand::addPage(){ if (QDesignerContainerExtension *c = containerExtension()) { c->insertWidget(m_index, m_widget); m_widget->show(); c->setCurrentIndex(m_index); }}// ---- DeleteContainerWidgetPageCommand ----DeleteContainerWidgetPageCommand::DeleteContainerWidgetPageCommand(QDesignerFormWindowInterface *formWindow) : ContainerWidgetCommand(formWindow){}DeleteContainerWidgetPageCommand::~DeleteContainerWidgetPageCommand(){}void DeleteContainerWidgetPageCommand::init(QWidget *containerWidget){ ContainerWidgetCommand::init(containerWidget); setDescription(tr("Delete Page"));}void DeleteContainerWidgetPageCommand::redo(){ removePage(); cheapUpdate();}void DeleteContainerWidgetPageCommand::undo(){ addPage(); cheapUpdate();}// ---- AddContainerWidgetPageCommand ----AddContainerWidgetPageCommand::AddContainerWidgetPageCommand(QDesignerFormWindowInterface *formWindow) : ContainerWidgetCommand(formWindow){}AddContainerWidgetPageCommand::~AddContainerWidgetPageCommand(){}void AddContainerWidgetPageCommand::init(QWidget *containerWidget){ init(containerWidget, InsertBefore);}void AddContainerWidgetPageCommand::init(QWidget *containerWidget, InsertionMode mode){ m_containerWidget = containerWidget; if (QDesignerContainerExtension *c = containerExtension()) { m_index = c->currentIndex(); if (mode == InsertAfter) m_index++; m_widget = new QDesignerWidget(formWindow(), m_containerWidget); m_widget->setObjectName(tr("page")); formWindow()->ensureUniqueObjectName(m_widget); setDescription(tr("Insert Page")); QDesignerFormEditorInterface *core = formWindow()->core(); core->metaDataBase()->add(m_widget); }}void AddContainerWidgetPageCommand::redo(){ addPage(); cheapUpdate();}void AddContainerWidgetPageCommand::undo(){ removePage(); cheapUpdate();}// ---- ChangeTableContentsCommand ----ChangeTableContentsCommand::ChangeTableContentsCommand(QDesignerFormWindowInterface *formWindow) : QDesignerFormWindowCommand(tr("Change Table Contents"), formWindow), m_oldColumnCount(0), m_newColumnCount(0), m_oldRowCount(0), m_newRowCount(0){}void ChangeTableContentsCommand::init(QTableWidget *tableWidget, QTableWidget *fromTableWidget){ m_tableWidget = tableWidget; m_oldItemsState.clear(); m_newItemsState.clear(); m_oldHorizontalHeaderState.clear(); m_newHorizontalHeaderState.clear(); m_oldVerticalHeaderState.clear(); m_newVerticalHeaderState.clear(); m_oldColumnCount = tableWidget->columnCount(); m_oldRowCount = tableWidget->rowCount(); m_newColumnCount = fromTableWidget->columnCount(); m_newRowCount = fromTableWidget->rowCount(); for (int col = 0; col < m_oldColumnCount; col++) { QTableWidgetItem *item = tableWidget->horizontalHeaderItem(col); if (item) { QString text = item->text(); QIcon icon = item->icon(); if (!text.isEmpty() || !icon.isNull()) { m_oldHorizontalHeaderState[col] = qMakePair<QString, QIcon>(text, icon); } } } for (int row = 0; row < m_oldRowCount; row++) { QTableWidgetItem *item = tableWidget->verticalHeaderItem(row); if (item) { QString text = item->text(); QIcon icon = item->icon(); if (!text.isEmpty() || !icon.isNull()) { m_oldVerticalHeaderState[row] = qMakePair<QString, QIcon>(text, icon); } } } for (int col = 0; col < m_oldColumnCount; col++) { for (int row = 0; row < m_oldRowCount; row++) { QTableWidgetItem *item = tableWidget->item(row, col); if (item) { QString text = item->text(); QIcon icon = item->icon(); if (!text.isEmpty() || !icon.isNull()) { m_oldItemsState[qMakePair<int, int>(row, col)] = qMakePair<QString, QIcon>(text, icon); } } } } for (int col = 0; col < m_newColumnCount; col++) { QTableWidgetItem *item = fromTableWidget->horizontalHeaderItem(col); if (item) { QString text = item->text(); QIcon icon = item->icon(); if (!text.isEmpty() || !icon.isNull()) { m_newHorizontalHeaderState[col] = qMakePair<QString, QIcon>(text, icon); } } } for (int row = 0; row < m_newRowCount; row++) { QTableWidgetItem *item = fromTableWidget->verticalHeaderItem(row); if (item) { QString text = item->text(); QIcon icon = item->icon(); if (!text.isEmpty() || !icon.isNull()) { m_newVerticalHeaderState[row] = qMakePair<QString, QIcon>(text, icon); } } } for (int col = 0; col < m_newColumnCount; col++) { for (int row = 0; row < m_newRowCount; row++) { QTableWidgetItem *item = fromTableWidget->item(row, col); if (item) { QString text = item->text(); QIcon icon = item->icon(); if (!text.isEmpty() || !icon.isNull()) { m_newItemsState[qMakePair<int, int>(row, col)] = qMakePair<QString, QIcon>(text, icon); } } } }}void ChangeTableContentsCommand::changeContents(QTableWidget *tableWidget, int rowCount, int columnCount, const QMap<int, QPair<QString, QIcon> > &horizontalHeaderState, const QMap<int, QPair<QString, QIcon> > &verticalHeaderState, const QMap<QPair<int, int>, QPair<QString, QIcon> > &itemsState) const{ tableWidget->clear(); tableWidget->setColumnCount(columnCount); QMap<int, QPair<QString, QIcon> >::ConstIterator itColumn = horizontalHeaderState.constBegin(); while (itColumn != horizontalHeaderState.constEnd()) { int column = itColumn.key(); QString text = itColumn.value().first; QIcon icon = itColumn.value().second; QTableWidgetItem *item = new QTableWidgetItem; item->setText(text); item->setIcon(icon); tableWidget->setHorizontalHeaderItem(column, item); itColumn++; } tableWidget->setRowCount(rowCount); QMap<int, QPair<QString, QIcon> >::ConstIterator itRow = verticalHeaderState.constBegin(); while (itRow != verticalHeaderState.constEnd()) { int row = itRow.key(); QString text = itRow.value().first; QIcon icon = itRow.value().second; QTableWidgetItem *item = new QTableWidgetItem; item->setText(text); item->setIcon(icon); tableWidget->setVerticalHeaderItem(row, item); itRow++; } QMap<QPair<int, int>, QPair<QString, QIcon> >::ConstIterator itItem = itemsState.constBegin(); while (itItem != itemsState.constEnd()) { int row = itItem.key().first; int column = itItem.key().second; QString text = itItem.value().first; QIcon icon = itItem.value().second; QTableWidgetItem *item = new QTableWidgetItem; item->setText(text); item->setIcon(icon); tableWidget->setItem(row, column, item); itItem++; }}void ChangeTableContentsCommand::redo(){ changeContents(m_tableWidget, m_newRowCount, m_newColumnCount, m_newHorizontalHeaderState, m_newVerticalHeaderState, m_newItemsState);}void ChangeTableContentsCommand::undo(){ changeContents(m_tableWidget, m_oldRowCount, m_oldColumnCount, m_oldHorizontalHeaderState, m_oldVerticalHeaderState, m_oldItemsState);}// ---- ChangeTreeContentsCommand ----ChangeTreeContentsCommand::ChangeTreeContentsCommand(QDesignerFormWindowInterface *formWindow) : QDesignerFormWindowCommand(tr("Change Tree Contents"), formWindow), m_oldHeaderItemState(0), m_newHeaderItemState(0), m_oldColumnCount(0), m_newColumnCount(0){}ChangeTreeContentsCommand::~ChangeTreeContentsCommand(){ clearState(m_oldItemsState, m_oldHeaderItemState); clearState(m_newItemsState, m_newHeaderItemState);}void ChangeTreeContentsCommand::init(QTreeWidget *treeWidget, QTreeWidget *fromTreeWidget){ m_treeWidget = treeWidget; m_oldColumnCount = treeWidget->columnCount(); m_newColumnCount = fromTreeWidget->columnCount(); initState(m_oldItemsState, m_oldHeaderItemState, treeWidget); initState(m_newItemsState, m_newHeaderItemState, fromTreeWidget);}void ChangeTreeContentsCommand::redo(){ changeContents(m_treeWidget, m_newColumnCount, m_newItemsState, m_newHeaderItemState);}void ChangeTreeContentsCommand::undo(){ changeContents(m_treeWidget, m_oldColumnCount, m_oldItemsState, m_oldHeaderItemState);}void ChangeTreeContentsCommand::initState(QList<QTreeWidgetItem *> &itemsState, QTreeWidgetItem *&headerItemState, QTreeWidget *fromTreeWidget) const{ clearState(itemsState, headerItemState); for (int i = 0; i < fromTreeWidget->topLevelItemCount(); i++) itemsState.append(fromTreeWidget->topLevelItem(i)->clone()); headerItemState = fromTreeWidget->headerItem()->clone();}void ChangeTreeContentsCommand::changeContents(QTreeWidget *treeWidget, int columnCount, const QList<QTreeWidgetItem *> &itemsState, const QTreeWidgetItem *headerItemState) const{ treeWidget->clear(); treeWidget->setColumnCount(columnCount); treeWidget->setHeaderItem(headerItemState->clone()); if (!columnCount) return; foreach (QTreeWidgetItem *item, itemsState) treeWidget->addTopLevelItem(item->clone());}void ChangeTreeContentsCommand::clearState(QList<QTreeWidgetItem *> &itemsState, QTreeWidgetItem *&headerItemState) const{ QListIterator<QTreeWidgetItem *> it(itemsState); while (it.hasNext()) delete it.next(); itemsState.clear(); if (headerItemState) delete headerItemState; headerItemState = 0;}// ---- ChangeListContentsCommand ----ChangeListContentsCommand::ChangeListContentsCommand(QDesignerFormWindowInterface *formWindow) : QDesignerFormWindowCommand(QString(), formWindow){}void ChangeListContentsCommand::init(QListWidget *listWidget, const QList<QPair<QString, QIcon> > &items){ m_listWidget = listWidget; m_comboBox = 0; m_newItemsState = items; m_oldItemsState.clear(); for (int i = 0; i < listWidget->count(); i++) { QListWidgetItem *item = listWidget->item(i); QString text = item->text(); QIcon icon = item->icon(); m_oldItemsState.append(qMakePair<QString, QIcon>(text, icon)); }}void ChangeListContentsCommand::init(QComboBox *comboBox, const QList<QPair<QString, QIcon> > &items){ m_listWidget = 0; m_comboBox = comboBox; m_newItemsState = items; m_oldItemsState.clear(); for (int i = 0; i < comboBox->count(); i++) { QString text = comboBox->itemText(i); QIcon icon = comboBox->itemIcon(i); m_oldItemsState.append(qMakePair<QString, QIcon>(text, icon)); }}void ChangeListContentsCommand::redo(){ if (m_listWidget) changeContents(m_listWidget, m_newItemsState); else if (m_comboBox) changeContents(m_comboBox, m_newItemsState);}void ChangeListContentsCommand::undo(){ if (m_listWidget) changeContents(m_listWidget, m_oldItemsState); else if (m_comboBox) changeContents(m_comboBox, m_oldItemsState);}void ChangeListContentsCommand::changeContents(QListWidget *listWidget, const QList<QPair<QString, QIcon> > &itemsSt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -