]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/PlatWX.cpp
wxMSW compilation fix
[wxWidgets.git] / src / stc / PlatWX.cpp
index 63b363ec0e621cbccce62767c7fdb371bfd174f1..a57756bc9ce10fe308c7a614c67ec5f6b471c63e 100644 (file)
@@ -9,6 +9,11 @@
 #include "Platform.h"
 #include "wx/stc/stc.h"
 
+
+#ifdef __WXGTK__
+#include <gtk/gtk.h>
+#endif
+
 Point Point::FromLong(long lpoint) {
     return Point(lpoint & 0xFFFF, lpoint >> 16);
 }
@@ -20,7 +25,8 @@ wxRect wxRectFromPRectangle(PRectangle prc) {
 }
 
 PRectangle PRectangleFromwxRect(wxRect rc) {
-    return PRectangle(rc.GetLeft(), rc.GetTop(), rc.GetRight(), rc.GetBottom());
+    return PRectangle(rc.GetLeft(), rc.GetTop(),
+                      rc.GetRight()+1, rc.GetBottom()+1);
 }
 
 Colour::Colour(long lcol) {
@@ -107,6 +113,8 @@ Font::~Font() {
 }
 
 void Font::Create(const char *faceName, int characterSet, int size, bool bold, bool italic) {
+    // TODO:  what to do about the characterSet?
+
     Release();
     id = new wxFont(size,
                     wxDEFAULT,
@@ -156,22 +164,21 @@ void Surface::Init() {
     Release();
     hdc = new wxMemoryDC();
     hdcOwned = true;
-    // **** ::SetTextAlign(hdc, TA_BASELINE);
 }
 
 void Surface::Init(SurfaceID hdc_) {
     Release();
     hdc = hdc_;
-    // **** ::SetTextAlign(hdc, TA_BASELINE);
 }
 
 void Surface::InitPixMap(int width, int height, Surface *surface_) {
     Release();
     hdc = new wxMemoryDC(surface_->hdc);
     hdcOwned = true;
+    if (width < 1) width = 1;
+    if (height < 1) height = 1;
     bitmap = new wxBitmap(width, height);
     ((wxMemoryDC*)hdc)->SelectObject(*bitmap);
-    // **** ::SetTextAlign(hdc, TA_BASELINE);
 }
 
 void Surface::PenColour(Colour fore) {
@@ -194,7 +201,7 @@ int Surface::LogPixelsY() {
 
 
 int Surface::DeviceHeightFont(int points) {
-    return points * LogPixelsY() / 72;
+    return points;
 }
 
 
@@ -348,7 +355,7 @@ int Surface::AverageCharWidth(Font &font) {
 }
 
 int Surface::SetPalette(Palette *pal, bool inBackGround) {
-    return 0;  // **** figure out what to do with palettes...
+    return 0;
 }
 
 void Surface::SetClip(PRectangle rc) {
@@ -446,6 +453,26 @@ void Window::SetTitle(const char *s) {
 }
 
 
+class wxSTCListBox : public wxListBox {
+public:
+    wxSTCListBox(wxWindow* parent, wxWindowID id)
+        : wxListBox(parent, id, wxDefaultPosition, wxDefaultSize,
+                    0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER) // | wxLB_SORT )
+        {}
+
+    void OnFocus(wxFocusEvent& event) {
+        GetParent()->SetFocus();
+        event.Skip();
+    }
+
+private:
+    DECLARE_EVENT_TABLE()
+};
+
+BEGIN_EVENT_TABLE(wxSTCListBox, wxListBox)
+    EVT_SET_FOCUS(wxSTCListBox::OnFocus)
+END_EVENT_TABLE()
+
 
 ListBox::ListBox() {
 }
@@ -454,8 +481,11 @@ ListBox::~ListBox() {
 }
 
 void ListBox::Create(Window &parent, int ctrlID) {
-    id = new wxListBox(parent.id, ctrlID, wxDefaultPosition, wxDefaultSize,
-                       0, NULL, wxLB_SINGLE | wxLB_SORT);
+    id = new wxSTCListBox(parent.id, ctrlID);
+}
+
+void ListBox::SetVisibleRows(int rows) {
+       desiredVisibleRows = rows;
 }
 
 PRectangle ListBox::GetDesiredRect() {
@@ -463,9 +493,12 @@ PRectangle ListBox::GetDesiredRect() {
     PRectangle rc;
     rc.top = 0;
     rc.left = 0;
+    if (sz.x > 400)
+        sz.x = 400;
+    if (sz.y > 160)  // TODO:  Use desiredVisibleRows??
+        sz.y = 160;
     rc.right = sz.x;
     rc.bottom = sz.y;
-
     return rc;
 }
 
@@ -486,11 +519,18 @@ void ListBox::Append(char *s) {
 }
 
 int ListBox::Length() {
-    return ((wxListBox*)id)->Number();
+    return ((wxListBox*)id)->GetCount();
 }
 
 void ListBox::Select(int n) {
     ((wxListBox*)id)->SetSelection(n);
+#ifdef __WXGTK__
+    if (n > 4)
+        n = n - 4;
+    else
+        n = 1;
+    ((wxListBox*)id)->SetFirstItem(n);
+#endif
 }
 
 int ListBox::GetSelection() {
@@ -498,13 +538,7 @@ int ListBox::GetSelection() {
 }
 
 int ListBox::Find(const char *prefix) {
-    if (prefix) {
-        for (int x=0; x < ((wxListBox*)id)->Number(); x++) {
-            wxString text = ((wxListBox*)id)->GetString(x);
-            if (text.StartsWith(prefix))
-                return x;
-        }
-    }
+    // No longer used
     return -1;
 }
 
@@ -541,13 +575,13 @@ void Menu::Show(Point pt, Window &w) {
 
 Colour Platform::Chrome() {
     wxColour c;
-    c = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
+    c = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
     return Colour(c.Red(), c.Green(), c.Blue());
 }
 
 Colour Platform::ChromeHighlight() {
     wxColour c;
-    c = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DHIGHLIGHT);
+    c = wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT);
     return Colour(c.Red(), c.Green(), c.Blue());
 }
 
@@ -610,6 +644,36 @@ void Platform::DebugPrintf(const char *format, ...) {
 #endif
 }
 
+
+static bool assertionPopUps = true;
+
+bool Platform::ShowAssertionPopUps(bool assertionPopUps_) {
+       bool ret = assertionPopUps;
+       assertionPopUps = assertionPopUps_;
+       return ret;
+}
+
+void Platform::Assert(const char *c, const char *file, int line) {
+       char buffer[2000];
+       sprintf(buffer, "Assertion [%s] failed at %s %d", c, file, line);
+       if (assertionPopUps) {
+               int idButton = wxMessageBox(buffer, "Assertion failure",
+                                            wxICON_HAND | wxOK);
+//             if (idButton == IDRETRY) {
+//                     ::DebugBreak();
+//             } else if (idButton == IDIGNORE) {
+//                     // all OK
+//             } else {
+//                     abort();
+//             }
+       } else {
+               strcat(buffer, "\r\n");
+               Platform::DebugDisplay(buffer);
+               abort();
+       }
+}
+
+
 int Platform::Clamp(int val, int minVal, int maxVal) {
     if (val > maxVal)
         val = maxVal;