]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/richtext/richtext.cpp
wxCairoContext doesn't need to know about wxPizza
[wxWidgets.git] / samples / richtext / richtext.cpp
index 08d7db7605185fe775218eafc4d0a454845b38eb..23e50e2563e5538e70c827cb634934e27412061e 100644 (file)
@@ -333,6 +333,9 @@ IMPLEMENT_APP(MyApp)
 // 'Main program' equivalent: the program execution "starts" here
 bool MyApp::OnInit()
 {
+    if ( !wxApp::OnInit() )
+        return false;
+
 #if wxUSE_HELP
     wxHelpProvider::Set(new wxSimpleHelpProvider);
 #endif
@@ -577,8 +580,6 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
     editMenu->Append(wxID_COPY, _("&Copy\tCtrl+C"));
     editMenu->Append(wxID_PASTE, _("&Paste\tCtrl+V"));
 
-    editMenu->Append(wxID_CLEAR, _("&Delete\tDel"));
-
     editMenu->AppendSeparator();
     editMenu->Append(wxID_SELECTALL, _("Select A&ll\tCtrl+A"));
 #if 0
@@ -681,13 +682,13 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
 
     toolBar->Realize();
 
-    wxSplitterWindow* splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, GetClientSize(), wxSP_NO_XP_THEME|wxSP_3D|wxSP_LIVE_UPDATE);
+    wxSplitterWindow* splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, GetClientSize(), wxSP_LIVE_UPDATE);
 
     wxFont textFont = wxFont(12, wxROMAN, wxNORMAL, wxNORMAL);
     wxFont boldFont = wxFont(12, wxROMAN, wxNORMAL, wxBOLD);
     wxFont italicFont = wxFont(12, wxROMAN, wxITALIC, wxNORMAL);
 
-    m_richTextCtrl = new wxRichTextCtrl(splitter, ID_RICHTEXT_CTRL, wxEmptyString, wxDefaultPosition, wxSize(200, 200), wxVSCROLL|wxHSCROLL|wxNO_BORDER|wxWANTS_CHARS);
+    m_richTextCtrl = new wxRichTextCtrl(splitter, ID_RICHTEXT_CTRL, wxEmptyString, wxDefaultPosition, wxSize(200, 200), wxVSCROLL|wxHSCROLL|wxWANTS_CHARS);
     wxFont font(12, wxROMAN, wxNORMAL, wxNORMAL);
 
     m_richTextCtrl->SetFont(font);
@@ -726,7 +727,10 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
     r.BeginBold();
 
     r.BeginFontSize(14);
-    r.WriteText(wxT("Welcome to wxRichTextCtrl, a wxWidgets control for editing and presenting styled text and images"));
+
+    wxString lineBreak = (wxChar) 29;
+
+    r.WriteText(wxString(wxT("Welcome to wxRichTextCtrl, a wxWidgets control")) + lineBreak + wxT("for editing and presenting styled text and images"));
     r.EndFontSize();
     r.Newline();
 
@@ -735,8 +739,8 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
     r.EndItalic();
 
     r.EndBold();
-
     r.Newline();
+
     r.WriteImage(wxBitmap(zebra_xpm));
 
     r.EndAlignment();
@@ -745,6 +749,7 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
     r.Newline();
 
     r.WriteText(wxT("What can you do with this thing? "));
+
     r.WriteImage(wxBitmap(smiley_xpm));
     r.WriteText(wxT(" Well, you can change text "));
 
@@ -752,9 +757,12 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
     r.WriteText(wxT("colour, like this red bit."));
     r.EndTextColour();
 
-    r.BeginTextColour(wxColour(0, 0, 255));
-    r.WriteText(wxT(" And this blue bit."));
-    r.EndTextColour();
+    wxRichTextAttr backgroundColourAttr;
+    backgroundColourAttr.SetBackgroundColour(*wxGREEN);
+    backgroundColourAttr.SetTextColour(wxColour(0, 0, 255));
+    r.BeginStyle(backgroundColourAttr);
+    r.WriteText(wxT(" And this blue on green bit."));
+    r.EndStyle();
 
     r.WriteText(wxT(" Naturally you can make things "));
     r.BeginBold();
@@ -832,7 +840,7 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
     tabs.Add(600);
     tabs.Add(800);
     tabs.Add(1000);
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_TABS);
     attr.SetTabs(tabs);
     r.SetDefaultStyle(attr);
@@ -1100,7 +1108,7 @@ void MyFrame::OnFont(wxCommandEvent& WXUNUSED(event))
 
     if (formatDlg.ShowModal() == wxID_OK)
     {
-        formatDlg.ApplyStyle(m_richTextCtrl, range);
+        formatDlg.ApplyStyle(m_richTextCtrl, range, wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE|wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY);
     }
 
     // Old method using wxFontDialog
@@ -1176,7 +1184,7 @@ void MyFrame::OnUpdateFormat(wxUpdateUIEvent& event)
 
 void MyFrame::OnIndentMore(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_LEFT_INDENT);
 
     if (m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr))
@@ -1185,7 +1193,6 @@ void MyFrame::OnIndentMore(wxCommandEvent& WXUNUSED(event))
         if (m_richTextCtrl->HasSelection())
             range = m_richTextCtrl->GetSelectionRange();
 
-        wxFontData fontData;
         attr.SetLeftIndent(attr.GetLeftIndent() + 100);
 
         attr.SetFlags(wxTEXT_ATTR_LEFT_INDENT);
