Merge branch 'dev'

This commit is contained in:
astridkbjorke 2016-12-21 08:43:57 +01:00
commit 7784cad47f
3 changed files with 65 additions and 40 deletions

View File

@ -30,6 +30,7 @@
RiuSelectionManager::RiuSelectionManager()
: m_notificationCenter(new RiuSelectionChangedHandler)
{
m_selection.resize(2);
}
//--------------------------------------------------------------------------------------------------
@ -37,6 +38,9 @@ RiuSelectionManager::RiuSelectionManager()
//--------------------------------------------------------------------------------------------------
RiuSelectionManager::~RiuSelectionManager()
{
deleteAllItemsFromSelection(RUI_APPLICATION_GLOBAL);
deleteAllItemsFromSelection(RUI_TEMPORARY);
delete m_notificationCenter;
}
@ -52,64 +56,75 @@ RiuSelectionManager* RiuSelectionManager::instance()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSelectionManager::selectedItems(std::vector<RiuSelectionItem*>& items) const
void RiuSelectionManager::selectedItems(std::vector<RiuSelectionItem*>& items, int role) const
{
items = m_selection;
const std::vector<RiuSelectionItem*>& s = m_selection[role];
items = s;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSelectionManager::appendItemToSelection(RiuSelectionItem* item)
void RiuSelectionManager::appendItemToSelection(RiuSelectionItem* item, int role)
{
m_selection.push_back(item);
std::vector<RiuSelectionItem*>& s = m_selection[role];
m_notificationCenter->handleItemAppended(item);
s.push_back(item);
if (role == RUI_APPLICATION_GLOBAL) m_notificationCenter->handleItemAppended(item);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSelectionManager::setSelectedItem(RiuSelectionItem* item)
void RiuSelectionManager::setSelectedItem(RiuSelectionItem* item, int role)
{
deleteAllItemsFromSelection();
deleteAllItemsFromSelection(role);
m_selection.push_back(item);
std::vector<RiuSelectionItem*>& s = m_selection[role];
m_notificationCenter->handleSetSelectedItem(item);
s.push_back(item);
if (role == RUI_APPLICATION_GLOBAL) m_notificationCenter->handleSetSelectedItem(item);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSelectionManager::deleteAllItems()
void RiuSelectionManager::deleteAllItems(int role)
{
if (m_selection.size() == 0) return;
deleteAllItemsFromSelection();
m_notificationCenter->handleSelectionDeleted();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiuSelectionManager::isEmpty() const
{
return m_selection.size() == 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSelectionManager::deleteAllItemsFromSelection()
{
for (size_t i = 0; i < m_selection.size(); i++)
if (!isEmpty(role))
{
delete m_selection[i];
deleteAllItemsFromSelection(role);
if (role == RUI_APPLICATION_GLOBAL) m_notificationCenter->handleSelectionDeleted();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiuSelectionManager::isEmpty(int role) const
{
const std::vector<RiuSelectionItem*>& s = m_selection[role];
return s.size() == 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSelectionManager::deleteAllItemsFromSelection(int role)
{
std::vector<RiuSelectionItem*>& s = m_selection[role];
for (RiuSelectionItem* item : s)
{
delete item;
}
m_selection.clear();
s.clear();
}
//--------------------------------------------------------------------------------------------------

View File

@ -41,6 +41,13 @@ class RimGeoMechView;
//==================================================================================================
class RiuSelectionManager
{
public:
enum SelectionRole
{
RUI_APPLICATION_GLOBAL, // Selection role intended to manage the cells selected by left mouse click in the 3D view
RUI_TEMPORARY // Selection role intended to manage the items selected by a right mouse click in the 3D view
};
public:
RiuSelectionManager();
~RiuSelectionManager();
@ -49,26 +56,26 @@ public:
// Returns selected items
// Selection manager owns the selection items
void selectedItems(std::vector<RiuSelectionItem*>& items) const;
void selectedItems(std::vector<RiuSelectionItem*>& items, int role = RUI_APPLICATION_GLOBAL) const;
// Append item to selected items
// SelectionManager takes ownership of the item
void appendItemToSelection(RiuSelectionItem* item);
void appendItemToSelection(RiuSelectionItem* item, int role = RUI_APPLICATION_GLOBAL);
// Set one selected item
// SelectionManager takes ownership of the item
void setSelectedItem(RiuSelectionItem* item);
void setSelectedItem(RiuSelectionItem* item, int role = RUI_APPLICATION_GLOBAL);
// Deletes all items in the SelectionManager
void deleteAllItems();
void deleteAllItems(int role = RUI_APPLICATION_GLOBAL);
bool isEmpty() const;
bool isEmpty(int role = RUI_APPLICATION_GLOBAL) const;
private:
void deleteAllItemsFromSelection();
void deleteAllItemsFromSelection(int role);
private:
std::vector < RiuSelectionItem* > m_selection;
std::vector< std::vector<RiuSelectionItem*> > m_selection;
RiuSelectionChangedHandler* m_notificationCenter;
};

View File

@ -333,6 +333,9 @@ void RiuViewerCommands::displayContextMenu(QMouseEvent* event)
{
menu.exec(event->globalPos());
}
// Delete items in temporary selection
RiuSelectionManager::instance()->deleteAllItems(RiuSelectionManager::RUI_TEMPORARY);
}
//--------------------------------------------------------------------------------------------------