]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/docview/doc.cpp
use wxDC::GetMultiLineTextExtent() instead of duplicating its code in wxButton::DoGet...
[wxWidgets.git] / samples / docview / doc.cpp
index 6a5ca379b669994853c9dc7b7804a259c09b9853..9d10db817e5376005c5f74c4769bf4ca599b912b 100644 (file)
@@ -5,7 +5,7 @@
 // Modified by:
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Modified by:
 // Created:     04/01/98
 // RCS-ID:      $Id$
-// Copyright:   (c) Julian Smart and Markus Holzem
+// Copyright:   (c) Julian Smart
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 #include "view.h"
 IMPLEMENT_DYNAMIC_CLASS(DrawingDocument, wxDocument)
 
 #include "view.h"
 IMPLEMENT_DYNAMIC_CLASS(DrawingDocument, wxDocument)
 
-DrawingDocument::DrawingDocument(void)
-{
-}
-
 DrawingDocument::~DrawingDocument(void)
 {
 DrawingDocument::~DrawingDocument(void)
 {
-    doodleSegments.DeleteContents(TRUE);
+    WX_CLEAR_LIST(wxList, doodleSegments);
 }
 
 #if wxUSE_STD_IOSTREAM
 wxSTD ostream& DrawingDocument::SaveObject(wxSTD ostream& stream)
 {
     wxDocument::SaveObject(stream);
 }
 
 #if wxUSE_STD_IOSTREAM
 wxSTD ostream& DrawingDocument::SaveObject(wxSTD ostream& stream)
 {
     wxDocument::SaveObject(stream);
-    
+
     wxInt32 n = doodleSegments.GetCount();
     stream << n << '\n';
     wxInt32 n = doodleSegments.GetCount();
     stream << n << '\n';
-    
-    wxNode *node = doodleSegments.GetFirst();
+
+    wxList::compatibility_iterator node = doodleSegments.GetFirst();
     while (node)
     {
         DoodleSegment *segment = (DoodleSegment *)node->GetData();
         segment->SaveObject(stream);
         stream << '\n';
     while (node)
     {
         DoodleSegment *segment = (DoodleSegment *)node->GetData();
         segment->SaveObject(stream);
         stream << '\n';
-        
+
         node = node->GetNext();
     }
         node = node->GetNext();
     }
-    
+
     return stream;
 }
 #else
 wxOutputStream& DrawingDocument::SaveObject(wxOutputStream& stream)
 {
     wxDocument::SaveObject(stream);
     return stream;
 }
 #else
 wxOutputStream& DrawingDocument::SaveObject(wxOutputStream& stream)
 {
     wxDocument::SaveObject(stream);
-    
+
     wxTextOutputStream text_stream( stream );
     wxTextOutputStream text_stream( stream );
-    
+
     wxInt32 n = doodleSegments.GetCount();
     text_stream << n << '\n';
     wxInt32 n = doodleSegments.GetCount();
     text_stream << n << '\n';
-    
-    wxNode *node = doodleSegments.GetFirst();
+
+    wxList::compatibility_iterator node = doodleSegments.GetFirst();
     while (node)
     {
         DoodleSegment *segment = (DoodleSegment *)node->GetData();
         segment->SaveObject(stream);
         text_stream << '\n';
     while (node)
     {
         DoodleSegment *segment = (DoodleSegment *)node->GetData();
         segment->SaveObject(stream);
         text_stream << '\n';
-        
+
         node = node->GetNext();
     }
         node = node->GetNext();
     }
-    
+
     return stream;
 }
 #endif
     return stream;
 }
 #endif
