]>
git.saurik.com Git - wxWidgets.git/blob - contrib/utils/wxrcedit/pe_adv.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Author: Vaclav Slavik
5 // Copyright: (c) 2000 Vaclav Slavik
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
10 #pragma implementation "pe_adv.h"
13 // For compilers that support precompilation, includes "wx/wx.h".
14 #include "wx/wxprec.h"
21 #include "wx/xml/xml.h"
22 #include "wx/tokenzr.h"
24 #include "wx/dialog.h"
25 #include "wx/checklst.h"
31 #include "wx/colordlg.h"
32 #include "wx/config.h"
36 wxWindow
* PropEditCtrlFont::CreateEditCtrl()
38 PropEditCtrlTxt::CreateEditCtrl();
39 m_TextCtrl
->Enable(FALSE
);
45 wxTreeItemId
PropEditCtrlFont::CreateTreeEntry(wxTreeItemId parent
, const PropertyInfo
& pinfo
)
47 wxTreeItemId ti
= PropEditCtrlTxt::CreateTreeEntry(parent
, pinfo
);
48 m_PropFrame
->AddSingleProp(PropertyInfo(_T("integer"), pinfo
.Name
+ _T("/size"), wxEmptyString
), &ti
);
49 m_PropFrame
->AddSingleProp(PropertyInfo(_T("text"), pinfo
.Name
+ _T("/face"), wxEmptyString
), &ti
);
50 m_PropFrame
->AddSingleProp(PropertyInfo(_T("choice"), pinfo
.Name
+ _T("/style"), _T("normal,italic,slant")), &ti
);
51 m_PropFrame
->AddSingleProp(PropertyInfo(_T("choice"), pinfo
.Name
+ _T("/weight"), _T("normal,light,bold")), &ti
);
52 m_PropFrame
->AddSingleProp(PropertyInfo(_T("choice"), pinfo
.Name
+ _T("/family"), _T("default,decorative,roman,script,swiss,modern")), &ti
);
53 m_PropFrame
->AddSingleProp(PropertyInfo(_T("bool"), pinfo
.Name
+ _T("/underlined"), wxEmptyString
), &ti
);
54 m_PropFrame
->AddSingleProp(PropertyInfo(_T("text"), pinfo
.Name
+ _T("/encoding"), wxEmptyString
), &ti
);
63 BEGIN_EVENT_TABLE(PropEditCtrlChoice
, PropEditCtrl
)
64 EVT_CHOICE(-1, PropEditCtrlChoice::OnChoice
)
67 wxWindow
* PropEditCtrlChoice::CreateEditCtrl()
69 m_Choice
= new wxChoice(this, -1);
76 void PropEditCtrlChoice::ReadValue()
78 wxStringTokenizer
tkn(m_PropInfo
->MoreInfo
, _T(","));
80 while (tkn
.HasMoreTokens())
81 m_Choice
->Append(tkn
.GetNextToken());
83 wxString sel
= XmlReadValue(GetNode(), m_PropInfo
->Name
);
84 if (!!sel
) m_Choice
->SetStringSelection(sel
);
89 void PropEditCtrlChoice::WriteValue()
91 XmlWriteValue(GetNode(), m_PropInfo
->Name
,
92 m_Choice
->GetStringSelection());
97 void PropEditCtrlChoice::OnChoice(wxCommandEvent
& event
)
102 EditorFrame::Get()->NotifyChanged(CHANGED_PROPS
);
110 void PropEditCtrlColor::OnDetails()
113 wxString txt
= m_TextCtrl
->GetValue();
116 if (txt
.Length() == 7 && txt
[0] == _T('#') &&
117 wxSscanf(txt
.c_str(), _T("#%lX"), &tmp
) == 1)
118 clr
= wxColour((tmp
& 0xFF0000) >> 16,
119 (tmp
& 0x00FF00) >> 8,
121 clr
= wxGetColourFromUser(NULL
, clr
);
124 txt
.Printf(_T("#%02X%02X%02X"), clr
.Red(), clr
.Green(), clr
.Blue());
125 m_TextCtrl
->SetValue(txt
);
139 void PropEditCtrlFlags::OnDetails()
141 wxString t
,txt
= m_TextCtrl
->GetValue();
146 wxStringTokenizer
tkn(m_PropInfo
->MoreInfo
, _T(","));
147 while (tkn
.HasMoreTokens())
148 arr
.Add(tkn
.GetNextToken());
150 wxConfigBase
*cfg
= wxConfigBase::Get();
152 wxDialog
dlg(m_PropFrame
, -1, _("Flags"),
153 wxPoint(cfg
->Read(_T("flagsdlg_x"), -1), cfg
->Read(_T("flagsdlg_y"), -1)),
154 wxSize(cfg
->Read(_T("flagsdlg_w"), 300), cfg
->Read(_T("flagsdlg_h"), 300)),
155 wxDEFAULT_DIALOG_STYLE
| wxRESIZE_BORDER
);
156 wxSizer
*sz
= new wxBoxSizer(wxVERTICAL
);
157 wxCheckListBox
*lbox
= new wxCheckListBox(&dlg
, -1);
158 sz
->Add(lbox
, 1, wxEXPAND
| wxALL
, 10);
159 wxSizer
*sz2
= new wxBoxSizer(wxHORIZONTAL
);
160 wxButton
*btnok
= new wxButton(&dlg
, wxID_OK
, _("OK"));
163 sz2
->Add(new wxButton(&dlg
, wxID_CANCEL
, _("Cancel")), 0, wxLEFT
, 10);
164 sz
->Add(sz2
, 0, wxALIGN_RIGHT
| wxRIGHT
| wxBOTTOM
, 10);
167 dlg
.SetAutoLayout(TRUE
);
169 for (i
= 0; i
< arr
.GetCount(); i
++)
170 lbox
->Append(arr
[i
]);
172 tkn
.SetString(txt
, _T("| "));
173 while (tkn
.HasMoreTokens())
175 t
= tkn
.GetNextToken();
177 if (j
!= wxNOT_FOUND
) lbox
->Check(j
);
181 if (dlg
.ShowModal() != wxID_OK
) return;
185 for (i
= 0; i
< arr
.GetCount(); i
++)
186 if (lbox
->IsChecked(i
))
187 txt
<< arr
[i
] << _T('|');
188 if (!txt
.IsEmpty()) txt
.RemoveLast();
190 m_TextCtrl
->SetValue(txt
);
193 cfg
->Write(_T("flagsdlg_x"), (long)dlg
.GetPosition().x
);
194 cfg
->Write(_T("flagsdlg_y"), (long)dlg
.GetPosition().y
);
195 cfg
->Write(_T("flagsdlg_w"), (long)dlg
.GetSize().x
);
196 cfg
->Write(_T("flagsdlg_h"), (long)dlg
.GetSize().y
);
206 wxString
PropEditCtrlFile::GetFileTypes()
208 return m_PropInfo
->MoreInfo
;
213 void PropEditCtrlFile::OnDetails()
215 wxString txt
= m_TextCtrl
->GetValue();
216 txt
= wxPathOnly(EditorFrame::Get()->GetFileName()) + _T("/") + txt
;
217 wxString name
= wxFileSelector(_("Choose file"),
219 wxFileNameFromPath(txt
),
222 wxOPEN
| wxFILE_MUST_EXIST
);
225 // compute relative path:
226 wxArrayString axrc
, afile
;
227 wxStringTokenizer tkn
;
228 tkn
.SetString(name
, _T("/\\"));
229 while (tkn
.HasMoreTokens()) afile
.Add(tkn
.GetNextToken());
230 tkn
.SetString(EditorFrame::Get()->GetFileName(), _T("/\\"));
231 while (tkn
.HasMoreTokens()) axrc
.Add(tkn
.GetNextToken());
233 if (afile
.GetCount() == 0 || axrc
.GetCount() == 0)
237 while (axrc
[0] == afile
[0])
244 for (i
= 0; i
< axrc
.GetCount()-1/*w/o filename*/; i
++) txt
<< _T("../");
245 for (i
= 0; i
< afile
.GetCount(); i
++) txt
<< afile
[i
] << _T("/");
249 m_TextCtrl
->SetValue(txt
);
255 wxString
PropEditCtrlImageFile::GetFileTypes()
257 return _("GIF files (*.gif)|*.gif|"
258 "JPEG files (*.jpg)|*.jpg|"
259 "PNG files (*.png)|*.png|"
260 "BMP files (*.bmp)|*.bmp|"