From d4ecc16dd7c186d21969e5221543757a42e15b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Arne=20Br=C3=A5then?= Date: Thu, 30 May 2019 09:21:59 +0200 Subject: [PATCH 1/4] Add method for removing ComboBox item void uiComboboxDelete(uiCombobox *c, int n) * Unix: gtk_combo_box_text_remove * Windows: CB_DELETESTRING * Darwin: NSPopUpButton.removeItemAtIndex --- darwin/combobox.m | 5 +++++ test/page4.c | 8 ++++++++ ui.h | 1 + unix/combobox.c | 5 +++++ windows/combobox.cpp | 9 +++++++++ 5 files changed, 28 insertions(+) diff --git a/darwin/combobox.m b/darwin/combobox.m index cc2f330a8..4d0da39ac 100644 --- a/darwin/combobox.m +++ b/darwin/combobox.m @@ -81,6 +81,11 @@ void uiComboboxAppend(uiCombobox *c, const char *text) [c->pbac addObject:uiprivToNSString(text)]; } +void uiComboboxDelete(uiCombobox *c, int n) +{ + [c->pb removeItemAtIndex:n]; +} + int uiComboboxSelected(uiCombobox *c) { return [c->pb indexOfSelectedItem]; diff --git a/test/page4.c b/test/page4.c index ce4a6afb0..38c7d6e4b 100644 --- a/test/page4.c +++ b/test/page4.c @@ -39,6 +39,11 @@ static void appendCBRB(uiButton *b, void *data) uiRadioButtonsAppend(rb, "New Item"); } +static void deleteCB(uiButton *b, void *data) +{ + uiComboboxDelete(cbox, 0); +} + static void onCBChanged(uiCombobox *c, void *data) { printf("%s combobox changed to %d\n", @@ -147,6 +152,9 @@ uiBox *makePage4(void) b = uiNewButton("Append"); uiButtonOnClicked(b, appendCBRB, NULL); uiBoxAppend(hbox, uiControl(b), 0); + b = uiNewButton("Delete"); + uiButtonOnClicked(b, deleteCB, NULL); + uiBoxAppend(hbox, uiControl(b), 0); b = uiNewButton("Second"); uiButtonOnClicked(b, selectSecond, NULL); uiBoxAppend(hbox, uiControl(b), 0); diff --git a/ui.h b/ui.h index 40aea9498..ae9701d63 100644 --- a/ui.h +++ b/ui.h @@ -226,6 +226,7 @@ _UI_EXTERN uiSeparator *uiNewVerticalSeparator(void); typedef struct uiCombobox uiCombobox; #define uiCombobox(this) ((uiCombobox *) (this)) _UI_EXTERN void uiComboboxAppend(uiCombobox *c, const char *text); +_UI_EXTERN void uiComboboxDelete(uiCombobox *c, int n); _UI_EXTERN int uiComboboxSelected(uiCombobox *c); _UI_EXTERN void uiComboboxSetSelected(uiCombobox *c, int n); _UI_EXTERN void uiComboboxOnSelected(uiCombobox *c, void (*f)(uiCombobox *c, void *data), void *data); diff --git a/unix/combobox.c b/unix/combobox.c index 6fed804bb..4c6d465f9 100644 --- a/unix/combobox.c +++ b/unix/combobox.c @@ -30,6 +30,11 @@ void uiComboboxAppend(uiCombobox *c, const char *text) gtk_combo_box_text_append(c->comboboxText, NULL, text); } +void uiComboboxDelete(uiCombobox *c, int n) +{ + gtk_combo_box_text_remove(c->comboboxText, n); +} + int uiComboboxSelected(uiCombobox *c) { return gtk_combo_box_get_active(c->combobox); diff --git a/windows/combobox.cpp b/windows/combobox.cpp index 50f49dd77..93d0fdf20 100644 --- a/windows/combobox.cpp +++ b/windows/combobox.cpp @@ -69,6 +69,15 @@ void uiComboboxAppend(uiCombobox *c, const char *text) uiprivFree(wtext); } +void uiComboboxDelete(uiCombobox *c, int n) +{ + LRESULT res; + + res = SendMessage(c->hwnd, CB_DELETESTRING, (WPARAM)n, 0); + if (res == (LRESULT) CB_ERR) + logLastError(L"error removing item from uiCombobox"); +} + int uiComboboxSelected(uiCombobox *c) { LRESULT n; From d78dc94a48455ee2bd8fac4a83a074984e9aea74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Arne=20Br=C3=A5then?= Date: Thu, 30 May 2019 15:44:15 +0200 Subject: [PATCH 2/4] Add method for clearing ComboBox items void uiComboboxClear(uiCombobox *c) * Unix: gtk_combo_box_text_remove_all * Windows: CB_RESETCONTENT * Darwin: NSPopUpButton.removeAllItems --- darwin/combobox.m | 5 +++++ test/page4.c | 8 ++++++++ ui.h | 1 + unix/combobox.c | 5 +++++ windows/combobox.cpp | 9 +++++++++ 5 files changed, 28 insertions(+) diff --git a/darwin/combobox.m b/darwin/combobox.m index 4d0da39ac..e4c98bdf9 100644 --- a/darwin/combobox.m +++ b/darwin/combobox.m @@ -86,6 +86,11 @@ void uiComboboxDelete(uiCombobox *c, int n) [c->pb removeItemAtIndex:n]; } +void uiComboboxClear(uiCombobox *c) +{ + [c->pb removeAllItems]; +} + int uiComboboxSelected(uiCombobox *c) { return [c->pb indexOfSelectedItem]; diff --git a/test/page4.c b/test/page4.c index 38c7d6e4b..a4db0454e 100644 --- a/test/page4.c +++ b/test/page4.c @@ -44,6 +44,11 @@ static void deleteCB(uiButton *b, void *data) uiComboboxDelete(cbox, 0); } +static void clearCB(uiButton *b, void *data) +{ + uiComboboxClear(cbox); +} + static void onCBChanged(uiCombobox *c, void *data) { printf("%s combobox changed to %d\n", @@ -155,6 +160,9 @@ uiBox *makePage4(void) b = uiNewButton("Delete"); uiButtonOnClicked(b, deleteCB, NULL); uiBoxAppend(hbox, uiControl(b), 0); + b = uiNewButton("Clear"); + uiButtonOnClicked(b, clearCB, NULL); + uiBoxAppend(hbox, uiControl(b), 0); b = uiNewButton("Second"); uiButtonOnClicked(b, selectSecond, NULL); uiBoxAppend(hbox, uiControl(b), 0); diff --git a/ui.h b/ui.h index ae9701d63..f240439f8 100644 --- a/ui.h +++ b/ui.h @@ -227,6 +227,7 @@ typedef struct uiCombobox uiCombobox; #define uiCombobox(this) ((uiCombobox *) (this)) _UI_EXTERN void uiComboboxAppend(uiCombobox *c, const char *text); _UI_EXTERN void uiComboboxDelete(uiCombobox *c, int n); +_UI_EXTERN void uiComboboxClear(uiCombobox *c); _UI_EXTERN int uiComboboxSelected(uiCombobox *c); _UI_EXTERN void uiComboboxSetSelected(uiCombobox *c, int n); _UI_EXTERN void uiComboboxOnSelected(uiCombobox *c, void (*f)(uiCombobox *c, void *data), void *data); diff --git a/unix/combobox.c b/unix/combobox.c index 4c6d465f9..81df4e481 100644 --- a/unix/combobox.c +++ b/unix/combobox.c @@ -35,6 +35,11 @@ void uiComboboxDelete(uiCombobox *c, int n) gtk_combo_box_text_remove(c->comboboxText, n); } +void uiComboboxClear(uiCombobox *c) +{ + gtk_combo_box_text_remove_all(c->comboboxText); +} + int uiComboboxSelected(uiCombobox *c) { return gtk_combo_box_get_active(c->combobox); diff --git a/windows/combobox.cpp b/windows/combobox.cpp index 93d0fdf20..3c2b60b4f 100644 --- a/windows/combobox.cpp +++ b/windows/combobox.cpp @@ -78,6 +78,15 @@ void uiComboboxDelete(uiCombobox *c, int n) logLastError(L"error removing item from uiCombobox"); } +void uiComboboxClear(uiCombobox *c) +{ + LRESULT res; + + res = SendMessage(c->hwnd, CB_RESETCONTENT, 0, 0); + if (res == (LRESULT) CB_ERR) + logLastError(L"error clearing items from uiCombobox"); +} + int uiComboboxSelected(uiCombobox *c) { LRESULT n; From 26fc1804e5df1f0c3fc15d91d7fa387dc4c65490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Arne=20Br=C3=A5then?= Date: Thu, 30 May 2019 22:00:24 +0200 Subject: [PATCH 3/4] Add method for inserting ComboBox item void uiComboboxInsertAt(uiComboBox *c, int n, const char *text) * Unix: gtk_combo_box_insert * Windows: CB_INSERTSTRING * Darwin: NSArrayController.insert --- darwin/combobox.m | 5 +++++ test/page4.c | 8 ++++++++ ui.h | 1 + unix/combobox.c | 5 +++++ windows/combobox.cpp | 14 ++++++++++++++ 5 files changed, 33 insertions(+) diff --git a/darwin/combobox.m b/darwin/combobox.m index e4c98bdf9..759511f91 100644 --- a/darwin/combobox.m +++ b/darwin/combobox.m @@ -81,6 +81,11 @@ void uiComboboxAppend(uiCombobox *c, const char *text) [c->pbac addObject:uiprivToNSString(text)]; } +void uiComboboxInsertAt(uiCombobox *c, int n, const char *text) +{ + [c->pbac insert:uiprivToNSString(text) atArrangedObjectIndex:n] +} + void uiComboboxDelete(uiCombobox *c, int n) { [c->pb removeItemAtIndex:n]; diff --git a/test/page4.c b/test/page4.c index a4db0454e..4c683574e 100644 --- a/test/page4.c +++ b/test/page4.c @@ -39,6 +39,11 @@ static void appendCBRB(uiButton *b, void *data) uiRadioButtonsAppend(rb, "New Item"); } +static void insertCB(uiButton *b, void *data) +{ + uiComboboxInsertAt(cbox, 0, "Inserted item"); +} + static void deleteCB(uiButton *b, void *data) { uiComboboxDelete(cbox, 0); @@ -157,6 +162,9 @@ uiBox *makePage4(void) b = uiNewButton("Append"); uiButtonOnClicked(b, appendCBRB, NULL); uiBoxAppend(hbox, uiControl(b), 0); + b = uiNewButton("Insert"); + uiButtonOnClicked(b, insertCB, NULL); + uiBoxAppend(hbox, uiControl(b), 0); b = uiNewButton("Delete"); uiButtonOnClicked(b, deleteCB, NULL); uiBoxAppend(hbox, uiControl(b), 0); diff --git a/ui.h b/ui.h index f240439f8..c9c225cbb 100644 --- a/ui.h +++ b/ui.h @@ -226,6 +226,7 @@ _UI_EXTERN uiSeparator *uiNewVerticalSeparator(void); typedef struct uiCombobox uiCombobox; #define uiCombobox(this) ((uiCombobox *) (this)) _UI_EXTERN void uiComboboxAppend(uiCombobox *c, const char *text); +_UI_EXTERN void uiComboboxInsertAt(uiCombobox *c, int n, const char *text); _UI_EXTERN void uiComboboxDelete(uiCombobox *c, int n); _UI_EXTERN void uiComboboxClear(uiCombobox *c); _UI_EXTERN int uiComboboxSelected(uiCombobox *c); diff --git a/unix/combobox.c b/unix/combobox.c index 81df4e481..5dfeb6f13 100644 --- a/unix/combobox.c +++ b/unix/combobox.c @@ -30,6 +30,11 @@ void uiComboboxAppend(uiCombobox *c, const char *text) gtk_combo_box_text_append(c->comboboxText, NULL, text); } +void uiComboboxInsertAt(uiCombobox *c, int n, const char *text) +{ + gtk_combo_box_text_insert(c->comboboxText, n, NULL, text); +} + void uiComboboxDelete(uiCombobox *c, int n) { gtk_combo_box_text_remove(c->comboboxText, n); diff --git a/windows/combobox.cpp b/windows/combobox.cpp index 3c2b60b4f..bee0e1c21 100644 --- a/windows/combobox.cpp +++ b/windows/combobox.cpp @@ -69,6 +69,20 @@ void uiComboboxAppend(uiCombobox *c, const char *text) uiprivFree(wtext); } +void uiComboboxInsertAt(uiCombobox *c, int n, const char *text) +{ + WCHAR *wtext; + LRESULT res; + + wtext = toUTF16(text); + res = SendMessageW(c->hwnd, CB_INSERTSTRING, (WPARAM)n, (LPARAM) wtext); + if (res == (LRESULT) CB_ERR) + logLastError(L"error inserting item to uiCombobox"); + else if (res == (LRESULT) CB_ERRSPACE) + logLastError(L"memory exhausted inserting item to uiCombobox"); + uiprivFree(wtext); +} + void uiComboboxDelete(uiCombobox *c, int n) { LRESULT res; From 468a6d3f6cc3c8b9dc96e0fe531bae21d9db85e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Arne=20Br=C3=A5then?= Date: Thu, 30 May 2019 22:29:44 +0200 Subject: [PATCH 4/4] Add missing semicolon --- darwin/combobox.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/darwin/combobox.m b/darwin/combobox.m index 759511f91..9cf7f9257 100644 --- a/darwin/combobox.m +++ b/darwin/combobox.m @@ -83,7 +83,7 @@ void uiComboboxAppend(uiCombobox *c, const char *text) void uiComboboxInsertAt(uiCombobox *c, int n, const char *text) { - [c->pbac insert:uiprivToNSString(text) atArrangedObjectIndex:n] + [c->pbac insert:uiprivToNSString(text) atArrangedObjectIndex:n]; } void uiComboboxDelete(uiCombobox *c, int n)