]>
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" | |
c74caa09 | 21 | #include "wx/xml/xml.h" |
12d9e308 | 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 | ||
859e5b17 | 97 | void PropEditCtrlChoice::OnChoice(wxCommandEvent& WXUNUSED(event)) |
12d9e308 | 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 | ||
0d832cf7 | 116 | if (txt.Length() == 7 && txt[0u] == _T('#') && |
12d9e308 VS |
117 | wxSscanf(txt.c_str(), _T("#%lX"), &tmp) == 1) |
118 | clr = wxColour((tmp & 0xFF0000) >> 16, | |
119 | (tmp & 0x00FF00) >> 8, | |
120 | (tmp & 0x0000FF)); | |
6267a331 | 121 | |
12d9e308 VS |
122 | clr = wxGetColourFromUser(NULL, clr); |
123 | if (clr.Ok()) | |
124 | { | |
125 | txt.Printf(_T("#%02X%02X%02X"), clr.Red(), clr.Green(), clr.Blue()); | |
126 | m_TextCtrl->SetValue(txt); | |
127 | WriteValue(); | |
128 | } | |
129 | } | |
130 | ||
131 | ||
a62da4c5 VS |
132 | |
133 | ||
134 | ||
135 | ||
136 | ||
137 | ||
138 | ||
139 | ||
140 | void PropEditCtrlFlags::OnDetails() | |
141 | { | |
142 | wxString t,txt = m_TextCtrl->GetValue(); | |
143 | wxArrayString arr; | |
144 | size_t i; | |
145 | int j; | |
146 | ||
147 | wxStringTokenizer tkn(m_PropInfo->MoreInfo, _T(",")); | |
148 | while (tkn.HasMoreTokens()) | |
149 | arr.Add(tkn.GetNextToken()); | |
150 | ||
151 | wxConfigBase *cfg = wxConfigBase::Get(); | |
152 | ||
153 | wxDialog dlg(m_PropFrame, -1, _("Flags"), | |
154 | wxPoint(cfg->Read(_T("flagsdlg_x"), -1), cfg->Read(_T("flagsdlg_y"), -1)), | |
155 | wxSize(cfg->Read(_T("flagsdlg_w"), 300), cfg->Read(_T("flagsdlg_h"), 300)), | |
156 | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); | |
157 | wxSizer *sz = new wxBoxSizer(wxVERTICAL); | |
158 | wxCheckListBox *lbox = new wxCheckListBox(&dlg, -1); | |
159 | sz->Add(lbox, 1, wxEXPAND | wxALL, 10); | |
160 | wxSizer *sz2 = new wxBoxSizer(wxHORIZONTAL); | |
161 | wxButton *btnok = new wxButton(&dlg, wxID_OK, _("OK")); | |
162 | btnok->SetDefault(); | |
163 | sz2->Add(btnok); | |
164 | sz2->Add(new wxButton(&dlg, wxID_CANCEL, _("Cancel")), 0, wxLEFT, 10); | |
165 | sz->Add(sz2, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, 10); | |
166 | ||
167 | dlg.SetSizer(sz); | |
168 | dlg.SetAutoLayout(TRUE); | |
aaa2b34e | 169 | dlg.Layout(); |
a62da4c5 VS |
170 | |
171 | for (i = 0; i < arr.GetCount(); i++) | |
172 | lbox->Append(arr[i]); | |
173 | ||
174 | tkn.SetString(txt, _T("| ")); | |
175 | while (tkn.HasMoreTokens()) | |
176 | { | |
177 | t = tkn.GetNextToken(); | |
178 | j = arr.Index(t); | |
179 | if (j != wxNOT_FOUND) lbox->Check(j); | |
180 | } | |
181 | ||
182 | ||
183 | if (dlg.ShowModal() != wxID_OK) return; | |
184 | ||
185 | txt.Empty(); | |
186 | ||
187 | for (i = 0; i < arr.GetCount(); i++) | |
188 | if (lbox->IsChecked(i)) | |
189 | txt << arr[i] << _T('|'); | |
190 | if (!txt.IsEmpty()) txt.RemoveLast(); | |
191 | ||
192 | m_TextCtrl->SetValue(txt); | |
193 | WriteValue(); | |
194 | ||
195 | cfg->Write(_T("flagsdlg_x"), (long)dlg.GetPosition().x); | |
196 | cfg->Write(_T("flagsdlg_y"), (long)dlg.GetPosition().y); | |
197 | cfg->Write(_T("flagsdlg_w"), (long)dlg.GetSize().x); | |
198 | cfg->Write(_T("flagsdlg_h"), (long)dlg.GetSize().y); | |
199 | } | |
200 | ||
201 | ||
26607f41 VS |
202 | |
203 | ||
204 | ||
205 | ||
206 | ||
207 | ||
208 | wxString PropEditCtrlFile::GetFileTypes() | |
209 | { | |
210 | return m_PropInfo->MoreInfo; | |
211 | } | |
212 | ||
213 | ||
214 | ||
215 | void PropEditCtrlFile::OnDetails() | |
216 | { | |
217 | wxString txt = m_TextCtrl->GetValue(); | |
218 | txt = wxPathOnly(EditorFrame::Get()->GetFileName()) + _T("/") + txt; | |
219 | wxString name = wxFileSelector(_("Choose file"), | |
220 | wxPathOnly(txt), | |
221 | wxFileNameFromPath(txt), | |
222 | _T(""), | |
223 | GetFileTypes(), | |
224 | wxOPEN | wxFILE_MUST_EXIST); | |
225 | if (!name) return; | |
226 | ||
227 | // compute relative path: | |
228 | wxArrayString axrc, afile; | |
229 | wxStringTokenizer tkn; | |
230 | tkn.SetString(name, _T("/\\")); | |
231 | while (tkn.HasMoreTokens()) afile.Add(tkn.GetNextToken()); | |
232 | tkn.SetString(EditorFrame::Get()->GetFileName(), _T("/\\")); | |
233 | while (tkn.HasMoreTokens()) axrc.Add(tkn.GetNextToken()); | |
234 | ||
235 | if (afile.GetCount() == 0 || axrc.GetCount() == 0) | |
236 | txt = name; | |
237 | else | |
238 | { | |
239 | while (axrc[0] == afile[0]) | |
240 | { | |
ab958adb GD |
241 | afile.RemoveAt(0u); |
242 | axrc.RemoveAt(0u); | |
26607f41 VS |
243 | } |
244 | size_t i; | |
245 | txt.Empty(); | |
246 | for (i = 0; i < axrc.GetCount()-1/*w/o filename*/; i++) txt << _T("../"); | |
247 | for (i = 0; i < afile.GetCount(); i++) txt << afile[i] << _T("/"); | |
248 | txt.RemoveLast(); | |
249 | } | |
250 | ||
251 | m_TextCtrl->SetValue(txt); | |
252 | WriteValue(); | |
253 | } | |
254 | ||
255 | ||
256 | ||
257 | wxString PropEditCtrlImageFile::GetFileTypes() | |
258 | { | |
19d0f58d | 259 | return _("GIF files (*.gif)|*.gif|JPEG files (*.jpg)|*.jpg|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp|All files (*)|*"); |
26607f41 | 260 | } |