#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)
{
delete editor;

View File

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

View File

@ -46,7 +46,7 @@ public:
protected:
friend class SelectionManager;
/// 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)
{
selection = newSelection;
notifySelectionChanged();
notifySelectionChanged(role);
}
}
@ -206,17 +206,21 @@ void SelectionManager::setSelectionFromReferences(const std::vector<QString>& re
//--------------------------------------------------------------------------------------------------
void SelectionManager::clearAll()
{
bool isChanged = false;
std::set<int> changedSelectionLevels;
for (size_t i = 0; i < m_selectionForRole.size(); i++)
{
if ( m_selectionForRole[i].size())
{
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();
notifySelectionChanged();
notifySelectionChanged(role);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void SelectionManager::notifySelectionChanged()
void SelectionManager::notifySelectionChanged( int selectionLevel)
{
for (auto receiver: m_selectionReceivers)
{
receiver->onSelectionManagerSelectionChanged();
receiver->onSelectionManagerSelectionChanged(selectionLevel);
}
}
@ -250,6 +254,7 @@ void SelectionManager::notifySelectionChanged()
void SelectionManager::removeObjectFromAllSelections(PdmObjectHandle* pdmObject)
{
bool doNotifySelectionChanged = false;
std::set<int> changedSelectionLevels;
for (size_t role = 0; role < m_selectionForRole.size(); role++)
{
@ -265,7 +270,7 @@ void SelectionManager::removeObjectFromAllSelections(PdmObjectHandle* pdmObject)
{
iter = selection.erase(iter);
doNotifySelectionChanged = true;
changedSelectionLevels.insert((int)role);
}
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
{
public:
enum SelectionRole
{
APPLICATION_GLOBAL,
CURRENT,
UNDEFINED
enum SelectionRole
{ // Suggested renaming:
APPLICATION_GLOBAL, // FIRST_LEVEL
CURRENT, // SECOND_LEVEL
// THIRD_LEVEL
UNDEFINED
};
public:
@ -123,7 +124,7 @@ public:
private:
SelectionManager();
void notifySelectionChanged();
void notifySelectionChanged( int selectionLevel);
friend class SelectionChangedReceiver;
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 (isSelectionRoleDefined())
if (isSelectionRoleDefined() && (m_selectionRole == selectionLevel))
{
std::vector<PdmUiItem*> items;
SelectionManager::instance()->selectedItems(items, m_selectionRole);

View File

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