@@ -93,47 +89,43 @@ wxOutputStream& DrawingDocument::SaveObject(wxOutputStream& stream)
 wxSTD istream& DrawingDocument::LoadObject(wxSTD istream& stream)
 {
     wxDocument::LoadObject(stream);
 wxSTD istream& DrawingDocument::LoadObject(wxSTD istream& stream)
 {
     wxDocument::LoadObject(stream);
-    
+
     wxInt32 n = 0;
     stream >> n;
     wxInt32 n = 0;
     stream >> n;
-    
+
     for (int i = 0; i < n; i++)
     {
         DoodleSegment *segment = new DoodleSegment;
         segment->LoadObject(stream);
         doodleSegments.Append(segment);
     }
     for (int i = 0; i < n; i++)
     {
         DoodleSegment *segment = new DoodleSegment;
         segment->LoadObject(stream);
         doodleSegments.Append(segment);
     }
-    
+
     return stream;
 }
 #else
 wxInputStream& DrawingDocument::LoadObject(wxInputStream& stream)
 {
     wxDocument::LoadObject(stream);
     return stream;
 }
 #else
 wxInputStream& DrawingDocument::LoadObject(wxInputStream& stream)
 {
     wxDocument::LoadObject(stream);
-    
+
     wxTextInputStream text_stream( stream );
     wxTextInputStream text_stream( stream );
-    
+
     wxInt32 n = 0;
     text_stream >> n;
     wxInt32 n = 0;
     text_stream >> n;
-    
+
     for (int i = 0; i < n; i++)
     {
         DoodleSegment *segment = new DoodleSegment;
         segment->LoadObject(stream);
         doodleSegments.Append(segment);
     }
     for (int i = 0; i < n; i++)
     {
         DoodleSegment *segment = new DoodleSegment;
         segment->LoadObject(stream);
         doodleSegments.Append(segment);
     }
-    
+
     return stream;
 }
 #endif
 
     return stream;
 }
 #endif
 
-DoodleSegment::DoodleSegment(void)
+DoodleSegment::DoodleSegment(DoodleSegment& seg):wxObject()
 {
 {
-}
-
-DoodleSegment::DoodleSegment(DoodleSegment& seg)
-{
-    wxNode *node = seg.lines.GetFirst();
+    wxList::compatibility_iterator node = seg.lines.GetFirst();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
@@ -142,16 +134,16 @@ DoodleSegment::DoodleSegment(DoodleSegment& seg)
         newLine->y1 = line->y1;
         newLine->x2 = line->x2;
         newLine->y2 = line->y2;
         newLine->y1 = line->y1;
         newLine->x2 = line->x2;
         newLine->y2 = line->y2;
-        
+
         lines.Append(newLine);
         lines.Append(newLine);
-        
+
         node = node->GetNext();
     }
 }
 
 DoodleSegment::~DoodleSegment(void)
 {
         node = node->GetNext();
     }
 }
 
 DoodleSegment::~DoodleSegment(void)
 {
-    lines.DeleteContents(TRUE);
+    WX_CLEAR_LIST(wxList, lines);
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
@@ -159,39 +151,39 @@ wxSTD ostream& DoodleSegment::SaveObject(wxSTD ostream& stream)
 {
     wxInt32 n = lines.GetCount();
     stream << n << '\n';
 {
     wxInt32 n = lines.GetCount();
     stream << n << '\n';
-    
-    wxNode *node = lines.GetFirst();
+
+    wxList::compatibility_iterator node = lines.GetFirst();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
-        stream << line->x1 << " " << 
-            line->y1 << " " << 
-            line->x2 << " " << 
+        stream << line->x1 << " " <<
+            line->y1 << " " <<
+            line->x2 << " " <<
             line->y2 << "\n";
         node = node->GetNext();
     }
             line->y2 << "\n";
         node = node->GetNext();
     }
-    
+
     return stream;
 }
 #else
 wxOutputStream &DoodleSegment::SaveObject(wxOutputStream& stream)
 {
     wxTextOutputStream text_stream( stream );
     return stream;
 }
 #else
 wxOutputStream &DoodleSegment::SaveObject(wxOutputStream& stream)
 {
     wxTextOutputStream text_stream( stream );
-    
+
     wxInt32 n = lines.GetCount();
     text_stream << n << _T('\n');
     wxInt32 n = lines.GetCount();
     text_stream << n << _T('\n');
-    
-    wxNode *node = lines.GetFirst();
+
+    wxList::compatibility_iterator node = lines.GetFirst();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
-        text_stream << line->x1 << _T(" ") << 
-            line->y1 << _T(" ") << 
-            line->x2 << _T(" ") << 
+        text_stream << line->x1 << _T(" ") <<
+            line->y1 << _T(" ") <<
+            line->x2 << _T(" ") <<
             line->y2 << _T("\n");
         node = node->GetNext();
     }
             line->y2 << _T("\n");
         node = node->GetNext();
     }
