]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/docvwmdi/doc.cpp
fix sizing of extra control
[wxWidgets.git] / samples / docvwmdi / doc.cpp
index 19487ad910483824f280d6700d4da59a13ed4b56..d2933881a548c77e871a97a6ac76ff9e2283524a 100644 (file)
@@ -9,10 +9,6 @@
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-// #pragma implementation
-#endif
-
 // For compilers that support precompilation, includes "wx/wx.h".
 #include "wx/wxprec.h"
 
 #ifndef WX_PRECOMP
 #include "wx/wx.h"
 #endif
-#include "wx/txtstrm.h"
 
 #if !wxUSE_DOC_VIEW_ARCHITECTURE
 #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
 #endif
 
+#if wxUSE_STD_IOSTREAM
+    #include "wx/ioswrap.h"
+#else
+    #include "wx/txtstrm.h"
+#endif
+
 #include "doc.h"
 #include "view.h"
 
 IMPLEMENT_DYNAMIC_CLASS(DrawingDocument, wxDocument)
 
-DrawingDocument::DrawingDocument(void)
-{
-}
-
 DrawingDocument::~DrawingDocument(void)
 {
-  WX_CLEAR_LIST(wxList, doodleSegments);
+    WX_CLEAR_LIST(wxList, m_doodleSegments)
 }
 
 #if wxUSE_STD_IOSTREAM
 wxSTD ostream& DrawingDocument::SaveObject(wxSTD ostream& stream)
 {
-  wxDocument::SaveObject(stream);
-  
-  wxInt32 n = doodleSegments.GetCount();
-  stream << n << _T('\n');
-  
-  wxList::compatibility_iterator node = doodleSegments.GetFirst();
-  while (node)
-  {
-    DoodleSegment *segment = (DoodleSegment *)node->GetData();
-    segment->SaveObject(stream);
-    stream << _T('\n');
-    
-    node = node->GetNext();
-  }
-  
-  return stream;
+    wxDocument::SaveObject(stream);
+
+    wxInt32 n = m_doodleSegments.GetCount();
+    stream << n << wxT('\n');
+
+    wxList::compatibility_iterator node = m_doodleSegments.GetFirst();
+    while (node)
+    {
+        DoodleSegment *segment = (DoodleSegment*)node->GetData();
+        segment->SaveObject(stream);
+        stream << wxT('\n');
+
+        node = node->GetNext();
+    }
+    return stream;
 }
 #else
 wxOutputStream& DrawingDocument::SaveObject(wxOutputStream& stream)
 {
-  wxDocument::SaveObject(stream);
-
-  wxTextOutputStream text_stream( stream );
-
-  wxInt32 n = doodleSegments.GetCount();
-  text_stream << n << _T('\n');
-  
-  wxList::compatibility_iterator node = doodleSegments.GetFirst();
-  while (node)
-  {
-    DoodleSegment *segment = (DoodleSegment *)node->GetData();
-    segment->SaveObject(stream);
-    text_stream << _T('\n');
-    
-    node = node->GetNext();
-  }
-  
-  return stream;
+    wxDocument::SaveObject(stream);
+
+    wxTextOutputStream text_stream( stream );
+
+    wxInt32 n = m_doodleSegments.GetCount();
+    text_stream << n << wxT('\n');
+
+    wxList::compatibility_iterator node = m_doodleSegments.GetFirst();
+    while (node)
+    {
+        DoodleSegment* segment = (DoodleSegment*)node->GetData();
+        segment->SaveObject(stream);
+        text_stream << wxT('\n');
+
+        node = node->GetNext();
+    }
+
+    return stream;
 }
 #endif
 
 #if wxUSE_STD_IOSTREAM
 wxSTD istream& DrawingDocument::LoadObject(wxSTD istream& stream)
 {
-  wxDocument::LoadObject(stream);
-  
-  wxInt32 n = 0;
-  stream >> n;
-
-  for (int i = 0; i < n; i++)
-  {
-    DoodleSegment *segment = new DoodleSegment;
-    segment->LoadObject(stream);
-    doodleSegments.Append(segment);
-  }
-
-  return stream;
+    wxDocument::LoadObject(stream);
+
+    wxInt32 n = 0;
+    stream >> n;
+
+    for (int i = 0; i < n; i++)
+    {
+        DoodleSegment *segment = new DoodleSegment;
+        segment->LoadObject(stream);
+        m_doodleSegments.Append(segment);
+    }
+
+    return stream;
 }
 #else
 wxInputStream& DrawingDocument::LoadObject(wxInputStream& stream)
 {
-  wxDocument::LoadObject(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);
+        m_doodleSegments.Append(segment);
+    }
 
