From d7797e22787baefd57e0403d94a17a25567d1c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Wed, 4 Dec 2019 12:42:06 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@650 a8b55f48-bf90-11e4-a774-851b48703e85 --- qglengine/icons/format-fill-color.png | Bin 0 -> 44130 bytes qglengine/icons/group.png | Bin 0 -> 12826 bytes qglengine/widgets/scene_tree.cpp | 106 +++-- qglengine/widgets/scene_tree.h | 26 +- qglengine/widgets/scene_tree.ui | 614 +++++++++----------------- qglengine/widgets/widgets.qrc | 2 + 6 files changed, 303 insertions(+), 445 deletions(-) create mode 100644 qglengine/icons/format-fill-color.png create mode 100644 qglengine/icons/group.png diff --git a/qglengine/icons/format-fill-color.png b/qglengine/icons/format-fill-color.png new file mode 100644 index 0000000000000000000000000000000000000000..99412e98a39aca526be3b6f0c1aa359904e68392 GIT binary patch literal 44130 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 AIRF3v literal 0 HcmV?d00001 diff --git a/qglengine/icons/group.png b/qglengine/icons/group.png new file mode 100644 index 0000000000000000000000000000000000000000..510863717246e781e945bdbeea62aa909fe111af GIT binary patch literal 12826 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 UHS}5)et8B^kWrPck~9nXU*m;Ov;Y7A literal 0 HcmV?d00001 diff --git a/qglengine/widgets/scene_tree.cpp b/qglengine/widgets/scene_tree.cpp index 354b214..8b2642a 100644 --- a/qglengine/widgets/scene_tree.cpp +++ b/qglengine/widgets/scene_tree.cpp @@ -55,14 +55,10 @@ SceneTree::SceneTree(QWidget * parent): QWidget(parent) { icon_light = QIcon(":/icons/type-light.png"); icon_vis[0] = QIcon(":/icons/layer-visible-off.png"); icon_vis[1] = QIcon(":/icons/layer-visible-on.png"); - QAction * a = 0; - a = new QAction(QIcon(":/icons/type-camera.png"), "Focus"); - connect(a, SIGNAL(triggered()), this, SLOT(focusObjects())); - ui->treeObjects->addAction(a); - a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove"); - connect(a, SIGNAL(triggered()), this, SLOT(removeObjects())); - ui->treeObjects->addAction(a); + ui->treeObjects->addActions(actionsSelection()); + ui->buttonFilter->addActions(QList() << ui->actionFilter_node << ui->actionFilter_mesh << ui->actionFilter_light << ui->actionFilter_camera); view = 0; + hidden_by_filter = obj_count = 0; block_tree = false; connect(ui->treeObjects->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(treeObjects_selectionCnahged())); } @@ -83,6 +79,21 @@ void SceneTree::assignQGLView(QGLView * v) { } +QList SceneTree::actionsAdd() { + QList ret; + ret << ui->actionAdd_node << ui->actionAdd_light << ui->actionAdd_camera; + return ret; +} + + +QList SceneTree::actionsSelection() { + QList ret; + ret << ui->actionFocus << ui->actionRemove << ui->actionClone << ui->actionGroup + << ui->actionSelect_parent << ui->actionSelect_by_mesh << ui->actionSelect_by_material; + return ret; +} + + void SceneTree::changeEvent(QEvent * e) { QWidget::changeEvent(e); if (e->type() == QEvent::LanguageChange) { @@ -112,6 +123,7 @@ void SceneTree::restoreExpanded(QTreeWidgetItem * ti) { void SceneTree::makeObjetTree(ObjectBase * o, QTreeWidgetItem * ti) { + ++obj_count; for (int i = 0; i < o->childCount(); ++i) { ObjectBase * co = o->child(i); QTreeWidgetItem * ci = new QTreeWidgetItem(ti); @@ -177,7 +189,7 @@ void SceneTree::selectionChanged() { } } block_tree = false; - checkButtons(); + checkActions(); } @@ -200,6 +212,7 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ if (ci->childCount() > 0) { if (!filterTree(ci, filter, types)) { ci->setHidden(true); + ++hidden_by_filter; continue; } ci->setHidden(false); @@ -209,31 +222,32 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ if (filter.isEmpty()) { f = true; } else { - f = f || cit.contains(filter); + f = f || cit.contains(filter, Qt::CaseInsensitive); } if ((types & t) != t) f = false; ci->setHidden(!f); if (f) ret = true; + else ++hidden_by_filter; } } return ret; } -void SceneTree::checkButtons() { +void SceneTree::checkActions() { bool has_1 = false, has_m = false; if (view) { has_1 = !view->selectedObjects().isEmpty(); has_m = view->selectedObjects().size() > 1; } - ui->buttonFocus ->setEnabled(has_1); - ui->buttonRemove->setEnabled(has_1); - ui->buttonClone ->setEnabled(has_1); - ui->buttonSelectParent->setEnabled(has_1); - ui->buttonSelectByMesh->setEnabled(has_1); - ui->buttonSelectByMaterial->setEnabled(has_1); - ui->buttonGroup->setEnabled(has_m); + ui->actionFocus ->setEnabled(has_1); + ui->actionRemove->setEnabled(has_1); + ui->actionClone ->setEnabled(has_1); + ui->actionGroup->setEnabled(has_m); + ui->actionSelect_parent->setEnabled(has_1); + ui->actionSelect_by_mesh->setEnabled(has_1); + ui->actionSelect_by_material->setEnabled(has_1); } @@ -247,19 +261,21 @@ void SceneTree::treeObjects_selectionCnahged() { sol << itemObject(i); view->scene()->selectObjects(sol); block_tree = false; - checkButtons(); + checkActions(); } void SceneTree::filter() { int types = 0; - if (ui->buttonFilterNode ->isChecked()) types |= otNode ; - if (ui->buttonFilterMesh ->isChecked()) types |= otMesh ; - if (ui->buttonFilterLight ->isChecked()) types |= otLight ; - if (ui->buttonFilterCamera->isChecked()) types |= otCamera; + if (ui->actionFilter_node ->isChecked()) types |= otNode ; + if (ui->actionFilter_mesh ->isChecked()) types |= otMesh ; + if (ui->actionFilter_light ->isChecked()) types |= otLight ; + if (ui->actionFilter_camera->isChecked()) types |= otCamera; if (types == 0) types = 0xFF; + hidden_by_filter = 0; filterTree(ui->treeObjects->invisibleRootItem(), ui->lineFilter->text(), types); ui->treeObjects->invisibleRootItem()->setHidden(false); + ui->labelCounts->setText(tr("%1 objects, %2 hide by filter").arg(obj_count).arg(hidden_by_filter)); } @@ -307,7 +323,7 @@ void SceneTree::on_treeObjects_itemMoved(QTreeWidgetItem * item, QTreeWidgetItem } -void SceneTree::on_buttonAddNode_clicked() { +void SceneTree::on_actionAdd_node_triggered() { if (!view) return; ObjectBase * no = new ObjectBase(); view->scene()->addObject(no); @@ -315,7 +331,7 @@ void SceneTree::on_buttonAddNode_clicked() { } -void SceneTree::on_buttonAddLight_clicked() { +void SceneTree::on_actionAdd_light_triggered() { if (!view) return; ObjectBase * no = new Light(); view->scene()->addObject(no); @@ -323,7 +339,15 @@ void SceneTree::on_buttonAddLight_clicked() { } -void SceneTree::on_buttonClone_clicked() { +void SceneTree::on_actionAdd_camera_triggered() { + if (!view) return; + ObjectBase * no = new Camera(); + view->scene()->addObject(no); + view->scene()->selectObject(no); +} + + +void SceneTree::on_actionClone_triggered() { if (!view) return; QList sil = ui->treeObjects->selectedItems(); QList col; @@ -338,7 +362,19 @@ void SceneTree::on_buttonClone_clicked() { } -void SceneTree::on_buttonSelectParent_clicked() { +void SceneTree::on_actionGroup_triggered() { + if (!view) return; + QList sol = view->scene()->selectedObjects(true); + ObjectBase * cp = sol[0]->parent(); + ObjectBase * nr = new ObjectBase(); + cp->addChild(nr); + foreach (ObjectBase * o, sol) + nr->addChild(o); + view->scene()->selectObject(nr); +} + + +void SceneTree::on_actionSelect_parent_triggered() { if (!view) return; QList sol = view->scene()->selectedObjects(true); QSet nsl; @@ -352,28 +388,16 @@ void SceneTree::on_buttonSelectParent_clicked() { } -void SceneTree::on_buttonSelectByMesh_clicked() { +void SceneTree::on_actionSelect_by_mesh_triggered() { view->scene()->selectObjectsByMesh(); } -void SceneTree::on_buttonSelectByMaterial_clicked() { +void SceneTree::on_actionSelect_by_material_triggered() { view->scene()->selectObjectsByMaterial(); } -void SceneTree::on_buttonGroup_clicked() { - if (!view) return; - QList sol = view->scene()->selectedObjects(true); - ObjectBase * cp = sol[0]->parent(); - ObjectBase * nr = new ObjectBase(); - cp->addChild(nr); - foreach (ObjectBase * o, sol) - nr->addChild(o); - view->scene()->selectObject(nr); -} - - void SceneTree::removeObjects() { if (!view) return; QList sil = ui->treeObjects->selectedItems(); @@ -408,7 +432,9 @@ void SceneTree::objectsTreeChanged() { block_tree = false; if (!view) return; block_tree = true; + obj_count = 0; makeObjetTree(view->scene()->rootObject(), ui->treeObjects->invisibleRootItem()); + --obj_count; restoreExpanded(ui->treeObjects->invisibleRootItem()); block_tree = false; filter(); diff --git a/qglengine/widgets/scene_tree.h b/qglengine/widgets/scene_tree.h index 78b08d9..5cdad37 100644 --- a/qglengine/widgets/scene_tree.h +++ b/qglengine/widgets/scene_tree.h @@ -37,6 +37,8 @@ public: ~SceneTree(); void assignQGLView(QGLView * v); + QList actionsAdd(); + QList actionsSelection(); private: void changeEvent(QEvent * e); @@ -46,10 +48,11 @@ private: ObjectBase * itemObject(QTreeWidgetItem * item) const; int itemType(QTreeWidgetItem * item) const; bool filterTree(QTreeWidgetItem * ti, const QString & filter, int types); - void checkButtons(); + void checkActions(); Ui::SceneTree * ui; bool block_tree; + int hidden_by_filter, obj_count; QIcon icon_empty, icon_geo, icon_camera, icon_light, icon_vis[2]; QSet expanded_; QList geo_items; @@ -59,14 +62,19 @@ private slots: void treeObjects_selectionCnahged(); void on_treeObjects_itemChanged(QTreeWidgetItem * item, int column); void on_treeObjects_itemMoved (QTreeWidgetItem * item, QTreeWidgetItem * new_parent); - void on_buttonAddNode_clicked(); - void on_buttonAddLight_clicked(); - void on_buttonClone_clicked(); - void on_buttonUpdate_clicked() {objectsTreeChanged();} - void on_buttonSelectParent_clicked(); - void on_buttonSelectByMesh_clicked(); - void on_buttonSelectByMaterial_clicked(); - void on_buttonGroup_clicked(); + + void on_actionAdd_node_triggered(); + void on_actionAdd_light_triggered(); + void on_actionAdd_camera_triggered(); + + void on_actionFocus_triggered() {focusObjects();} + void on_actionRemove_triggered() {removeObjects();} + void on_actionClone_triggered(); + void on_actionGroup_triggered(); + + void on_actionSelect_parent_triggered(); + void on_actionSelect_by_mesh_triggered(); + void on_actionSelect_by_material_triggered(); void removeObjects(); void focusObjects(); diff --git a/qglengine/widgets/scene_tree.ui b/qglengine/widgets/scene_tree.ui index f742dc5..44b8a06 100644 --- a/qglengine/widgets/scene_tree.ui +++ b/qglengine/widgets/scene_tree.ui @@ -6,8 +6,8 @@ 0 0 - 345 - 494 + 442 + 606 @@ -24,350 +24,65 @@ 0 - + - - - Selection + + + Filter: - - - - - false - - - Focus on selected - - - - :/icons/type-camera.png:/icons/type-camera.png - - - - - - - Qt::Horizontal - - - - 1 - 20 - - - - - - - - false - - - Delete selected - - - - :/icons/edit-delete.png:/icons/edit-delete.png - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - false - - - Clone selected - - - - :/icons/edit-copy.png:/icons/edit-copy.png - - - - - - - false - - - Group selected - - - G - - - - - - - false - - - Select parent - - - - :/icons/go-top.png:/icons/go-top.png - - - - - - - false - - - Select by mesh - - - - :/icons/type-geo.png:/icons/type-geo.png - - - - - - - false - - - Select by material - - - - :/icons/format-fill-color.png:/icons/format-fill-color.png - - - - - - - Add + + + + + + + :/icons/configure.png:/icons/configure.png + + + QToolButton::InstantPopup + + + + + + + Qt::Vertical + + + + + + + Expand tree + + + + :/icons/expand.png:/icons/expand.png + + + + + + + Collapse tree + + + + :/icons/collapse.png:/icons/collapse.png - - - - - Add empty object - - - - :/icons/add-type-empty.png:/icons/add-type-empty.png - - - - - - - Add light - - - - :/icons/add-type-light.png:/icons/add-type-light.png - - - - - - - Add camera - - - - :/icons/add-type-camera.png:/icons/add-type-camera.png - - - - - - - - - Filter - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Name: - - - - - - - - - - Types: - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Nodes - - - - :/icons/type-empty.png:/icons/type-empty.png - - - true - - - - - - - Meshes - - - - :/icons/type-geo.png:/icons/type-geo.png - - - true - - - - - - - Lights - - - - :/icons/type-light.png:/icons/type-light.png - - - true - - - - - - - Cameras - - - - :/icons/type-camera.png:/icons/type-camera.png - - - true - - - - - - - Qt::Horizontal - - - - 1 - 20 - - - - - - - - - - - - - - Tree - - - - - - Expand tree - - - - :/icons/expand.png:/icons/expand.png - - - - - - - Force update - - - - :/icons/view-refresh.png:/icons/view-refresh.png - - - - - - - Collapse tree - - - - :/icons/collapse.png:/icons/collapse.png - - - - - - - + + + + + @@ -407,6 +122,144 @@ + + + + :/icons/type-camera.png:/icons/type-camera.png + + + Focus + + + + + + :/icons/edit-delete.png:/icons/edit-delete.png + + + Remove + + + + + + :/icons/edit-copy.png:/icons/edit-copy.png + + + Clone + + + + + + :/icons/group.png:/icons/group.png + + + Group + + + + + + :/icons/go-top.png:/icons/go-top.png + + + Select parent + + + + + + :/icons/type-geo.png:/icons/type-geo.png + + + Select by mesh + + + + + + :/icons/format-fill-color.png:/icons/format-fill-color.png + + + Select by material + + + + + + :/icons/add-type-empty.png:/icons/add-type-empty.png + + + Add node + + + + + + :/icons/add-type-light.png:/icons/add-type-light.png + + + Add light + + + + + + :/icons/add-type-camera.png:/icons/add-type-camera.png + + + Add camera + + + + + true + + + + :/icons/type-empty.png:/icons/type-empty.png + + + Nodes + + + + + true + + + + :/icons/type-geo.png:/icons/type-geo.png + + + Meshes + + + + + true + + + + :/icons/type-light.png:/icons/type-light.png + + + Lights + + + + + true + + + + :/icons/type-camera.png:/icons/type-camera.png + + + Cameras + + @@ -422,8 +275,9 @@ + - + @@ -434,12 +288,12 @@ expandAll() - 288 - 143 + 395 + 164 299 - 174 + 359 @@ -450,44 +304,12 @@ collapseAll() - 319 - 137 + 427 + 164 332 - 184 - - - - - buttonFocus - clicked() - SceneTree - focusObjects() - - - 26 - 37 - - - 17 - 27 - - - - - buttonRemove - clicked() - SceneTree - removeObjects() - - - 122 - 39 - - - 114 - 26 + 369 @@ -498,8 +320,8 @@ filter() - 239 - 100 + 273 + 130 355 @@ -508,66 +330,66 @@ - buttonFilterNode + actionFilter_camera toggled(bool) SceneTree filter() - 61 - 137 + -1 + -1 - 353 - 109 + 414 + 302 - buttonFilterMesh + actionFilter_mesh toggled(bool) SceneTree filter() - 95 - 140 + -1 + -1 - 357 - 146 + 414 + 302 - buttonFilterLight + actionFilter_light toggled(bool) SceneTree filter() - 135 - 135 + -1 + -1 - 353 - 173 + 414 + 302 - buttonFilterCamera + actionFilter_node toggled(bool) SceneTree filter() - 161 - 135 + -1 + -1 - 351 - 226 + 414 + 302 diff --git a/qglengine/widgets/widgets.qrc b/qglengine/widgets/widgets.qrc index 6345623..db6b102 100644 --- a/qglengine/widgets/widgets.qrc +++ b/qglengine/widgets/widgets.qrc @@ -11,5 +11,7 @@ ../icons/edit-copy.png ../icons/edit-paste.png ../icons/document-edit.png + ../icons/group.png + ../icons/format-fill-color.png