]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/resource.cpp
static wxFile::Access() added
[wxWidgets.git] / src / common / resource.cpp
index cd045b2810e6bb1d925d0bf2c8c6e2dc2b91aecd..ab9cceda58f7cdf25545440b44a57c6a87afb110 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows license
+// Licence:    wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
@@ -54,6 +54,8 @@
 
 #include "wx/validate.h"
 
+#include "wx/log.h"
+
 #if USE_WX_RESOURCES
 
 #include <ctype.h>
@@ -97,9 +99,9 @@ void wxCleanUpResourceSystem(void)
     delete wxDefaultResourceTable;
 }
 
-void wxWarning(char *msg)
+void wxLogWarning(char *msg)
 {
-  wxMessageBox(msg, "Warning", wxOK);
+  wxMessageBox(msg, _("Warning"), wxOK);
 }
 
 #if !USE_SHARED_LIBRARY
@@ -287,7 +289,7 @@ bool wxResourceTable::ParseResourceData(char *data)
   PrologDatabase db;
   if (!db.ReadPrologFromString(data))
   {
-    wxWarning("Ill-formed resource file syntax.");
+    wxLogWarning(_("Ill-formed resource file syntax."));
     return FALSE;
   }
 
@@ -343,7 +345,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
 {
   int id = childResource->GetId();
   if ( id == 0 )
-       id = -1;
+   id = -1;
 
   wxControl *control = NULL;
   wxString itemType(childResource->GetType());
@@ -361,18 +363,18 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
           if (bitmap)
            control = new wxBitmapButton(parent, id, *bitmap,
              wxPoint(childResource->GetX(), childResource->GetY()),
-                        wxSize(childResource->GetWidth(), childResource->GetHeight()),
-               childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
+          wxSize(childResource->GetWidth(), childResource->GetHeight()),
+               childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
         }
         else
           // Normal, text button
           control = new wxButton(parent, id, childResource->GetTitle(),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
       }
    else if (itemType == wxString("wxMessage") || itemType == wxString("wxStaticText") ||
-               itemType == wxString("wxStaticBitmap"))
+         itemType == wxString("wxStaticBitmap"))
       {
         if (childResource->GetValue4())
         {
@@ -387,7 +389,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
           if (bitmap)
            control = new wxStaticBitmap(parent, id, *bitmap,
              wxPoint(childResource->GetX(), childResource->GetY()),
-                        wxSize(childResource->GetWidth(), childResource->GetHeight()),
+          wxSize(childResource->GetWidth(), childResource->GetHeight()),
              childResource->GetStyle(), childResource->GetName());
 #endif
         }
@@ -395,7 +397,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
         {
            control = new wxStaticText(parent, id, childResource->GetTitle(),
              wxPoint(childResource->GetX(), childResource->GetY()),
-                        wxSize(childResource->GetWidth(), childResource->GetHeight()),
+          wxSize(childResource->GetWidth(), childResource->GetHeight()),
              childResource->GetStyle(), childResource->GetName());
         }
       }
