]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/utils/wxrcedit/propframe.cpp
Better wxFile support, warning fixes and minor source cleaning.
[wxWidgets.git] / contrib / utils / wxrcedit / propframe.cpp
index 6c8af96feed417f62da9ad39354383d1c131dc1b..b31b83425c47df98ade70d8ccb882514a02920c7 100644 (file)
@@ -27,6 +27,7 @@
 #include "propedit.h"
 #include "pe_basic.h"
 #include "pe_adv.h"
+#include "editor.h"
 
 // ------------- support classes --------
 
@@ -37,42 +38,54 @@ class PropsTree: public wxRemotelyScrolledTreeCtrl
         PropsTree(wxWindow* parent, wxWindowID id, const wxPoint& pt = wxDefaultPosition,
             const wxSize& sz = wxDefaultSize, long style = wxTR_HAS_BUTTONS)
             : wxRemotelyScrolledTreeCtrl(parent, id, pt, sz, style),
-              m_EditCtrl(NULL) {}
+              m_EditCtrl(NULL)
+        {
+#if 0
+            // VS: Don't do it, it is *extremely* ugly.
+            //     FIXME: find a better solution.
+
+            //make text larger so controls will fit properly
+            wxFont font = GetFont();
+            font.SetPointSize(font.GetPointSize()*1.5);
+            SetFont(font);
+#endif
+        }
 
-           void OnPaint(wxPaintEvent& event)
+        void OnPaint(wxPaintEvent& event)
         {
-               wxPaintDC dc(this);
+            wxPaintDC dc(this);
 
-               wxTreeCtrl::OnPaint(event);
+            wxTreeCtrl::OnPaint(event);
 
             // Reset the device origin since it may have been set
             dc.SetDeviceOrigin(0, 0);
 
-               wxPen pen(wxColour(_T("BLACK")), 1, wxSOLID);
-               dc.SetPen(pen);
-            
-               dc.SetBrush(* wxTRANSPARENT_BRUSH);
+            wxPen pen(*wxBLACK, 1, wxSOLID);
+            dc.SetPen(pen);
+
+            dc.SetBrush(*wxTRANSPARENT_BRUSH);
 
             wxSize clientSize = GetClientSize();
-               wxRect itemRect;
-               int cy=0;
-               wxTreeItemId h, lastH;
-               for(h=GetFirstVisibleItem();h;h=GetNextVisible(h))
-               {
-                       if (h.IsOk() && GetBoundingRect(h, itemRect))
-                       {
-                               cy = itemRect.GetTop();
-                               dc.DrawLine(0, cy, clientSize.x, cy);
-                               lastH = h;
-                       }
-               }
-               if (lastH.IsOk() && GetBoundingRect(lastH, itemRect))
-               {
-                       cy = itemRect.GetBottom();
-                       dc.DrawLine(0, cy, clientSize.x, cy);
-               }
+            wxRect itemRect;
+            int cy=0;
+            wxTreeItemId h, lastH;
+            for(h=GetFirstVisibleItem();h;h=GetNextVisible(h))
+            {
+                if (h.IsOk() && GetBoundingRect(h, itemRect))
+                {
+                    cy = itemRect.GetTop();
+
+                    dc.DrawLine(0, cy, clientSize.x, cy);
+                    lastH = h;
+                }
+            }
+            if (lastH.IsOk() && GetBoundingRect(lastH, itemRect))
+            {
+                cy = itemRect.GetBottom();
+                dc.DrawLine(0, cy, clientSize.x, cy);
+            }
         }
-        
+
         void OnSelChange(wxTreeEvent& event)
         {
             if (m_EditCtrl != NULL)
@@ -80,15 +93,16 @@ class PropsTree: public wxRemotelyScrolledTreeCtrl
                 m_EditCtrl->EndEdit();
                 m_EditCtrl = NULL;
             }