-    
+
     return stream;
 }
 #endif
     return stream;
 }
 #endif
@@ -201,44 +193,44 @@ wxSTD istream& DoodleSegment::LoadObject(wxSTD istream& stream)
 {
     wxInt32 n = 0;
     stream >> n;
 {
     wxInt32 n = 0;
     stream >> n;
-    
+
     for (int i = 0; i < n; i++)
     {
         DoodleLine *line = new DoodleLine;
     for (int i = 0; i < n; i++)
     {
         DoodleLine *line = new DoodleLine;
-        stream >> line->x1 >> 
-            line->y1 >> 
-            line->x2 >> 
+        stream >> line->x1 >>
+            line->y1 >>
+            line->x2 >>
             line->y2;
         lines.Append(line);
     }
             line->y2;
         lines.Append(line);
     }
-    
+
     return stream;
 }
 #else
 wxInputStream &DoodleSegment::LoadObject(wxInputStream& stream)
 {
     wxTextInputStream text_stream( stream );
     return stream;
 }
 #else
 wxInputStream &DoodleSegment::LoadObject(wxInputStream& stream)
 {
     wxTextInputStream text_stream( stream );
-    
+
     wxInt32 n = 0;
     text_stream >> n;
     wxInt32 n = 0;
     text_stream >> n;
-    
+
     for (int i = 0; i < n; i++)
     {
         DoodleLine *line = new DoodleLine;
     for (int i = 0; i < n; i++)
     {
         DoodleLine *line = new DoodleLine;
-        text_stream >> line->x1 >> 
-            line->y1 >> 
-            line->x2 >> 
+        text_stream >> line->x1 >>
+            line->y1 >>
+            line->x2 >>
             line->y2;
         lines.Append(line);
     }
             line->y2;
         lines.Append(line);
     }
-    
+
     return stream;
 }
 #endif
 
 void DoodleSegment::Draw(wxDC *dc)
 {
     return stream;
 }
 #endif
 
 void DoodleSegment::Draw(wxDC *dc)
 {
-    wxNode *node = lines.GetFirst();
+    wxList::compatibility_iterator node = lines.GetFirst();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
     while (node)
     {
         DoodleLine *line = (DoodleLine *)node->GetData();
@@ -252,7 +244,7 @@ void DoodleSegment::Draw(wxDC *dc)
 */
 
 DrawingCommand::DrawingCommand(const wxString& name, int command, DrawingDocument *ddoc, DoodleSegment *seg):
 */
 
 DrawingCommand::DrawingCommand(const wxString& name, int command, DrawingDocument *ddoc, DoodleSegment *seg):
-wxCommand(TRUE, name)
+wxCommand(true, name)
 {
     doc = ddoc;
     segment = seg;
 {
     doc = ddoc;
     segment = seg;
@@ -274,14 +266,14 @@ bool DrawingCommand::Do(void)
             // Cut the last segment
             if (doc->GetDoodleSegments().GetCount() > 0)
             {
             // Cut the last segment
             if (doc->GetDoodleSegments().GetCount() > 0)
             {
-                wxNode *node = doc->GetDoodleSegments().GetLast();
+                wxList::compatibility_iterator node = doc->GetDoodleSegments().GetLast();
                 if (segment)
                     delete segment;
                 if (segment)
                     delete segment;
-                
+
                 segment = (DoodleSegment *)node->GetData();
                 segment = (DoodleSegment *)node->GetData();
-                delete node;
-                
-                doc->Modify(TRUE);
+                doc->GetDoodleSegments().Erase(node);
+
+                doc->Modify(true);
                 doc->UpdateAllViews();
             }
             break;
                 doc->UpdateAllViews();
             }
             break;
@@ -289,12 +281,12 @@ bool DrawingCommand::Do(void)
     case DOODLE_ADD:
         {
             doc->GetDoodleSegments().Append(new DoodleSegment(*segment));
     case DOODLE_ADD:
         {
             doc->GetDoodleSegments().Append(new DoodleSegment(*segment));
-            doc->Modify(TRUE);
+            doc->Modify(true);
             doc->UpdateAllViews();
             break;
         }
     }
             doc->UpdateAllViews();
             break;
         }
     }
-    return TRUE;
+    return true;
 }
 
 bool DrawingCommand::Undo(void)
 }
 
 bool DrawingCommand::Undo(void)
@@ -307,11 +299,11 @@ bool DrawingCommand::Undo(void)
             if (segment)
             {
                 doc->GetDoodleSegments().Append(segment);
             if (segment)
             {
                 doc->GetDoodleSegments().Append(segment);
-                doc->Modify(TRUE);
+                doc->Modify(true);
                 doc->UpdateAllViews();
                 segment = (DoodleSegment *) NULL;
             }
                 doc->UpdateAllViews();
                 segment = (DoodleSegment *) NULL;
             }
-            doc->Modify(TRUE);
+            doc->Modify(true);
             doc->UpdateAllViews();
             break;
         }
             doc->UpdateAllViews();
             break;
         }
