Add option to delete all brushes

This commit is contained in:
David Capello 2015-04-29 17:26:25 -03:00
parent 733d0a8e74
commit 03faee9ce4
3 changed files with 22 additions and 1 deletions

View File

@ -29,6 +29,7 @@
#include "she/system.h"
#include "ui/menu.h"
#include "ui/message.h"
#include "ui/separator.h"
#include "ui/tooltips.h"
namespace app {
@ -62,8 +63,12 @@ protected:
if (mouseMsg->buttons() == kButtonRight) {
Menu menu;
AppMenuItem deleteItem("Delete");
AppMenuItem deleteAllItem("Delete All");
deleteItem.Click.connect(&Item::onDeleteBrush, this);
deleteAllItem.Click.connect(&Item::onDeleteAllBrushes, this);
menu.addChild(&deleteItem);
menu.addChild(new Separator("", JI_HORIZONTAL));
menu.addChild(&deleteAllItem);
// Here we make the popup window temporaly floating, so it's
// not closed by the popup menu.
@ -81,6 +86,10 @@ private:
m_delegate->onDeleteBrushSlot(m_slot);
}
void onDeleteAllBrushes() {
m_delegate->onDeleteAllBrushes();
}
BrushPopup* m_popup;
BrushPopupDelegate* m_delegate;
BrushRef m_brush;

View File

@ -30,6 +30,7 @@ namespace app {
public:
virtual ~BrushPopupDelegate() { }
virtual void onDeleteBrushSlot(int slot) = 0;
virtual void onDeleteAllBrushes() = 0;
};
class BrushPopup : public ui::PopupWindow {

View File

@ -109,6 +109,11 @@ protected:
m_owner->removeBrush(slot);
}
void onDeleteAllBrushes() override {
while (!m_owner->brushes().empty())
m_owner->removeBrush(m_owner->brushes().size());
}
private:
// Returns a little rectangle that can be used by the popup as the
// first brush position.
@ -1032,8 +1037,14 @@ int ContextBar::addBrush(const doc::BrushRef& brush)
void ContextBar::removeBrush(int slot)
{
--slot;
if (slot >= 0 && slot < (int)m_brushes.size())
if (slot >= 0 && slot < (int)m_brushes.size()) {
m_brushes[slot].reset();
// Erase empty trailing slots
while (!m_brushes.empty() &&
!m_brushes[m_brushes.size()-1])
m_brushes.erase(--m_brushes.end());
}
}
void ContextBar::setActiveBrushBySlot(int slot)