-        
+
             wxTreeItemId item = event.GetItem();
             PETreeData *dt = (PETreeData*)GetItemData(item);
             if (dt != NULL)
             {
                 wxRect bounding;
                 GetBoundingRect(item, bounding);
+
                 bounding.SetX(0);
-                bounding.SetWidth(GetCompanionWindow()->GetSize().x); 
+                bounding.SetWidth(GetCompanionWindow()->GetSize().x);
                 dt->EditCtrl->BeginEdit(bounding, item);
                 m_EditCtrl = dt->EditCtrl;
             }
@@ -104,65 +118,78 @@ class PropsTree: public wxRemotelyScrolledTreeCtrl
                 m_EditCtrl = NULL;
             }
         }
-        
+
+        void OnScroll(wxScrollWinEvent& event)
+        {
+            event.Skip();
+            if (event.GetOrientation() == wxHORIZONTAL) return;
+            if (!m_EditCtrl) return;
+
+            wxTreeItemId id = GetSelection();
+            wxRect bounding;
+            GetBoundingRect(id, bounding);
+
+            m_EditCtrl->Move(wxDefaultCoord, bounding.y);
+        }
+
         PropEditCtrl *m_EditCtrl;
-        
+
         DECLARE_EVENT_TABLE()
 };
 
 BEGIN_EVENT_TABLE(PropsTree, wxRemotelyScrolledTreeCtrl)
-       EVT_PAINT(PropsTree::OnPaint)
-    EVT_TREE_SEL_CHANGED(-1, PropsTree::OnSelChange)
+    EVT_PAINT(PropsTree::OnPaint)
+    EVT_TREE_SEL_CHANGED(wxID_ANY, PropsTree::OnSelChange)
+    EVT_SCROLLWIN(PropsTree::OnScroll)
 END_EVENT_TABLE()
 
 
 class PropsValueWindow: public wxTreeCompanionWindow
 {
     public:
-        PropsValueWindow(wxWindow* parent, wxWindowID id = -1,
+        PropsValueWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
           const wxPoint& pos = wxDefaultPosition,
           const wxSize& sz = wxDefaultSize,
           long style = 0)
            : wxTreeCompanionWindow(parent, id, pos, sz, style) {}
-           
+
         virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect)
         {
-               if (m_treeCtrl)
-               {
+            if (m_treeCtrl)
+            {
                 PETreeData *data = (PETreeData*)m_treeCtrl->GetItemData(id);
-                       wxString text;
+                wxString text;
                 if (data != NULL) text = data->EditCtrl->GetValueAsText(id);
                 dc.SetBrush(wxBrush(GetBackgroundColour(), wxSOLID));
                 dc.DrawRectangle(rect);
-                       dc.SetTextForeground(* wxBLACK);
-                       dc.SetBackgroundMode(wxTRANSPARENT);
+                dc.SetTextForeground(* wxBLACK);
+                dc.SetBackgroundMode(wxTRANSPARENT);
 
-                       int textW, textH;
-                       dc.GetTextExtent(text, & textW, & textH);
+                int textW, textH;
+                dc.GetTextExtent(text, & textW, & textH);
 
-                       int x = 5;
-                       int y = rect.GetY() + wxMax(0, (rect.GetHeight() - textH) / 2);
+                int x = 5;
+                int y = rect.GetY() + wxMax(0, (rect.GetHeight() - textH) / 2);
 
-                       dc.DrawText(text, x, y);
-               }
+                dc.DrawText(text, x, y);
+            }
         }
-        
+
         void OnClick(wxMouseEvent& event)
         {
             int flags;
             wxTreeItemId item = GetTreeCtrl()->HitTest(wxPoint(1, event.GetY()), flags);
             if (item.IsOk())
             {
-                GetTreeCtrl()->ScrollTo(item);
                 GetTreeCtrl()->SelectItem(item);
             }
         }
-        
+
         DECLARE_EVENT_TABLE()
 };
 
 BEGIN_EVENT_TABLE(PropsValueWindow, wxTreeCompanionWindow)
