MM: MM1: Add a _priorView field to FocusMessage

This commit is contained in:
Paul Gilbert 2023-03-07 22:39:51 -08:00
parent b52ddaced0
commit 721c9a846a
4 changed files with 28 additions and 11 deletions

View File

@ -107,17 +107,19 @@ void Events::processEvent(Common::Event &ev) {
void Events::replaceView(UIElement *ui, bool replaceAllViews) {
assert(ui);
UIElement *priorView = focusedView();
if (replaceAllViews) {
clearViews();
} else if (!_views.empty()) {
focusedView()->msgUnfocus(UnfocusMessage());
priorView->msgUnfocus(UnfocusMessage());
_views.pop();
}
_views.push(ui);
ui->redraw();
ui->msgFocus(FocusMessage());
ui->msgFocus(FocusMessage(priorView));
}
void Events::replaceView(const Common::String &name, bool replaceAllViews) {
@ -126,12 +128,14 @@ void Events::replaceView(const Common::String &name, bool replaceAllViews) {
void Events::addView(UIElement *ui) {
assert(ui);
UIElement *priorView = focusedView();
if (!_views.empty())
focusedView()->msgUnfocus(UnfocusMessage());
priorView->msgUnfocus(UnfocusMessage());
_views.push(ui);
ui->redraw();
ui->msgFocus(FocusMessage());
ui->msgFocus(FocusMessage(priorView));
}
void Events::addView(const Common::String &name) {
@ -139,7 +143,8 @@ void Events::addView(const Common::String &name) {
}
void Events::popView() {
focusedView()->msgUnfocus(UnfocusMessage());
UIElement *priorView = focusedView();
priorView->msgUnfocus(UnfocusMessage());
_views.pop();
for (int i = 0; i < (int)_views.size() - 1; ++i) {
@ -148,7 +153,7 @@ void Events::popView() {
}
if (!_views.empty()) {
focusedView()->msgFocus(FocusMessage());
focusedView()->msgFocus(FocusMessage(priorView));
focusedView()->redraw();
}
}

View File

@ -30,12 +30,21 @@
namespace MM {
namespace MM1 {
class UIElement;
enum TextAlign {
ALIGN_LEFT, ALIGN_RIGHT, ALIGN_MIDDLE
};
struct Message {};
struct FocusMessage : public Message {};
struct FocusMessage : public Message {
UIElement *_priorView = nullptr;
FocusMessage() : Message() {}
FocusMessage(UIElement *priorView) : Message(),
_priorView(priorView) {}
};
struct UnfocusMessage : public Message {};
struct ActionMessage : public Message {
KeybindingAction _action;

View File

@ -203,6 +203,12 @@ CreateCharacters::CreateCharacters() : ScrollView("CreateCharacters") {
setButtonEnabled(4, false);
}
bool CreateCharacters::msgFocus(const FocusMessage &msg) {
if (dynamic_cast<TextEntry *>(msg._priorView) == nullptr)
_newChar.reroll();
return true;
}
void CreateCharacters::draw() {
ScrollView::draw();
printAttributes();

View File

@ -129,10 +129,7 @@ public:
CreateCharacters();
virtual ~CreateCharacters() {}
bool msgFocus(const FocusMessage &msg) override {
_newChar.reroll();
return true;
}
bool msgFocus(const FocusMessage &msg) override;
void draw() override;
bool msgKeypress(const KeypressMessage &msg) override;
bool msgAction(const ActionMessage &msg) override;