diff --git a/src/ReDIVA/dw.cpp b/src/ReDIVA/dw.cpp index 5ad094b2..1b4b5f98 100644 --- a/src/ReDIVA/dw.cpp +++ b/src/ReDIVA/dw.cpp @@ -37,9 +37,9 @@ namespace dw { void AddDragBoundsListener(DragBoundsListener* value); void RemoveDragBoundsListener(DragBoundsListener* value); - void sub_1402E5020(Widget* widget, bool a3); - void sub_1402E5EA0(Widget* widget); - void sub_1402E68E0(Widget* widget); + void CallOnEnd(Widget* widget, bool release); + void CallOnMove(Widget* widget); + void CallOnStart(Widget* widget); }; class DragBoundsControl : public Control { @@ -426,7 +426,7 @@ namespace dw { callback(data->widget); } - Widget::DragBoundsCallbackData::DragBoundsCallbackData() : widget(), field_8() { + Widget::DragBoundsCallbackData::DragBoundsCallbackData() : widget(), release() { } @@ -2105,6 +2105,10 @@ namespace dw { items.push_back(str); } + void List::AddSelection(int32_t value) { + selections.push_back(value); + } + void List::AddSelectionListener(SelectionListener* value) { selection_listeners.push_back(value); } @@ -3699,6 +3703,14 @@ void dw_gui_ctrl_disp() { dw_gui_detail_display->Draw(); }; +void dw_gui_detail_display_add_drag_bounds_listener(dw::DragBoundsListener* value) { + dw_gui_detail_display->drag_bounds_control->data.AddDragBoundsListener(value); +} + +void dw_gui_detail_display_remove_drag_bounds_listener(dw::DragBoundsListener* value) { + dw_gui_detail_display->drag_bounds_control->data.RemoveDragBoundsListener(value); +} + void dw_info_window_init() { if (dw::info_window_ptr) dw::info_window_ptr->Disp(); @@ -3749,7 +3761,7 @@ namespace dw { state = 1; start_pos = data.pos; end_pos = data.pos; - sub_1402E68E0(data.widget); + CallOnStart(data.widget); } void DragBoundsData::OnRelease(const Widget::MouseCallbackData& data) { @@ -3757,7 +3769,7 @@ namespace dw { return; state = 0; - sub_1402E5020(data.widget, true); + CallOnEnd(data.widget, true); } void DragBoundsData::OnMove(const Widget::MouseCallbackData& data) { @@ -3766,11 +3778,11 @@ namespace dw { if (data.state & dw::INPUT_STATE_ALT) { state = 0; - sub_1402E5020(data.widget, false); + CallOnEnd(data.widget, false); } else { end_pos = data.pos; - sub_1402E5EA0(data.widget); + CallOnMove(data.widget); } } @@ -3779,7 +3791,7 @@ namespace dw { return; state = 0; - sub_1402E5020(data.widget, false); + CallOnEnd(data.widget, false); } void DragBoundsData::AddDragBoundsListener(DragBoundsListener* value) { @@ -3801,37 +3813,40 @@ namespace dw { i++; } - void DragBoundsData::sub_1402E5020(Widget* widget, bool a3) { - Widget::DragBoundsCallbackData v8; - v8.widget = widget; - v8.field_8 = a3; - v8.rect.pos = start_pos; - v8.rect.size = end_pos - start_pos; + // 0x1402E5020 + void DragBoundsData::CallOnEnd(Widget* widget, bool release) { + Widget::DragBoundsCallbackData data; + data.widget = widget; + data.release = release; + data.rect.pos = start_pos; + data.rect.size = end_pos - start_pos; for (DragBoundsListener*& i : drag_bounds_listeners) - i->Field_10(v8); + i->OnEnd(data); } - void DragBoundsData::sub_1402E5EA0(Widget* widget) { - Widget::DragBoundsCallbackData v7; - v7.widget = widget; - v7.field_8 = true; - v7.rect.pos = start_pos; - v7.rect.size = end_pos - start_pos; + // 0x1402E5EA0 + void DragBoundsData::CallOnMove(Widget* widget) { + Widget::DragBoundsCallbackData data; + data.widget = widget; + data.release = true; + data.rect.pos = start_pos; + data.rect.size = end_pos - start_pos; for (DragBoundsListener*& i : drag_bounds_listeners) - i->Field_18(v7); + i->OnMove(data); } - void DragBoundsData::sub_1402E68E0(Widget* widget) { - Widget::DragBoundsCallbackData v7; - v7.widget = widget; - v7.field_8 = true; - v7.rect.pos = start_pos; - v7.rect.size = end_pos - start_pos; + // 0x1402E68E0 + void DragBoundsData::CallOnStart(Widget* widget) { + Widget::DragBoundsCallbackData data; + data.widget = widget; + data.release = true; + data.rect.pos = start_pos; + data.rect.size = end_pos - start_pos; for (DragBoundsListener*& i : drag_bounds_listeners) - i->Field_8(v7); + i->OnStart(data); } DragBoundsControl::DragBoundsControl(Composite* parent, Flags flags) : Control(parent, flags) { diff --git a/src/ReDIVA/dw.hpp b/src/ReDIVA/dw.hpp index 21fbef55..66a732ea 100644 --- a/src/ReDIVA/dw.hpp +++ b/src/ReDIVA/dw.hpp @@ -301,7 +301,7 @@ namespace dw { struct DragBoundsCallbackData { Widget* widget; - bool field_8; + bool release; rectangle rect; DragBoundsCallbackData(); @@ -540,9 +540,9 @@ namespace dw { DragBoundsListener(); virtual ~DragBoundsListener(); - virtual void Field_8(const Widget::DragBoundsCallbackData& data) = 0; - virtual void Field_10(const Widget::DragBoundsCallbackData& data) = 0; - virtual void Field_18(const Widget::DragBoundsCallbackData& data) = 0; + virtual void OnStart(const Widget::DragBoundsCallbackData& data) = 0; + virtual void OnEnd(const Widget::DragBoundsCallbackData& data) = 0; + virtual void OnMove(const Widget::DragBoundsCallbackData& data) = 0; }; class KeyListener { @@ -718,6 +718,7 @@ namespace dw { void AddItem(const std::string& str); void AddItem(const std::wstring& str); + void AddSelection(int32_t value); void AddSelectionListener(SelectionListener* value); void Callback(SelectionListener::CallbackData* data); bool CheckItemSelected(size_t index); @@ -801,6 +802,11 @@ namespace dw { list->AddItem(str); } + inline void AddSelection(int32_t value) { + if (list) + list->AddSelection(value); + } + inline void AddSelectionListener(SelectionListener* value) { if (list) list->AddSelectionListener(value); @@ -1178,6 +1184,9 @@ extern void dw_free(); extern void dw_gui_ctrl_disp(); +extern void dw_gui_detail_display_add_drag_bounds_listener(dw::DragBoundsListener* value); +extern void dw_gui_detail_display_remove_drag_bounds_listener(dw::DragBoundsListener* value); + extern void dw_info_window_init(); extern void dw_sys_menu_init(dw::Shell* shell);