]>
Commit | Line | Data |
---|---|---|
12d9e308 VS |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Author: Vaclav Slavik | |
3 | // Created: 2000/05/05 | |
4 | // RCS-ID: $Id$ | |
5 | // Copyright: (c) 2000 Vaclav Slavik | |
6 | // Licence: wxWindows licence | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | #ifdef __GNUG__ | |
10 | #pragma implementation "pe_adv.h" | |
11 | #endif | |
12 | ||
13 | // For compilers that support precompilation, includes "wx/wx.h". | |
14 | #include "wx/wxprec.h" | |
15 | ||
16 | #ifdef __BORLANDC__ | |
17 | #pragma hdrstop | |
18 | #endif | |
19 | ||
20 | #include "wx/wx.h" | |
21 | #include "wx/xml/xml.h" | |
22 | #include "wx/tokenzr.h" | |
a62da4c5 VS |
23 | #include "wx/wx.h" |
24 | #include "wx/dialog.h" | |
25 | #include "wx/checklst.h" | |
12d9e308 VS |
26 | #include "pe_basic.h" |
27 | #include "pe_adv.h" | |
28 | #include "xmlhelpr.h" | |
29 | #include "editor.h" | |
30 | #include "preview.h" | |
31 | #include "wx/colordlg.h" | |
a62da4c5 | 32 | #include "wx/config.h" |
12d9e308 VS |
33 | |
34 | ||
35 | ||
36 | wxWindow* PropEditCtrlFont::CreateEditCtrl() | |
37 | { | |
38 | PropEditCtrlTxt::CreateEditCtrl(); | |
39 | m_TextCtrl->Enable(FALSE); | |
40 | return m_TextCtrl; | |
41 | } | |
42 | ||
43 | ||
44 | ||
45 | wxTreeItemId PropEditCtrlFont::CreateTreeEntry(wxTreeItemId parent, const PropertyInfo& pinfo) | |
46 | { | |
47 | wxTreeItemId ti = PropEditCtrlTxt::CreateTreeEntry(parent, pinfo); | |
a62da4c5 VS |
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); | |
12d9e308 VS |
55 | return ti; |
56 | } | |
57 | ||
58 | ||
59 | ||
60 | ||
a62da4c5 VS |
61 | |
62 | ||
12d9e308 VS |
63 | BEGIN_EVENT_TABLE(PropEditCtrlChoice, PropEditCtrl) |
64 | EVT_CHOICE(-1, PropEditCtrlChoice::OnChoice) | |
65 | END_EVENT_TABLE() | |
66 | ||
67 | wxWindow* PropEditCtrlChoice::CreateEditCtrl() | |
68 | { | |
69 | m_Choice = new wxChoice(this, -1); | |
a62da4c5 | 70 | |
12d9e308 VS |
71 | return m_Choice; |
72 | } | |
73 | ||
74 | ||
75 | ||
76 | void PropEditCtrlChoice::ReadValue() | |
77 | { | |
a62da4c5 VS |
78 | wxStringTokenizer tkn(m_PropInfo->MoreInfo, _T(",")); |
79 | m_Choice->Clear(); | |
80 | while (tkn.HasMoreTokens()) | |
81 | m_Choice->Append(tkn.GetNextToken()); | |
82 | ||
83 | wxString sel = XmlReadValue(GetNode(), m_PropInfo->Name); | |
84 | if (!!sel) m_Choice->SetStringSelection(sel); | |
12d9e308 VS |
85 | } |
86 | ||
87 | ||
88 | ||
89 | void PropEditCtrlChoice::WriteValue() | |
90 | { | |
a62da4c5 VS |
91 | XmlWriteValue(GetNode(), m_PropInfo->Name, |
92 | m_Choice->GetStringSelection()); | |
12d9e308 VS |
93 | } |
94 | ||
95 | ||
96 | ||
97 | void PropEditCtrlChoice::OnChoice(wxCommandEvent& event) | |
98 | { | |
26607f41 VS |
99 | if (CanSave()) |
100 | { | |
101 | WriteValue(); | |
102 | EditorFrame::Get()->NotifyChanged(CHANGED_PROPS); | |
103 | } | |
12d9e308 VS |
104 | } |
105 | ||
106 | ||
107 | ||
a62da4c5 VS |
108 | |
109 | ||
12d9e308 VS |
110 | void PropEditCtrlColor::OnDetails() |
111 | { | |
112 | wxColour clr; | |
113 | wxString txt = m_TextCtrl->GetValue(); | |
114 | long unsigned tmp; | |
115 | ||
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, | |
120 | (tmp & 0x0000FF)); | |
121 | clr = wxGetColourFromUser(NULL, clr); | |
122 | if (clr.Ok()) | |
123 | { | |
124 | txt.Printf(_T("#%02X%02X%02X"), clr.Red(), clr.Green(), clr.Blue()); | |
125 | m_TextCtrl->SetValue(txt); | |
126 | WriteValue(); | |
127 | } | |
128 | } | |
129 | ||
130 | ||
a62da4c5 VS |
131 | |
132 | ||
133 | ||
134 | ||
135 | ||
136 | ||
137 | ||
138 | ||
139 | void PropEditCtrlFlags::OnDetails() | |
140 | { | |
141 | wxString t,txt = m_TextCtrl->GetValue(); | |
142 | wxArrayString arr; | |
143 | size_t i; | |
144 | int j; | |
145 | ||
146 | wxStringTokenizer tkn(m_PropInfo->MoreInfo, _T(",")); | |
147 | while (tkn.HasMoreTokens()) | |
148 | arr.Add(tkn.GetNextToken()); | |
149 | ||
150 | wxConfigBase *cfg = wxConfigBase::Get(); | |
151 | ||
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")); | |
161 | btnok->SetDefault(); | |
162 | sz2->Add(btnok); | |
163 | sz2->Add(new wxButton(&dlg, wxID_CANCEL, _("Cancel")), 0, wxLEFT, 10); | |
164 | sz->Add(sz2, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, 10); | |
165 | ||
166 | dlg.SetSizer(sz); | |
167 | dlg.SetAutoLayout(TRUE); | |
aaa2b34e | 168 | dlg.Layout(); |
a62da4c5 VS |
169 | |
170 | for (i = 0; i < arr.GetCount(); i++) | |
171 | lbox->Append(arr[i]); | |
172 | ||
173 | tkn.SetString(txt, _T("| ")); | |
174 | while (tkn.HasMoreTokens()) | |
175 | { | |
176 | t = tkn.GetNextToken(); | |
177 | j = arr.Index(t); | |
178 | if (j != wxNOT_FOUND) lbox->Check(j); | |
179 | } | |
180 | ||
181 | ||
182 | if (dlg.ShowModal() != wxID_OK) return; | |
183 | ||
184 | txt.Empty(); | |
185 | ||
186 | for (i = 0; i < arr.GetCount(); i++) | |
187 | if (lbox->IsChecked(i)) | |
188 | txt << arr[i] << _T('|'); | |
189 | if (!txt.IsEmpty()) txt.RemoveLast(); | |
190 | ||
191 | m_TextCtrl->SetValue(txt); | |
192 | WriteValue(); | |
193 | ||
194 | cfg->Write(_T("flagsdlg_x"), (long)dlg.GetPosition().x); | |
195 | cfg->Write(_T("flagsdlg_y"), (long)dlg.GetPosition().y); | |
196 | cfg->Write(_T("flagsdlg_w"), (long)dlg.GetSize().x); | |
197 | cfg->Write(_T("flagsdlg_h"), (long)dlg.GetSize().y); | |
198 | } | |
199 | ||
200 | ||
26607f41 VS |
201 | |
202 | ||
203 | ||
204 | ||
205 | ||
206 | ||
207 | wxString PropEditCtrlFile::GetFileTypes() | |
208 | { | |
209 | return m_PropInfo->MoreInfo; | |
210 | } | |
211 | ||
212 | ||
213 | ||
214 | void PropEditCtrlFile::OnDetails() | |
215 | { | |
216 | wxString txt = m_TextCtrl->GetValue(); | |
217 | txt = wxPathOnly(EditorFrame::Get()->GetFileName()) + _T("/") + txt; | |
218 | wxString name = wxFileSelector(_("Choose file"), | |
219 | wxPathOnly(txt), | |
220 | wxFileNameFromPath(txt), | |
221 | _T(""), | |
222 | GetFileTypes(), | |
223 | wxOPEN | wxFILE_MUST_EXIST); | |
224 | if (!name) return; | |
225 | ||
226 | // compute relative path: | |
227 | wxArrayString axrc, afile; | |
228 | wxStringTokenizer tkn; | |
229 | tkn.SetString(name, _T("/\\")); | |
230 | while (tkn.HasMoreTokens()) afile.Add(tkn.GetNextToken()); | |
231 | tkn.SetString(EditorFrame::Get()->GetFileName(), _T("/\\")); | |
232 | while (tkn.HasMoreTokens()) axrc.Add(tkn.GetNextToken()); | |
233 | ||
234 | if (afile.GetCount() == 0 || axrc.GetCount() == 0) | |
235 | txt = name; | |
236 | else | |
237 | { | |
238 | while (axrc[0] == afile[0]) | |
239 | { | |
240 | afile.Remove(0u); | |
241 | axrc.Remove(0u); | |
242 | } | |
243 | size_t i; | |
244 | txt.Empty(); | |
245 | for (i = 0; i < axrc.GetCount()-1/*w/o filename*/; i++) txt << _T("../"); | |
246 | for (i = 0; i < afile.GetCount(); i++) txt << afile[i] << _T("/"); | |
247 | txt.RemoveLast(); | |
248 | } | |
249 | ||
250 | m_TextCtrl->SetValue(txt); | |
251 | WriteValue(); | |
252 | } | |
253 | ||
254 | ||
255 | ||
256 | wxString PropEditCtrlImageFile::GetFileTypes() | |
257 | { | |
258 | return _("GIF files (*.gif)|*.gif|" | |
259 | "JPEG files (*.jpg)|*.jpg|" | |
260 | "PNG files (*.png)|*.png|" | |
261 | "BMP files (*.bmp)|*.bmp|" | |
262 | "All files (*)|*"); | |
263 | } |