code format
This commit is contained in:
@@ -1,29 +1,31 @@
|
||||
/*
|
||||
QGL SceneTree
|
||||
Ivan Pelipenko peri4ko@yandex.ru
|
||||
QGL SceneTree
|
||||
Ivan Pelipenko peri4ko@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "scene_tree.h"
|
||||
#include "ui_scene_tree.h"
|
||||
|
||||
#include "glcamera.h"
|
||||
#include "qglview.h"
|
||||
#include <QTreeWidget>
|
||||
#include <QScrollBar>
|
||||
#include "ui_scene_tree.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QEvent>
|
||||
#include <QScrollBar>
|
||||
#include <QTreeWidget>
|
||||
|
||||
enum Column {
|
||||
cName,
|
||||
@@ -65,13 +67,17 @@ SceneTree::SceneTree(QWidget * parent): QWidget(parent) {
|
||||
icon_vis[0] = QIcon(":/icons/layer-visible-off.png");
|
||||
icon_vis[1] = QIcon(":/icons/layer-visible-on.png");
|
||||
ui->treeObjects->addActions(actionsSelection());
|
||||
ui->treeObjects->addAction (newSeparator());
|
||||
ui->treeObjects->addAction(newSeparator());
|
||||
ui->treeObjects->addActions(actionsAdd());
|
||||
ui->buttonFilter->addActions(QList<QAction*>() << ui->actionFilter_node << ui->actionFilter_mesh << ui->actionFilter_light << ui->actionFilter_camera);
|
||||
view = 0;
|
||||
ui->buttonFilter->addActions(QList<QAction *>()
|
||||
<< 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()));
|
||||
block_tree = false;
|
||||
connect(ui->treeObjects->selectionModel(),
|
||||
SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
|
||||
this,
|
||||
SLOT(treeObjects_selectionCnahged()));
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +93,7 @@ void SceneTree::assignQGLView(QGLView * v) {
|
||||
connect(view, SIGNAL(selectionChanged()), this, SLOT(selectionChanged()));
|
||||
connect(view, SIGNAL(materialsChanged()), this, SLOT(materialsChanged()));
|
||||
connect(view->scene(), SIGNAL(treeChanged()), this, SLOT(objectsTreeChanged()));
|
||||
connect(view->scene(), SIGNAL(__objectDeleted(ObjectBase*)), this, SLOT(__objectDeleted(ObjectBase*)));
|
||||
connect(view->scene(), SIGNAL(__objectDeleted(ObjectBase *)), this, SLOT(__objectDeleted(ObjectBase *)));
|
||||
view->setContextActions(actionsSelection());
|
||||
checkActions();
|
||||
}
|
||||
@@ -102,12 +108,9 @@ QList<QAction *> SceneTree::actionsAdd() {
|
||||
|
||||
QList<QAction *> SceneTree::actionsSelection() {
|
||||
QList<QAction *> ret;
|
||||
ret << ui->actionFocus << newSeparator()
|
||||
<< ui->actionGroup << ui->actionClone << newSeparator()
|
||||
<< ui->actionSelect_parent << ui->actionSelect_by_mesh << ui->actionSelect_by_material << newSeparator()
|
||||
<< ui->actionTransfer_transform_to_children << newSeparator()
|
||||
<< ui->actionActive_camera << ui->actionDefault_camera << newSeparator()
|
||||
<< ui->actionRemove;
|
||||
ret << ui->actionFocus << newSeparator() << ui->actionGroup << ui->actionClone << newSeparator() << ui->actionSelect_parent
|
||||
<< ui->actionSelect_by_mesh << ui->actionSelect_by_material << newSeparator() << ui->actionTransfer_transform_to_children
|
||||
<< newSeparator() << ui->actionActive_camera << ui->actionDefault_camera << newSeparator() << ui->actionRemove;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -129,8 +132,7 @@ void SceneTree::changeEvent(QEvent * e) {
|
||||
void SceneTree::rememberExpanded(QTreeWidgetItem * ti) {
|
||||
for (int i = 0; i < ti->childCount(); ++i) {
|
||||
QTreeWidgetItem * ci = ti->child(i);
|
||||
if (ci->isExpanded())
|
||||
expanded_ << itemObject(ci);
|
||||
if (ci->isExpanded()) expanded_ << itemObject(ci);
|
||||
rememberExpanded(ci);
|
||||
}
|
||||
}
|
||||
@@ -148,13 +150,12 @@ 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);
|
||||
ObjectBase * co = o->child(i);
|
||||
QTreeWidgetItem * ci = new QTreeWidgetItem(ti);
|
||||
ci->setText(cName, co->name());
|
||||
ci->setCheckState(cVis, co->isVisible() ? Qt::Checked : Qt::Unchecked);
|
||||
ci->setIcon(cVis, icon_vis[co->isVisible(true)]);
|
||||
if (co->material())
|
||||
ci->setText(cMaterial, co->material()->name);
|
||||
if (co->material()) ci->setText(cMaterial, co->material()->name);
|
||||
ci->setFlags(ci->flags() | Qt::ItemIsEditable);
|
||||
ObjectType t = otNode;
|
||||
switch (co->type()) {
|
||||
@@ -189,7 +190,7 @@ void SceneTree::makeObjetTree(ObjectBase * o, QTreeWidgetItem * ti) {
|
||||
|
||||
ObjectBase * SceneTree::itemObject(QTreeWidgetItem * item) const {
|
||||
if (!item) return 0;
|
||||
return (ObjectBase*)(item->data(cName, irObject).toULongLong());
|
||||
return (ObjectBase *)(item->data(cName, irObject).toULongLong());
|
||||
}
|
||||
|
||||
|
||||
@@ -201,12 +202,11 @@ int SceneTree::itemType(QTreeWidgetItem * item) const {
|
||||
|
||||
void SceneTree::selectionChanged() {
|
||||
if (block_tree) return;
|
||||
block_tree = true;
|
||||
QList<QTreeWidgetItem*> il = ui->treeObjects->findItems("", Qt::MatchContains | Qt::MatchRecursive);
|
||||
const ObjectBase * fo = 0;
|
||||
if (view->selectedObjects().size() == 1)
|
||||
fo = view->selectedObject();
|
||||
foreach (QTreeWidgetItem * i, il) {
|
||||
block_tree = true;
|
||||
QList<QTreeWidgetItem *> il = ui->treeObjects->findItems("", Qt::MatchContains | Qt::MatchRecursive);
|
||||
const ObjectBase * fo = 0;
|
||||
if (view->selectedObjects().size() == 1) fo = view->selectedObject();
|
||||
foreach(QTreeWidgetItem * i, il) {
|
||||
ObjectBase * o = itemObject(i);
|
||||
i->setSelected(o->isSelected());
|
||||
if (fo && (fo == o)) {
|
||||
@@ -219,18 +219,17 @@ void SceneTree::selectionChanged() {
|
||||
|
||||
|
||||
void SceneTree::materialsChanged() {
|
||||
foreach (QTreeWidgetItem * i, geo_items) {
|
||||
foreach(QTreeWidgetItem * i, geo_items) {
|
||||
ObjectBase * o = itemObject(i);
|
||||
if (!o) continue;
|
||||
if (o->material())
|
||||
i->setText(cMaterial, o->material()->name);
|
||||
if (o->material()) i->setText(cMaterial, o->material()->name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SceneTree::cameraChanged() {
|
||||
if (!view) return;
|
||||
foreach (QTreeWidgetItem * i, cam_items) {
|
||||
foreach(QTreeWidgetItem * i, cam_items) {
|
||||
ObjectBase * o = itemObject(i);
|
||||
if (!o) continue;
|
||||
i->setText(cVis, (o == view->camera()) ? "*" : "");
|
||||
@@ -242,8 +241,8 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ
|
||||
bool ret = false;
|
||||
for (int i = 0; i < ti->childCount(); ++i) {
|
||||
QTreeWidgetItem * ci = ti->child(i);
|
||||
QString cit = ci->text(cName);
|
||||
int t = itemType(ci);
|
||||
QString cit = ci->text(cName);
|
||||
int t = itemType(ci);
|
||||
if (ci->childCount() > 0) {
|
||||
if (!filterTree(ci, filter, types)) {
|
||||
ci->setHidden(true);
|
||||
@@ -259,11 +258,12 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ
|
||||
} else {
|
||||
f = f || cit.contains(filter, Qt::CaseInsensitive);
|
||||
}
|
||||
if ((types & t) != t)
|
||||
f = false;
|
||||
if ((types & t) != t) f = false;
|
||||
ci->setHidden(!f);
|
||||
if (f) ret = true;
|
||||
else ++hidden_by_filter;
|
||||
if (f)
|
||||
ret = true;
|
||||
else
|
||||
++hidden_by_filter;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
@@ -272,23 +272,23 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ
|
||||
|
||||
void SceneTree::checkActions() {
|
||||
bool has_1 = false, has_m = false;
|
||||
bool has_cam = false;
|
||||
bool has_mesh = false;
|
||||
bool has_cam = false;
|
||||
bool has_mesh = false;
|
||||
bool is_def_cam = false;
|
||||
if (view) {
|
||||
is_def_cam = view->isDefaultCamera();
|
||||
is_def_cam = view->isDefaultCamera();
|
||||
ObjectBaseList slo = view->selectedObjects();
|
||||
has_1 = !slo.isEmpty();
|
||||
has_m = slo.size() > 1;
|
||||
for (ObjectBase * o : slo) {
|
||||
has_1 = !slo.isEmpty();
|
||||
has_m = slo.size() > 1;
|
||||
for (ObjectBase * o: slo) {
|
||||
if (o->type() == ObjectBase::glCamera) has_cam = (slo.size() == 1);
|
||||
if (o->type() == ObjectBase::glMesh) has_mesh = true;
|
||||
}
|
||||
}
|
||||
|
||||
ui->actionFocus ->setEnabled(has_mesh);
|
||||
ui->actionFocus->setEnabled(has_mesh);
|
||||
ui->actionRemove->setEnabled(has_1);
|
||||
ui->actionClone ->setEnabled(has_1);
|
||||
ui->actionClone->setEnabled(has_1);
|
||||
ui->actionGroup->setEnabled(has_m);
|
||||
ui->actionTransfer_transform_to_children->setEnabled(has_1);
|
||||
ui->actionSelect_parent->setEnabled(has_1);
|
||||
@@ -304,8 +304,8 @@ void SceneTree::treeObjects_selectionCnahged() {
|
||||
block_tree = true;
|
||||
view->scene()->clearSelection();
|
||||
ObjectBaseList sol;
|
||||
QList<QTreeWidgetItem*> til = ui->treeObjects->selectedItems();
|
||||
foreach (QTreeWidgetItem * i, til)
|
||||
QList<QTreeWidgetItem *> til = ui->treeObjects->selectedItems();
|
||||
foreach(QTreeWidgetItem * i, til)
|
||||
sol << itemObject(i);
|
||||
view->scene()->selectObjects(sol);
|
||||
block_tree = false;
|
||||
@@ -315,9 +315,9 @@ void SceneTree::treeObjects_selectionCnahged() {
|
||||
|
||||
void SceneTree::filter() {
|
||||
int types = 0;
|
||||
if (ui->actionFilter_node ->isChecked()) types |= otNode ;
|
||||
if (ui->actionFilter_mesh ->isChecked()) types |= otMesh ;
|
||||
if (ui->actionFilter_light ->isChecked()) types |= otLight ;
|
||||
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;
|
||||
@@ -348,14 +348,14 @@ void SceneTree::on_treeObjects_itemChanged(QTreeWidgetItem * item, int column) {
|
||||
if (o) o->setName(item->text(cName));
|
||||
}
|
||||
if (column == cVis) {
|
||||
bool vis = item->checkState(cVis) == Qt::Checked;
|
||||
QList<QTreeWidgetItem*> til = ui->treeObjects->selectedItems();
|
||||
bool vis = item->checkState(cVis) == Qt::Checked;
|
||||
QList<QTreeWidgetItem *> til = ui->treeObjects->selectedItems();
|
||||
if (!til.contains(item)) {
|
||||
til.clear();
|
||||
til << item;
|
||||
}
|
||||
foreach (QTreeWidgetItem * ti, til) {
|
||||
//itemObject(ti)->setVisible(vis);
|
||||
foreach(QTreeWidgetItem * ti, til) {
|
||||
// itemObject(ti)->setVisible(vis);
|
||||
itemObject(ti)->setVisible(vis);
|
||||
}
|
||||
}
|
||||
@@ -365,13 +365,12 @@ void SceneTree::on_treeObjects_itemChanged(QTreeWidgetItem * item, int column) {
|
||||
void SceneTree::on_treeObjects_itemMoved(QTreeWidgetItem * item, QTreeWidgetItem * new_parent) {
|
||||
ObjectBase * co = itemObject(item);
|
||||
if (!co->hasParent()) return;
|
||||
//co->parent()->removeChild(co);
|
||||
// co->parent()->removeChild(co);
|
||||
if (new_parent == ui->treeObjects->invisibleRootItem()) {
|
||||
view->scene()->rootObject()->addChild(co);
|
||||
} else {
|
||||
ObjectBase * po = itemObject(new_parent);
|
||||
if (po)
|
||||
po->addChild(co);
|
||||
if (po) po->addChild(co);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,9 +401,9 @@ void SceneTree::on_actionAdd_camera_triggered() {
|
||||
|
||||
void SceneTree::on_actionClone_triggered() {
|
||||
if (!view) return;
|
||||
QList<QTreeWidgetItem*> sil = ui->treeObjects->selectedItems();
|
||||
QList<QTreeWidgetItem *> sil = ui->treeObjects->selectedItems();
|
||||
ObjectBaseList col;
|
||||
foreach (QTreeWidgetItem * i, sil) {
|
||||
foreach(QTreeWidgetItem * i, sil) {
|
||||
ObjectBase * o = itemObject(i);
|
||||
if (!o) continue;
|
||||
ObjectBase * no = o->clone();
|
||||
@@ -418,10 +417,10 @@ void SceneTree::on_actionClone_triggered() {
|
||||
void SceneTree::on_actionGroup_triggered() {
|
||||
if (!view) return;
|
||||
ObjectBaseList sol = view->scene()->selectedObjects(true);
|
||||
ObjectBase * cp = sol[0]->parent();
|
||||
ObjectBase * nr = new ObjectBase();
|
||||
ObjectBase * cp = sol[0]->parent();
|
||||
ObjectBase * nr = new ObjectBase();
|
||||
cp->addChild(nr);
|
||||
foreach (ObjectBase * o, sol)
|
||||
foreach(ObjectBase * o, sol)
|
||||
nr->addChild(o);
|
||||
view->scene()->selectObject(nr);
|
||||
}
|
||||
@@ -430,7 +429,7 @@ void SceneTree::on_actionGroup_triggered() {
|
||||
void SceneTree::on_actionTransfer_transform_to_children_triggered() {
|
||||
if (!view) return;
|
||||
ObjectBaseList sol = view->scene()->selectedObjects(true);
|
||||
foreach (ObjectBase * o, sol)
|
||||
foreach(ObjectBase * o, sol)
|
||||
o->transferTransformToChildren();
|
||||
}
|
||||
|
||||
@@ -455,11 +454,10 @@ void SceneTree::on_actionDefault_camera_triggered() {
|
||||
void SceneTree::on_actionSelect_parent_triggered() {
|
||||
if (!view) return;
|
||||
ObjectBaseList sol = view->scene()->selectedObjects(true);
|
||||
QSet<ObjectBase*> nsl;
|
||||
foreach (ObjectBase * o, sol) {
|
||||
QSet<ObjectBase *> nsl;
|
||||
foreach(ObjectBase * o, sol) {
|
||||
ObjectBase * po = o->parent();
|
||||
if (po != view->scene()->rootObject())
|
||||
o = po;
|
||||
if (po != view->scene()->rootObject()) o = po;
|
||||
nsl << o;
|
||||
}
|
||||
view->scene()->selectObjects(nsl.values());
|
||||
@@ -478,8 +476,8 @@ void SceneTree::on_actionSelect_by_material_triggered() {
|
||||
|
||||
void SceneTree::removeObjects() {
|
||||
if (!view) return;
|
||||
QList<QTreeWidgetItem*> sil = ui->treeObjects->selectedItems();
|
||||
foreach (QTreeWidgetItem * i, sil) {
|
||||
QList<QTreeWidgetItem *> sil = ui->treeObjects->selectedItems();
|
||||
foreach(QTreeWidgetItem * i, sil) {
|
||||
ObjectBase * o = itemObject(i);
|
||||
if (o->isSelected(true)) view->scene()->clearSelection();
|
||||
if (o) delete o;
|
||||
@@ -493,7 +491,7 @@ void SceneTree::focusObjects() {
|
||||
if (!view->camera()) return;
|
||||
Box3D bb;
|
||||
ObjectBaseList ol = view->selectedObjects();
|
||||
foreach (ObjectBase * o, ol) {
|
||||
foreach(ObjectBase * o, ol) {
|
||||
o->calculateBoundingBox();
|
||||
bb |= o->boundingBox();
|
||||
}
|
||||
@@ -512,7 +510,7 @@ void SceneTree::objectsTreeChanged() {
|
||||
block_tree = false;
|
||||
if (!view) return;
|
||||
block_tree = true;
|
||||
obj_count = 0;
|
||||
obj_count = 0;
|
||||
makeObjetTree(view->scene()->rootObject(), ui->treeObjects->invisibleRootItem());
|
||||
--obj_count;
|
||||
restoreExpanded(ui->treeObjects->invisibleRootItem());
|
||||
|
||||
Reference in New Issue
Block a user