@@ -403,14 +405,14 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
       {
         control = new wxTextCtrl(parent, id, childResource->GetValue4(),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
       }
    else if (itemType == wxString("wxCheckBox"))
       {
         control = new wxCheckBox(parent, id, childResource->GetTitle(),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
 
         ((wxCheckBox *)control)->SetValue((childResource->GetValue1() != 0));
@@ -420,7 +422,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
       {
         control = new wxGauge(parent, id, (int)childResource->GetValue2(),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
 
         ((wxGauge *)control)->SetValue((int)childResource->GetValue1());
@@ -431,7 +433,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
       {
         control = new wxRadioButton(parent, id, childResource->GetTitle(), // (int)childResource->GetValue1(),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
       }
 #endif
@@ -460,7 +462,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
       {
         control = new wxStaticBox(parent, id, childResource->GetTitle(),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            childResource->GetStyle(), childResource->GetName());
       }
    else if (itemType == wxString("wxListBox"))
@@ -483,7 +485,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
         }
         control = new wxListBox(parent, id,
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            noStrings, strings, childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
 
         if (strings)
@@ -509,7 +511,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
         }
         control = new wxChoice(parent, id,
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            noStrings, strings, childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
 
         if (strings)
@@ -536,7 +538,7 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
         }
         control = new wxComboBox(parent, id, childResource->GetValue4(),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            noStrings, strings, childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
 
         if (strings)
@@ -563,9 +565,9 @@ wxControl *wxResourceTable::CreateItem(wxWindow *parent, wxItemResource *childRe
         }
         control = new wxRadioBox(parent, (wxWindowID) id, wxString(childResource->GetTitle()),
            wxPoint(childResource->GetX(), childResource->GetY()),
-                  wxSize(childResource->GetWidth(), childResource->GetHeight()),
+         wxSize(childResource->GetWidth(), childResource->GetHeight()),
            noStrings, strings, (int)childResource->GetValue1(), childResource->GetStyle(), wxDefaultValidator,
-                  childResource->GetName());
+         childResource->GetName());
 
         if (strings)
           delete[] strings;
@@ -586,7 +588,7 @@ bool wxResourceInterpretResources(wxResourceTable& table, PrologDatabase& db)
   while (node)
   {
     PrologExpr *clause = (PrologExpr *)node->Data();
-       wxString functor(clause->Functor());
+   wxString functor(clause->Functor());
 
     wxItemResource *item = NULL;
     if (functor == "dialog")
@@ -625,13 +627,13 @@ static int g_ValidControlClassesCount = sizeof(g_ValidControlClasses) / sizeof(c
 
 static bool wxIsValidControlClass(const wxString& c)
 {
-       int i;
-       for ( i = 0; i < g_ValidControlClassesCount; i++)
-       {
-               if ( c == g_ValidControlClasses[i] )
-                       return TRUE;
-       }
-       return FALSE;
+   int i;
+   for ( i = 0; i < g_ValidControlClassesCount; i++)
+   {
+      if ( c == g_ValidControlClasses[i] )
+         return TRUE;
+   }
+   return FALSE;
 }
 
 wxItemResource *wxResourceInterpretDialog(wxResourceTable& table, PrologExpr *expr, bool isPanel)
@@ -672,6 +674,10 @@ wxItemResource *wxResourceInterpretDialog(wxResourceTable& table, PrologExpr *ex
   expr->AssignAttributeValue("label_colour", &labelColourHex);
   expr->AssignAttributeValue("button_colour", &buttonColourHex);
 
+  long id = 0;
+  expr->GetAttributeValue("id", id);
+  dialogItem->SetId(id);
+
   if (style)
   {
     windowStyle = wxParseWindowStyle(style);
@@ -778,43 +784,44 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
 
   if ( expr1->Type() == PrologString || expr1->Type() == PrologWord )
   {
-       if ( wxIsValidControlClass(expr1->StringValue()) )
-       {
-               count = 1;
-               controlType = expr1->StringValue();
-       }
-       else
-       {
-        id = wxResourceGetIdentifier(WXSTRINGCAST expr1->StringValue(), &table);
+   if ( wxIsValidControlClass(expr1->StringValue()) )
+   {
+      count = 1;
+      controlType = expr1->StringValue();
+   }
+   else
+   {
+        wxString str(expr1->StringValue());
+        id = wxResourceGetIdentifier(WXSTRINGCAST str, &table);
         if (id == 0)
         {
-          char buf[300];
-                 sprintf(buf, "Could not resolve control class or id '%s'. Use (non-zero) integer instead\n or provide #define (see manual for caveats)",
-                 (const char*) expr1->StringValue());
-          wxWarning(buf);
-                 delete controlItem;
-                 return NULL;
+          wxLogWarning(_("Could not resolve control class or id '%s'. "
+                         "Use (non-zero) integer instead\n or provide #define "
+                         "(see manual for caveats)"),
+                         (const char*) expr1->StringValue());
+        delete controlItem;
+        return NULL;
         }
-               else
-               {
-                       // Success - we have an id, so the 2nd element must be the control class.
-                       controlType = expr->Nth(1)->StringValue();
-                       count = 2;
-               }
-       }
+      else
+      {
+         // Success - we have an id, so the 2nd element must be the control class.
+         controlType = expr->Nth(1)->StringValue();
+         count = 2;
+      }
+   }
   }
   else if (expr1->Type() == PrologInteger)
   {
         id = (int)expr1->IntegerValue();
-               // Success - we have an id, so the 2nd element must be the control class.
-               controlType = expr->Nth(1)->StringValue();
-               count = 2;
+      // Success - we have an id, so the 2nd element must be the control class.
+      controlType = expr->Nth(1)->StringValue();
+      count = 2;
   }
 
   expr1 = expr->Nth(count);
   count ++;
   if ( expr1 )
-       title = expr1->StringValue();
+   title = expr1->StringValue();
 
   expr1 = expr->Nth(count);
   count ++;
@@ -861,19 +868,20 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
     // Check for bitmap resource name
     if (expr->Nth(count) && ((expr->Nth(count)->Type() == PrologString) || (expr->Nth(count)->Type() == PrologWord)))
     {
-      controlItem->SetValue4(WXSTRINGCAST expr->Nth(count)->StringValue());
-      count ++;
-      if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
-        controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
+        wxString str(expr->Nth(count)->StringValue());
+        controlItem->SetValue4(WXSTRINGCAST str);
+        count ++;
+        if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
+          controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
     }
   }
   else if (controlType == "wxCheckBox")
   {
     // Check for default value
     if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-       {
+   {
       controlItem->SetValue1(expr->Nth(count)->IntegerValue());
-         count ++;
+     count ++;
       if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
         controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
     }
@@ -883,9 +891,9 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
   {
     // Check for default value
     if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-       {
+   {
       controlItem->SetValue1(expr->Nth(count)->IntegerValue());
-         count ++;
+     count ++;
       if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
         controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
     }
@@ -895,26 +903,28 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
   {
     // Check for default value
     if (expr->Nth(count) && ((expr->Nth(count)->Type() == PrologString) || (expr->Nth(count)->Type() == PrologWord)))
-       {
-      controlItem->SetValue4(WXSTRINGCAST expr->Nth(count)->StringValue());
-         count ++;
+   {
+      wxString str(expr->Nth(count)->StringValue());
+      controlItem->SetValue4(WXSTRINGCAST str);
+     count ++;
 
       if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
-         {
+     {
         // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-           // Do nothing - no label font any more
-               count ++;
+       // Do nothing - no label font any more
+      count ++;
         if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
           controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-         }
-       }
+     }
+   }
   }
   else if (controlType == "wxMessage" || controlType == "wxStaticText")
   {
     // Check for bitmap resource name
     if (expr->Nth(count) && ((expr->Nth(count)->Type() == PrologString) || (expr->Nth(count)->Type() == PrologWord)))
     {
-      controlItem->SetValue4(WXSTRINGCAST expr->Nth(count)->StringValue());
+      wxString str(expr->Nth(count)->StringValue());
+      controlItem->SetValue4(WXSTRINGCAST str);
       count ++;
       if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
         controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
@@ -929,87 +939,87 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
   {
     // Check for default value
     if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-       {
+   {
       controlItem->SetValue1(expr->Nth(count)->IntegerValue());
-         count ++;
+     count ++;
 
       // Check for range
       if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-         {
+     {
         controlItem->SetValue2(expr->Nth(count)->IntegerValue());
-           count ++;
+       count ++;
 
         if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
         {
-             // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-                 // Do nothing
-             count ++;
+         // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
+        // Do nothing
+         count ++;
 
           if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
             controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-           }
-         }
-       }
+       }
+     }
+   }
   }
   else if (controlType == "wxSlider")
   {
     // Check for default value
     if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-       {
+   {
       controlItem->SetValue1(expr->Nth(count)->IntegerValue());
-         count ++;
+     count ++;
 
       // Check for min
       if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-         {
+     {
         controlItem->SetValue2(expr->Nth(count)->IntegerValue());
-           count ++;
+       count ++;
 
         // Check for max
         if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-           {
+       {
           controlItem->SetValue3(expr->Nth(count)->IntegerValue());
-             count ++;
+         count ++;
 
           if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
-             {
+         {
             // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-               // do nothing
-                   count ++;
+           // do nothing
+          count ++;
 
             if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
               controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-                 }
-               }
-         }
-       }
+        }
+      }
+     }
+   }
   }
   else if (controlType == "wxScrollBar")
   {
     // DEFAULT VALUE
     if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-       {
+   {
       controlItem->SetValue1(expr->Nth(count)->IntegerValue());
-         count ++;
+     count ++;
 
       // PAGE LENGTH
       if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-         {
+     {
         controlItem->SetValue2(expr->Nth(count)->IntegerValue());
-               count ++;
+      count ++;
 
         // OBJECT LENGTH
         if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-               {
+      {
           controlItem->SetValue3(expr->Nth(count)->IntegerValue());
-                 count ++;
+        count ++;
 
           // VIEW LENGTH
           if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
             controlItem->SetValue5(expr->Nth(count)->IntegerValue());
-           }
-         }
-       }
+       }
+     }
+   }
   }
   else if (controlType == "wxListBox")
   {
@@ -1025,7 +1035,7 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
         stringExpr = stringExpr->GetNext();
       }
       controlItem->SetStringValues(stringList);
-         count ++;
+     count ++;
 
       // Check for wxSINGLE/wxMULTIPLE
       PrologExpr *mult = NULL;
@@ -1037,16 +1047,16 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
           controlItem->SetValue1(wxLB_MULTIPLE);
         else if (m == "wxEXTENDED")
           controlItem->SetValue1(wxLB_EXTENDED);
-           count ++;
+       count ++;
         if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
-           {
+       {
           // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-             count ++;
+         count ++;
           if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
             controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-           }
-         }
-       }
+       }
+     }
+   }
   }
   else if (controlType == "wxChoice")
   {
@@ -1063,27 +1073,28 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
       }
       controlItem->SetStringValues(stringList);
 
-         count ++;
+     count ++;
 
       if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
-         {
+     {
         // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-               count ++;
+      count ++;
 
         if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
           controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-         }
-       }
+     }
+   }
   }
 #if USE_COMBOBOX
   else if (controlType == "wxComboBox")
   {
     PrologExpr *textValue = expr->Nth(count);
     if (textValue && (textValue->Type() == PrologString || textValue->Type() == PrologWord))
-       {
-      controlItem->SetValue4(WXSTRINGCAST textValue->StringValue());
+   {
+      wxString str(textValue->StringValue());
+      controlItem->SetValue4(WXSTRINGCAST str);
 
-         count ++;
+     count ++;
       
       PrologExpr *valueList = NULL;
       // Check for default value list
@@ -1098,18 +1109,18 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
         }
         controlItem->SetStringValues(stringList);
 
-               count ++;
+      count ++;
 
         if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
-           {
+       {
           // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-                 count ++;
+        count ++;
 
           if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
             controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-           }
-         }
-       }
+       }
+     }
+   }
   }
 #endif
 #if 0
@@ -1127,26 +1138,26 @@ wxItemResource *wxResourceInterpretControl(wxResourceTable& table, PrologExpr *e
         stringExpr = stringExpr->GetNext();
       }
       controlItem->SetStringValues(stringList);
-         count ++;
+     count ++;
 
       // majorDim (number of rows or cols)
       if (expr->Nth(count) && (expr->Nth(count)->Type() == PrologInteger))
-         {
+     {
         controlItem->SetValue1(expr->Nth(count)->IntegerValue());
-               count ++;
-         }
+      count ++;
+     }
       else
         controlItem->SetValue1(0);
 
       if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
-         {
+     {
         // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-               count ++;
+      count ++;
 
         if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
           controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
-         }
-       }
+     }
+   }
   }
 #endif
   else
