]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/docview.cpp
Fixed the GetDataSource() function so the DsDesc that is returned is the full description
[wxWidgets.git] / src / common / docview.cpp
index 2c827b697ad35a3728f48a984c3cbf603c6c6144..5f8f8967915fe81ecfd6603ab825a7ad53e6ab82 100644 (file)
@@ -76,7 +76,6 @@
 // wxWindows macros
 // ----------------------------------------------------------------------------
 
 // wxWindows macros
 // ----------------------------------------------------------------------------
 
-#if !USE_SHARED_LIBRARY
     IMPLEMENT_ABSTRACT_CLASS(wxDocument, wxEvtHandler)
     IMPLEMENT_ABSTRACT_CLASS(wxView, wxEvtHandler)
     IMPLEMENT_ABSTRACT_CLASS(wxDocTemplate, wxObject)
     IMPLEMENT_ABSTRACT_CLASS(wxDocument, wxEvtHandler)
     IMPLEMENT_ABSTRACT_CLASS(wxView, wxEvtHandler)
     IMPLEMENT_ABSTRACT_CLASS(wxDocTemplate, wxObject)
@@ -91,7 +90,6 @@
     IMPLEMENT_CLASS(wxCommand, wxObject)
     IMPLEMENT_DYNAMIC_CLASS(wxCommandProcessor, wxObject)
     IMPLEMENT_DYNAMIC_CLASS(wxFileHistory, wxObject)
     IMPLEMENT_CLASS(wxCommand, wxObject)
     IMPLEMENT_DYNAMIC_CLASS(wxCommandProcessor, wxObject)
     IMPLEMENT_DYNAMIC_CLASS(wxFileHistory, wxObject)
-#endif
 
 // ----------------------------------------------------------------------------
 // function prototypes
 
 // ----------------------------------------------------------------------------
 // function prototypes
@@ -103,7 +101,7 @@ static inline wxString FindExtension(const wxChar *path);
 // local constants
 // ----------------------------------------------------------------------------
 
 // local constants
 // ----------------------------------------------------------------------------
 
-static const char *s_MRUEntryFormat = wxT("&%d %s");
+static const wxChar *s_MRUEntryFormat = wxT("&%d %s");
 
 // ============================================================================
 // implementation
 
 // ============================================================================
 // implementation
@@ -293,7 +291,7 @@ bool wxDocument::OnSaveDocument(const wxString& file)
     if (store.fail() || store.bad())
 #else
     wxFileOutputStream store(wxString(file.fn_str()));
     if (store.fail() || store.bad())
 #else
     wxFileOutputStream store(wxString(file.fn_str()));
-    if (store.LastError() != 0)
+    if (store.LastError() != wxSTREAM_NOERROR)
 #endif
     {
         (void)wxMessageBox(_("Sorry, could not open this file for saving."), msgTitle, wxOK | wxICON_EXCLAMATION,
 #endif
     {
         (void)wxMessageBox(_("Sorry, could not open this file for saving."), msgTitle, wxOK | wxICON_EXCLAMATION,
@@ -329,14 +327,20 @@ bool wxDocument::OnOpenDocument(const wxString& file)
     if (store.fail() || store.bad())
 #else
     wxFileInputStream store(wxString(file.fn_str()));
     if (store.fail() || store.bad())
 #else
     wxFileInputStream store(wxString(file.fn_str()));
-    if (store.LastError() != 0)
+    if (store.LastError() != wxSTREAM_NOERROR)
 #endif
     {
         (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
                            GetDocumentWindow());
         return FALSE;
     }
 #endif
     {
         (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
                            GetDocumentWindow());
         return FALSE;
     }
+#if wxUSE_STD_IOSTREAM
     if (!LoadObject(store))
     if (!LoadObject(store))
+#else
+    int res = LoadObject(store).LastError();
+    if ((res != wxSTREAM_NOERROR) &&
+        (res != wxSTREAM_EOF))
+#endif
     {
         (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
                            GetDocumentWindow());
     {
         (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
                            GetDocumentWindow());
@@ -522,13 +526,13 @@ wxView::wxView()
     //  SetDocument(doc);
     m_viewDocument = (wxDocument*) NULL;
 
     //  SetDocument(doc);
     m_viewDocument = (wxDocument*) NULL;
 
-    m_viewTypeName = "";
+    m_viewTypeName = wxT("");
     m_viewFrame = (wxFrame *) NULL;
 }
 
 wxView::~wxView()
 {
     m_viewFrame = (wxFrame *) NULL;
 }
 
 wxView::~wxView()
 {
-    GetDocumentManager()->ActivateView(this, FALSE, TRUE);
+//    GetDocumentManager()->ActivateView(this, FALSE, TRUE);
     m_viewDocument->RemoveView(this);
 }
 
     m_viewDocument->RemoveView(this);
 }
 
@@ -1191,7 +1195,7 @@ wxDocTemplate *wxDocManager::FindTemplateForPath(const wxString& path)
 // template extension.
 
 wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
 // template extension.
 
 wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXGTK__)
                                                 int noTemplates,
 #else
                                                 int WXUNUSED(noTemplates),
                                                 int noTemplates,
 #else
                                                 int WXUNUSED(noTemplates),
@@ -1200,8 +1204,8 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
                                                 long WXUNUSED(flags),
                                                 bool WXUNUSED(save))
 {
                                                 long WXUNUSED(flags),
                                                 bool WXUNUSED(save))
 {
-    // We can only have multiple filters in Windows
-#ifdef __WXMSW__
+    // We can only have multiple filters in Windows and GTK
+#if defined(__WXMSW__) || defined(__WXGTK__)
     wxString descrBuf;
 
     int i;
     wxString descrBuf;
 
     int i;
@@ -1224,7 +1228,7 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
 
     int FilterIndex = 0;
     wxString pathTmp = wxFileSelectorEx(_("Select a file"),
 
     int FilterIndex = 0;
     wxString pathTmp = wxFileSelectorEx(_("Select a file"),
-                                        wxT(""),
+                                        m_lastDirectory,
                                         wxT(""),
                                         &FilterIndex,
                                         descrBuf,
                                         wxT(""),
                                         &FilterIndex,
                                         descrBuf,
@@ -1233,6 +1237,8 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
 
     if (!pathTmp.IsEmpty())
     {
 
     if (!pathTmp.IsEmpty())
     {
+        m_lastDirectory = wxPathOnly(pathTmp);
+
         path = pathTmp;
         wxString theExt = FindExtension(path);
         if (!theExt)
         path = pathTmp;
         wxString theExt = FindExtension(path);
         if (!theExt)
@@ -1307,7 +1313,7 @@ wxDocTemplate *wxDocManager::SelectDocumentType(wxDocTemplate **templates,
     }
 
     wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document template"), _("Templates"), n,
     }
 
     wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document template"), _("Templates"), n,
-            strings, (char **)data);
+            strings, (void **)data);
     delete[] strings;
     delete[] data;
     return theTemplate;
     delete[] strings;
     delete[] data;
     return theTemplate;
@@ -1330,7 +1336,7 @@ wxDocTemplate *wxDocManager::SelectViewType(wxDocTemplate **templates,
         }
     }
     wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document view"), _("Views"), n,
         }
     }
     wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document view"), _("Views"), n,
-            strings, (char **)data);
+            strings, (void **)data);
     delete[] strings;
     delete[] data;
     return theTemplate;
     delete[] strings;
     delete[] data;
     return theTemplate;
