| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| | #ifndef GUI_DOCKWND_SELECTIONVIEW_H
|
| | #define GUI_DOCKWND_SELECTIONVIEW_H
|
| |
|
| | #include "DockWindow.h"
|
| | #include "Selection.h"
|
| | #include <QMenu>
|
| | #include <QPointer>
|
| | #include <map>
|
| | #include <set>
|
| | #include <string>
|
| | #include <vector>
|
| |
|
| |
|
| | class QListWidget;
|
| | class QListWidgetItem;
|
| | class QCheckBox;
|
| | class QLabel;
|
| |
|
| | namespace App
|
| | {
|
| | class DocumentObject;
|
| | }
|
| |
|
| | struct ElementInfo;
|
| | struct SubMenuInfo;
|
| |
|
| | namespace Gui
|
| | {
|
| | namespace DockWnd
|
| | {
|
| |
|
| | |
| |
|
| | class SelectionView: public Gui::DockWindow, public Gui::SelectionObserver
|
| | {
|
| | Q_OBJECT
|
| |
|
| | public:
|
| | |
| | |
| | |
| |
|
| | explicit SelectionView(Gui::Document* pcDocument, QWidget* parent = nullptr);
|
| |
|
| | |
| | |
| | |
| |
|
| | ~SelectionView() override;
|
| |
|
| |
|
| | void onSelectionChanged(const SelectionChanges& msg) override;
|
| |
|
| | void leaveEvent(QEvent*) override;
|
| |
|
| | bool onMsg(const char* pMsg, const char** ppReturn) override;
|
| |
|
| | const char* getName() const override
|
| | {
|
| | return "SelectionView";
|
| | }
|
| |
|
| |
|
| | void onUpdate() override;
|
| |
|
| | QListWidget* selectionView;
|
| | QLabel* countLabel;
|
| |
|
| | QCheckBox* enablePickList;
|
| | QListWidget* pickList;
|
| |
|
| | public Q_SLOTS:
|
| |
|
| | void search(const QString& text);
|
| |
|
| | void validateSearch();
|
| |
|
| | void onItemContextMenu(const QPoint& point);
|
| |
|
| | void select(QListWidgetItem* item = nullptr);
|
| | void deselect();
|
| | void zoom();
|
| | void treeSelect();
|
| | void toPython();
|
| | void touch();
|
| | void showPart();
|
| | void onEnablePickList();
|
| | void toggleSelect(QListWidgetItem* item = nullptr);
|
| | void preselect(QListWidgetItem* item = nullptr);
|
| |
|
| | protected:
|
| | void showEvent(QShowEvent*) override;
|
| | void hideEvent(QHideEvent*) override;
|
| |
|
| | private:
|
| | QString getModule(const char* type) const;
|
| | QString getProperty(App::DocumentObject* obj) const;
|
| | bool supportPart(App::DocumentObject* obj, const QString& part) const;
|
| |
|
| | private:
|
| | float x, y, z;
|
| | std::vector<App::DocumentObject*> searchList;
|
| | bool openedAutomatically;
|
| | };
|
| |
|
| | }
|
| |
|
| |
|
| | struct PickData
|
| | {
|
| | App::DocumentObject* obj;
|
| | std::string element;
|
| | std::string docName;
|
| | std::string objName;
|
| | std::string subName;
|
| | };
|
| |
|
| |
|
| | class GuiExport SelectionMenu: public QMenu
|
| | {
|
| | Q_OBJECT
|
| | public:
|
| | SelectionMenu(QWidget* parent = nullptr);
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | PickData doPick(const std::vector<PickData>& sels, const QPoint& pos = QCursor::pos());
|
| |
|
| | public Q_SLOTS:
|
| | void onHover(QAction*);
|
| |
|
| | protected:
|
| | bool eventFilter(QObject*, QEvent*) override;
|
| | void leaveEvent(QEvent* e) override;
|
| | PickData onPicked(QAction*, const std::vector<PickData>& sels);
|
| |
|
| | private:
|
| | void processSelections(std::vector<PickData>& selections, std::map<std::string, SubMenuInfo>& menus);
|
| | void buildMenuStructure(
|
| | std::map<std::string, SubMenuInfo>& menus,
|
| | const std::vector<PickData>& selections
|
| | );
|
| |
|
| | App::DocumentObject* getSubObject(const PickData& sel);
|
| | std::string extractElementType(const PickData& sel);
|
| | std::string createObjectKey(const PickData& sel);
|
| | QIcon getOrCreateIcon(App::DocumentObject* sobj, std::map<App::DocumentObject*, QIcon>& icons);
|
| | void addGeoFeatureTypes(
|
| | App::DocumentObject* sobj,
|
| | std::map<std::string, SubMenuInfo>& menus,
|
| | std::set<std::string>& createdTypes
|
| | );
|
| | void addWholeObjectSelection(
|
| | const PickData& sel,
|
| | App::DocumentObject* sobj,
|
| | std::vector<PickData>& selections,
|
| | std::map<std::string, SubMenuInfo>& menus,
|
| | const QIcon& icon
|
| | );
|
| | bool shouldGroupMenu(const SubMenuInfo& info);
|
| | void createFlatMenu(
|
| | ElementInfo& elementInfo,
|
| | QMenu* parentMenu,
|
| | const std::string& label,
|
| | const std::string& elementType,
|
| | const std::vector<PickData>& selections
|
| | );
|
| | void createGroupedMenu(
|
| | ElementInfo& elementInfo,
|
| | QMenu* parentMenu,
|
| | const std::string& label,
|
| | const std::string& elementType,
|
| | const std::vector<PickData>& selections
|
| | );
|
| |
|
| | QPointer<QMenu> activeMenu;
|
| | QPointer<QAction> activeAction;
|
| | std::vector<PickData> currentSelections;
|
| | };
|
| |
|
| | }
|
| |
|
| | #endif
|
| |
|