aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/PlatWin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/PlatWin.cxx')
-rw-r--r--win32/PlatWin.cxx38
1 files changed, 36 insertions, 2 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx
index bea215566..87f90cfa1 100644
--- a/win32/PlatWin.cxx
+++ b/win32/PlatWin.cxx
@@ -698,7 +698,7 @@ HINSTANCE Window::GetInstance() {
::GetWindowLong(id,GWL_HINSTANCE));
}
-ListBox::ListBox() {
+ListBox::ListBox() : desiredVisibleRows(5), maxItemCharacters(0), aveCharWidth(8) {
}
ListBox::~ListBox() {
@@ -712,12 +712,45 @@ void ListBox::Create(Window &parent, int ctrlID) {
parent.GetInstance(), 0);
}
+void ListBox::SetFont(Font &font) {
+ Window::SetFont(font);
+}
+
+void ListBox::SetAverageCharWidth(int width) {
+ aveCharWidth = width;
+}
+
+void ListBox::SetVisibleRows(int rows) {
+ desiredVisibleRows = rows;
+}
+
+PRectangle ListBox::GetDesiredRect() {
+ PRectangle rcDesired = GetPosition();
+ int itemHeight = SendMessage(LB_GETITEMHEIGHT, 0);
+ int rows = Length();
+ if ((rows == 0) || (rows > desiredVisibleRows))
+ rows = desiredVisibleRows;
+ // The +6 allows for borders
+ rcDesired.bottom = rcDesired.top + 6 + itemHeight * rows;
+ int width = maxItemCharacters;
+ if (width < 12)
+ width = 12;
+ rcDesired.right = rcDesired.left + width * (aveCharWidth+aveCharWidth/3);
+ if (Length() > rows)
+ rcDesired.right = rcDesired.right + GetSystemMetrics(SM_CXVSCROLL);
+ return rcDesired;
+}
+
void ListBox::Clear() {
SendMessage(LB_RESETCONTENT);
+ maxItemCharacters = 0;
}
void ListBox::Append(char *s) {
SendMessage(LB_ADDSTRING, 0, reinterpret_cast<LPARAM>(s));
+ size_t len = strlen(s);
+ if (maxItemCharacters < len)
+ maxItemCharacters = len;
}
int ListBox::Length() {
@@ -733,7 +766,8 @@ int ListBox::GetSelection() {
}
int ListBox::Find(const char *prefix) {
- return SendMessage(LB_FINDSTRING, 0, reinterpret_cast<LPARAM>(prefix));
+ return SendMessage(LB_FINDSTRING, static_cast<WPARAM>(-1),
+ reinterpret_cast<LPARAM>(prefix));
}
void ListBox::GetValue(int n, char *value, int len) {