@@ -1907,12 +1913,6 @@ void wxFileHistory::RemoveFileFromHistory(int i)
     {
         wxMenu* menu = (wxMenu*) node->Data();
 
     {
         wxMenu* menu = (wxMenu*) node->Data();
 
-        // wxMenu::Delete() is missing from wxGTK, so this can't be done :-(
-#if 0
-        // delete the menu items
-        menu->Delete(wxID_FILE1 + i);
-#endif
-
         // delete the element from the array (could use memmove() too...)
         delete [] m_fileHistory[i];
 
         // delete the element from the array (could use memmove() too...)
         delete [] m_fileHistory[i];
 
@@ -1930,22 +1930,44 @@ void wxFileHistory::RemoveFileFromHistory(int i)
             menu->SetLabel(wxID_FILE1 + j, buf);
         }
 
             menu->SetLabel(wxID_FILE1 + j, buf);
         }
 
-        // to be removed as soon as wxMenu::Delete() is implemented
-#if 1
-        menu->SetLabel(wxID_FILE1 + m_fileHistoryN - 1, wxT(""));
-#endif
-
         node = node->Next();
         node = node->Next();
+
+        // delete the last menu item which is unused now
+        menu->Delete(wxID_FILE1 + m_fileHistoryN - 1);
+
+        // delete the last separator too if no more files are left
+        if ( m_fileHistoryN == 1 )
+        {
+            wxMenuItemList::Node *node = menu->GetMenuItems().GetLast();
+            if ( node )
+            {
+                wxMenuItem *menuItem = node->GetData();
+                if ( menuItem->IsSeparator() )
+                {
+                    menu->Delete(menuItem);
+                }
+                //else: should we search backwards for the last separator?
+            }
+            //else: menu is empty somehow
+        }
     }
     }
+
     m_fileHistoryN--;
 }
 
 wxString wxFileHistory::GetHistoryFile(int i) const
 {
     m_fileHistoryN--;
 }
 
 wxString wxFileHistory::GetHistoryFile(int i) const
 {
-    if (i < m_fileHistoryN)
-        return wxString(m_fileHistory[i]);
+    wxString s;
+    if ( i < m_fileHistoryN )
+    {
+        s = m_fileHistory[i];
+    }
     else
     else
-        return wxString("");
+    {
+        wxFAIL_MSG( wxT("bad index in wxFileHistory::GetHistoryFile") );
+    }
+
+    return s;
 }
 
 void wxFileHistory::UseMenu(wxMenu *menu)
 }
 
 void wxFileHistory::UseMenu(wxMenu *menu)
@@ -1971,7 +1993,7 @@ void wxFileHistory::Load(wxConfigBase& config)
         m_fileHistory[m_fileHistoryN] = copystring((const wxChar*) historyFile);
         m_fileHistoryN ++;
         buf.Printf(wxT("file%d"), m_fileHistoryN+1);
         m_fileHistory[m_fileHistoryN] = copystring((const wxChar*) historyFile);
         m_fileHistoryN ++;
         buf.Printf(wxT("file%d"), m_fileHistoryN+1);
-        historyFile = "";
+        historyFile = wxT("");
     }
     AddFilesToMenu();
 }
     }
     AddFilesToMenu();
 }