-       EVT_LEFT_DOWN(PropsValueWindow::OnClick)
+    EVT_LEFT_DOWN(PropsValueWindow::OnClick)
 END_EVENT_TABLE()
 
 
@@ -175,48 +202,54 @@ PropertiesFrame* PropertiesFrame::ms_Instance = NULL;
 
 PropertiesFrame *PropertiesFrame::Get()
 {
-    if (ms_Instance == NULL) 
+    if (ms_Instance == NULL)
     {
         (void)new PropertiesFrame;
-        ms_Instance->Show(TRUE);
+        ms_Instance->Show(true);
     }
     return ms_Instance;
 }
 
 PropertiesFrame::PropertiesFrame()
-    : wxFrame(NULL, -1, _("Properties"))
+    : wxFrame(EditorFrame::Get(), wxID_ANY, _("Properties"),
+              wxDefaultPosition, wxDefaultSize,
+              wxDEFAULT_FRAME_STYLE | wxFRAME_NO_TASKBAR
+#ifdef __WXMSW__
+              | wxFRAME_TOOL_WINDOW
+#endif
+              )
 {
     ms_Instance = this;
     m_Node = NULL;
 
-    m_scrolledWindow = new wxSplitterScrolledWindow(this, -1, wxDefaultPosition,
-               wxDefaultSize, wxNO_BORDER | wxCLIP_CHILDREN | wxVSCROLL);
-    m_splitter = new wxThinSplitterWindow(m_scrolledWindow, -1, wxDefaultPosition,
-               wxDefaultSize, wxSP_3DBORDER | wxCLIP_CHILDREN /* | wxSP_LIVE_UPDATE */);
-       m_splitter->SetSashSize(2);
-    m_tree = new PropsTree(m_splitter, -1, wxDefaultPosition,
-               wxDefaultSize, wxTR_HAS_BUTTONS | wxTR_NO_LINES | wxNO_BORDER );
+    m_scrolledWindow = new wxSplitterScrolledWindow(this, wxID_ANY, wxDefaultPosition,
+        wxDefaultSize, wxNO_BORDER | wxCLIP_CHILDREN | wxVSCROLL);
+    m_splitter = new wxThinSplitterWindow(m_scrolledWindow, wxID_ANY, wxDefaultPosition,
+        wxDefaultSize, wxSP_3DBORDER | wxCLIP_CHILDREN /* | wxSP_LIVE_UPDATE */);
+    m_splitter->SetSashSize(2);
+    m_tree = new PropsTree(m_splitter, wxID_ANY, wxDefaultPosition,
+        wxDefaultSize, wxTR_HAS_BUTTONS | wxTR_NO_LINES | wxNO_BORDER );
     m_tree->SetIndent(2);
 
-    m_valueWindow = new PropsValueWindow(m_splitter, -1, wxDefaultPosition,
-               wxDefaultSize, wxNO_BORDER);
+    m_valueWindow = new PropsValueWindow(m_splitter, wxID_ANY, wxDefaultPosition,
+        wxDefaultSize, wxNO_BORDER);
     m_valueWindow->SetBackgroundColour(m_tree->GetBackgroundColour());
     m_splitter->SplitVertically(m_tree, m_valueWindow, wxConfig::Get()->Read(_T("propertiesframe_sash"), 100));
-       //m_splitter->AdjustScrollbars();
-       m_scrolledWindow->SetTargetWindow(m_tree);
+    //m_splitter->AdjustScrollbars();
+    m_scrolledWindow->SetTargetWindow(m_tree);
 
-       m_scrolledWindow->EnableScrolling(FALSE, FALSE);
+    m_scrolledWindow->EnableScrolling(false, false);
 
-       // Let the two controls know about each other
-       m_valueWindow->SetTreeCtrl(m_tree);
-       m_tree->SetCompanionWindow(m_valueWindow);
+    // Let the two controls know about each other
+    m_valueWindow->SetTreeCtrl(m_tree);
+    m_tree->SetCompanionWindow(m_valueWindow);
 
     wxConfigBase *cfg = wxConfigBase::Get();
-    SetSize(wxRect(wxPoint(cfg->Read(_T("propertiesframe_x"), -1), cfg->Read(_T("propertiesframe_y"), -1)),
+    SetSize(wxRect(wxPoint(cfg->Read(_T("propertiesframe_x"), wxDefaultCoord), cfg->Read(_T("propertiesframe_y"), wxDefaultCoord)),
             wxSize(cfg->Read(_T("propertiesframe_w"), 200), cfg->Read(_T("propertiesframe_h"), 200))));
-            
 
-    m_EditCtrls.DeleteContents(TRUE);
+
+    m_EditCtrls.DeleteContents(true);
     m_EditCtrls.Put(_T("bool"), new PropEditCtrlBool(this));
     m_EditCtrls.Put(_T("coord"), new PropEditCtrlCoord(this));
     m_EditCtrls.Put(_T("color"), new PropEditCtrlColor(this));
@@ -225,11 +258,13 @@ PropertiesFrame::PropertiesFrame()
     m_EditCtrls.Put(_T("integer"), new PropEditCtrlInt(this));
     m_EditCtrls.Put(_T("not_implemented"), new PropEditCtrlNull(this));
     m_EditCtrls.Put(_T("text"), new PropEditCtrlTxt(this));
-    m_EditCtrls.Put(_T("xmlid"), new PropEditCtrlXMLID(this));
+    m_EditCtrls.Put(_T("xmlid"), new PropEditCtrlXRCID(this));
     m_EditCtrls.Put(_T("font"), new PropEditCtrlFont(this));
     m_EditCtrls.Put(_T("choice"), new PropEditCtrlChoice(this));
+    m_EditCtrls.Put(_T("file"), new PropEditCtrlFile(this));
+    m_EditCtrls.Put(_T("imagefile"), new PropEditCtrlImageFile(this));
     m_EditCtrls.Put(_T(""), new PropEditCtrlNull(this));
-            
+
     ClearProps();
 }
 
@@ -237,26 +272,26 @@ PropertiesFrame::PropertiesFrame()
 
 PropertiesFrame::~PropertiesFrame()
 {
-    wxConfigBase *cfg = wxConfigBase::Get();  
+    wxConfigBase *cfg = wxConfigBase::Get();
     cfg->Write(_T("propertiesframe_x"), (long)GetPosition().x);
     cfg->Write(_T("propertiesframe_y"), (long)GetPosition().y);
     cfg->Write(_T("propertiesframe_w"), (long)GetSize().x);
     cfg->Write(_T("propertiesframe_h"), (long)GetSize().y);
     cfg->Write(_T("propertiesframe_sash"), (long)m_splitter->GetSashPosition());
-    
+
     ms_Instance = NULL;
 }
 
 
-        
+
 void PropertiesFrame::ShowProps(wxXmlNode *node)
 {
    m_Node = node;
-   
+
    ClearProps();
-   AddSingleProp(PropertyInfo(_T("xmlid"), _T("XMLID"), wxEmptyString));
+   AddSingleProp(PropertyInfo(_T("xmlid"), _T("XRCID"), wxEmptyString));
    AddProps(NodeHandler::Find(node)->GetPropsList(node));
-   
+
    m_tree->Expand(m_tree->GetRootItem());
    m_valueWindow->Refresh();
 }
@@ -286,7 +321,7 @@ void PropertiesFrame::AddSingleProp(const PropertyInfo& pinfo, wxTreeItemId *roo
     wxTreeItemId tid;
     if (root != NULL) tid = *root;
     else tid = m_tree->GetRootItem();
-    
+
     if (pec == NULL)
         wxLogError(_("Unknown property type '%s'!"), pinfo.Type.c_str());
     else