@@ -1195,7 +1202,7 @@ void MyFrame::OnIndentMore(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnIndentLess(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_LEFT_INDENT);
 
     if (m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr))
@@ -1204,10 +1211,9 @@ void MyFrame::OnIndentLess(wxCommandEvent& WXUNUSED(event))
         if (m_richTextCtrl->HasSelection())
             range = m_richTextCtrl->GetSelectionRange();
 
-        if (attr.GetLeftIndent() >= 100)
+        if (attr.GetLeftIndent() > 0)
         {
-            wxFontData fontData;
-            attr.SetLeftIndent(attr.GetLeftIndent() - 100);
+            attr.SetLeftIndent(wxMax(0, attr.GetLeftIndent() - 100));
 
             m_richTextCtrl->SetStyle(range, attr);
         }
@@ -1216,7 +1222,7 @@ void MyFrame::OnIndentLess(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnLineSpacingHalf(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_LINE_SPACING);
 
     if (m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr))
@@ -1225,7 +1231,6 @@ void MyFrame::OnLineSpacingHalf(wxCommandEvent& WXUNUSED(event))
         if (m_richTextCtrl->HasSelection())
             range = m_richTextCtrl->GetSelectionRange();
 
-        wxFontData fontData;
         attr.SetFlags(wxTEXT_ATTR_LINE_SPACING);
         attr.SetLineSpacing(15);
 
@@ -1235,7 +1240,7 @@ void MyFrame::OnLineSpacingHalf(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnLineSpacingDouble(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_LINE_SPACING);
 
     if (m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr))
@@ -1244,7 +1249,6 @@ void MyFrame::OnLineSpacingDouble(wxCommandEvent& WXUNUSED(event))
         if (m_richTextCtrl->HasSelection())
             range = m_richTextCtrl->GetSelectionRange();
 
-        wxFontData fontData;
         attr.SetFlags(wxTEXT_ATTR_LINE_SPACING);
         attr.SetLineSpacing(20);
 
@@ -1254,7 +1258,7 @@ void MyFrame::OnLineSpacingDouble(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnLineSpacingSingle(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_LINE_SPACING);
 
     if (m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr))
@@ -1263,7 +1267,6 @@ void MyFrame::OnLineSpacingSingle(wxCommandEvent& WXUNUSED(event))
         if (m_richTextCtrl->HasSelection())
             range = m_richTextCtrl->GetSelectionRange();
 
-        wxFontData fontData;
         attr.SetFlags(wxTEXT_ATTR_LINE_SPACING);
         attr.SetLineSpacing(0); // Can also use 10
 
@@ -1273,7 +1276,7 @@ void MyFrame::OnLineSpacingSingle(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnParagraphSpacingMore(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_PARA_SPACING_AFTER);
 
     if (m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr))
@@ -1282,7 +1285,6 @@ void MyFrame::OnParagraphSpacingMore(wxCommandEvent& WXUNUSED(event))
         if (m_richTextCtrl->HasSelection())
             range = m_richTextCtrl->GetSelectionRange();
 
-        wxFontData fontData;
         attr.SetParagraphSpacingAfter(attr.GetParagraphSpacingAfter() + 20);
 
         attr.SetFlags(wxTEXT_ATTR_PARA_SPACING_AFTER);
@@ -1292,7 +1294,7 @@ void MyFrame::OnParagraphSpacingMore(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnParagraphSpacingLess(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_PARA_SPACING_AFTER);
 
     if (m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr))
@@ -1303,7 +1305,6 @@ void MyFrame::OnParagraphSpacingLess(wxCommandEvent& WXUNUSED(event))
 
         if (attr.GetParagraphSpacingAfter() >= 20)
         {
-            wxFontData fontData;
             attr.SetParagraphSpacingAfter(attr.GetParagraphSpacingAfter() - 20);
 
             attr.SetFlags(wxTEXT_ATTR_PARA_SPACING_AFTER);
@@ -1331,6 +1332,17 @@ void MyFrame::OnViewHTML(wxCommandEvent& WXUNUSED(event))
     wxRichTextHTMLHandler htmlHandler;
     htmlHandler.SetFlags(wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY);
 
+    wxArrayInt fontSizeMapping;
+    fontSizeMapping.Add(7);
+    fontSizeMapping.Add(9);
+    fontSizeMapping.Add(11);
+    fontSizeMapping.Add(12);
+    fontSizeMapping.Add(14);
+    fontSizeMapping.Add(22);
+    fontSizeMapping.Add(100);
+
+    htmlHandler.SetFontSizeMapping(fontSizeMapping);
+
     if (htmlHandler.SaveFile(& m_richTextCtrl->GetBuffer(), strStream))
     {
         win->SetPage(text);
@@ -1410,7 +1422,7 @@ void MyFrame::OnManageStyles(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnInsertSymbol(wxCommandEvent& WXUNUSED(event))
 {
-    wxTextAttrEx attr;
+    wxRichTextAttr attr;
     attr.SetFlags(wxTEXT_ATTR_FONT);
     m_richTextCtrl->GetStyle(m_richTextCtrl->GetInsertionPoint(), attr);
 
@@ -1520,7 +1532,7 @@ void MyFrame::OnInsertURL(wxCommandEvent& WXUNUSED(event))
         wxRichTextAttr urlStyle;
         urlStyle.SetTextColour(*wxBLUE);
         urlStyle.SetFontUnderlined(true);
-        
+
         m_richTextCtrl->BeginStyle(urlStyle);
         m_richTextCtrl->BeginURL(url);
         m_richTextCtrl->WriteText(url);