#2607 caf: Add selection level to the "notify selection changed" system

This commit is contained in:
Jacob Støren 2018-08-21 13:41:56 +02:00
parent 75c76016e1
commit e10754cffb
7 changed files with 30 additions and 22 deletions

View File

@ -611,8 +611,10 @@ PdmUiSelectionVisualizer3d::~PdmUiSelectionVisualizer3d()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void PdmUiSelectionVisualizer3d::onSelectionManagerSelectionChanged() void PdmUiSelectionVisualizer3d::onSelectionManagerSelectionChanged(int selectionLevel)
{ {
if (selectionLevel != caf::SelectionManager::APPLICATION_GLOBAL) return;
for (auto editor: m_active3DEditors) for (auto editor: m_active3DEditors)
{ {
delete editor; delete editor;

View File

@ -231,7 +231,7 @@ public:
PdmUiSelectionVisualizer3d(caf::Viewer* ownerViewer); PdmUiSelectionVisualizer3d(caf::Viewer* ownerViewer);
~PdmUiSelectionVisualizer3d(); ~PdmUiSelectionVisualizer3d();
protected: protected:
virtual void onSelectionManagerSelectionChanged() override; virtual void onSelectionManagerSelectionChanged(int selectionLevel) override;
std::vector< QPointer<PdmUiObject3dEditorHandle> > m_active3DEditors; std::vector< QPointer<PdmUiObject3dEditorHandle> > m_active3DEditors;

View File

@ -46,7 +46,7 @@ public:
protected: protected:
friend class SelectionManager; friend class SelectionManager;
/// Called whenever caf::SelectionManager's selection changes /// Called whenever caf::SelectionManager's selection changes
virtual void onSelectionManagerSelectionChanged() = 0; virtual void onSelectionManagerSelectionChanged(int selectionLevel) = 0;
}; };
} }

View File

@ -110,7 +110,7 @@ void SelectionManager::setSelectedItems(const std::vector<PdmUiItem*>& items, in
if (newSelection != selection) if (newSelection != selection)
{ {
selection = newSelection; selection = newSelection;
notifySelectionChanged(); notifySelectionChanged(role);
} }
} }
@ -206,17 +206,21 @@ void SelectionManager::setSelectionFromReferences(const std::vector<QString>& re
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void SelectionManager::clearAll() void SelectionManager::clearAll()
{ {
bool isChanged = false; std::set<int> changedSelectionLevels;
for (size_t i = 0; i < m_selectionForRole.size(); i++) for (size_t i = 0; i < m_selectionForRole.size(); i++)
{ {
if ( m_selectionForRole[i].size()) if ( m_selectionForRole[i].size())
{ {
m_selectionForRole[i].clear(); m_selectionForRole[i].clear();
isChanged = true; changedSelectionLevels.insert((int)i);
} }
} }
if (isChanged) notifySelectionChanged(); for (int level: changedSelectionLevels)
{
notifySelectionChanged(level);
}
} }
@ -229,18 +233,18 @@ void SelectionManager::clear(int role)
{ {
m_selectionForRole[role].clear(); m_selectionForRole[role].clear();
notifySelectionChanged(); notifySelectionChanged(role);
} }
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void SelectionManager::notifySelectionChanged() void SelectionManager::notifySelectionChanged( int selectionLevel)
{ {
for (auto receiver: m_selectionReceivers) for (auto receiver: m_selectionReceivers)
{ {
receiver->onSelectionManagerSelectionChanged(); receiver->onSelectionManagerSelectionChanged(selectionLevel);
} }
} }
@ -250,6 +254,7 @@ void SelectionManager::notifySelectionChanged()
void SelectionManager::removeObjectFromAllSelections(PdmObjectHandle* pdmObject) void SelectionManager::removeObjectFromAllSelections(PdmObjectHandle* pdmObject)
{ {
bool doNotifySelectionChanged = false; bool doNotifySelectionChanged = false;
std::set<int> changedSelectionLevels;
for (size_t role = 0; role < m_selectionForRole.size(); role++) for (size_t role = 0; role < m_selectionForRole.size(); role++)
{ {
@ -265,7 +270,7 @@ void SelectionManager::removeObjectFromAllSelections(PdmObjectHandle* pdmObject)
{ {
iter = selection.erase(iter); iter = selection.erase(iter);
doNotifySelectionChanged = true; changedSelectionLevels.insert((int)role);
} }
else else
{ {
@ -279,9 +284,9 @@ void SelectionManager::removeObjectFromAllSelections(PdmObjectHandle* pdmObject)
} }
} }
if (doNotifySelectionChanged) for (int level: changedSelectionLevels)
{ {
notifySelectionChanged(); notifySelectionChanged(level);
} }
} }

View File

@ -57,11 +57,12 @@ class PdmChildArrayFieldHandle;
class SelectionManager class SelectionManager
{ {
public: public:
enum SelectionRole enum SelectionRole
{ { // Suggested renaming:
APPLICATION_GLOBAL, APPLICATION_GLOBAL, // FIRST_LEVEL
CURRENT, CURRENT, // SECOND_LEVEL
UNDEFINED // THIRD_LEVEL
UNDEFINED
}; };
public: public:
@ -123,7 +124,7 @@ public:
private: private:
SelectionManager(); SelectionManager();
void notifySelectionChanged(); void notifySelectionChanged( int selectionLevel);
friend class SelectionChangedReceiver; friend class SelectionChangedReceiver;
void registerSelectionChangedReceiver ( SelectionChangedReceiver* receiver) { m_selectionReceivers.insert(receiver);} void registerSelectionChangedReceiver ( SelectionChangedReceiver* receiver) { m_selectionReceivers.insert(receiver);}

View File

@ -238,11 +238,11 @@ void PdmUiTableViewEditor::setSelectionRole(SelectionManager::SelectionRole role
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void PdmUiTableViewEditor::onSelectionManagerSelectionChanged() void PdmUiTableViewEditor::onSelectionManagerSelectionChanged(int selectionLevel)
{ {
if (m_isBlockingSelectionManagerChanged) return; if (m_isBlockingSelectionManagerChanged) return;
if (isSelectionRoleDefined()) if (isSelectionRoleDefined() && (m_selectionRole == selectionLevel))
{ {
std::vector<PdmUiItem*> items; std::vector<PdmUiItem*> items;
SelectionManager::instance()->selectedItems(items, m_selectionRole); SelectionManager::instance()->selectedItems(items, m_selectionRole);

View File

@ -115,7 +115,7 @@ protected:
QWidget* createLabelWidget(QWidget * parent) override; QWidget* createLabelWidget(QWidget * parent) override;
virtual void configureAndUpdateUi(const QString& uiConfigName) override; virtual void configureAndUpdateUi(const QString& uiConfigName) override;
virtual void onSelectionManagerSelectionChanged() override; virtual void onSelectionManagerSelectionChanged(int selectionLevel) override;
private: private:
void selectedUiItems(const QModelIndexList& modelIndexList, std::vector<PdmUiItem*>& objects); void selectedUiItems(const QModelIndexList& modelIndexList, std::vector<PdmUiItem*>& objects);