highlight operation on multiple items
This commit is contained in:
parent
f78a74b9cf
commit
c9b9d9b227
@ -775,54 +775,55 @@ std::vector<DecalXY> DesignWidget::getDecals(ElementType type, IdString value)
|
|||||||
return decals;
|
return decals;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DesignWidget::updateHighlightGroup(QTreeWidgetItem *item, int group)
|
void DesignWidget::updateHighlightGroup(QList<QTreeWidgetItem*> items, int group)
|
||||||
{
|
{
|
||||||
|
const bool shouldClear = items.size() == 1;
|
||||||
|
for (auto item : items) {
|
||||||
if (highlightSelected.contains(item)) {
|
if (highlightSelected.contains(item)) {
|
||||||
if (highlightSelected[item] == group) {
|
if (shouldClear && highlightSelected[item] == group) {
|
||||||
highlightSelected.remove(item);
|
highlightSelected.remove(item);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
highlightSelected[item] = group;
|
highlightSelected[item] = group;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
highlightSelected.insert(item, group);
|
highlightSelected.insert(item, group);
|
||||||
|
}
|
||||||
std::vector<DecalXY> decals;
|
std::vector<DecalXY> decals[8];
|
||||||
|
|
||||||
for (auto it : highlightSelected.toStdMap()) {
|
for (auto it : highlightSelected.toStdMap()) {
|
||||||
if (it.second == group) {
|
|
||||||
ElementType type = static_cast<ElementTreeItem *>(it.first)->getType();
|
ElementType type = static_cast<ElementTreeItem *>(it.first)->getType();
|
||||||
IdString value = static_cast<IdStringTreeItem *>(it.first)->getData();
|
IdString value = static_cast<IdStringTreeItem *>(it.first)->getData();
|
||||||
std::vector<DecalXY> d = getDecals(type, value);
|
std::vector<DecalXY> d = getDecals(type, value);
|
||||||
std::move(d.begin(), d.end(), std::back_inserter(decals));
|
std::move(d.begin(), d.end(), std::back_inserter(decals[it.second]));
|
||||||
}
|
}
|
||||||
}
|
for (int i=0;i<8;i++)
|
||||||
|
Q_EMIT highlight(decals[i], i);
|
||||||
Q_EMIT highlight(decals, group);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DesignWidget::prepareMenuProperty(const QPoint &pos)
|
void DesignWidget::prepareMenuProperty(const QPoint &pos)
|
||||||
{
|
{
|
||||||
QTreeWidget *tree = propertyEditor->treeWidget();
|
QTreeWidget *tree = propertyEditor->treeWidget();
|
||||||
|
QList<QTreeWidgetItem*> items;
|
||||||
itemContextMenu = tree->itemAt(pos);
|
for (auto itemContextMenu : tree->selectedItems()) {
|
||||||
if (itemContextMenu->parent() == nullptr)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QtBrowserItem *browserItem = propertyEditor->itemToBrowserItem(itemContextMenu);
|
QtBrowserItem *browserItem = propertyEditor->itemToBrowserItem(itemContextMenu);
|
||||||
if (!browserItem)
|
if (!browserItem)
|
||||||
return;
|
continue;
|
||||||
QtProperty *selectedProperty = browserItem->property();
|
QtProperty *selectedProperty = browserItem->property();
|
||||||
ElementType type = getElementTypeByName(selectedProperty->propertyId());
|
ElementType type = getElementTypeByName(selectedProperty->propertyId());
|
||||||
if (type == ElementType::NONE)
|
if (type == ElementType::NONE)
|
||||||
return;
|
continue;
|
||||||
IdString value = ctx->id(selectedProperty->valueText().toStdString());
|
IdString value = ctx->id(selectedProperty->valueText().toStdString());
|
||||||
|
items.append(nameToItem[getElementIndex(type)].value(value.c_str(ctx)));
|
||||||
QTreeWidgetItem *item = nameToItem[getElementIndex(type)].value(value.c_str(ctx));
|
}
|
||||||
|
int selectedIndex = -1;
|
||||||
|
if (items.size() == 1) {
|
||||||
|
QTreeWidgetItem *item = items.at(0);
|
||||||
|
if (highlightSelected.contains(item))
|
||||||
|
selectedIndex = highlightSelected[item];
|
||||||
|
}
|
||||||
|
|
||||||
QMenu menu(this);
|
QMenu menu(this);
|
||||||
QAction *selectAction = new QAction("&Select", this);
|
|
||||||
connect(selectAction, &QAction::triggered, this, [this, type, value] { Q_EMIT selected(getDecals(type, value)); });
|
|
||||||
menu.addAction(selectAction);
|
|
||||||
|
|
||||||
QMenu *subMenu = menu.addMenu("Highlight");
|
QMenu *subMenu = menu.addMenu("Highlight");
|
||||||
QActionGroup *group = new QActionGroup(this);
|
QActionGroup *group = new QActionGroup(this);
|
||||||
group->setExclusive(true);
|
group->setExclusive(true);
|
||||||
@ -833,27 +834,24 @@ void DesignWidget::prepareMenuProperty(const QPoint &pos)
|
|||||||
action->setCheckable(true);
|
action->setCheckable(true);
|
||||||
subMenu->addAction(action);
|
subMenu->addAction(action);
|
||||||
group->addAction(action);
|
group->addAction(action);
|
||||||
if (highlightSelected.contains(item) && highlightSelected[item] == i)
|
if (selectedIndex == i)
|
||||||
action->setChecked(true);
|
action->setChecked(true);
|
||||||
connect(action, &QAction::triggered, this, [this, i, item] { updateHighlightGroup(item, i); });
|
connect(action, &QAction::triggered, this, [this, i, items] { updateHighlightGroup(items, i); });
|
||||||
}
|
}
|
||||||
menu.exec(tree->mapToGlobal(pos));
|
menu.exec(tree->mapToGlobal(pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DesignWidget::prepareMenuTree(const QPoint &pos)
|
void DesignWidget::prepareMenuTree(const QPoint &pos)
|
||||||
{
|
{
|
||||||
QTreeWidget *tree = treeWidget;
|
if (treeWidget->selectedItems().size() == 0)
|
||||||
|
|
||||||
itemContextMenu = tree->itemAt(pos);
|
|
||||||
|
|
||||||
ElementType type = static_cast<ElementTreeItem *>(itemContextMenu)->getType();
|
|
||||||
IdString value = static_cast<IdStringTreeItem *>(itemContextMenu)->getData();
|
|
||||||
|
|
||||||
if (type == ElementType::NONE)
|
|
||||||
return;
|
return;
|
||||||
|
int selectedIndex = -1;
|
||||||
QTreeWidgetItem *item = nameToItem[getElementIndex(type)].value(value.c_str(ctx));
|
QList<QTreeWidgetItem*> items = treeWidget->selectedItems();
|
||||||
|
if (treeWidget->selectedItems().size() == 1) {
|
||||||
|
QTreeWidgetItem *item = treeWidget->selectedItems().at(0);
|
||||||
|
if (highlightSelected.contains(item))
|
||||||
|
selectedIndex = highlightSelected[item];
|
||||||
|
}
|
||||||
QMenu menu(this);
|
QMenu menu(this);
|
||||||
QMenu *subMenu = menu.addMenu("Highlight");
|
QMenu *subMenu = menu.addMenu("Highlight");
|
||||||
QActionGroup *group = new QActionGroup(this);
|
QActionGroup *group = new QActionGroup(this);
|
||||||
@ -865,11 +863,11 @@ void DesignWidget::prepareMenuTree(const QPoint &pos)
|
|||||||
action->setCheckable(true);
|
action->setCheckable(true);
|
||||||
subMenu->addAction(action);
|
subMenu->addAction(action);
|
||||||
group->addAction(action);
|
group->addAction(action);
|
||||||
if (highlightSelected.contains(item) && highlightSelected[item] == i)
|
if (selectedIndex == i)
|
||||||
action->setChecked(true);
|
action->setChecked(true);
|
||||||
connect(action, &QAction::triggered, this, [this, i, item] { updateHighlightGroup(item, i); });
|
connect(action, &QAction::triggered, this, [this, i, items] { updateHighlightGroup(items, i); });
|
||||||
}
|
}
|
||||||
menu.exec(tree->mapToGlobal(pos));
|
menu.exec(treeWidget->mapToGlobal(pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DesignWidget::onItemDoubleClicked(QTreeWidgetItem *item, int column)
|
void DesignWidget::onItemDoubleClicked(QTreeWidgetItem *item, int column)
|
||||||
|
@ -60,7 +60,7 @@ class DesignWidget : public QWidget
|
|||||||
void updateButtons();
|
void updateButtons();
|
||||||
void addToHistory(QTreeWidgetItem *item);
|
void addToHistory(QTreeWidgetItem *item);
|
||||||
std::vector<DecalXY> getDecals(ElementType type, IdString value);
|
std::vector<DecalXY> getDecals(ElementType type, IdString value);
|
||||||
void updateHighlightGroup(QTreeWidgetItem *item, int group);
|
void updateHighlightGroup(QList<QTreeWidgetItem*> item, int group);
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void info(std::string text);
|
void info(std::string text);
|
||||||
void selected(std::vector<DecalXY> decal);
|
void selected(std::vector<DecalXY> decal);
|
||||||
@ -85,7 +85,6 @@ class DesignWidget : public QWidget
|
|||||||
QtGroupPropertyManager *groupManager;
|
QtGroupPropertyManager *groupManager;
|
||||||
QtVariantEditorFactory *variantFactory;
|
QtVariantEditorFactory *variantFactory;
|
||||||
QtTreePropertyBrowser *propertyEditor;
|
QtTreePropertyBrowser *propertyEditor;
|
||||||
QTreeWidgetItem *itemContextMenu;
|
|
||||||
|
|
||||||
QMap<QtProperty *, QString> propertyToId;
|
QMap<QtProperty *, QString> propertyToId;
|
||||||
QMap<QString, QtProperty *> idToProperty;
|
QMap<QString, QtProperty *> idToProperty;
|
||||||
|
Loading…
Reference in New Issue
Block a user