Skip to content

Commit 9deee29

Browse files
authored
Merge pull request #4 from tabrath/feat/combobox-improvements
Add missing ComboBox features
2 parents 1faa3a4 + 468a6d3 commit 9deee29

5 files changed

Lines changed: 89 additions & 0 deletions

File tree

darwin/combobox.m

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,21 @@ void uiComboboxAppend(uiCombobox *c, const char *text)
8181
[c->pbac addObject:uiprivToNSString(text)];
8282
}
8383

84+
void uiComboboxInsertAt(uiCombobox *c, int n, const char *text)
85+
{
86+
[c->pbac insert:uiprivToNSString(text) atArrangedObjectIndex:n];
87+
}
88+
89+
void uiComboboxDelete(uiCombobox *c, int n)
90+
{
91+
[c->pb removeItemAtIndex:n];
92+
}
93+
94+
void uiComboboxClear(uiCombobox *c)
95+
{
96+
[c->pb removeAllItems];
97+
}
98+
8499
int uiComboboxSelected(uiCombobox *c)
85100
{
86101
return [c->pb indexOfSelectedItem];

test/page4.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,21 @@ static void appendCBRB(uiButton *b, void *data)
3939
uiRadioButtonsAppend(rb, "New Item");
4040
}
4141

42+
static void insertCB(uiButton *b, void *data)
43+
{
44+
uiComboboxInsertAt(cbox, 0, "Inserted item");
45+
}
46+
47+
static void deleteCB(uiButton *b, void *data)
48+
{
49+
uiComboboxDelete(cbox, 0);
50+
}
51+
52+
static void clearCB(uiButton *b, void *data)
53+
{
54+
uiComboboxClear(cbox);
55+
}
56+
4257
static void onCBChanged(uiCombobox *c, void *data)
4358
{
4459
printf("%s combobox changed to %d\n",
@@ -147,6 +162,15 @@ uiBox *makePage4(void)
147162
b = uiNewButton("Append");
148163
uiButtonOnClicked(b, appendCBRB, NULL);
149164
uiBoxAppend(hbox, uiControl(b), 0);
165+
b = uiNewButton("Insert");
166+
uiButtonOnClicked(b, insertCB, NULL);
167+
uiBoxAppend(hbox, uiControl(b), 0);
168+
b = uiNewButton("Delete");
169+
uiButtonOnClicked(b, deleteCB, NULL);
170+
uiBoxAppend(hbox, uiControl(b), 0);
171+
b = uiNewButton("Clear");
172+
uiButtonOnClicked(b, clearCB, NULL);
173+
uiBoxAppend(hbox, uiControl(b), 0);
150174
b = uiNewButton("Second");
151175
uiButtonOnClicked(b, selectSecond, NULL);
152176
uiBoxAppend(hbox, uiControl(b), 0);

ui.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,9 @@ _UI_EXTERN uiSeparator *uiNewVerticalSeparator(void);
228228
typedef struct uiCombobox uiCombobox;
229229
#define uiCombobox(this) ((uiCombobox *) (this))
230230
_UI_EXTERN void uiComboboxAppend(uiCombobox *c, const char *text);
231+
_UI_EXTERN void uiComboboxInsertAt(uiCombobox *c, int n, const char *text);
232+
_UI_EXTERN void uiComboboxDelete(uiCombobox *c, int n);
233+
_UI_EXTERN void uiComboboxClear(uiCombobox *c);
231234
_UI_EXTERN int uiComboboxSelected(uiCombobox *c);
232235
_UI_EXTERN void uiComboboxSetSelected(uiCombobox *c, int n);
233236
_UI_EXTERN void uiComboboxOnSelected(uiCombobox *c, void (*f)(uiCombobox *c, void *data), void *data);

unix/combobox.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,21 @@ void uiComboboxAppend(uiCombobox *c, const char *text)
3030
gtk_combo_box_text_append(c->comboboxText, NULL, text);
3131
}
3232

33+
void uiComboboxInsertAt(uiCombobox *c, int n, const char *text)
34+
{
35+
gtk_combo_box_text_insert(c->comboboxText, n, NULL, text);
36+
}
37+
38+
void uiComboboxDelete(uiCombobox *c, int n)
39+
{
40+
gtk_combo_box_text_remove(c->comboboxText, n);
41+
}
42+
43+
void uiComboboxClear(uiCombobox *c)
44+
{
45+
gtk_combo_box_text_remove_all(c->comboboxText);
46+
}
47+
3348
int uiComboboxSelected(uiCombobox *c)
3449
{
3550
return gtk_combo_box_get_active(c->combobox);

windows/combobox.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,38 @@ void uiComboboxAppend(uiCombobox *c, const char *text)
6969
uiprivFree(wtext);
7070
}
7171

72+
void uiComboboxInsertAt(uiCombobox *c, int n, const char *text)
73+
{
74+
WCHAR *wtext;
75+
LRESULT res;
76+
77+
wtext = toUTF16(text);
78+
res = SendMessageW(c->hwnd, CB_INSERTSTRING, (WPARAM)n, (LPARAM) wtext);
79+
if (res == (LRESULT) CB_ERR)
80+
logLastError(L"error inserting item to uiCombobox");
81+
else if (res == (LRESULT) CB_ERRSPACE)
82+
logLastError(L"memory exhausted inserting item to uiCombobox");
83+
uiprivFree(wtext);
84+
}
85+
86+
void uiComboboxDelete(uiCombobox *c, int n)
87+
{
88+
LRESULT res;
89+
90+
res = SendMessage(c->hwnd, CB_DELETESTRING, (WPARAM)n, 0);
91+
if (res == (LRESULT) CB_ERR)
92+
logLastError(L"error removing item from uiCombobox");
93+
}
94+
95+
void uiComboboxClear(uiCombobox *c)
96+
{
97+
LRESULT res;
98+
99+
res = SendMessage(c->hwnd, CB_RESETCONTENT, 0, 0);
100+
if (res == (LRESULT) CB_ERR)
101+
logLastError(L"error clearing items from uiCombobox");
102+
}
103+
72104
int uiComboboxSelected(uiCombobox *c)
73105
{
74106
LRESULT n;

0 commit comments

Comments
 (0)