-  return stream;
+    return stream;
 }
 #endif
-DoodleSegment::DoodleSegment(void)
-{
-}
 
-DoodleSegment::DoodleSegment(DoodleSegment& seg)
+DoodleSegment::DoodleSegment(const DoodleSegment& seg) : wxObject()
 {
-  wxList::compatibility_iterator node = seg.lines.GetFirst();
-  while (node)
-  {
-    DoodleLine *line = (DoodleLine *)node->GetData();
-    DoodleLine *newLine = new DoodleLine;
-    newLine->x1 = line->x1;
-    newLine->y1 = line->y1;
-    newLine->x2 = line->x2;
-    newLine->y2 = line->y2;
-
-    lines.Append(newLine);
-
-    node = node->GetNext();
-  }
+    wxList::compatibility_iterator node = seg.m_lines.GetFirst();
+    while (node)
+    {
+        DoodleLine* line = (DoodleLine*)node->GetData();
+        DoodleLine* newLine = new DoodleLine;
+        newLine->x1 = line->x1;
+        newLine->y1 = line->y1;
+        newLine->x2 = line->x2;
+        newLine->y2 = line->y2;
+
+        m_lines.Append(newLine);
+
+        node = node->GetNext();
+    }
 }
 
 DoodleSegment::~DoodleSegment(void)
 {
-  WX_CLEAR_LIST(wxList, lines);
+    WX_CLEAR_LIST(wxList, m_lines)
 }
 
 #if wxUSE_STD_IOSTREAM
 wxSTD ostream& DoodleSegment::SaveObject(wxSTD ostream& stream)
 {
-  wxInt32 n = lines.GetCount();
-  stream << n << _T('\n');
-  
-  wxList::compatibility_iterator node = lines.GetFirst();
-  while (node)
-  {
-    DoodleLine *line = (DoodleLine *)node->GetData();
-    stream << line->x1 << _T(" ") << 
-                   line->y1 << _T(" ") << 
-           line->x2 << _T(" ") << 
-           line->y2 << _T("\n");
-    node = node->GetNext();
-  }
-
-  return stream;
+    wxInt32 n = m_lines.GetCount();
+    stream << n << wxT('\n');
+
+    wxList::compatibility_iterator node = m_lines.GetFirst();
+    while (node)
+    {
+        DoodleLine *line = (DoodleLine *)node->GetData();
+        stream << line->x1 << wxT(" ") <<
+                       line->y1 << wxT(" ") <<
+               line->x2 << wxT(" ") <<
+               line->y2 << wxT("\n");
+        node = node->GetNext();
+    }
+
+    return stream;
 }
 #else
 wxOutputStream &DoodleSegment::SaveObject(wxOutputStream& stream)
 {
-  wxTextOutputStream text_stream( stream );
-
-  wxInt32 n = lines.GetCount();
-  text_stream << n << _T('\n');
-  
-  wxList::compatibility_iterator node = lines.GetFirst();
-  while (node)
-  {
-    DoodleLine *line = (DoodleLine *)node->GetData();
-    text_stream << line->x1 << _T(" ") << 
-                   line->y1 << _T(" ") << 
-           line->x2 << _T(" ") << 
-           line->y2 << _T("\n");
-    node = node->GetNext();
-  }
-
-  return stream;
+    wxTextOutputStream text_stream( stream );
+
+    wxInt32 n = m_lines.GetCount();
+    text_stream << n << wxT('\n');
+
+    wxList::compatibility_iterator node = m_lines.GetFirst();
+    while (node)
+    {
+        DoodleLine* line = (DoodleLine*)node->GetData();
+        text_stream << line->x1 << wxT(" ") <<
+                       line->y1 << wxT(" ") <<
+               line->x2 << wxT(" ") <<
+               line->y2 << wxT("\n");
+        node = node->GetNext();
+    }
+
+    return stream;
 }
 #endif
 
 #if wxUSE_STD_IOSTREAM
 wxSTD istream& DoodleSegment::LoadObject(wxSTD istream& stream)
 {
-  wxInt32 n = 0;
-  stream >> n;
-
-  for (int i = 0; i < n; i++)
-  {
-    DoodleLine *line = new DoodleLine;
-    stream >> line->x1 >> 
-                   line->y1 >> 
-           line->x2 >> 
-           line->y2;
-    lines.Append(line);
-  }
-  
-  return stream;
+    wxInt32 n = 0;
+    stream >> n;
+
+    for (int i = 0; i < n; i++)
+    {
+        DoodleLine *line = new DoodleLine;
+        stream >> line->x1 >>
+                       line->y1 >>
+               line->x2 >>
+               line->y2;
+        m_lines.Append(line);
+    }
+
+    return stream;
 }
 #else
 wxInputStream &DoodleSegment::LoadObject(wxInputStream& stream)
 {
-  wxTextInputStream text_stream( stream );
-
-  wxInt32 n = 0;
-  text_stream >> n;
-
-  for (int i = 0; i < n; i++)
-  {
-    DoodleLine *line = new DoodleLine;
-    text_stream >> line->x1 >> 
-                   line->y1 >> 
-           line->x2 >> 
-           line->y2;
-    lines.Append(line);
-  }
-  
-  return stream;
+    wxTextInputStream text_stream( stream );
+
+    wxInt32 n = 0;
+    text_stream >> n;
+
+    for (int i = 0; i < n; i++)
+    {
+        DoodleLine* line = new DoodleLine;
+        text_stream >> line->x1 >>
+                       line->y1 >>
+               line->x2 >>
+               line->y2;
+        m_lines.Append(line);
+    }
+
+    return stream;
 }
 #endif
 void DoodleSegment::Draw(wxDC *dc)
 {
-  wxList::compatibility_iterator node = lines.GetFirst();
-  while (node)
-  {
-    DoodleLine *line = (DoodleLine *)node->GetData();
-    dc->DrawLine(line->x1, line->y1, line->x2, line->y2);
-    node = node->GetNext();
-  }
+    wxList::compatibility_iterator node = m_lines.GetFirst();
+    while (node)
+    {
+        DoodleLine* line = (DoodleLine*)node->GetData();
+        dc->DrawLine(line->x1, line->y1, line->x2, line->y2);
+        node = node->GetNext();
+    }
 }
 
 /*
  * Implementation of drawing command
  */
 
