]> git.saurik.com Git - wxWidgets.git/blob - user/wxLayout/wxLayout.cpp
Setting of background colours is now correct.
[wxWidgets.git] / user / wxLayout / wxLayout.cpp
1 /*
2 * Program: wxLayout
3 *
4 * Author: Karsten Ballüder
5 *
6 * Copyright: (C) 1998, Karsten Ballüder <Ballueder@usa.net>
7 *
8 */
9
10 #ifdef __GNUG__
11 #pragma implementation "wxLayout.h"
12 #endif
13
14 #include "wxLayout.h"
15 #include "wx/textfile.h"
16
17
18 #include "Micon.xpm"
19
20 // for testing only:
21 #include <stdio.h>
22
23 //-----------------------------------------------------------------------------
24 // main program
25 //-----------------------------------------------------------------------------
26
27 IMPLEMENT_APP(MyApp)
28
29 //-----------------------------------------------------------------------------
30 // MyFrame
31 //-----------------------------------------------------------------------------
32
33 enum ids{ ID_EDIT = 1, ID_ADD_SAMPLE, ID_CLEAR, ID_PRINT, ID_DPRINT,
34 ID_WXLAYOUT_DEBUG, ID_QUIT, ID_CLICK, ID_HTML, ID_TEXT };
35
36
37 IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
38
39 BEGIN_EVENT_TABLE(MyFrame,wxFrame)
40 EVT_MENU (-1, MyFrame::OnCommand)
41 EVT_COMMAND (-1,-1, MyFrame::OnCommand)
42 EVT_CHAR ( wxLayoutWindow::OnChar )
43 END_EVENT_TABLE()
44
45 MyFrame::MyFrame(void) :
46 wxFrame( NULL, -1, "wxLayout", wxPoint(20,20), wxSize(600,360) )
47 {
48 CreateStatusBar( 1 );
49
50 SetStatusText( "wxLayout by Karsten Ballüder." );
51
52 wxMenu *file_menu = new wxMenu( "Menu 1" );
53 file_menu->Append( ID_CLEAR, "Clear");
54 file_menu->Append( ID_ADD_SAMPLE, "Example");
55 file_menu->Append( ID_EDIT, "Edit");
56 file_menu->Append( ID_WXLAYOUT_DEBUG, "Debug");
57 file_menu->Append( ID_PRINT, "Print");
58 file_menu->Append( ID_DPRINT, "Direct Print");
59 file_menu->Append( ID_TEXT, "Export Text");
60 file_menu->Append( ID_HTML, "Export HTML");
61 file_menu->Append( ID_QUIT, "Exit");
62
63 wxMenuBar *menu_bar = new wxMenuBar();
64 menu_bar->Append(file_menu, "File" );
65 menu_bar->Show( TRUE );
66
67 SetMenuBar( menu_bar );
68
69 m_lwin = new wxLayoutWindow(this);
70 m_lwin->SetEventId(ID_CLICK);
71 m_lwin->GetLayoutList().SetEditable(true);
72 m_lwin->Clear(wxROMAN,16,wxNORMAL,wxNORMAL, false);
73 m_lwin->SetFocus();
74 };
75
76 void
77 MyFrame::AddSampleText(wxLayoutList &llist)
78 {
79
80 llist.Insert("The quick brown fox jumps over the lazy dog.");
81 llist.LineBreak();
82 llist.Insert("Hello ");
83 llist.Insert(new wxLayoutObjectIcon(new wxIcon(Micon_xpm,-1,-1)));
84 llist.LineBreak();
85 llist.SetFontWeight(wxBOLD);
86 llist.Insert("World! ");
87 llist.SetFontWeight(wxNORMAL);
88 llist.Insert("The quick brown fox jumps...");
89 llist.LineBreak();
90
91 llist.Insert("over the lazy dog.");
92 llist.SetFont(-1,-1,-1,-1,true);
93 llist.Insert("underlined");
94 llist.SetFont(-1,-1,-1,-1,false);
95 llist.SetFont(wxROMAN);
96 llist.Insert("This is ");
97 llist.SetFont(-1,-1,-1,wxBOLD); llist.Insert("BOLD "); llist.SetFont(-1,-1,-1,wxNORMAL);
98 llist.Insert("and ");
99 llist.SetFont(-1,-1,wxITALIC);
100 llist.Insert("italics ");
101 llist.SetFont(-1,-1,wxNORMAL);
102 llist.LineBreak();
103
104 llist.Insert("and ");
105 llist.SetFont(-1,-1,wxSLANT);
106 llist.Insert("slanted");
107 llist.SetFont(-1,-1,wxNORMAL);
108 llist.Insert(" text.");
109 llist.LineBreak();
110
111 llist.Insert("and ");
112 llist.SetFont(-1,-1,-1,-1,-1,"blue");
113 llist.Insert("blue");
114 llist.SetFont(-1,-1,-1,-1,-1,"black");
115 llist.Insert(" and ");
116 llist.SetFont(-1,-1,-1,-1,-1,"green","black");
117 llist.Insert("green on black");
118 llist.SetFont(-1,-1,-1,-1,-1,"black","white");
119 llist.Insert(" text.");
120 llist.LineBreak();
121
122 llist.SetFont(-1,-1,wxSLANT);
123 llist.Insert("Slanted");
124 llist.SetFont(-1,-1,wxNORMAL);
125 llist.Insert(" and normal text and ");
126 llist.SetFont(-1,-1,wxSLANT);
127 llist.Insert("slanted");
128 llist.SetFont(-1,-1,wxNORMAL);
129 llist.Insert(" again.");
130 llist.LineBreak();
131
132 // add some more text for testing:
133 llist.Insert("And here the source for the test program:");
134 llist.LineBreak();
135 llist.SetFont(wxTELETYPE,16);
136 char buffer[1024];
137 FILE *in = fopen("wxLayout.cpp","r");
138 if(in)
139 {
140 for(;;)
141 {
142 fgets(buffer,1024,in);
143 if(feof(in))
144 break;
145 llist.Insert(buffer);
146 llist.LineBreak();
147 }
148 }
149
150 m_lwin->Refresh();
151 m_lwin->UpdateScrollbars();
152 }
153
154 void
155 MyFrame::Clear(void)
156 {
157 m_lwin->Erase();
158 m_lwin->UpdateScrollbars();
159 }
160
161 /* test the editing */
162 void MyFrame::Edit(void)
163 {
164 wxLayoutList & llist = m_lwin->GetLayoutList();
165 m_lwin->SetEventId(ID_CLICK);
166
167 llist.MoveCursor(0);
168 llist.MoveCursor(5);
169 llist.MoveCursor(0,2);
170 llist.Delete(2);
171 llist.MoveCursor(2);
172 llist.Insert("not all so ");
173 llist.LineBreak();
174 m_lwin->Refresh();
175 }
176
177 void MyFrame::OnCommand( wxCommandEvent &event )
178 {
179 cerr << "id:" << event.GetId() << endl;
180 switch (event.GetId())
181 {
182 case ID_QUIT:
183 Close( TRUE );
184 break;
185 case ID_PRINT:
186 m_lwin->Print();
187 break;
188 case ID_DPRINT:
189 {
190 wxLayoutList llist;
191 AddSampleText(llist);
192 wxPostScriptDC dc("layout.ps",true,this);
193 if (dc.Ok() && dc.StartDoc((char *)_("Printing message...")))
194 {
195 //dc.SetUserScale(1.0, 1.0);
196 llist.Draw(dc); //,false,wxPoint(0,0),true);
197 dc.EndDoc();
198 }
199 }
200 break;
201 case ID_EDIT:
202 Edit();
203 break;
204 case ID_ADD_SAMPLE:
205 AddSampleText(m_lwin->GetLayoutList());
206 break;
207 case ID_CLEAR:
208 Clear();
209 break;
210 case ID_WXLAYOUT_DEBUG:
211 m_lwin->GetLayoutList().Debug();
212 break;
213 case ID_CLICK:
214 cerr << "Received click event." << endl;
215 break;
216 case ID_HTML:
217 {
218 wxLayoutExportObject *export;
219 wxLayoutList::iterator i = m_lwin->GetLayoutList().begin();
220
221 while((export = wxLayoutExport(m_lwin->GetLayoutList(),
222 i,WXLO_EXPORT_AS_HTML)) != NULL)
223 {
224 if(export->type == WXLO_EXPORT_HTML)
225 cout << *(export->content.text);
226 else
227 cout << "<!--UNKNOWN OBJECT>";
228 delete export;
229 }
230 }
231 break;
232 case ID_TEXT:
233 {
234 wxLayoutExportObject *export;
235 wxLayoutList::iterator i = m_lwin->GetLayoutList().begin();
236
237 while((export = wxLayoutExport(m_lwin->GetLayoutList(),
238 i,WXLO_EXPORT_AS_TEXT)) != NULL)
239 {
240 if(export->type == WXLO_EXPORT_TEXT)
241 cout << *(export->content.text);
242 else
243 cout << "<!--UNKNOWN OBJECT>";
244 delete export;
245 }
246 }
247 break;
248 }
249 };
250
251
252 //-----------------------------------------------------------------------------
253 // MyApp
254 //-----------------------------------------------------------------------------
255
256 MyApp::MyApp(void) :
257 wxApp( )
258 {
259 };
260
261 bool MyApp::OnInit(void)
262 {
263 wxFrame *frame = new MyFrame();
264 frame->Show( TRUE );
265 wxSetAFMPath("/usr/local/src/wxWindows/misc/afm/");
266 return TRUE;
267 };
268
269
270
271
272