2014-09-03 5 views
1

Я пытаюсь создать простой пользовательский интерфейс в Pharo 3.0. В определенном месте мне нужен выбор цвета, поэтому я подумал об использовании ColorSelectorDialogWindow.Система событий в pharo

Моя проблема в том, что я не уверен, как на самом деле получить цвет из него. Я видел, что у него есть сообщение selectedColor, но я пропускаю способ фактически поймать событие, когда пользователь нажимает кнопку ok.

Я пробовал on: send: to:, но, похоже, это не помогает, и в любом случае я не знаю название мероприятия. Я также видел, что на подтверждение, сообщение applyChanges отправляется к себе, поэтому я попытался подклассов ColorSelectorDialogWindow просто добавить

applyChanges 
    super applyChanges. 
    self triggerEvent: 'selectedColor' with: self selectedColor. 

но мне кажется, что я не могу поймать мое собственное selectedColor событие с помощью on: send: to:.

Каков правильный способ подключения к диалоговому окну и, в общем, для отправки событий между компонентами?

ответ

1

Есть Объявления, в настоящее время не очень хорошо документированная часть Фаро. Попробуйте это в рабочей области:

| colorPicker | 
colorPicker := ColorSelectorDialogWindow new. 
colorPicker announcer when: ColorChanged do: [ :announcement | UIManager inform: 'Selected color: ' , announcement newColor asString ]. 
colorPicker open. 

Это пример того, что можно найти в классе комментарии ColorChanged объявления.
Вы получаете выбранный цвет, отправив newColor в сообщение ColorChanged.

+0

Спасибо, это работает в основном прекрасный. Тем не менее, он улавливает момент, когда выбран цвет, а не когда он подтвержден. Есть ли шанс отреагировать на нажатие кнопки ОК? – Andrea

+0

Кажется, я могу посмотреть объявление «WindowClosed», а затем проверить, отменено ли «окно объявления», истинно или ложно. Есть ли что-нибудь более прямое? – Andrea

+0

См. Мой второй ответ для подхода без анонсов. – MartinW

1

Вы также можете открыть ColorSelectorDialogWindow. В этом случае метод openModal возвращается только после того, как диалог был закрыт, и вы можете получить выбранный цвет в диалоговом окне непосредственно:

| colorPicker | 
colorPicker := ColorSelectorDialogWindow new. 
colorPicker openModal. 
colorPicker cancelled 
    ifFalse: [UIManager inform: colorPicker selectedColor asString] 

Вы, вероятно, не хотят, чтобы сделать его модальным, как в моем примере, но модальный к конкретное другое окно. В этом случае используйте anyWindow openModal: colorPicker.

Смежные вопросы