Avoid selecting all RGBA+Index buttons in FilterTargetButtons

This commit is contained in:
David Capello 2015-08-28 15:41:02 -03:00
parent 465a0c1d14
commit 984059e1bc
8 changed files with 42 additions and 27 deletions

View File

@ -277,8 +277,8 @@ PaletteEntryEditor::PaletteEntryEditor()
m_vbox.addChild(&m_bottomBox);
addChild(&m_vbox);
m_colorType.ItemChange.connect(&PaletteEntryEditor::onColorTypeClick, this);
m_changeMode.ItemChange.connect(&PaletteEntryEditor::onChangeModeClick, this);
m_colorType.ItemChange.connect(Bind<void>(&PaletteEntryEditor::onColorTypeClick, this));
m_changeMode.ItemChange.connect(Bind<void>(&PaletteEntryEditor::onChangeModeClick, this));
m_rgbSliders.ColorChange.connect(&PaletteEntryEditor::onColorSlidersChange, this);
m_hsvSliders.ColorChange.connect(&PaletteEntryEditor::onColorSlidersChange, this);

View File

@ -132,11 +132,26 @@ void FilterTargetButtons::updateComponentTooltip(Item* item, const char* channel
}
}
void FilterTargetButtons::onItemChange()
void FilterTargetButtons::onItemChange(Item* item)
{
ButtonSet::onItemChange();
ButtonSet::onItemChange(item);
Target flags = (m_target & (TARGET_ALL_FRAMES | TARGET_ALL_LAYERS));
if (m_index && item && item->isSelected()) {
if (item == m_index) {
m_red->setSelected(false);
m_green->setSelected(false);
m_blue->setSelected(false);
m_alpha->setSelected(false);
}
else if (item == m_red ||
item == m_green ||
item == m_blue ||
item == m_alpha) {
m_index->setSelected(false);
}
}
if (m_red && m_red->isSelected()) flags |= TARGET_RED_CHANNEL;
if (m_green && m_green->isSelected()) flags |= TARGET_GREEN_CHANNEL;
if (m_blue && m_blue->isSelected()) flags |= TARGET_BLUE_CHANNEL;

View File

@ -34,7 +34,7 @@ namespace app {
Signal0<void> TargetChange;
protected:
void onItemChange() override;
void onItemChange(Item* item) override;
void onChannelChange(ui::ButtonBase* button);
void onImagesChange(ui::ButtonBase* button);

View File

@ -17,6 +17,7 @@
#include "app/ui/button_set.h"
#include "app/ui/keyboard_shortcuts.h"
#include "app/ui/skin/skin_theme.h"
#include "base/bind.h"
#include "base/convert_to.h"
#include "doc/brush.h"
#include "doc/conversion_she.h"
@ -179,7 +180,7 @@ void BrushPopup::regenerate(const gfx::Rect& box, const Brushes& brushes)
while (((slot-1) % columns) > 0)
m_buttons->addItem(new Item(this, m_delegate, BrushRef(nullptr), slot++));
m_buttons->ItemChange.connect(&BrushPopup::onButtonChange, this);
m_buttons->ItemChange.connect(Bind<void>(&BrushPopup::onButtonChange, this));
m_buttons->setTransparent(true);
m_buttons->setBgColor(gfx::ColorNone);
addChild(m_buttons.get());

View File

@ -155,7 +155,7 @@ bool ButtonSet::Item::onProcessMessage(ui::Message* msg)
if (mnemonicPressed ||
(hasFocus() && keymsg->scancode() == kKeySpace)) {
buttonSet()->setSelectedItem(this);
buttonSet()->onItemChange();
buttonSet()->onItemChange(this);
}
}
break;
@ -167,7 +167,7 @@ bool ButtonSet::Item::onProcessMessage(ui::Message* msg)
if (static_cast<MouseMessage*>(msg)->left() &&
!buttonSet()->m_triggerOnMouseUp) {
buttonSet()->onItemChange();
buttonSet()->onItemChange(this);
}
break;
@ -178,7 +178,7 @@ bool ButtonSet::Item::onProcessMessage(ui::Message* msg)
if (static_cast<MouseMessage*>(msg)->left()) {
if (buttonSet()->m_triggerOnMouseUp)
buttonSet()->onItemChange();
buttonSet()->onItemChange(this);
}
else if (static_cast<MouseMessage*>(msg)->right()) {
buttonSet()->onRightClick(this);
@ -321,9 +321,9 @@ void ButtonSet::setMultipleSelection(bool state)
m_multipleSelection = state;
}
void ButtonSet::onItemChange()
void ButtonSet::onItemChange(Item* item)
{
ItemChange();
ItemChange(item);
}
void ButtonSet::onRightClick(Item* item)

View File

@ -49,11 +49,11 @@ namespace app {
void setTriggerOnMouseUp(bool state);
void setMultipleSelection(bool state);
Signal0<void> ItemChange;
Signal1<void, Item*> ItemChange;
Signal1<void, Item*> RightClick;
protected:
virtual void onItemChange();
virtual void onItemChange(Item* item);
virtual void onRightClick(Item* item);
private:

View File

@ -89,7 +89,7 @@ ColorSelector::ColorSelector()
m_vbox.addChild(&m_maskLabel);
addChild(&m_vbox);
m_colorType.ItemChange.connect(&ColorSelector::onColorTypeClick, this);
m_colorType.ItemChange.connect(Bind<void>(&ColorSelector::onColorTypeClick, this));
m_rgbSliders.ColorChange.connect(&ColorSelector::onColorSlidersChange, this);
m_hsvSliders.ColorChange.connect(&ColorSelector::onColorSlidersChange, this);

View File

@ -95,8 +95,8 @@ public:
}
protected:
void onItemChange() override {
ButtonSet::onItemChange();
void onItemChange(Item* item) override {
ButtonSet::onItemChange(item);
if (!m_popupWindow.isVisible())
openPopup();
@ -348,8 +348,8 @@ public:
}
protected:
void onItemChange() override {
ButtonSet::onItemChange();
void onItemChange(Item* item) override {
ButtonSet::onItemChange(item);
gfx::Rect bounds = getBounds();
@ -691,8 +691,6 @@ public:
: ButtonSet(1) {
addItem(SkinTheme::instance()->parts.pivotCenter());
ItemChange.connect(Bind<void>(&PivotField::onPopup, this));
Preferences::instance().selection.pivotPosition.AfterChange.connect(
Bind<void>(&PivotField::onPivotChange, this));
@ -701,9 +699,10 @@ public:
private:
void onPopup() {
SkinTheme* theme = static_cast<SkinTheme*>(getTheme());
void onItemChange(Item* item) override {
ButtonSet::onItemChange(item);
SkinTheme* theme = static_cast<SkinTheme*>(getTheme());
gfx::Rect bounds = getBounds();
Menu menu;
@ -737,7 +736,7 @@ private:
});
buttonset.ItemChange.connect(
[&buttonset](){
[&buttonset](ButtonSet::Item* item){
Preferences::instance().selection.pivotPosition(
app::gen::PivotPosition(buttonset.selectedItem()));
});
@ -1016,8 +1015,8 @@ public:
}
protected:
void onItemChange() override {
ButtonSet::onItemChange();
void onItemChange(Item* item) override {
ButtonSet::onItemChange(item);
Preferences::instance().selection.mode(
(tools::SelectionMode)selectedItem());
@ -1043,8 +1042,8 @@ public:
Signal1<void, ContextBarObserver::DropAction> DropPixels;
protected:
void onItemChange() override {
ButtonSet::onItemChange();
void onItemChange(Item* item) override {
ButtonSet::onItemChange(item);
switch (selectedItem()) {
case 0: DropPixels(ContextBarObserver::DropPixels); break;