]>
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->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); | |
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(-1, PropEditCtrlChoice::OnChoice) | |
65 | END_EVENT_TABLE() | |
66 | ||
67 | wxWindow* PropEditCtrlChoice::CreateEditCtrl() | |
68 | { | |
69 | m_Choice = new wxChoice(this, -1); | |
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& 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[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 | ||
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); | |
168 | ||
169 | for (i = 0; i < arr.GetCount(); i++) | |
170 | lbox->Append(arr[i]); | |
171 | ||
172 | tkn.SetString(txt, _T("| ")); | |
173 | while (tkn.HasMoreTokens()) | |
174 | { | |
175 | t = tkn.GetNextToken(); | |
176 | j = arr.Index(t); | |
177 | if (j != wxNOT_FOUND) lbox->Check(j); | |
178 | } | |
179 | ||
180 | ||
181 | if (dlg.ShowModal() != wxID_OK) return; | |
182 | ||
183 | txt.Empty(); | |
184 | ||
185 | for (i = 0; i < arr.GetCount(); i++) | |
186 | if (lbox->IsChecked(i)) | |
187 | txt << arr[i] << _T('|'); | |
188 | if (!txt.IsEmpty()) txt.RemoveLast(); | |
189 | ||
190 | m_TextCtrl->SetValue(txt); | |
191 | WriteValue(); | |
192 | ||
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); | |
197 | } | |
198 | ||
199 | ||
200 | ||
201 | ||
202 | ||
203 | ||
204 | ||
205 | ||
206 | wxString PropEditCtrlFile::GetFileTypes() | |
207 | { | |
208 | return m_PropInfo->MoreInfo; | |
209 | } | |
210 | ||
211 | ||
212 | ||
213 | void PropEditCtrlFile::OnDetails() | |
214 | { | |
215 | wxString txt = m_TextCtrl->GetValue(); | |
216 | txt = wxPathOnly(EditorFrame::Get()->GetFileName()) + _T("/") + txt; | |
217 | wxString name = wxFileSelector(_("Choose file"), | |
218 | wxPathOnly(txt), | |
219 | wxFileNameFromPath(txt), | |
220 | _T(""), | |
221 | GetFileTypes(), | |
222 | wxOPEN | wxFILE_MUST_EXIST); | |
223 | if (!name) return; | |
224 | ||
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()); | |
232 | ||
233 | if (afile.GetCount() == 0 || axrc.GetCount() == 0) | |
234 | txt = name; | |
235 | else | |
236 | { | |
237 | while (axrc[0] == afile[0]) | |
238 | { | |
239 | afile.Remove(0u); | |
240 | axrc.Remove(0u); | |
241 | } | |
242 | size_t i; | |
243 | txt.Empty(); | |
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("/"); | |
246 | txt.RemoveLast(); | |
247 | } | |
248 | ||
249 | m_TextCtrl->SetValue(txt); | |
250 | WriteValue(); | |
251 | } | |
252 | ||
253 | ||
254 | ||
255 | wxString PropEditCtrlImageFile::GetFileTypes() | |
256 | { | |
257 | return _("GIF files (*.gif)|*.gif|" | |
258 | "JPEG files (*.jpg)|*.jpg|" | |
259 | "PNG files (*.png)|*.png|" | |
260 | "BMP files (*.bmp)|*.bmp|" | |
261 | "All files (*)|*"); | |
262 | } |