@@ -1186,7 +1197,8 @@ wxItemResource *wxResourceInterpretMenuItem(wxResourceTable& table, PrologExpr *
     item->SetType("wxMenu"); // Well, menu item, but doesn't matter.
     if (labelExpr)
     {
-      item->SetTitle(WXSTRINGCAST labelExpr->StringValue());
+      wxString str(labelExpr->StringValue());
+      item->SetTitle(WXSTRINGCAST str);
     }
     if (idExpr)
     {
@@ -1194,13 +1206,14 @@ wxItemResource *wxResourceInterpretMenuItem(wxResourceTable& table, PrologExpr *
       // If a string or word, must look up in identifier table.
       if ((idExpr->Type() == PrologString) || (idExpr->Type() == PrologWord))
       {
-        id = wxResourceGetIdentifier(WXSTRINGCAST idExpr->StringValue(), &table);
+        wxString str(idExpr->StringValue());
+        id = wxResourceGetIdentifier(WXSTRINGCAST str, &table);
         if (id == 0)
         {
-          char buf[300];
-         sprintf(buf, "Could not resolve menu id '%s'. Use (non-zero) integer instead\n or provide #define (see manual for caveats)",
-                 (const char*) idExpr->StringValue());
-          wxWarning(buf);
+          wxLogWarning(_("Could not resolve menu id '%s'. "
+                         "Use (non-zero) integer instead\n"
+                         "or provide #define (see manual for caveats)"),
+                         (const char*) idExpr->StringValue());
         }
       }
       else if (idExpr->Type() == PrologInteger)
@@ -1209,7 +1222,8 @@ wxItemResource *wxResourceInterpretMenuItem(wxResourceTable& table, PrologExpr *
     }
     if (helpExpr)
     {
-      item->SetValue4(WXSTRINGCAST helpExpr->StringValue());
+      wxString str(helpExpr->StringValue());
+      item->SetValue4(WXSTRINGCAST str);
     }
     if (checkableExpr)
       item->SetValue2(checkableExpr->IntegerValue());
@@ -1346,9 +1360,15 @@ wxItemResource *wxResourceInterpretBitmap(wxResourceTable& WXUNUSED(table), Prol
           PrologExpr *xresExpr = listExpr->Nth(4);
           PrologExpr *yresExpr = listExpr->Nth(5);
           if (nameExpr && nameExpr->StringValue())
-            bitmapSpec->SetName(WXSTRINGCAST nameExpr->StringValue());
+          {
+            wxString str(nameExpr->StringValue());
+            bitmapSpec->SetName(WXSTRINGCAST str);
+          }
           if (typeExpr && typeExpr->StringValue())
-            bitmapSpec->SetValue1(wxParseWindowStyle(WXSTRINGCAST typeExpr->StringValue()));
+          {
+            wxString str(typeExpr->StringValue());
+            bitmapSpec->SetValue1(wxParseWindowStyle(WXSTRINGCAST str));
+          }
           else
             bitmapSpec->SetValue1(0);
             
@@ -1421,12 +1441,23 @@ wxFont *wxResourceInterpretFontSpec(PrologExpr *expr)
   PrologExpr *faceNameExpr = expr->Nth(5);
   if (pointExpr)
     point = (int)pointExpr->IntegerValue();
+
+  wxString str;
   if (familyExpr)
-    family = (int)wxParseWindowStyle(WXSTRINGCAST familyExpr->StringValue());
+  {
+    str = familyExpr->StringValue();
+    family = (int)wxParseWindowStyle(WXSTRINGCAST str);
+  }
   if (styleExpr)
-    style = (int)wxParseWindowStyle(WXSTRINGCAST styleExpr->StringValue());
+  {
+    str = styleExpr->StringValue();
+    style = (int)wxParseWindowStyle(WXSTRINGCAST str);
+  }
   if (weightExpr)
-    weight = (int)wxParseWindowStyle(WXSTRINGCAST weightExpr->StringValue());
+  {
+    str = weightExpr->StringValue();
+    weight = (int)wxParseWindowStyle(WXSTRINGCAST str);
+  }
   if (underlineExpr)
     underline = (int)underlineExpr->IntegerValue();
   if (faceNameExpr)
@@ -1601,9 +1632,7 @@ bool wxResourceReadOneResource(FILE *fd, PrologDatabase& db, bool *eof, wxResour
     }
     else
     {
-      char buf[300];
-      sprintf(buf, "#define %s must be an integer.", name);
-      wxWarning(buf);
+      wxLogWarning(_("#define %s must be an integer."), name);
       delete[] name;
       delete[] value;
       return FALSE;
@@ -1625,9 +1654,7 @@ bool wxResourceReadOneResource(FILE *fd, PrologDatabase& db, bool *eof, wxResour
       name[len-1] = 0;
     if (!wxResourceParseIncludeFile(actualName, table))
     {
-      char buf[400];
-      sprintf(buf, "Could not find resource include file %s.", actualName);
-      wxWarning(buf);
+      wxLogWarning(_("Could not find resource include file %s."), actualName);
     }
     delete[] name;
     return TRUE;
@@ -1635,38 +1662,38 @@ bool wxResourceReadOneResource(FILE *fd, PrologDatabase& db, bool *eof, wxResour
   else if (strcmp(wxResourceBuffer, "static") != 0)
   {
     char buf[300];
-    strcpy(buf, "Found ");
+    strcpy(buf, _("Found "));
     strncat(buf, wxResourceBuffer, 30);
-    strcat(buf, ", expected static, #include or #define\nwhilst parsing resource.");
-    wxWarning(buf);
+    strcat(buf, _(", expected static, #include or #define\nwhilst parsing resource."));
+    wxLogWarning(buf);
     return FALSE;
   }
 
   // char
   if (!wxGetResourceToken(fd))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
 
   if (strcmp(wxResourceBuffer, "char") != 0)
   {
-    wxWarning("Expected 'char' whilst parsing resource.");
+    wxLogWarning(_("Expected 'char' whilst parsing resource."));
     return FALSE;
   }
     
   // *name
   if (!wxGetResourceToken(fd))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
 
   if (wxResourceBuffer[0] != '*')
   {
-    wxWarning("Expected '*' whilst parsing resource.");
+    wxLogWarning(_("Expected '*' whilst parsing resource."));
     return FALSE;
   }
   char nameBuf[100];
@@ -1675,21 +1702,21 @@ bool wxResourceReadOneResource(FILE *fd, PrologDatabase& db, bool *eof, wxResour
   // =
   if (!wxGetResourceToken(fd))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
 
   if (strcmp(wxResourceBuffer, "=") != 0)
   {
-    wxWarning("Expected '=' whilst parsing resource.");
+    wxLogWarning(_("Expected '=' whilst parsing resource."));
     return FALSE;
   }
 
   // String
   if (!wxGetResourceToken(fd))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
@@ -1697,9 +1724,7 @@ bool wxResourceReadOneResource(FILE *fd, PrologDatabase& db, bool *eof, wxResour
   {
     if (!db.ReadPrologFromString(wxResourceBuffer))
     {
-      char buf[300];
-      sprintf(buf, "%s: ill-formed resource file syntax.", nameBuf);
-      wxWarning(buf);
+      wxLogWarning(_("%s: ill-formed resource file syntax."), nameBuf);
       return FALSE;
     }
   }
@@ -1765,8 +1790,6 @@ static wxResourceBitListStruct wxResourceBitListTable[] =
   { "wxLB_SINGLE", wxLB_SINGLE },
   { "wxLB_MULTIPLE", wxLB_MULTIPLE },
   { "wxLB_EXTENDED", wxLB_EXTENDED },
-  { "wxNEEDED_SB", wxNEEDED_SB },
-  { "wxALWAYS_SB", wxALWAYS_SB },
   { "wxLB_NEEDED_SB", wxLB_NEEDED_SB },
   { "wxLB_ALWAYS_SB", wxLB_ALWAYS_SB },
   { "wxLB_SORT", wxLB_SORT },
@@ -1820,6 +1843,7 @@ static wxResourceBitListStruct wxResourceBitListTable[] =
   /* wxTreeCtrl */
   { "wxTR_HAS_BUTTONS", wxTR_HAS_BUTTONS },
   { "wxTR_EDIT_LABELS", wxTR_EDIT_LABELS },
+  { "wxTR_LINES_AT_ROOT", wxTR_LINES_AT_ROOT },
 
   /* wxListCtrl */
   { "wxLC_ICON", wxLC_ICON },
@@ -1867,6 +1891,9 @@ static wxResourceBitListStruct wxResourceBitListTable[] =
   
   /* wxToolBar */
   { "wxTB_3DBUTTONS", wxTB_3DBUTTONS},
+  { "wxTB_HORIZONTAL", wxTB_HORIZONTAL},
+  { "wxTB_VERTICAL", wxTB_VERTICAL},
+  { "wxTB_FLAT", wxTB_FLAT},
 
   /* Generic */
   { "wxVSCROLL", wxVSCROLL },
@@ -1889,8 +1916,6 @@ static wxResourceBitListStruct wxResourceBitListTable[] =
   { "wxDEFAULT_DIALOG_STYLE", wxDEFAULT_DIALOG_STYLE},
   { "wxBORDER", wxBORDER},
   { "wxRETAINED", wxRETAINED},
-  { "wxEDITABLE", wxEDITABLE},
-  { "wxREADONLY", wxREADONLY},
   { "wxNATIVE_IMPL", 0},
   { "wxEXTENDED_IMPL", 0},
   { "wxBACKINGSTORE", wxBACKINGSTORE},
@@ -2026,9 +2051,7 @@ long wxParseWindowStyle(char *bitListString)
       }
     if (!found)
     {
-      char buf[200];
-      sprintf(buf, "Unrecognized style %s whilst parsing resource.", word);
-      wxWarning(buf);
+      wxLogWarning(_("Unrecognized style %s whilst parsing resource."), word);
       return 0;
     }
   }
@@ -2050,9 +2073,7 @@ wxBitmap *wxResourceCreateBitmap(char *resource, wxResourceTable *table)
   {
     if (!item->GetType() || strcmp(item->GetType(), "wxBitmap") != 0)
     {
-      char buf[300];
-      sprintf(buf, "%s not a bitmap resource specification.", resource);
-      wxWarning(buf);
+      wxLogWarning(_("%s not a bitmap resource specification."), resource);
       return NULL;
     }
     int thisDepth = wxDisplayDepth();
@@ -2152,14 +2173,13 @@ wxBitmap *wxResourceCreateBitmap(char *resource, wxResourceTable *table)
         wxItemResource *item = table->FindResource(name);
         if (!item)
         {
-          char buf[400];
-          sprintf(buf, "Failed to find XBM resource %s.\nForgot to use wxResourceLoadBitmapData?", name);
-          wxWarning(buf);
+          wxLogWarning(_("Failed to find XBM resource %s.\n"
+                         "Forgot to use wxResourceLoadBitmapData?"), name);
           return NULL;
         }
         bitmap = new wxBitmap((char *)item->GetValue1(), (int)item->GetValue2(), (int)item->GetValue3()); 
 #else
-        wxWarning("No XBM facility available!");
+        wxLogWarning(_("No XBM facility available!"));
 #endif
         break;
       }
@@ -2169,14 +2189,13 @@ wxBitmap *wxResourceCreateBitmap(char *resource, wxResourceTable *table)
         wxItemResource *item = table->FindResource(name);
         if (!item)
         {
-          char buf[400];
-          sprintf(buf, "Failed to find XPM resource %s.\nForgot to use wxResourceLoadBitmapData?", name);
-          wxWarning(buf);
+          wxLogWarning(_("Failed to find XPM resource %s.\n"
+                         "Forgot to use wxResourceLoadBitmapData?"), name);
           return NULL;
         }
         bitmap = new wxBitmap(item->GetValue1());
 #else
-        wxWarning("No XPM facility available!");
+        wxLogWarning(_("No XPM facility available!"));
 #endif
         break;
       }
@@ -2201,9 +2220,7 @@ wxBitmap *wxResourceCreateBitmap(char *resource, wxResourceTable *table)
   }
   else
   {
-    char buf[300];
-    sprintf(buf, "Bitmap resource specification %s not found.", resource);
-    wxWarning(buf);
+    wxLogWarning(_("Bitmap resource specification %s not found."), resource);
     return NULL;
   }
 }
@@ -2223,9 +2240,7 @@ wxIcon *wxResourceCreateIcon(char *resource, wxResourceTable *table)
   {
     if (!item->GetType() || strcmp(item->GetType(), "wxIcon") != 0)
     {
-      char buf[300];
-      sprintf(buf, "%s not an icon resource specification.", resource);
-      wxWarning(buf);
+      wxLogWarning(_("%s not an icon resource specification."), resource);
       return NULL;
     }
     int thisDepth = wxDisplayDepth();
@@ -2325,14 +2340,13 @@ wxIcon *wxResourceCreateIcon(char *resource, wxResourceTable *table)
         wxItemResource *item = table->FindResource(name);
         if (!item)
         {
-          char buf[400];
-          sprintf(buf, "Failed to find XBM resource %s.\nForgot to use wxResourceLoadIconData?", name);
-          wxWarning(buf);
+          wxLogWarning(_("Failed to find XBM resource %s.\n"
+                         "Forgot to use wxResourceLoadIconData?"), name);
           return NULL;
         }
         icon = new wxIcon((char *)item->GetValue1(), (int)item->GetValue2(), (int)item->GetValue3()); 
 #else
-        wxWarning("No XBM facility available!");
+        wxLogWarning(_("No XBM facility available!"));
 #endif
         break;
       }
@@ -2345,16 +2359,16 @@ wxIcon *wxResourceCreateIcon(char *resource, wxResourceTable *table)
         if (!item)
         {
           char buf[400];
-          sprintf(buf, "Failed to find XPM resource %s.\nForgot to use wxResourceLoadIconData?", name);
-          wxWarning(buf);
+          sprintf(buf, _("Failed to find XPM resource %s.\nForgot to use wxResourceLoadIconData?"), name);
+          wxLogWarning(buf);
           return NULL;
         }
         icon = new wxIcon((char **)item->GetValue1());
 #else
-        wxWarning("No XPM facility available!");
+        wxLogWarning(_("No XPM facility available!"));
 #endif
 */
-        wxWarning("No XPM icon facility available!");
+        wxLogWarning(_("No XPM icon facility available!"));
         break;
       }
       default:
@@ -2378,9 +2392,7 @@ wxIcon *wxResourceCreateIcon(char *resource, wxResourceTable *table)
   }
   else
   {
-    char buf[300];
-    sprintf(buf, "Icon resource specification %s not found.", resource);
-    wxWarning(buf);
+    wxLogWarning(_("Icon resource specification %s not found."), resource);
     return NULL;
   }
 }
@@ -2706,9 +2718,7 @@ bool wxResourceReadOneResourceString(char *s, PrologDatabase& db, bool *eof, wxR
     }
     else
     {
-      char buf[300];
-      sprintf(buf, "#define %s must be an integer.", name);
-      wxWarning(buf);
+      wxLogWarning(_("#define %s must be an integer."), name);
       delete[] name;
       delete[] value;
       return FALSE;
@@ -2732,8 +2742,8 @@ bool wxResourceReadOneResourceString(char *s, PrologDatabase& db, bool *eof, wxR
     if (!wxResourceParseIncludeFile(actualName, table))
     {
       char buf[400];
-      sprintf(buf, "Could not find resource include file %s.", actualName);
-      wxWarning(buf);
+      sprintf(buf, _("Could not find resource include file %s."), actualName);
+      wxLogWarning(buf);
     }
     delete[] name;
     return TRUE;
@@ -2742,38 +2752,38 @@ bool wxResourceReadOneResourceString(char *s, PrologDatabase& db, bool *eof, wxR
   else if (strcmp(wxResourceBuffer, "static") != 0)
   {
     char buf[300];
-    strcpy(buf, "Found ");
+    strcpy(buf, _("Found "));
     strncat(buf, wxResourceBuffer, 30);
-    strcat(buf, ", expected static, #include or #define\nwhilst parsing resource.");
-    wxWarning(buf);
+    strcat(buf, _(", expected static, #include or #define\nwhilst parsing resource."));
+    wxLogWarning(buf);
     return FALSE;
   }
 
   // char
   if (!wxGetResourceTokenString(s))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
 
   if (strcmp(wxResourceBuffer, "char") != 0)
   {
-    wxWarning("Expected 'char' whilst parsing resource.");
+    wxLogWarning(_("Expected 'char' whilst parsing resource."));
     return FALSE;
   }
     
   // *name
   if (!wxGetResourceTokenString(s))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
 
   if (wxResourceBuffer[0] != '*')
   {
-    wxWarning("Expected '*' whilst parsing resource.");
+    wxLogWarning(_("Expected '*' whilst parsing resource."));
     return FALSE;
   }
   char nameBuf[100];
@@ -2782,21 +2792,21 @@ bool wxResourceReadOneResourceString(char *s, PrologDatabase& db, bool *eof, wxR
   // =
   if (!wxGetResourceTokenString(s))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
 
   if (strcmp(wxResourceBuffer, "=") != 0)
   {
-    wxWarning("Expected '=' whilst parsing resource.");
+    wxLogWarning(_("Expected '=' whilst parsing resource."));
     return FALSE;
   }
 
   // String
   if (!wxGetResourceTokenString(s))
   {
-    wxWarning("Unexpected end of file whilst parsing resource.");
+    wxLogWarning(_("Unexpected end of file whilst parsing resource."));
     *eof = TRUE;
     return FALSE;
   }
@@ -2804,9 +2814,7 @@ bool wxResourceReadOneResourceString(char *s, PrologDatabase& db, bool *eof, wxR
   {
     if (!db.ReadPrologFromString(wxResourceBuffer))
     {
-      char buf[300];
-      sprintf(buf, "%s: ill-formed resource file syntax.", nameBuf);
-      wxWarning(buf);
+      wxLogWarning(_("%s: ill-formed resource file syntax."), nameBuf);
       return FALSE;
     }
   }
@@ -2879,9 +2887,10 @@ bool wxWindow::LoadFromResource(wxWindow *parent, const wxString& resourceName,
   if (IsKindOf(CLASSINFO(wxDialog)))
   {
     wxDialog *dialogBox = (wxDialog *)this;
-       long modalStyle = isModal ? wxDIALOG_MODAL : 0;
+   long modalStyle = isModal ? wxDIALOG_MODAL : 0;
     if (!dialogBox->Create(parent, -1, title, wxPoint(x, y), wxSize(width, height), theWindowStyle|modalStyle, name))
       return FALSE;
+    dialogBox->SetClientSize(width, height);
   }
   else
   {
@@ -2895,7 +2904,7 @@ bool wxWindow::LoadFromResource(wxWindow *parent, const wxString& resourceName,
   if (resource->GetBackgroundColour())
     SetBackgroundColour(*resource->GetBackgroundColour());
 
-       // TODO
+   // TODO
   if (resource->GetLabelColour())
     SetForegroundColour(*resource->GetLabelColour());
   else if (resource->GetButtonColour())