ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
cvFindDataDockWidget.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "cvFindDataDockWidget.h"
9 
10 #include <CVLog.h>
11 
12 #include <QShowEvent>
13 #include <QVBoxLayout>
14 
15 #include "cvSelectionData.h"
16 #include "cvSelectionHighlighter.h"
18 #include "cvViewSelectionManager.h"
19 
20 //-----------------------------------------------------------------------------
22  : QDockWidget(parent), m_scrollArea(nullptr), m_selectionWidget(nullptr) {
23  // Set dock properties - ParaView style
24  setWindowTitle(tr("Find Data"));
25  setObjectName("findDataDock");
26 
27  // Allow docking on left and right areas only (like ParaView)
28  setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
29 
30  // Set minimum width for readability
31  setMinimumWidth(300);
32 
33  setupUi();
34 
35  CVLog::PrintVerbose("[cvFindDataDockWidget] Dock widget created");
36 }
37 
38 //-----------------------------------------------------------------------------
40  CVLog::PrintVerbose("[cvFindDataDockWidget] Dock widget destroyed");
41 }
42 
43 //-----------------------------------------------------------------------------
44 void cvFindDataDockWidget::setupUi() {
45  // Create container widget
46  QWidget* containerWidget = new QWidget(this);
47  QVBoxLayout* containerLayout = new QVBoxLayout(containerWidget);
48  containerLayout->setContentsMargins(0, 0, 0, 0);
49  containerLayout->setSpacing(0);
50 
51  // Create scroll area - ParaView style
52  m_scrollArea = new QScrollArea(containerWidget);
53  m_scrollArea->setMinimumWidth(300);
54  m_scrollArea->setFrameShape(QFrame::NoFrame);
55  m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
56  m_scrollArea->setWidgetResizable(true);
57 
58  // Create selection properties widget
59  m_selectionWidget = new cvSelectionPropertiesWidget(m_scrollArea);
60 
61  // Set the widget in scroll area
62  m_scrollArea->setWidget(m_selectionWidget);
63 
64  // Add scroll area to container
65  containerLayout->addWidget(m_scrollArea);
66 
67  // Set container as dock widget content
68  setWidget(containerWidget);
69 
70  // Connect extractedObjectReady signal
71  connect(m_selectionWidget,
74 }
75 
76 //-----------------------------------------------------------------------------
78  cvViewSelectionManager* manager,
79  ecvGenericVisualizer3D* visualizer) {
80  if (!m_selectionWidget) {
82  "[cvFindDataDockWidget] Cannot configure - widget not "
83  "initialized");
84  return;
85  }
86 
87  // Configure the selection properties widget
88  // IMPORTANT: Set visualizer FIRST because other setters may trigger
89  // operations that need the visualizer (e.g., setSelectionManager calls
90  // updateDataProducerCombo)
91  if (visualizer) {
92  m_selectionWidget->setVisualizer(visualizer);
93  } else {
94  CVLog::Warning("[cvFindDataDockWidget] Visualizer is nullptr!");
95  }
96 
97  if (highlighter) {
98  m_selectionWidget->setHighlighter(highlighter);
99  } else {
100  CVLog::Warning("[cvFindDataDockWidget] Highlighter is nullptr!");
101  }
102 
103  if (manager) {
104  m_selectionWidget->setSelectionManager(manager);
105  } else {
106  CVLog::Warning("[cvFindDataDockWidget] Selection manager is nullptr!");
107  }
108 }
109 
110 //-----------------------------------------------------------------------------
112  const cvSelectionData& selectionData) {
113  if (m_selectionWidget) {
114  m_selectionWidget->updateSelection(selectionData);
115  }
116 }
117 
118 //-----------------------------------------------------------------------------
120  if (m_selectionWidget) {
121  m_selectionWidget->clearSelection();
122  }
123 }
124 
125 //-----------------------------------------------------------------------------
127  if (m_selectionWidget) {
128  m_selectionWidget->refreshDataProducers();
129  }
130 }
131 
132 //-----------------------------------------------------------------------------
134  QDockWidget::showEvent(event);
135  emit visibilityChanged(true);
136 
137  // Refresh data producers when dock is shown
138  // This ensures the combo is updated after data is loaded
139  if (m_selectionWidget) {
140  m_selectionWidget->refreshDataProducers();
141  }
142 
143  CVLog::PrintVerbose("[cvFindDataDockWidget] Dock shown");
144 }
145 
146 //-----------------------------------------------------------------------------
148  QDockWidget::hideEvent(event);
149  emit visibilityChanged(false);
150  CVLog::PrintVerbose("[cvFindDataDockWidget] Dock hidden");
151 }
MouseEvent event
static bool Warning(const char *format,...)
Prints out a formatted warning message in console.
Definition: CVLog.cpp:133
static bool PrintVerbose(const char *format,...)
Prints out a verbose formatted message in console.
Definition: CVLog.cpp:103
cvFindDataDockWidget(QWidget *parent=nullptr)
void visibilityChanged(bool visible)
Emitted when the dock visibility changes.
void showEvent(QShowEvent *event) override
void hideEvent(QHideEvent *event) override
void extractedObjectReady(ccHObject *obj)
Emitted when an extracted object is ready to be added to the scene.
void updateSelection(const cvSelectionData &selectionData)
Update the selection display with new data.
void configure(cvSelectionHighlighter *highlighter, cvViewSelectionManager *manager, ecvGenericVisualizer3D *visualizer)
Configure the dock with necessary components.
void clearSelection()
Clear the current selection display.
void refreshDataProducers()
Refresh the data producer list. Call this when data sources change (e.g., after loading new data)
virtual void setVisualizer(ecvGenericVisualizer3D *viewer)
Set the visualizer instance.
Encapsulates selection data without exposing VTK types.
Helper class for highlighting selected elements in the visualizer.
Comprehensive selection properties and management widget.
void extractedObjectReady(ccHObject *obj)
void setHighlighter(cvSelectionHighlighter *highlighter)
void refreshDataProducers()
Refresh the data producer combo box Call this when data sources change (e.g., after loading new data)
bool updateSelection(const cvSelectionData &selectionData, vtkPolyData *polyData=nullptr)
void setSelectionManager(cvViewSelectionManager *manager)
Central manager for all selection operations in the view.
Generic visualizer 3D interface.