MeshLib
 
Loading...
Searching...
No Matches
MRSceneObjectsListDrawer.h
Go to the documentation of this file.
1#pragma once
2#include "exports.h"
3#include <vector>
4#include <memory>
5#include <string>
6#include <unordered_map>
7
8namespace MR
9{
10
11class Object;
12
14class MRVIEWER_CLASS SceneObjectsListDrawer
15{
16public:
17 virtual ~SceneObjectsListDrawer() = default;
18
21 MRVIEWER_API void draw( float height, float scaling );
22
24 void setShowInfoInObjectTree( bool value ) { showInfoInObjectTree_ = value; }
26 bool getShowInfoInObjectTree() const { return showInfoInObjectTree_; }
27
29 void setShowNewSelectedObjects( bool show ) { showNewSelectedObjects_ = show; };
31 bool getShowNewSelectedObjects() { return showNewSelectedObjects_; };
32
34 void setDeselectNewHiddenObjects( bool deselect ) { deselectNewHiddenObjects_ = deselect; }
36 bool getDeselectNewHiddenObjects() { return deselectNewHiddenObjects_; }
37
41 MRVIEWER_API void changeSelection( bool isDown, bool isShift );
44 MRVIEWER_API void changeVisible( bool isDown );
45
46 // select all selectable objects
47 MRVIEWER_API void selectAllObjects();
48
49 // stt visible flag all selectable objects
50 MRVIEWER_API void setLeavesVisibility( bool visible );
51
53 MRVIEWER_API void setObjectTreeState( const Object* obj, bool open );
54
56 MRVIEWER_API void allowSceneReorder( bool allow );
57
59 MRVIEWER_API void setNextFrameFixScroll() { nextFrameFixScroll_ = true; }
60protected:
64 MRVIEWER_API virtual void drawCustomObjectPrefixInScene_( const Object& )
65 {}
68 MRVIEWER_API virtual void drawSceneContextMenu_( const std::vector<std::shared_ptr<Object>>& /*selected*/, const std::string& /*uniqueStr*/ )
69 {}
70
74 MRVIEWER_API virtual float drawCustomTreeObjectProperties_( Object& obj, bool onlyCalcHeight );
75
76 typedef int ImGuiTreeNodeFlags;
78 MRVIEWER_API virtual bool collapsingHeader_( const std::string& uniqueName, ImGuiTreeNodeFlags flags );
79
80private:
81 void drawObjectsList_();
82 bool drawObject_( Object& object, const std::string& uniqueStr );
83 void drawObjectVisibilityCheckbox_( Object& object, const std::string& uniqueStr );
84 bool drawObjectCollapsingHeader_( Object& object, const std::string& uniqueStr, bool hasRealChildren );
85
87 void makeDragDropSource_( const std::vector<std::shared_ptr<Object>>& payload );
89 bool needDragDropTarget_();
93 void makeDragDropTarget_( Object& target, bool before, bool betweenLine, const std::string& uniqueStr );
94 float getDrawDropTargetHeight_() const { return 4.f * menuScaling_; }
95 void reorderSceneIfNeeded_();
96
98 MRVIEWER_API virtual void updateSceneWindowScrollIfNeeded_();
99
100 std::vector<Object*> getPreSelection_( Object* meshclicked,
101 bool isShift, bool isCtrl,
102 const std::vector<std::shared_ptr<Object>>& selected,
103 const std::vector<std::shared_ptr<Object>>& all );
104 void updateSelection_( Object* objPtr, const std::vector<std::shared_ptr<Object>>& selected, const std::vector<std::shared_ptr<Object>>& all );
105
106 float menuScaling_ = 1.f;
107
108 bool showInfoInObjectTree_ = false;
109 bool showNewSelectedObjects_ = true;
110 bool deselectNewHiddenObjects_ = false;
111
112 bool dragTrigger_ = false;
113 bool clickTrigger_ = false;
114 bool allowSceneReorder_ = true;
115
116 // struct to auto-scroll after move (arrow up / down)
117 struct MoveAndScrollData
118 {
119 int index = -1; // index of new selected object in list of all
120 float posY = -1.f; // scroll position of new selected object in list of all
121 bool needScroll = false; // flag to using auto-scroll
122 };
123 MoveAndScrollData upFirstSelected_;
124 MoveAndScrollData downLastSelected_;
125 MoveAndScrollData nextVisible_;
126
127 struct SceneReorder
128 {
129 std::vector<Object*> who; // object that will be moved
130 Object* to{ nullptr }; // address object
131 bool before{ false }; // if false "who" will be attached to "to" as last child, otherwise "who" will be attached to "to"'s parent as child before "to"
132 } sceneReorderCommand_;
133 // Drag objects servant data
134 // struct to handle changed scene window size scroll
135 struct ScrollPositionPreservation
136 {
137 float relativeMousePos{ 0.0f };
138 float absLinePosRatio{ 0.0f };
139 } prevScrollInfo_;
140 // true to fix scroll position in next frame
141 bool nextFrameFixScroll_{ false };
142 // flag to know if we are dragging objects now or not
143 bool dragObjectsMode_{ false };
144
145 std::unordered_map<const Object*, bool> sceneOpenCommands_;
146};
147
148}
named object in the data model
Definition MRObject.h:60
class for drawing a list of scene objects (and handling interaction with it)
Definition MRSceneObjectsListDrawer.h:15
MRVIEWER_API void selectAllObjects()
MRVIEWER_API void draw(float height, float scaling)
virtual MRVIEWER_API float drawCustomTreeObjectProperties_(Object &obj, bool onlyCalcHeight)
MRVIEWER_API void allowSceneReorder(bool allow)
set possibility change object order
virtual MRVIEWER_API void drawSceneContextMenu_(const std::vector< std::shared_ptr< Object > > &, const std::string &)
Definition MRSceneObjectsListDrawer.h:68
MRVIEWER_API void setObjectTreeState(const Object *obj, bool open)
set object collapse state (hiding children)
bool getShowInfoInObjectTree() const
returns flag show detailed information in the object tree
Definition MRSceneObjectsListDrawer.h:26
MRVIEWER_API void setLeavesVisibility(bool visible)
MRVIEWER_API void setNextFrameFixScroll()
helper method for fix scroll position after change available height
Definition MRSceneObjectsListDrawer.h:59
void setShowNewSelectedObjects(bool show)
set flag of the object visibility activation after selection
Definition MRSceneObjectsListDrawer.h:29
bool getDeselectNewHiddenObjects()
get flag of deselect object after hidden
Definition MRSceneObjectsListDrawer.h:36
MRVIEWER_API void changeSelection(bool isDown, bool isShift)
virtual MRVIEWER_API bool collapsingHeader_(const std::string &uniqueName, ImGuiTreeNodeFlags flags)
override this to customize CollapsingHeader draw
bool getShowNewSelectedObjects()
get flag of the object visibility activation after selection
Definition MRSceneObjectsListDrawer.h:31
void setShowInfoInObjectTree(bool value)
set flag show detailed information in the object tree
Definition MRSceneObjectsListDrawer.h:24
void setDeselectNewHiddenObjects(bool deselect)
set flag of deselect object after hidden
Definition MRSceneObjectsListDrawer.h:34
int ImGuiTreeNodeFlags
Definition MRSceneObjectsListDrawer.h:76
virtual MRVIEWER_API void drawCustomObjectPrefixInScene_(const Object &)
Definition MRSceneObjectsListDrawer.h:64
MRVIEWER_API void changeVisible(bool isDown)
virtual ~SceneObjectsListDrawer()=default
Definition MRCameraOrientationPlugin.h:7