-DrawingCommand::DrawingCommand(const wxString& name, int command, DrawingDocument *ddoc, DoodleSegment *seg):
-  wxCommand(TRUE, name)
+DrawingCommand::DrawingCommand(const wxString& name, int command, DrawingDocument* doc, DoodleSegment* seg) :
+    wxCommand(true, name)
 {
-  doc = ddoc;
-  segment = seg;
-  cmd = command;
+    m_doc = doc;
+    m_segment = seg;
+    m_cmd = command;
 }
 
 DrawingCommand::~DrawingCommand(void)
 {
-  if (segment)
-    delete segment;
+    if (m_segment)
+        delete m_segment;
 }
 
 bool DrawingCommand::Do(void)
 {
-  switch (cmd)
-  {
-    case DOODLE_CUT:
-    {
-      // Cut the last segment
-      if (doc->GetDoodleSegments().GetCount() > 0)
-      {
-        wxList::compatibility_iterator node = doc->GetDoodleSegments().GetLast();
-        if (segment)
-          delete segment;
-          
-        segment = (DoodleSegment *)node->GetData();
-        doc->GetDoodleSegments().Erase(node);
-
-        doc->Modify(TRUE);
-        doc->UpdateAllViews();
-      }
-      break;
-    }
-    case DOODLE_ADD:
+    switch (m_cmd)
     {
-      doc->GetDoodleSegments().Append(new DoodleSegment(*segment));
-      doc->Modify(TRUE);
-      doc->UpdateAllViews();
-      break;
+        case DOODLE_CUT:
+            // Cut the last segment
+            if (m_doc->GetDoodleSegments().GetCount() > 0)
+            {
+                wxList::compatibility_iterator node = m_doc->GetDoodleSegments().GetLast();
+                if (m_segment)
+                    delete m_segment;
+
+                m_segment = (DoodleSegment*)node->GetData();
+                m_doc->GetDoodleSegments().Erase(node);
+
+                m_doc->Modify(true);
+                m_doc->UpdateAllViews();
+            }
+            break;
+        case DOODLE_ADD:
+            m_doc->GetDoodleSegments().Append(new DoodleSegment(*m_segment));
+            m_doc->Modify(true);
+            m_doc->UpdateAllViews();
+            break;
     }
-  }
-  return TRUE;
+    return true;
 }
 
 bool DrawingCommand::Undo(void)
 {
-  switch (cmd)
-  {
-    case DOODLE_CUT:
+    switch (m_cmd)
     {
-      // Paste the segment
-      if (segment)
-      {
-        doc->GetDoodleSegments().Append(segment);
-        doc->Modify(TRUE);
-        doc->UpdateAllViews();
-        segment = (DoodleSegment *) NULL;
-      }
-      doc->Modify(TRUE);
-      doc->UpdateAllViews();
-      break;
+        case DOODLE_CUT:
+        {
+            // Paste the segment
+            if (m_segment)
+            {
+                m_doc->GetDoodleSegments().Append(m_segment);
+                m_doc->Modify(true);
+                m_doc->UpdateAllViews();
+                m_segment = NULL;
+            }
+            m_doc->Modify(true);
+            m_doc->UpdateAllViews();
+            break;
+        }
+        case DOODLE_ADD:
+        {
+            // Cut the last segment
+            if (m_doc->GetDoodleSegments().GetCount() > 0)
+            {
+                wxList::compatibility_iterator node = m_doc->GetDoodleSegments().GetLast();
+                DoodleSegment* seg = (DoodleSegment*)node->GetData();
+                delete seg;
+                m_doc->GetDoodleSegments().Erase(node);
+
+                m_doc->Modify(true);
+                m_doc->UpdateAllViews();
+            }
+       }
     }
-    case DOODLE_ADD:
-    {
-      // Cut the last segment
-      if (doc->GetDoodleSegments().GetCount() > 0)
-      {
-        wxList::compatibility_iterator node = doc->GetDoodleSegments().GetLast();
-        DoodleSegment *seg = (DoodleSegment *)node->GetData();
-        delete seg;
-        doc->GetDoodleSegments().Erase(node);
-
-        doc->Modify(TRUE);
-        doc->UpdateAllViews();
-      }
-    }
-  }
-  return TRUE;
+    return true;
 }
 
 IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument)
