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::moveColumnsRight(int fromColumn, int toColumn) { if (fromColumn >= toColumn) return; QTreeWidgetItem *headerItem = ui.treeWidget->headerItem(); QString text = headerItem->text(fromColumn); QIcon icon = headerItem->icon(fromColumn); for (int i = fromColumn; i < toColumn; i++) { headerItem->setText(i, headerItem->text(i + 1)); headerItem->setIcon(i, headerItem->icon(i + 1)); } headerItem->setText(toColumn, text); headerItem->setIcon(toColumn, icon); QQueue<QTreeWidgetItem *> pendingQueue; for (int i = 0; i < ui.treeWidget->topLevelItemCount(); i++) pendingQueue.enqueue(ui.treeWidget->topLevelItem(i)); while (!pendingQueue.isEmpty()) { QTreeWidgetItem *item = pendingQueue.dequeue(); for (int i = 0; i < item->childCount(); i++) pendingQueue.enqueue(item->child(i)); QString text = item->text(fromColumn); QIcon icon = item->icon(fromColumn); for (int i = fromColumn; i < toColumn; i++) { item->setText(i, item->text(i + 1)); item->setIcon(i, item->icon(i + 1)); } item->setText(toColumn, text); item->setIcon(toColumn, icon); } }
QIcon QTreeWidgetItemProto::icon(int column) const { QTreeWidgetItem *item = qscriptvalue_cast<QTreeWidgetItem*>(thisObject()); if (item) return item->icon(column); return QIcon(); }
void TreeWidgetEditor::on_previewPixmapItemButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; if (!ui.listWidget->currentItem()) return; int currentRow = ui.listWidget->currentRow(); FindIconDialog dialog(m_form, this); QString file_path; QString qrc_path; QIcon icon = curItem->icon(currentRow); 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); curItem->setIcon(currentRow, icon); ui.previewPixmapItemButton->setIcon(icon); ui.deletePixmapItemButton->setEnabled(!icon.isNull()); } } }
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)); item->setData(QAbstractFormBuilder::resourceRole(), headerItem->data(col, QAbstractFormBuilder::resourceRole())); } if (colCount > 0) { ui.listWidget->setCurrentRow(0); if (ui.treeWidget->topLevelItemCount() > 0) ui.treeWidget->setCurrentItem(ui.treeWidget->topLevelItem(0)); } m_updating = false; updateEditor(); }
QColor GTUtilsAnnotHighlightingTreeView::getItemColor(HI::GUITestOpStatus &os, const QString &itemName){ QTreeWidgetItem* item = findItem(os, itemName); QIcon icon = item->icon(1); QPixmap pixmap = icon.pixmap(5, 5); QImage img = pixmap.toImage(); QRgb rgb = img.pixel(QPoint(2,2)); QColor result = QColor(rgb); return result; }
void TreeWidgetEditor::moveColumnsRight(int fromColumn, int toColumn) { if (fromColumn >= toColumn) return; QTreeWidgetItem *headerItem = ui.treeWidget->headerItem(); const QString text = headerItem->text(fromColumn); const QIcon icon = headerItem->icon(fromColumn); const QVariant data = headerItem->data(fromColumn, QAbstractFormBuilder::resourceRole()); for (int i = fromColumn; i < toColumn; i++) { headerItem->setText(i, headerItem->text(i + 1)); headerItem->setIcon(i, headerItem->icon(i + 1)); headerItem->setData(i, QAbstractFormBuilder::resourceRole(), headerItem->data(i + 1, QAbstractFormBuilder::resourceRole())); } headerItem->setText(toColumn, text); headerItem->setIcon(toColumn, icon); headerItem->setData(toColumn, QAbstractFormBuilder::resourceRole(), data); QQueue<QTreeWidgetItem *> pendingQueue; for (int i = 0; i < ui.treeWidget->topLevelItemCount(); i++) pendingQueue.enqueue(ui.treeWidget->topLevelItem(i)); while (!pendingQueue.isEmpty()) { QTreeWidgetItem *item = pendingQueue.dequeue(); for (int i = 0; i < item->childCount(); i++) pendingQueue.enqueue(item->child(i)); const QString text = item->text(fromColumn); const QIcon icon = item->icon(fromColumn); const QVariant data = item->data(fromColumn, QAbstractFormBuilder::resourceRole()); for (int i = fromColumn; i < toColumn; i++) { item->setText(i, item->text(i + 1)); item->setIcon(i, item->icon(i + 1)); item->setData(i, QAbstractFormBuilder::resourceRole(), item->data(i + 1, QAbstractFormBuilder::resourceRole())); } item->setText(toColumn, text); item->setIcon(toColumn, icon); item->setData(toColumn, QAbstractFormBuilder::resourceRole(), icon); } }
QVariant DbStructureModel::data(const QModelIndex& index, int role) const { if(!index.isValid()) return QVariant(); // Get the item the index points at QTreeWidgetItem* item = static_cast<QTreeWidgetItem*>(index.internalPointer()); // Depending on the role either return the text or the icon if(role == Qt::DisplayRole) return item->text(index.column()); else if(role == Qt::DecorationRole) return item->icon(index.column()); else return QVariant(); }
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); } }
QVariant DbStructureModel::data(const QModelIndex& index, int role) const { if(!index.isValid()) return QVariant(); // Get the item the index points at QTreeWidgetItem* item = static_cast<QTreeWidgetItem*>(index.internalPointer()); // Depending on the role either return the text or the icon if(role == Qt::DisplayRole) return Settings::getSettingsValue("db", "hideschemalinebreaks").toBool() ? item->text(index.column()).replace("\n", " ").simplified() : item->text(index.column()); else if(role == Qt::ToolTipRole) return item->text(index.column()); // Don't modify the text when it's supposed to be shown in a tooltip else if(role == Qt::DecorationRole) return item->icon(index.column()); else return QVariant(); }
bool DisassembleWidget::displayCurrent() { if(address_ < lower_ || address_ > upper_) return false; bool bFound=false; for (int line=0; line < m_treeWidget->topLevelItemCount(); line++) { QTreeWidgetItem* item = m_treeWidget->topLevelItem(line); unsigned long address = strtoul(item->text(Address).toLatin1(), 0, 0); if (address == address_) { // put cursor at start of line and highlight the line m_treeWidget->setCurrentItem(item); item->setIcon(Icon, icon_); bFound = true; // need to process all items to clear icons } else if(!item->icon(Icon).isNull()) item->setIcon(Icon, QIcon()); } return bFound; }
bool DisassembleWidget::displayCurrent() { if(address_ < lower_ || address_ > upper_) return false; bool bFound=false; for (int line=0; line < m_disassembleWindow->topLevelItemCount(); line++) { QTreeWidgetItem* item = m_disassembleWindow->topLevelItem(line); unsigned long address = item->text(Address).toULong(&ok,16); if (address == address_) { // put cursor at start of line and highlight the line m_disassembleWindow->setCurrentItem(item); static const QIcon icon = QIcon::fromTheme(QStringLiteral("go-next")); item->setIcon(Icon, icon); bFound = true; // need to process all items to clear icons } else if(!item->icon(Icon).isNull()) item->setIcon(Icon, QIcon()); } return bFound; }
QVariant DbStructureModel::data(const QModelIndex& index, int role) const { if(!index.isValid()) return QVariant(); // Get the item the index points at QTreeWidgetItem* item = static_cast<QTreeWidgetItem*>(index.internalPointer()); // Depending on the role either return the text or the icon switch(role) { case Qt::DisplayRole: // For the display role and the browsable branch of the tree we want to show the column name including the schema name if necessary (i.e. // for schemata != "main"). For the normal structure branch of the tree we don't want to add the schema name because it's already obvious from // the position of the item in the tree. if(index.column() == ColumnName && item->parent() == browsablesRootItem) return sqlb::ObjectIdentifier(item->text(ColumnSchema), item->text(ColumnName)).toDisplayString(); else return Settings::getValue("db", "hideschemalinebreaks").toBool() ? item->text(index.column()).replace("\n", " ").simplified() : item->text(index.column()); case Qt::EditRole: return item->text(index.column()); case Qt::ToolTipRole: { // Show the original text but limited, when it's supposed to be shown in a tooltip QString text = item->text(index.column()); if (text.length() > 512) { text.truncate(509); text.append("..."); } return text; } case Qt::DecorationRole: return item->icon(index.column()); default: return QVariant(); } }
/** Adds a new action */ void DlgCustomToolbars::on_moveActionRightButton_clicked() { QTreeWidgetItem* item = commandTreeWidget->currentItem(); if (item) { QTreeWidgetItem* current = toolbarTreeWidget->currentItem(); if (!current) current = toolbarTreeWidget->topLevelItem(0); else if (current->parent()) current = current->parent(); if (current && !current->parent()) { QTreeWidgetItem* copy = new QTreeWidgetItem(current); copy->setText(0, item->text(1)); copy->setIcon(0, item->icon(0)); QByteArray data = item->data(1, Qt::UserRole).toByteArray(); copy->setData(0, Qt::UserRole, data); copy->setSizeHint(0, QSize(32, 32)); addCustomCommand(current->text(0), data); } } QVariant data = workbenchBox->itemData(workbenchBox->currentIndex(), Qt::UserRole); QString workbench = data.toString(); exportCustomToolbars(workbench.toLatin1()); }
void TupItemManager::mousePressEvent(QMouseEvent *event) { parentNode = ""; QTreeWidgetItem *item = itemAt(event->pos()); if (item) { setCurrentItem(item); emit itemSelected(item); if (event->buttons() == Qt::RightButton) { QMenu *menu = new QMenu(tr("Options")); if (isFolder(item)) { QAction *rename = new QAction(tr("Rename"), this); connect(rename, SIGNAL(triggered()), this, SLOT(renameItem())); QAction *remove = new QAction(tr("Delete"), this); connect(remove, SIGNAL(triggered()), this, SIGNAL(itemRemoved())); menu->addAction(rename); menu->addAction(remove); } else { QString extension = item->text(2); bool isSound = false; bool isNative = false; if ((extension.compare("OGG") == 0) || (extension.compare("MP3") == 0) || (extension.compare("WAV") == 0)) isSound = true; if (extension.compare("OBJ") == 0) isNative = true; if (extension.compare("SVG") == 0) { QAction *edit = new QAction(tr("Edit with Inkscape"), this); connect(edit, SIGNAL(triggered()), this, SLOT(callInkscapeToEdit())); #ifdef Q_OS_UNIX if (!QFile::exists("/usr/bin/inkscape")) edit->setDisabled(true); #else edit->setDisabled(true); #endif menu->addAction(edit); } else if ((extension.compare("OBJ") != 0) && !isSound) { QAction *gimpEdit = new QAction(tr("Edit with Gimp"), this); connect(gimpEdit, SIGNAL(triggered()), this, SLOT(callGimpToEdit())); #ifdef Q_OS_UNIX if (!QFile::exists("/usr/bin/gimp")) gimpEdit->setDisabled(true); #else gimpEdit->setDisabled(true); #endif menu->addAction(gimpEdit); QAction *kritaEdit = new QAction(tr("Edit with Krita"), this); connect(kritaEdit, SIGNAL(triggered()), this, SLOT(callKritaToEdit())); #ifdef Q_OS_UNIX if (!QFile::exists("/usr/bin/krita")) kritaEdit->setDisabled(true); #else kritaEdit->setDisabled(true); #endif menu->addAction(kritaEdit); QAction *myPaintEdit = new QAction(tr("Edit with MyPaint"), this); connect(myPaintEdit, SIGNAL(triggered()), this, SLOT(callMyPaintToEdit())); #ifdef Q_OS_UNIX if (!QFile::exists("/usr/bin/mypaint")) myPaintEdit->setDisabled(true); #else myPaintEdit->setDisabled(true); #endif menu->addAction(myPaintEdit); } if (!isSound && !isNative) { QAction *clone = new QAction(tr("Clone"), this); connect(clone, SIGNAL(triggered()), this, SLOT(cloneItem())); menu->addAction(clone); } QAction *exportObject = new QAction(tr("Export"), this); connect(exportObject, SIGNAL(triggered()), this, SLOT(exportItem())); QAction *rename = new QAction(tr("Rename"), this); connect(rename, SIGNAL(triggered()), this, SLOT(renameItem())); QAction *remove = new QAction(tr("Delete"), this); connect(remove, SIGNAL(triggered()), this, SIGNAL(itemRemoved())); menu->addAction(exportObject); menu->addAction(rename); menu->addAction(remove); menu->addSeparator(); #ifdef Q_OS_UNIX if (!isSound) { if (QFile::exists("/usr/bin/gimp") || QFile::exists("/usr/bin/krita") || QFile::exists("/usr/bin/mypaint")) { QAction *raster = new QAction(tr("Create new raster item"), this); connect(raster, SIGNAL(triggered()), this, SLOT(createNewRaster())); menu->addAction(raster); } if (QFile::exists("/usr/bin/inkscape")) { QAction *svg = new QAction(tr("Create new svg item"), this); connect(svg, SIGNAL(triggered()), this, SLOT(createNewSVG())); menu->addAction(svg); } } #endif } menu->exec(event->globalPos()); } else if (event->buttons() == Qt::LeftButton) { // SQA: This code doesn't work well at all. Reengineering is urgently required right here! // If the node has a parent, get the parent's name QTreeWidgetItem *top = item->parent(); if (top) parentNode = top->text(1); // For directories, get the children nodeChildren.clear(); if (item->text(2).length()==0 && item->childCount() > 0) { for (int i=0;i<item->childCount();i++) { QTreeWidgetItem *node = item->child(i); nodeChildren << node; } } QPixmap pixmap = item->icon(0).pixmap(15, 15); QByteArray itemData; QDataStream dataStream(&itemData, QIODevice::WriteOnly); dataStream << pixmap << item->text(1) << item->text(2) << item->text(3); QMimeData *mimeData = new QMimeData; mimeData->setData("application/x-dnditemdata", itemData); QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); drag->setPixmap(pixmap); if (drag->start(Qt::MoveAction) == Qt::MoveAction) delete takeTopLevelItem(indexOfTopLevelItem(item)); } } else { if (event->buttons() == Qt::RightButton) { QMenu *menu = new QMenu(tr("Options")); #ifdef Q_OS_UNIX if (QFile::exists("/usr/bin/gimp") || QFile::exists("/usr/bin/krita") || QFile::exists("/usr/bin/mypaint")) { QAction *raster = new QAction(tr("Create new raster item"), this); connect(raster, SIGNAL(triggered()), this, SLOT(createNewRaster())); menu->addAction(raster); } if (QFile::exists("/usr/bin/inkscape")) { QAction *svg = new QAction(tr("Create new svg item"), this); connect(svg, SIGNAL(triggered()), this, SLOT(createNewSVG())); menu->addAction(svg); } #endif menu->exec(event->globalPos()); } } }
void EffectsListWidget::initList(QMenu *effectsMenu, KActionCategory *effectActions, QString categoryFile, bool transitionMode) { QString current; QString currentFolder; bool found = false; effectsMenu->clear(); if (currentItem()) { current = currentItem()->text(0); if (currentItem()->parent()) currentFolder = currentItem()->parent()->text(0); else if (currentItem()->data(0, TypeRole) == EffectsList::EFFECT_FOLDER) currentFolder = currentItem()->text(0); } QTreeWidgetItem *misc = NULL; QTreeWidgetItem *audio = NULL; QTreeWidgetItem *custom = NULL; QList <QTreeWidgetItem *> folders; if (!categoryFile.isEmpty()) { QDomDocument doc; QFile file(categoryFile); doc.setContent(&file, false); file.close(); QStringList folderNames; QDomNodeList groups = doc.documentElement().elementsByTagName(QStringLiteral("group")); for (int i = 0; i < groups.count(); ++i) { folderNames << i18n(groups.at(i).firstChild().firstChild().nodeValue().toUtf8().constData()); } for (int i = 0; i < topLevelItemCount(); ++i) { topLevelItem(i)->takeChildren(); QString currentName = topLevelItem(i)->text(0); if (currentName != i18n("Misc") && currentName != i18n("Audio") && currentName != i18nc("Folder Name", "Custom") && !folderNames.contains(currentName)) { takeTopLevelItem(i); --i; } } for (int i = 0; i < groups.count(); ++i) { QTreeWidgetItem *item = findFolder(folderNames.at(i)); if (item) { item->setData(0, IdRole, groups.at(i).toElement().attribute(QStringLiteral("list"))); } else { item = new QTreeWidgetItem((QTreeWidget*)0, QStringList(folderNames.at(i))); item->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); item->setData(0, IdRole, groups.at(i).toElement().attribute(QStringLiteral("list"))); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); item->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); insertTopLevelItem(0, item); } folders.append(item); } misc = findFolder(i18n("Misc")); if (misc == NULL) { misc = new QTreeWidgetItem((QTreeWidget*)0, QStringList(i18n("Misc"))); misc->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); misc->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); insertTopLevelItem(0, misc); } audio = findFolder(i18n("Audio")); if (audio == NULL) { audio = new QTreeWidgetItem((QTreeWidget*)0, QStringList(i18n("Audio"))); audio->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); audio->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); insertTopLevelItem(0, audio); } custom = findFolder(i18nc("Folder Name", "Custom")); if (custom == NULL) { custom = new QTreeWidgetItem((QTreeWidget*)0, QStringList(i18nc("Folder Name", "Custom"))); custom->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); custom->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); insertTopLevelItem(0, custom); } } //insertTopLevelItems(0, folders); if (transitionMode) { loadEffects(&MainWindow::transitions, misc, &folders, EffectsList::TRANSITION_TYPE, current, &found); } else { loadEffects(&MainWindow::videoEffects, misc, &folders, EffectsList::EFFECT_VIDEO, current, &found); loadEffects(&MainWindow::audioEffects, audio, &folders, EffectsList::EFFECT_AUDIO, current, &found); loadEffects(&MainWindow::customEffects, custom, static_cast<QList<QTreeWidgetItem *> *>(0), EffectsList::EFFECT_CUSTOM, current, &found); if (!found && !currentFolder.isEmpty()) { // previously selected effect was removed, focus on its parent folder for (int i = 0; i < topLevelItemCount(); ++i) { if (topLevelItem(i)->text(0) == currentFolder) { setCurrentItem(topLevelItem(i)); break; } } } } setSortingEnabled(true); sortByColumn(0, Qt::AscendingOrder); // populate effects menu QMenu *sub1 = NULL; QMenu *sub2 = NULL; QMenu *sub3 = NULL; QMenu *sub4 = NULL; for (int i = 0; i < topLevelItemCount(); ++i) { if (topLevelItem(i)->data(0, TypeRole) == EffectsList::TRANSITION_TYPE) { QTreeWidgetItem *item = topLevelItem(i); QAction *a = new QAction(item->icon(0), item->text(0), effectsMenu); QStringList data = item->data(0, IdRole).toStringList(); QString id = data.at(1); if (id.isEmpty()) id = data.at(0); a->setData(data); a->setIconVisibleInMenu(false); effectsMenu->addAction(a); effectActions->addAction("transition_" + id, a); continue; } if (!topLevelItem(i)->childCount()) continue; QMenu *sub = new QMenu(topLevelItem(i)->text(0), effectsMenu); effectsMenu->addMenu(sub); int effectsInCategory = topLevelItem(i)->childCount(); bool hasSubCategories = false; if (effectsInCategory > 60) { // create subcategories if there are too many effects hasSubCategories = true; sub1 = new QMenu(i18nc("menu name for effects names between these 2 letters", "0 - F"), sub); sub->addMenu(sub1); sub2 = new QMenu(i18nc("menu name for effects names between these 2 letters", "G - L"), sub); sub->addMenu(sub2); sub3 = new QMenu(i18nc("menu name for effects names between these 2 letters", "M - R"), sub); sub->addMenu(sub3); sub4 = new QMenu(i18nc("menu name for effects names between these 2 letters", "S - Z"), sub); sub->addMenu(sub4); } for (int j = 0; j < effectsInCategory; ++j) { QTreeWidgetItem *item = topLevelItem(i)->child(j); QAction *a = new QAction(item->icon(0), item->text(0), sub); QStringList data = item->data(0, IdRole).toStringList(); QString id = data.at(1); if (id.isEmpty()) id = data.at(0); a->setData(data); a->setIconVisibleInMenu(false); if (hasSubCategories) { // put action in sub category QRegExp rx("^[s-z].+"); if (rx.exactMatch(item->text(0).toLower())) { sub4->addAction(a); } else { rx.setPattern(QStringLiteral("^[m-r].+")); if (rx.exactMatch(item->text(0).toLower())) { sub3->addAction(a); } else { rx.setPattern(QStringLiteral("^[g-l].+")); if (rx.exactMatch(item->text(0).toLower())) { sub2->addAction(a); } else sub1->addAction(a); } } } else sub->addAction(a); effectActions->addAction("video_effect_" + id, a); } } }
void TreeWidgetEditor::updateEditor() { for (int i = 0; i < ui.listWidget->count(); i++) ui.treeWidget->headerItem()->setText(i, ui.listWidget->item(i)->text()); QTreeWidgetItem *current = ui.treeWidget->currentItem(); QListWidgetItem *currentColumn = ui.listWidget->currentItem(); bool itemsEnabled = false; bool currentItemEnabled = false; bool moveItemUpEnabled = false; bool moveItemDownEnabled = false; bool moveItemRightEnabled = false; bool moveItemLeftEnabled = false; bool currentColumnEnabled = false; bool moveColumnUpEnabled = false; bool moveColumnDownEnabled = false; if (currentColumn) { currentColumnEnabled = true; int idx = ui.listWidget->currentRow(); if (idx > 0) moveColumnUpEnabled = true; if (idx < ui.listWidget->count() - 1) moveColumnDownEnabled = true; itemsEnabled = true; if (current) { int idx; int idxCount; currentItemEnabled = true; if (current->parent()) { moveItemLeftEnabled = true; idx = current->parent()->indexOfChild(current); idxCount = current->parent()->childCount(); } else { idx = ui.treeWidget->indexOfTopLevelItem(current); idxCount = ui.treeWidget->topLevelItemCount(); } if (idx > 0) moveItemUpEnabled = true; if (idx < idxCount - 1) { moveItemDownEnabled = true; moveItemRightEnabled = 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.newSubItemButton->setEnabled(currentItemEnabled); ui.deleteItemButton->setEnabled(currentItemEnabled); ui.moveItemUpButton->setEnabled(moveItemUpEnabled); ui.moveItemDownButton->setEnabled(moveItemDownEnabled); ui.moveItemRightButton->setEnabled(moveItemRightEnabled); ui.moveItemLeftButton->setEnabled(moveItemLeftEnabled); ui.renameColumnButton->setEnabled(currentColumnEnabled); ui.deleteColumnButton->setEnabled(currentColumnEnabled); ui.pixmapColumnLabel->setEnabled(currentColumnEnabled); ui.previewPixmapColumnButton->setEnabled(currentColumnEnabled); ui.moveColumnUpButton->setEnabled(moveColumnUpEnabled); ui.moveColumnDownButton->setEnabled(moveColumnDownEnabled); QString itemText, columnText; QIcon itemIcon, columnIcon; if (currentColumn) { int idx = ui.listWidget->currentRow(); columnIcon = ui.treeWidget->headerItem()->icon(idx); if (current) { itemText = current->text(idx); itemIcon = current->icon(idx); } } ui.itemTextLineEdit->setText(itemText); ui.previewPixmapItemButton->setIcon(itemIcon); ui.deletePixmapItemButton->setEnabled(!itemIcon.isNull()); ui.previewPixmapColumnButton->setIcon(columnIcon); ui.deletePixmapColumnButton->setEnabled(!columnIcon.isNull()); }
bool KrTreeWidget::event(QEvent * event) { switch (event->type()) { // HACK: QT 4 Context menu key isn't handled properly case QEvent::ContextMenu: { QContextMenuEvent* ce = (QContextMenuEvent*) event; if (ce->reason() == QContextMenuEvent::Mouse) { QPoint pos = viewport()->mapFromGlobal(ce->globalPos()); QTreeWidgetItem * item = itemAt(pos); int column = columnAt(pos.x()); emit itemRightClicked(item, ce->globalPos(), column); return true; } else { if (currentItem()) { QRect r = visualItemRect(currentItem()); QPoint p = viewport()->mapToGlobal(QPoint(r.x() + 5, r.y() + 5)); emit itemRightClicked(currentItem(), p, currentColumn()); return true; } } } break; case QEvent::KeyPress: { // HACK: QT 4 Ctrl+A bug fix: Ctrl+A doesn't work if QTreeWidget contains parent / child items // Insert doesn't change the selections for multi selection modes QKeyEvent* ke = (QKeyEvent*) event; switch (ke->key()) { case Qt::Key_Insert: { if (ke->modifiers() != 0) break; QAbstractItemView::SelectionMode mode = selectionMode(); if (mode != QAbstractItemView::ContiguousSelection && mode != QAbstractItemView::ExtendedSelection && mode != QAbstractItemView::MultiSelection) break; ke->accept(); if (currentItem() == 0) return true; currentItem()->setSelected(!currentItem()->isSelected()); return true; } case Qt::Key_A: if (ke->modifiers() == Qt::ControlModifier) { QAbstractItemView::SelectionMode mode = selectionMode(); if (mode == QAbstractItemView::ContiguousSelection || mode == QAbstractItemView::ExtendedSelection || mode == QAbstractItemView::MultiSelection) { selectAll(); ke->accept(); return true; } } break; default: break; } } break; case QEvent::Resize: { QResizeEvent * re = (QResizeEvent *)event; if (!_inResize && re->oldSize() != re->size()) { if (_stretchingColumn != -1 && columnCount()) { QList< int > columnsSizes; int oldSize = 0; for (int i = 0; i != header()->count(); i++) { columnsSizes.append(header()->sectionSize(i)); oldSize += header()->sectionSize(i); } bool res = QTreeWidget::event(event); int newSize = viewport()->width(); int delta = newSize - oldSize; if (delta) { _inResize = true; for (int i = 0; i != header()->count(); i++) { if (i == _stretchingColumn) { int newNs = columnsSizes[ i ] + delta; if (newNs < 8) newNs = 8; header()->resizeSection(i, newNs); } else if (header()->sectionSize(i) != columnsSizes[ i ]) { header()->resizeSection(i, columnsSizes[ i ]); } } _inResize = false; } return res; } } break; } case QEvent::ToolTip: { QHelpEvent *he = static_cast<QHelpEvent*>(event); if (viewport()) { QPoint pos = viewport()->mapFromGlobal(he->globalPos()); QTreeWidgetItem * item = itemAt(pos); int column = columnAt(pos.x()); if (item) { if (!item->toolTip(column).isEmpty()) break; QString tip = item->text(column); int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1; int requiredWidth = QFontMetrics(font()).width(tip) + 2 * textMargin; if (column == 0 && indentation()) { int level = 0; QTreeWidgetItem *parent = item; while ((parent = parent->parent())) level++; if (rootIsDecorated()) level++; requiredWidth += level * indentation(); } QIcon icon = item->icon(column); if (!icon.isNull()) { QStyleOptionViewItem opts = viewOptions(); QSize iconSize = icon.actualSize(opts.decorationSize); requiredWidth += iconSize.width(); int pixmapMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, this) + 1; requiredWidth += 2 * pixmapMargin; } if (!tip.isEmpty() && (columnWidth(column) < requiredWidth)) QToolTip::showText(he->globalPos(), tip, this); return true; } } } break; default: break; } return QTreeWidget::event(event); }