@@ -320,17 +312,17 @@ bool DrawingCommand::Undo(void)
             // Cut the last segment
             if (doc->GetDoodleSegments().GetCount() > 0)
             {
             // Cut the last segment
             if (doc->GetDoodleSegments().GetCount() > 0)
             {
-                wxNode *node = doc->GetDoodleSegments().GetLast();
+                wxList::compatibility_iterator node = doc->GetDoodleSegments().GetLast();
                 DoodleSegment *seg = (DoodleSegment *)node->GetData();
                 delete seg;
                 DoodleSegment *seg = (DoodleSegment *)node->GetData();
                 delete seg;
-                delete node;
-                
-                doc->Modify(TRUE);
+                doc->GetDoodleSegments().Erase(node);
+
+                doc->Modify(true);
                 doc->UpdateAllViews();
             }
         }
     }
                 doc->UpdateAllViews();
             }
         }
     }
-    return TRUE;
+    return true;
 }
 
 IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument)
 }
 
 IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument)
@@ -340,27 +332,27 @@ IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument)
 bool TextEditDocument::OnSaveDocument(const wxString& filename)
 {
     TextEditView *view = (TextEditView *)GetFirstView();
 bool TextEditDocument::OnSaveDocument(const wxString& filename)
 {
     TextEditView *view = (TextEditView *)GetFirstView();
-    
+
     if (!view->textsw->SaveFile(filename))
     if (!view->textsw->SaveFile(filename))
-        return FALSE;
-    Modify(FALSE);
+        return false;
+    Modify(false);
 #ifdef __WXMAC__
     wxFileName fn(filename) ;
     fn.MacSetDefaultTypeAndCreator() ;
 #endif
 #ifdef __WXMAC__
     wxFileName fn(filename) ;
     fn.MacSetDefaultTypeAndCreator() ;
 #endif
-    return TRUE;
+    return true;
 }
 
 bool TextEditDocument::OnOpenDocument(const wxString& filename)
 {
     TextEditView *view = (TextEditView *)GetFirstView();
     if (!view->textsw->LoadFile(filename))
 }
 
 bool TextEditDocument::OnOpenDocument(const wxString& filename)
 {
     TextEditView *view = (TextEditView *)GetFirstView();
     if (!view->textsw->LoadFile(filename))
-        return FALSE;
-    
-    SetFilename(filename, TRUE);
-    Modify(FALSE);
+        return false;
+
+    SetFilename(filename, true);
+    Modify(false);
     UpdateAllViews();
     UpdateAllViews();
-    return TRUE;
+    return true;
 }
 
 bool TextEditDocument::IsModified(void) const
 }
 
 bool TextEditDocument::IsModified(void) const
@@ -377,9 +369,9 @@ bool TextEditDocument::IsModified(void) const
 void TextEditDocument::Modify(bool mod)
 {
     TextEditView *view = (TextEditView *)GetFirstView();
 void TextEditDocument::Modify(bool mod)
 {
     TextEditView *view = (TextEditView *)GetFirstView();
-    
+
     wxDocument::Modify(mod);
     wxDocument::Modify(mod);
-    
+
     if (!mod && view && view->textsw)
         view->textsw->DiscardEdits();
 }
     if (!mod && view && view->textsw)
         view->textsw->DiscardEdits();
 }