1 // Copyright (C) 2014-2019 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef ModuleBase_WidgetSelectionFilter_H
21 #define ModuleBase_WidgetSelectionFilter_H
23 #include "ModuleBase.h"
24 #include "ModuleBase_ModelWidget.h"
25 #include "ModuleBase_ViewerPrs.h"
27 #include <ModelAPI_Filter.h>
29 #include <SelectMgr_IndexedMapOfOwner.hxx>
30 #include <AIS_Shape.hxx>
31 #include <AIS_ListOfInteractive.hxx>
44 class ModuleBase_IWorkshop;
48 * An object which lets to start a Filters operation as
49 * a sub-operation of the current one.
51 class MODULEBASE_EXPORT ModuleBase_FilterStarter: public QWidget
56 /// \param theFeature a name of feature for filtering
57 /// \param theParent a parent widget which will get control after filtering
58 /// \param theWorkshop a pointer on a current workshop
59 ModuleBase_FilterStarter(const std::string& theFeature, QWidget* theParent,
60 ModuleBase_IWorkshop* theWorkshop);
63 ~ModuleBase_FilterStarter() {}
66 /// A slot to launch filtering operation
67 void onFiltersLaunch();
70 /// Name of filtering feature
71 std::string myFeatureName;
74 ModuleBase_IWorkshop* myWorkshop;
78 class ModuleBase_WidgetSelectionFilter;
81 * A widget which reperesents a one filter item in filters list
82 * Also it includes filter GUI if it exists
84 class ModuleBase_FilterItem : public QWidget
90 /// \param theFilter the filter ID
91 /// \param theParent a parent widget of ModuleBase_WidgetSelectionFilter class
92 ModuleBase_FilterItem(const std::string& theFilter, ModuleBase_WidgetSelectionFilter* theParent);
95 std::string filter() const { return myFilterID; }
97 /// Returns list of widget controls
98 /// \return a control list
99 QList<QWidget*> getControls() const;
101 /// Returns list of widgets which reperesent the current filter GUI
102 QList<ModuleBase_ModelWidget*> widgets() const {
107 /// The seignal is sent on deletion of the item
108 void deleteItem(ModuleBase_FilterItem* theItem);
110 /// The seignal is sent on reversing of the item
111 void reversedItem(ModuleBase_FilterItem* theItem);
114 /// A slot to process reverse button click
115 /// \param theCheck a current state of the button
116 void onReverse(bool theCheck);
118 /// A slot to process delete button click
122 /// A function which adds standard widgets of the item
123 void addItemRow(QWidget* theParent);
125 /// Current filter Id
126 std::string myFilterID;
129 FiltersFeaturePtr mySelection;
132 QToolButton* myRevBtn;
134 /// A list of sub-widgets
135 QList<ModuleBase_ModelWidget*> myWidgets;
140 * A widget for selection by filters
142 class ModuleBase_WidgetSelectionFilter : public ModuleBase_ModelWidget
148 /// \param theParent the parent object
149 /// \param theData the widget configuration. The attribute of the model widget is obtained from
150 /// a low-level API for reading xml definitions of widgets
151 ModuleBase_WidgetSelectionFilter(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop,
152 const Config_WidgetAPI* theData);
155 ~ModuleBase_WidgetSelectionFilter();
157 /// Returns list of widget controls
158 /// \return a control list
159 virtual QList<QWidget*> getControls() const;
161 /// It is called when user press Ok or OkPlus buttons in the parent property panel
162 /// By default this slot does nothing
163 virtual void onFeatureAccepted();
165 /// Returns current workshop
166 ModuleBase_IWorkshop* workshop() const { return myWorkshop; }
168 /// Returns a container widget for filter items
169 QWidget* filtersWidget() const { return myFiltersWgt; }
171 /// Returns error string
172 virtual QString getError(const bool theValueStateChecked = true) const;
175 /// Saves the internal parameters to the given feature (not ussed for this widget)
176 /// \return True in success
177 virtual bool storeValueCustom();
179 /// Restore value from attribute data to the widget's control (not ussed for this widget)
180 virtual bool restoreValueCustom();
183 /// Add a filter by Id in combo box
184 void onAddFilter(int);
186 /// Add a filter by name
187 void onAddFilter(const std::string& theFilter);
189 /// Process deletion of a filter item
190 void onDeleteItem(ModuleBase_FilterItem* theItem);
192 /// Process reversion of a filter item
193 void onReverseItem(ModuleBase_FilterItem* theItem);
195 /// Process selection
198 /// Show only selected objects
199 void onShowOnly(bool theErase);
201 /// Process update of a filter item
202 void onObjectUpdated();
205 /// Update state of button State
206 void updateSelectBtn();
208 /// Update number of selected objects
209 void updateNumberSelected();
212 void clearCurrentSelection(bool toUpdate = false);
215 /// \param theShape a preview shape
216 void updatePreview(const TopoDS_Shape& theShape);
218 /// Call to redisplay the fiter feature
219 void redisplayFeature();
222 ModuleBase_IWorkshop* myWorkshop;
224 QWidget* myFiltersWgt;
225 QVBoxLayout* myFiltersLayout;
227 QComboBox* myFiltersCombo;
228 QPushButton* mySelectBtn;
230 QCheckBox* myShowBtn;
232 /// Type of selection mode
235 /// List of non-used filters
236 std::list<std::string> myFilters;
238 /// List of used filters
239 std::list<std::string> myUseFilters;
241 /// Result of filtering
242 QList<ModuleBase_ViewerPrsPtr> myValues;
245 Handle(AIS_Shape) myPreview;
247 /// List of displayed objects before "Show only"
248 AIS_ListOfInteractive myListIO;
250 /// A Feature which will get result of filtering
251 FeaturePtr mySelectorFeature;
253 /// Attribute name which will get result of filtering
254 std::string mySelectorAttribute;