]>
Commit | Line | Data |
---|---|---|
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" | |
23 | #include "wx/wx.h" | |
24 | #include "wx/dialog.h" | |
25 | #include "wx/checklst.h" | |
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" | |
32 | #include "wx/config.h" | |
33 | ||
34 | ||
35 | ||
36 | wxWindow* PropEditCtrlFont::CreateEditCtrl() | |
37 | { | |
38 | PropEditCtrlTxt::CreateEditCtrl(); | |
39 | m_TextCtrl->Disable(); | |
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); | |
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); | |
55 | return ti; | |
56 | } | |
57 | ||
58 | ||
59 | ||
60 | ||
61 | ||
62 | ||
63 | BEGIN_EVENT_TABLE(PropEditCtrlChoice, PropEditCtrl) | |
64 | EVT_CHOICE(wxID_ANY, PropEditCtrlChoice::OnChoice) | |
65 | END_EVENT_TABLE() | |
66 | ||
67 | wxWindow* PropEditCtrlChoice::CreateEditCtrl() | |
68 | { | |
69 | m_Choice = new wxChoice(this, wxID_ANY); | |
70 | ||
71 | return m_Choice; | |
72 | } | |
73 | ||
74 | ||
75 | ||
76 | void PropEditCtrlChoice::ReadValue() | |
77 | { | |
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); | |
85 | } | |
86 | ||
87 | ||
88 | ||
89 | void PropEditCtrlChoice::WriteValue() | |
90 | { | |
91 | XmlWriteValue(GetNode(), m_PropInfo->Name, | |
92 | m_Choice->GetStringSelection()); | |
93 | } | |
94 | ||
95 | ||
96 | ||
97 | void PropEditCtrlChoice::OnChoice(wxCommandEvent& WXUNUSED(event)) | |
98 | { | |
99 | if (CanSave()) | |
100 | { | |
101 | WriteValue(); | |
102 | EditorFrame::Get()->NotifyChanged(CHANGED_PROPS); | |
103 | } | |
104 | } | |
105 | ||
106 | ||
107 | ||
108 | ||
109 | ||
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[0u] == _T('#') && | |
117 | wxSscanf(txt.c_str(), _T("#%lX"), &tmp) == 1) | |
118 | clr = wxColour((tmp & 0xFF0000) >> 16, | |
119 | (tmp & 0x00FF00) >> 8, | |
120 | (tmp & 0x0000FF)); | |
121 | ||
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 | ||
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, wxID_ANY, _("Flags"), | |
154 | wxPoint(cfg->Read(_T("flagsdlg_x"), wxDefaultCoord), cfg->Read(_T("flagsdlg_y"), wxDefaultCoord)), | |
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, wxID_ANY); | |
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.Layout(); | |
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 | ||
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 | wxEmptyString, | |
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.RemoveAt(0u); | |
241 | axrc.RemoveAt(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|JPEG files (*.jpg)|*.jpg|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp|All files (*)|*"); | |
259 | } |