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_FiltersFeature.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 widgets which reperesent the current filter GUI
98 QList<ModuleBase_ModelWidget*> widgets() const {
103 /// The seignal is sent on deletion of the item
104 void deleteItem(ModuleBase_FilterItem* theItem);
106 /// The seignal is sent on reversing of the item
107 void reversedItem(ModuleBase_FilterItem* theItem);
110 /// A slot to process reverse button click
111 /// \param theCheck a current state of the button
112 void onReverse(bool theCheck);
114 /// A slot to process delete button click
118 /// A function which adds standard widgets of the item
119 void addItemRow(QWidget* theParent);
121 /// Current filter Id
122 std::string myFilterID;
125 FiltersFeaturePtr mySelection;
128 QToolButton* myRevBtn;
130 /// A list of sub-widgets
131 QList<ModuleBase_ModelWidget*> myWidgets;
136 * A widget for selection by filters
138 class ModuleBase_WidgetSelectionFilter : public ModuleBase_ModelWidget
142 static FeaturePtr SelectorFeature;
143 static std::string AttributeId;
147 /// \param theParent the parent object
148 /// \param theData the widget configuration. The attribute of the model widget is obtained from
149 /// a low-level API for reading xml definitions of widgets
150 ModuleBase_WidgetSelectionFilter(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop,
151 const Config_WidgetAPI* theData, bool theReadOnly = false);
154 ~ModuleBase_WidgetSelectionFilter();
156 /// Returns list of widget controls
157 /// \return a control list
158 virtual QList<QWidget*> getControls() const;
160 /// It is called when user press Ok or OkPlus buttons in the parent property panel
161 /// By default this slot does nothing
162 virtual void onFeatureAccepted();
164 /// Returns current workshop
165 ModuleBase_IWorkshop* workshop() const { return myWorkshop; }
167 /// Returns a container widget for filter items
168 QWidget* filtersWidget() const { return myFiltersWgt; }
170 /// Returns error string
171 virtual QString getError(const bool theValueStateChecked = true) const;
174 /// Saves the internal parameters to the given feature (not ussed for this widget)
175 /// \return True in success
176 virtual bool storeValueCustom();
178 /// Restore value from attribute data to the widget's control (not ussed for this widget)
179 virtual bool restoreValueCustom();
182 /// Add a filter by Id in combo box
183 void onAddFilter(int);
185 /// Process deletion of a filter item
186 void onDeleteItem(ModuleBase_FilterItem* theItem);
188 /// Process reversion of a filter item
189 void onReverseItem(ModuleBase_FilterItem* theItem);
191 /// Process selection
194 /// Show only selected objects
195 void onShowOnly(bool theErase);
197 /// Process update of a filter item
198 void onObjectUpdated();
201 /// Update state of button State
202 void updateSelectBtn();
204 /// Update number of selected objects
205 void updateNumberSelected();
208 void clearCurrentSelection(bool toUpdate = false);
211 /// \param theShape a preview shape
212 void updatePreview(const TopoDS_Shape& theShape);
214 /// Call to redisplay the fiter feature
215 void redisplayFeature();
217 /// Add a filter by name
218 ModuleBase_FilterItem* onAddFilter(const std::string& theFilter);
220 /// Return currently created filter items
221 QList<ModuleBase_FilterItem*> itemsList() const;
224 ModuleBase_IWorkshop* myWorkshop;
226 QWidget* myFiltersWgt;
227 QVBoxLayout* myFiltersLayout;
229 QComboBox* myFiltersCombo;
230 QPushButton* mySelectBtn;
232 QCheckBox* myShowBtn;
234 /// Type of selection mode
237 /// Result of filtering
238 QList<ModuleBase_ViewerPrsPtr> myValues;
241 Handle(AIS_Shape) myPreview;
243 /// List of displayed objects before "Show only"
244 AIS_ListOfInteractive myListIO;
246 /// A Feature which will get result of filtering
247 FeaturePtr mySelectorFeature;
249 /// Attribute name which will get result of filtering
250 std::string mySelectorAttribute;