diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0e9a404..8cc2529 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@ else()
add_subdirectory(src)
shstk_copy_to_parent()
- shstk_install(qglengine FALSE "" "${QGLEngine_VERSION_FILE}")
+ shstk_install(qglengine FALSE "" "${QGLEngine_VERSION_FILE}")
file(GLOB CMAKES "cmake/*.cmake" "cmake/*.in")
install(FILES ${CMAKES} DESTINATION ${CMAKE_ROOT}/Modules)
diff --git a/src/core/lang/qglengine_core_en.ts b/src/core/lang/qglengine_core_en.ts
new file mode 100644
index 0000000..bc6d6e7
--- /dev/null
+++ b/src/core/lang/qglengine_core_en.ts
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/core/lang/qglengine_core_ru.ts b/src/core/lang/qglengine_core_ru.ts
new file mode 100644
index 0000000..f62cf2e
--- /dev/null
+++ b/src/core/lang/qglengine_core_ru.ts
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/core/lang/update.bat b/src/core/lang/update.bat
new file mode 100644
index 0000000..36cb300
--- /dev/null
+++ b/src/core/lang/update.bat
@@ -0,0 +1,2 @@
+lupdate ../ -no-obsolete -ts qglengine_core_ru.ts
+lupdate ../ -no-obsolete -ts qglengine_core_en.ts
diff --git a/src/core/qglengine_core.qrc b/src/core/qglengine_core.qrc
index 52a6abf..85ff74a 100644
--- a/src/core/qglengine_core.qrc
+++ b/src/core/qglengine_core.qrc
@@ -26,6 +26,8 @@
../icons/edit-paste.png
../icons/go-jump.png
../icons/go-top.png
+ ../icons/go-up.png
+ ../icons/go-down.png
../icons/layer-visible-on.png
../icons/layer-visible-off.png
../icons/light-+.png
diff --git a/src/core/scene/glscene.cpp b/src/core/scene/glscene.cpp
index cc1d58f..a3969da 100644
--- a/src/core/scene/glscene.cpp
+++ b/src/core/scene/glscene.cpp
@@ -53,12 +53,13 @@ Scene * Scene::clone() {
}
-void Scene::addObject(ObjectBase * o) {
+void Scene::addObject(ObjectBase * o, ObjectBase * parent) {
+ if (!parent) parent = root_;
ObjectBaseList aol = o->children(true);
attachObject(o);
foreach(ObjectBase * c, aol)
attachObject(c);
- root_->addChild(o);
+ parent->addChild(o);
tree_changed = tree_struct_changed = true;
}
@@ -104,6 +105,7 @@ void Scene::clear() {
geometries.clear();
materials.clear();
emit __destroyed();
+ if (destroying) return;
emit treeChanged();
}
@@ -150,6 +152,7 @@ void Scene::removeObjectInternal(ObjectBase * o, ObjectBase * where) {
void Scene::emitSelectionChanged() {
+ if (destroying) return;
selected_top.clear();
foreach(ObjectBase * o, selected_) {
ObjectBase * po = o->selectedParent();
diff --git a/src/core/scene/glscene.h b/src/core/scene/glscene.h
index dc4f39e..6a1475c 100644
--- a/src/core/scene/glscene.h
+++ b/src/core/scene/glscene.h
@@ -56,7 +56,7 @@ public:
/// Add object \"o\" to scene and take its ownership
/// All materials and geometries used by \"o\" tree
/// copied into this scene
- void addObject(ObjectBase * o);
+ void addObject(ObjectBase * o, ObjectBase * parent = nullptr);
void addScene(const Scene * s);
void assignFrom(const Scene * s);
diff --git a/src/icons/go-down.png b/src/icons/go-down.png
new file mode 100644
index 0000000..680ac2d
Binary files /dev/null and b/src/icons/go-down.png differ
diff --git a/src/icons/go-up.png b/src/icons/go-up.png
new file mode 100644
index 0000000..5e8f7dd
Binary files /dev/null and b/src/icons/go-up.png differ
diff --git a/src/widgets/lang/qglengine_widgets_en.ts b/src/widgets/lang/qglengine_widgets_en.ts
new file mode 100644
index 0000000..c92757a
--- /dev/null
+++ b/src/widgets/lang/qglengine_widgets_en.ts
@@ -0,0 +1,651 @@
+
+
+
+
+ MaterialEditor
+
+ Glass
+
+
+
+ Transparency
+
+
+
+ Reflectivity
+
+
+
+ IOF
+
+
+
+ Dispersion
+
+
+
+ Reflection map
+
+
+
+ Front:
+
+
+
+ Back:
+
+
+
+ Left:
+
+
+
+ Right:
+
+
+
+ Top:
+
+
+
+ Bottom:
+
+
+
+ X
+
+
+
+ ^
+
+
+
+ load from directory
+
+
+
+ Diffuse
+
+
+
+ Normal
+
+
+
+ Metalness
+
+
+
+ Roughness
+
+
+
+ Emission
+
+
+
+ Relief
+
+
+
+
+ MaterialMapEditor
+
+ title:
+
+
+
+ Map
+
+
+
+ Amount:
+
+
+
+ Offset:
+
+
+
+ Scale X:
+
+
+
+ Scale Y:
+
+
+
+ Invert R
+
+
+
+ Invert G
+
+
+
+ Invert B
+
+
+
+
+ MaterialsEditor
+
+ Unset
+
+
+
+ Assign
+
+
+
+ Add
+
+
+
+ Delete
+
+
+
+ Rename ...
+
+
+
+ Clone
+
+
+
+
+ ObjectEditor
+
+ [No selected]
+
+
+
+ Position
+
+
+
+ X:
+
+
+
+ Y:
+
+
+
+ Z:
+
+
+
+ Rotation
+
+
+
+ °
+
+
+
+ Scale
+
+
+
+ Texture
+
+
+
+ SX:
+
+
+
+ R:
+
+
+
+ SY:
+
+
+
+ Receive shadows
+
+
+
+ Cast shadows
+
+
+
+ Accept fog
+
+
+
+ Visible
+
+
+
+ Accept light
+
+
+
+ Color:
+
+
+
+ Aim distance:
+
+
+
+ Light
+
+
+
+ Type:
+
+
+
+ Omni
+
+
+
+ Cone
+
+
+
+ Directional
+
+
+
+ Intensity:
+
+
+
+ Decay ^0:
+
+
+
+ Decay ^1:
+
+
+
+ Decay ^2:
+
+
+
+ Size:
+
+
+
+ Angle:
+
+
+
+ -
+
+
+
+ Camera
+
+
+
+ Depth start:
+
+
+
+ FOV:
+
+
+
+ Roll:
+
+
+
+ Mirror Y
+
+
+
+ Mirror X
+
+
+
+ Map
+
+
+
+ [%1 objects]
+
+
+
+
+ PrimitiveEditor
+
+ Form
+
+
+
+ Width:
+
+
+
+ Length:
+
+
+
+ Segments W:
+
+
+
+ Segments L:
+
+
+
+ Segments H:
+
+
+
+ Radius 1:
+
+
+
+ Radius 2:
+
+
+
+ Angle:
+
+
+
+ °
+
+
+
+ Segments:
+
+
+
+ Segments 2:
+
+
+
+ Color:
+
+
+
+ Flip normals
+
+
+
+ Add
+
+
+
+ Height:
+
+
+
+
+ PropertyEditor
+
+ Property
+
+
+
+ Value
+
+
+
+
+ SceneTree
+
+ Filter:
+
+
+
+ Expand tree
+
+
+
+ Collapse tree
+
+
+
+ Name
+
+
+
+ Vis
+
+
+
+ Material
+
+
+
+ Focus
+
+
+
+ Remove
+
+
+
+ Clone
+
+
+
+ Group
+
+
+
+ Select parent
+
+
+
+ Select by mesh
+
+
+
+ Select by material
+
+
+
+ Add node
+
+
+
+ Add light
+
+
+
+ Add camera
+
+
+
+ Nodes
+
+
+
+ Meshes
+
+
+
+ Lights
+
+
+
+ Cameras
+
+
+
+ Transfer transform to children
+
+
+
+ Active camera
+
+
+
+ Default camera
+
+
+
+ Move to parent
+
+
+
+ %1 objects, %2 hide by filter
+
+
+
+
+ TexturesEditor
+
+ Search pathes:
+
+
+
+ Add
+
+
+
+ Delete
+
+
+
+ Clear
+
+
+
+ Used files:
+
+
+
+ 0
+
+
+
+ Reload
+
+
+
+ Missed files:
+
+
+
+ Select search path
+
+
+
+
+ ViewEditor
+
+ Draw mode:
+
+
+
+ Point
+
+
+
+ Wireframe
+
+
+
+ Solid
+
+
+
+ Gamma:
+
+
+
+ Env HDR:
+
+
+
+ Camera light
+
+
+
+ Service mode
+
+
+
+ FXAA
+
+
+
+ Auto exposure
+
+
+
+ VSync
+
+
+
+ Soft shadows
+
+
+
+ Soft shadow samples:
+
+
+
+ Soft shadow quality:
+
+
+
+ Camera
+
+
+
+ Orbit
+
+
+
+ FOV:
+
+
+
+ Depth start:
+
+
+
+ Halos
+
+
+
+ Hover:
+
+
+
+ Selection:
+
+
+
+ Fog
+
+
+
+ Density:
+
+
+
+ Decay:
+
+
+
+ Color:
+
+
+
+ Map sizes
+
+
+
+ Textures:
+
+
+
+ Shadows:
+
+
+
+
diff --git a/src/widgets/lang/qglengine_widgets_ru.ts b/src/widgets/lang/qglengine_widgets_ru.ts
new file mode 100644
index 0000000..54852b7
--- /dev/null
+++ b/src/widgets/lang/qglengine_widgets_ru.ts
@@ -0,0 +1,655 @@
+
+
+
+
+ MaterialEditor
+
+ Glass
+
+
+
+ Transparency
+ Прозрачность
+
+
+ Reflectivity
+ Отражение
+
+
+ IOF
+
+
+
+ Dispersion
+
+
+
+ Reflection map
+ Карта отражения
+
+
+ Front:
+
+
+
+ Back:
+
+
+
+ Left:
+
+
+
+ Right:
+
+
+
+ Top:
+
+
+
+ Bottom:
+
+
+
+ X
+
+
+
+ ^
+
+
+
+ load from directory
+
+
+
+ Diffuse
+ Альбедо
+
+
+ Normal
+ Нормали
+
+
+ Metalness
+ Металичность
+
+
+ Roughness
+ Шероховатость
+
+
+ Emission
+ Самосвечение
+
+
+ Relief
+ Рельеф
+
+
+
+ MaterialMapEditor
+
+ title:
+
+
+
+ Map
+ Текстура
+
+
+ Amount:
+ Множитель:
+
+
+ Offset:
+ Смещение:
+
+
+ Scale X:
+ Масштаб X:
+
+
+ Scale Y:
+ Масштаб Y:
+
+
+ Invert R
+ Обратить R
+
+
+ Invert G
+ Обратить G
+
+
+ Invert B
+ Обратить B
+
+
+
+ MaterialsEditor
+
+ Unset
+ Сбросить
+
+
+ Assign
+ Назначить
+
+
+ Add
+ Добавить
+
+
+ Delete
+ Удалить
+
+
+ Rename ...
+ Переименовать ...
+
+
+ Clone
+ Клонировать
+
+
+
+ ObjectEditor
+
+ [No selected]
+ [Нет выделения]
+
+
+ Position
+ Положение
+
+
+ X:
+
+
+
+ Y:
+
+
+
+ Z:
+
+
+
+ Rotation
+ Вращение
+
+
+ °
+
+
+
+ Scale
+ Масштаб
+
+
+ Texture
+ Текстура
+
+
+ SX:
+
+
+
+ R:
+
+
+
+ SY:
+
+
+
+ Receive shadows
+ Принимать тени
+
+
+ Cast shadows
+ Создавать тени
+
+
+ Accept fog
+ Принимать туман
+
+
+ Visible
+ Видимость
+
+
+ Accept light
+ Принимать освещение
+
+
+ Color:
+ Цвет:
+
+
+ Aim distance:
+ Расстояние прицела:
+
+
+ Light
+ Светильник
+
+
+ Type:
+ Тип:
+
+
+ Omni
+ Точечный
+
+
+ Cone
+ Конический
+
+
+ Directional
+ Направленый
+
+
+ Intensity:
+ Интенсивность:
+
+
+ Decay ^0:
+ Затухание ^0:
+
+
+ Decay ^1:
+ Затухание ^1:
+
+
+ Decay ^2:
+ Затухание ^2:
+
+
+ Size:
+ Размер:
+
+
+ Angle:
+ Угол:
+
+
+ -
+
+
+
+ Camera
+ Камера
+
+
+ Depth start:
+ Начало глубины:
+
+
+ FOV:
+
+
+
+ Roll:
+ Наклон:
+
+
+ Mirror Y
+ Отразить Y
+
+
+ Mirror X
+ Отразить X
+
+
+ Map
+ Текстура
+
+
+ [%1 objects]
+ [%1 объектов]
+
+
+
+ PrimitiveEditor
+
+ Form
+
+
+
+ Width:
+ Ширина:
+
+
+ Length:
+ Длина:
+
+
+ Height
+ Высота:
+
+
+ Segments W:
+ Сегментов Ш:
+
+
+ Segments L:
+ Сегментов Д:
+
+
+ Segments H:
+ Сегментов В:
+
+
+ Radius 1:
+ Радиус 1:
+
+
+ Radius 2:
+ Радиус 2:
+
+
+ Angle:
+ Угол:
+
+
+ °
+
+
+
+ Segments:
+ Сегментов:
+
+
+ Segments 2:
+ Сегментов 2:
+
+
+ Color:
+ Цвет:
+
+
+ Flip normals
+ Обратить нормали
+
+
+ Add
+ Добавить
+
+
+ Height:
+ Высота:
+
+
+
+ PropertyEditor
+
+ Property
+ Свойство
+
+
+ Value
+ Значение
+
+
+
+ SceneTree
+
+ Filter:
+ Поиск:
+
+
+ Expand tree
+ Развернуть дерево
+
+
+ Collapse tree
+ Свернуть дерево
+
+
+ Name
+ Имя
+
+
+ Vis
+ Вид
+
+
+ Material
+ Материал
+
+
+ Focus
+ Фокус
+
+
+ Remove
+ Удалить
+
+
+ Clone
+ Клонировать
+
+
+ Group
+ Группировать
+
+
+ Select parent
+ Выбрать родителя
+
+
+ Select by mesh
+ Выбрать по геометрии
+
+
+ Select by material
+ Выбрать по материалу
+
+
+ Add node
+ Добавить узел
+
+
+ Add light
+ Добавить светильник
+
+
+ Add camera
+ Добавить камеру
+
+
+ Nodes
+ Узлы
+
+
+ Meshes
+ Геометрии
+
+
+ Lights
+ Светильники
+
+
+ Cameras
+ Камеры
+
+
+ Transfer transform to children
+ Перенести преобразования на детей
+
+
+ Active camera
+ Активировать камеру
+
+
+ Default camera
+ Камера по умолчанию
+
+
+ Move to parent
+ Перенести к родителю
+
+
+ %1 objects, %2 hide by filter
+ %1 объектов, %2 скрыто поиском
+
+
+
+ TexturesEditor
+
+ Search pathes:
+ Пути поиска:
+
+
+ Add
+ Добавить
+
+
+ Delete
+ Удалить
+
+
+ Clear
+ Очистить
+
+
+ Used files:
+ Используемые файлы:
+
+
+ 0
+
+
+
+ Reload
+ Перезагрузить
+
+
+ Missed files:
+ Не найдено файлов:
+
+
+ Select search path
+ Выбор пути поиска
+
+
+
+ ViewEditor
+
+ Draw mode:
+ Режим отрисовки:
+
+
+ Point
+ Точки
+
+
+ Wireframe
+ Линии
+
+
+ Solid
+ Сплошной
+
+
+ Gamma:
+ Гамма:
+
+
+ Env HDR:
+
+
+
+ Camera light
+ Камерный свет
+
+
+ Service mode
+ Служебный режим
+
+
+ FXAA
+
+
+
+ Auto exposure
+ Автоэкспозиция
+
+
+ VSync
+
+
+
+ Soft shadows
+ Мягкие тени
+
+
+ Soft shadow samples:
+ Мягкие тени, точек:
+
+
+ Soft shadow quality:
+ Мягкие тени, качество:
+
+
+ Camera
+ Камера
+
+
+ Orbit
+ Обращение
+
+
+ FOV:
+
+
+
+ Depth start:
+ Начало глубины:
+
+
+ Halos
+ Свечения
+
+
+ Hover:
+ Наведение:
+
+
+ Selection:
+ Выделение:
+
+
+ Fog
+ Туман
+
+
+ Density:
+ Плотность:
+
+
+ Decay:
+ Затухание:
+
+
+ Color:
+ Цвет:
+
+
+ Map sizes
+ Размер карт
+
+
+ Textures:
+ Текстуры:
+
+
+ Shadows:
+ Тени:
+
+
+
diff --git a/src/widgets/lang/update.bat b/src/widgets/lang/update.bat
new file mode 100644
index 0000000..b7a61c2
--- /dev/null
+++ b/src/widgets/lang/update.bat
@@ -0,0 +1,2 @@
+lupdate ../ -ts qglengine_widgets_ru.ts
+lupdate ../ -ts qglengine_widgets_en.ts
diff --git a/src/widgets/object_editor.cpp b/src/widgets/object_editor.cpp
index 1e8da24..053653c 100644
--- a/src/widgets/object_editor.cpp
+++ b/src/widgets/object_editor.cpp
@@ -95,14 +95,19 @@ void ObjectEditor::selectionChanged() {
ignore_next = false;
return;
}
- ui->scrollArea->setEnabled(false);
- if (!view) return;
+ if (!view) {
+ ui->scrollArea->setEnabled(false);
+ return;
+ }
ObjectBaseList sol = view->selectedObjects(true);
if (sol.isEmpty()) {
ui->labelTitle->setText(tr("[No selected]"));
+ ui->scrollArea->setEnabled(false);
return;
}
ui->scrollArea->setEnabled(true);
+ if (prev_sol == sol) return;
+ prev_sol = sol;
if (sol.size() == 1) {
setObject(sol[0]);
ui->scrollArea->verticalScrollBar()->setValue(vpos);
diff --git a/src/widgets/object_editor.h b/src/widgets/object_editor.h
index 19aa747..376477d 100644
--- a/src/widgets/object_editor.h
+++ b/src/widgets/object_editor.h
@@ -41,6 +41,7 @@ protected:
Ui::ObjectEditor * ui;
QGLView * view;
+ ObjectBaseList prev_sol;
bool active, ignore_next;
private slots:
diff --git a/src/widgets/primitiveeditor.ui b/src/widgets/primitiveeditor.ui
index fa0bbb1..0c1d68f 100644
--- a/src/widgets/primitiveeditor.ui
+++ b/src/widgets/primitiveeditor.ui
@@ -120,7 +120,7 @@
-
- Height
+ Height:
diff --git a/src/widgets/scene_tree.cpp b/src/widgets/scene_tree.cpp
index 99f59f0..f5843e0 100644
--- a/src/widgets/scene_tree.cpp
+++ b/src/widgets/scene_tree.cpp
@@ -109,8 +109,9 @@ QList SceneTree::actionsAdd() {
QList SceneTree::actionsSelection() {
QList 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;
+ << ui->actionSelect_by_mesh << ui->actionSelect_by_material << newSeparator() << ui->actionMove_to_parent
+ << ui->actionTransfer_transform_to_children << newSeparator() << ui->actionActive_camera << ui->actionDefault_camera
+ << newSeparator() << ui->actionRemove;
return ret;
}
@@ -194,6 +195,19 @@ ObjectBase * SceneTree::itemObject(QTreeWidgetItem * item) const {
}
+ObjectBase * SceneTree::insertTarget() const {
+ auto sil = ui->treeObjects->selectedItems();
+ QSet parents;
+ for (auto * i: sil) {
+ auto * p = itemObject(i);
+ if (p) p = p->parent();
+ if (p) parents << p;
+ }
+ if (parents.size() != 1) return nullptr;
+ return parents.values()[0];
+}
+
+
int SceneTree::itemType(QTreeWidgetItem * item) const {
if (!item) return otNode;
return item->data(cName, irType).toInt();
@@ -291,6 +305,7 @@ void SceneTree::checkActions() {
ui->actionClone->setEnabled(has_1);
ui->actionGroup->setEnabled(has_m);
ui->actionTransfer_transform_to_children->setEnabled(has_1);
+ ui->actionMove_to_parent->setEnabled(has_1);
ui->actionSelect_parent->setEnabled(has_1);
ui->actionSelect_by_mesh->setEnabled(has_mesh);
ui->actionSelect_by_material->setEnabled(has_mesh);
@@ -378,7 +393,8 @@ void SceneTree::on_treeObjects_itemMoved(QTreeWidgetItem * item, QTreeWidgetItem
void SceneTree::on_actionAdd_node_triggered() {
if (!view) return;
ObjectBase * no = new ObjectBase();
- view->scene()->addObject(no);
+ no->setName("node");
+ view->scene()->addObject(no, insertTarget());
view->scene()->selectObject(no);
}
@@ -386,7 +402,8 @@ void SceneTree::on_actionAdd_node_triggered() {
void SceneTree::on_actionAdd_light_triggered() {
if (!view) return;
ObjectBase * no = new Light();
- view->scene()->addObject(no);
+ no->setName("light");
+ view->scene()->addObject(no, insertTarget());
view->scene()->selectObject(no);
}
@@ -394,7 +411,8 @@ void SceneTree::on_actionAdd_light_triggered() {
void SceneTree::on_actionAdd_camera_triggered() {
if (!view) return;
ObjectBase * no = new Camera();
- view->scene()->addObject(no);
+ no->setName("camera");
+ view->scene()->addObject(no, insertTarget());
view->scene()->selectObject(no);
}
@@ -434,6 +452,20 @@ void SceneTree::on_actionTransfer_transform_to_children_triggered() {
}
+void SceneTree::on_actionMove_to_parent_triggered() {
+ if (!view) return;
+ ObjectBaseList sol = view->scene()->selectedObjects(true);
+ foreach(ObjectBase * o, sol) {
+ auto * old_p = o->parent();
+ if (!old_p) continue;
+ auto * new_p = old_p->parent();
+ if (!new_p) continue;
+ old_p->removeChild(o);
+ new_p->addChild(o);
+ }
+}
+
+
void SceneTree::on_actionActive_camera_triggered() {
if (!view) return;
ObjectBase * o = view->scene()->selectedObject();
diff --git a/src/widgets/scene_tree.h b/src/widgets/scene_tree.h
index 42f1d93..c792bb1 100644
--- a/src/widgets/scene_tree.h
+++ b/src/widgets/scene_tree.h
@@ -48,6 +48,7 @@ private:
void restoreExpanded(QTreeWidgetItem * ti);
void makeObjetTree(ObjectBase * o, QTreeWidgetItem * ti);
ObjectBase * itemObject(QTreeWidgetItem * item) const;
+ ObjectBase * insertTarget() const;
int itemType(QTreeWidgetItem * item) const;
bool filterTree(QTreeWidgetItem * ti, const QString & filter, int types);
void checkActions();
@@ -74,6 +75,7 @@ private slots:
void on_actionClone_triggered();
void on_actionGroup_triggered();
void on_actionTransfer_transform_to_children_triggered();
+ void on_actionMove_to_parent_triggered();
void on_actionActive_camera_triggered();
void on_actionDefault_camera_triggered();
diff --git a/src/widgets/scene_tree.ui b/src/widgets/scene_tree.ui
index 162aba3..238752a 100644
--- a/src/widgets/scene_tree.ui
+++ b/src/widgets/scene_tree.ui
@@ -107,6 +107,9 @@
false
+
+ 250
+
Name
@@ -127,7 +130,7 @@
-
+
:/icons/type-camera.png:/icons/type-camera.png
@@ -172,7 +175,7 @@
-
+
:/icons/type-geo.png:/icons/type-geo.png
@@ -232,7 +235,7 @@
true
-
+
:/icons/type-geo.png:/icons/type-geo.png
@@ -244,7 +247,7 @@
true
-
+
:/icons/type-light.png:/icons/type-light.png
@@ -256,7 +259,7 @@
true
-
+
:/icons/type-camera.png:/icons/type-camera.png
@@ -270,7 +273,7 @@
-
+
:/icons/type-camera.png:/icons/type-camera.png
@@ -279,13 +282,22 @@
-
+
:/icons/type-camera.png:/icons/type-camera.png
Default camera
+
+
+
+ :/icons/go-up.png:/icons/go-up.png
+
+
+ Move to parent
+
+
@@ -301,6 +313,9 @@
+
+
+