aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/PlatWin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/PlatWin.cxx')
-rw-r--r--win32/PlatWin.cxx32
1 files changed, 23 insertions, 9 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx
index 7a0385a27..72513b071 100644
--- a/win32/PlatWin.cxx
+++ b/win32/PlatWin.cxx
@@ -2042,8 +2042,7 @@ class ListBoxX : public ListBox {
unsigned int aveCharWidth;
Window *parent;
int ctrlID;
- CallBackAction doubleClickAction;
- void *doubleClickActionData;
+ IListBoxDelegate *delegate;
const char *widestItem;
unsigned int maxCharWidth;
int resizeHit;
@@ -2063,6 +2062,7 @@ class ListBoxX : public ListBox {
POINT MaxTrackSize() const;
void SetRedraw(bool on);
void OnDoubleClick();
+ void OnSelChange();
void ResizeToCursor();
void StartResize(WPARAM);
LRESULT NcHitTest(WPARAM, LPARAM) const;
@@ -2077,7 +2077,8 @@ class ListBoxX : public ListBox {
public:
ListBoxX() : lineHeight(10), fontCopy(0), technology(0), lb(0), unicodeMode(false),
desiredVisibleRows(9), maxItemCharacters(0), aveCharWidth(8),
- parent(NULL), ctrlID(0), doubleClickAction(NULL), doubleClickActionData(NULL),
+ parent(NULL), ctrlID(0),
+ delegate(nullptr),
widestItem(NULL), maxCharWidth(1), resizeHit(0), wheelDelta(0) {
}
~ListBoxX() override {
@@ -2103,10 +2104,7 @@ public:
void RegisterImage(int type, const char *xpm_data) override;
void RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage) override;
void ClearRegisteredImages() override;
- void SetDoubleClickAction(CallBackAction action, void *data) override {
- doubleClickAction = action;
- doubleClickActionData = data;
- }
+ virtual void SetDelegate(IListBoxDelegate *lbDelegate) override;
void SetList(const char *list, char separator, char typesep) override;
void Draw(DRAWITEMSTRUCT *pDrawItem);
LRESULT WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);
@@ -2247,6 +2245,7 @@ void ListBoxX::Select(int n) {
SetRedraw(false);
CentreItem(n);
::SendMessage(lb, LB_SETCURSEL, n, 0);
+ OnSelChange();
SetRedraw(true);
}
@@ -2377,6 +2376,10 @@ void ListBoxX::AppendListItem(const char *text, const char *numword) {
}
}
+void ListBoxX::SetDelegate(IListBoxDelegate *lbDelegate) {
+ delegate = lbDelegate;
+}
+
void ListBoxX::SetList(const char *list, char separator, char typesep) {
// Turn off redraw while populating the list - this has a significant effect, even if
// the listbox is not visible.
@@ -2606,9 +2609,16 @@ LRESULT ListBoxX::NcHitTest(WPARAM wParam, LPARAM lParam) const {
}
void ListBoxX::OnDoubleClick() {
+ if (delegate) {
+ ListBoxEvent event(ListBoxEvent::EventType::doubleClick);
+ delegate->ListNotify(&event);
+ }
+}
- if (doubleClickAction != NULL) {
- doubleClickAction(doubleClickActionData);
+void ListBoxX::OnSelChange() {
+ if (delegate) {
+ ListBoxEvent event(ListBoxEvent::EventType::selectionChange);
+ delegate->ListNotify(&event);
}
}
@@ -2683,6 +2693,10 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam,
int item = LOWORD(lResult);
if (HIWORD(lResult) == 0 && item >= 0) {
::SendMessage(hWnd, LB_SETCURSEL, item, 0);
+ ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd)));
+ if (lbx) {
+ lbx->OnSelChange();
+ }
}
}
return 0;