@@ -335,43 +324,47 @@ IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument)
 // we override OnSave/OpenDocument instead of Save/LoadObject
 bool TextEditDocument::OnSaveDocument(const wxString& filename)
 {
-    TextEditView *view = (TextEditView *)GetFirstView();
+    TextEditView* view = GetFirstView();
 
-    if (!view->textsw->SaveFile(filename))
-        return FALSE;
-    Modify(FALSE);
-    return TRUE;
+    if (!view->m_textsw->SaveFile(filename))
+        return false;
+    Modify(false);
+    return true;
 }
 
 bool TextEditDocument::OnOpenDocument(const wxString& filename)
 {
-    TextEditView *view = (TextEditView *)GetFirstView();
-    if (!view->textsw->LoadFile(filename))
-        return FALSE;
+    TextEditView *view = GetFirstView();
+    if (!view->m_textsw->LoadFile(filename))
+        return false;
 
-    SetFilename(filename, TRUE);
-    Modify(FALSE);
+    SetFilename(filename, true);
+    Modify(false);
     UpdateAllViews();
-    return TRUE;
+    return true;
 }
 
 bool TextEditDocument::IsModified(void) const
 {
-  TextEditView *view = (TextEditView *)GetFirstView();
-  if (view)
-  {
-    return (wxDocument::IsModified() || view->textsw->IsModified());
-  }
-  else
-    return wxDocument::IsModified();
+    TextEditView* view = GetFirstView();
+    return (wxDocument::IsModified() || (view && view->m_textsw->IsModified()));
 }
 
 void TextEditDocument::Modify(bool mod)
 {
-  TextEditView *view = (TextEditView *)GetFirstView();
+    TextEditView* view = GetFirstView();
 
-  wxDocument::Modify(mod);
+    wxDocument::Modify(mod);
+
+    if ((!mod) && view && view->m_textsw)
+    {
+        view->m_textsw->DiscardEdits();
+    }
+}
 
-  if (!mod && view && view->textsw)
-    view->textsw->DiscardEdits();
+TextEditView* TextEditDocument::GetFirstView() const
+{
+   wxView* view = wxDocument::GetFirstView();
+   return view ? wxStaticCast(view, TextEditView) : NULL;
 }
+