qdesigner_command.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 2,136 行 · 第 1/5 页

CPP
2,136
字号
        if (text.isEmpty()) // Legacy behaviour: auto-generate number for empty items             return;        QString defaultText;        defaultText.setNum(i+1);        if (text == defaultText)            return;    }    headerMap->insert(i, QPair<QString, QIcon>(text, icon));}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++)        if (const QTableWidgetItem *item = tableWidget->horizontalHeaderItem(col))            insertHeaderItem(item->text(), item->icon(), col, &m_oldHorizontalHeaderState);    for (int row = 0; row < m_oldRowCount; row++)        if (const QTableWidgetItem *item = tableWidget->verticalHeaderItem(row))            insertHeaderItem(item->text(), item->icon(), row,  &m_oldVerticalHeaderState);    for (int col = 0; col < m_oldColumnCount; col++) {        for (int row = 0; row < m_oldRowCount; row++) {            const QTableWidgetItem *item = tableWidget->item(row, col);            if (item) {                const QString text = item->text();                const 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++)        if (const QTableWidgetItem *item = fromTableWidget->horizontalHeaderItem(col))            insertHeaderItem(item->text(), item->icon(), col, &m_newHorizontalHeaderState);    for (int row = 0; row < m_newRowCount; row++)        if (const QTableWidgetItem *item = fromTableWidget->verticalHeaderItem(row))            insertHeaderItem(item->text(), item->icon(), row, &m_newVerticalHeaderState);    for (int col = 0; col < m_newColumnCount; col++) {        for (int row = 0; row < m_newRowCount; row++) {            const QTableWidgetItem *item = fromTableWidget->item(row, col);            if (item) {                const QString text = item->text();                const 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()) {        const int column = itColumn.key();        const QString text = itColumn.value().first;        const 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()) {        const int row = itRow.key();        const QString text = itRow.value().first;        const 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()) {        const int row = itItem.key().first;        const int column = itItem.key().second;        const QString text = itItem.value().first;        const QIcon icon = itItem.value().second;        QTableWidgetItem *item = new QTableWidgetItem;        item->setText(text);        item->setIcon(icon);        tableWidget->setItem(row, column, item);        itItem++;    }    QMetaObject::invokeMethod(tableWidget, "updateGeometries");}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(QApplication::translate("Command", "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++) {        const QListWidgetItem *item = listWidget->item(i);        const QString text = item->text();       const  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++) {        const QString text = comboBox->itemText(i);        const 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> > &itemsState) const{    listWidget->clear();    QListIterator<QPair<QString, QIcon> > it(itemsState);    while (it.hasNext()) {        const QPair<QString, QIcon> pair = it.next();        QListWidgetItem *item = new QListWidgetItem(pair.second, pair.first);        listWidget->addItem(item);    }}void ChangeListContentsCommand::changeContents(QComboBox *comboBox,        const QList<QPair<QString, QIcon> > &itemsState) const{    comboBox->clear();    QListIterator<QPair<QString, QIcon> > it(itemsState);    while (it.hasNext()) {        const QPair<QString, QIcon> pair = it.next();        comboBox->addItem(pair.second, pair.first);        comboBox->setItemData(comboBox->count() - 1, pair.second);    }}// ---- AddActionCommand ----AddActionCommand::AddActionCommand(QDesignerFormWindowInterface *formWindow) :    QDesignerFormWindowCommand(QApplication::translate("Command", "Add action"), formWindow){    m_action = 0;}void AddActionCommand::init(QAction *action){    Q_ASSERT(m_action == 0);    m_action = action;}void AddActionCommand::redo(){    core()->actionEditor()->setFormWindow(formWindow());    core()->actionEditor()->manageAction(m_action);}void AddActionCommand::undo(){    core()->actionEditor()->setFormWindow(formWindow());    core()->actionEditor()->unmanageAction(m_action);}// ---- RemoveActionCommand ----RemoveActionCommand::RemoveActionCommand(QDesignerFormWindowInterface *formWindow) :    QDesignerFormWindowCommand(QApplication::translate("Command", "Remove action"), formWindow),    m_action(0){}static RemoveActionCommand::ActionData findActionIn(QAction *action){    RemoveActionCommand::ActionData result;    // We only want menus and toolbars, no toolbuttons.    foreach (QWidget *widget, action->associatedWidgets())        if (qobject_cast<const QMenu *>(widget) || qobject_cast<const QToolBar *>(widget)) {            const QList<QAction*> actionList = widget->actions();            const int size = actionList.size();            for (int i = 0; i < size; ++i) {                if (actionList.at(i) == action) {                    QAction *before = 0;                    if (i + 1 < size)                        before = actionList.at(i + 1);                    result.append(RemoveActionCommand::ActionDataItem(before, widget));                    break;                }            }        }    return result;}void RemoveActionCommand::init(QAction *action){    Q_ASSERT(m_action == 0);    m_action = action;    m_actionData = findActionIn(action);}void RemoveActionCommand::redo(){    foreach (const ActionDataItem &item, m_actionData) {        item.widget->removeAction(m_action);    }    core()->actionEditor()->setFormWindow(formWindow());    core()->actionEditor()->unmanageAction(m_action);    if (!m_actionData.empty())        core()->objectInspector()->setFormWindow(formWindow());}void RemoveActionCommand::undo(){    core()->actionEditor()->setFormWindow(formWindow());    core()->actionEditor()->manageAction(m_action);    foreach (const ActionDataItem &item, m_actionData) {        item.widget->insertAction(item.before, m_action);    }    if (!m_actionData.empty())        core()->objectInspector()->setFormWindow(formWindow());}// ---- ActionInsertionCommand ----ActionInsertionCommand::ActionInsertionCommand(const QString &text, QDesignerFormWindowInterface *formWindow) :    QDesignerFormWindowCommand(text, formWindow),    m_parentWidget(0),    m_action(0),    m_beforeAction(0),    m_update(false){}void ActionInsertionCommand::init(QWidget *parentWidget, QAction *action, QAction *beforeAction, bool update){    Q_ASSERT(m_parentWidget == 0);    Q_ASSERT(m_action == 0);    m_parentWidget = parentWidget;    m_action = action;    m_beforeAction = beforeAction;    m_update = update;}void ActionInsertionCommand::insertAction(){    Q_ASSERT(m_action != 0);    Q_ASSERT(m_parentWidget != 0);    m_parentWidget->insertAction(m_beforeAction, m_action);    if (m_update) {        cheapUpdate();        if (QMenu *menu = m_action->menu())            selectUnmanagedObject(menu);        else            selectUnmanagedObject(m_action);    }}void ActionInsertionCommand::removeAction(){    Q_ASSERT(m_action != 0);    Q_ASSERT(m_parentWidget != 0);    if (QDesignerMenu *menu = qobject_cast<QDesignerMenu*>(m

⌨️ 快捷键说明

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