+ else
+ temp = SelectDocumentPath(templates, n, path2, flags);
+
+ delete[] templates;
+
+ if (temp)
+ {
+ if (docToClose)
+ {
+ if (!CloseDocument(docToClose, false))
+ {
+ return NULL;
+ }
+ }
+
+ //see if this file is already open
+ for (size_t i = 0; i < GetDocuments().GetCount(); ++i)
+ {
+ wxDocument* currentDoc = (wxDocument*)(GetDocuments().Item(i)->GetData());
+#ifdef __WXMSW__
+ //file paths are case-insensitive on Windows
+ if (path2.CmpNoCase(currentDoc->GetFilename()) == 0)
+#else
+ if (path2.Cmp(currentDoc->GetFilename()) == 0)
+#endif
+ {
+ //file already open. Just activate it and return
+ if (currentDoc->GetFirstView())
+ {
+ ActivateView(currentDoc->GetFirstView(), true);
+ if (currentDoc->GetDocumentWindow())
+ currentDoc->GetDocumentWindow()->SetFocus();
+ return currentDoc;
+ }
+ }
+ }
+
+ wxDocument *newDoc = temp->CreateDocument(path2, flags);
+ if (newDoc)
+ {
+ newDoc->SetDocumentName(temp->GetDocumentName());
+ newDoc->SetDocumentTemplate(temp);
+ if (!newDoc->OnOpenDocument(path2))
+ {
+ newDoc->DeleteAllViews();
+ // delete newDoc; // Implicitly deleted by DeleteAllViews
+ return (wxDocument *) NULL;
+ }
+ // A file that doesn't use the default extension of its document
+ // template cannot be opened via the FileHistory, so we do not
+ // add it.
+ if (temp->FileMatchesTemplate(path2))
+ AddFileToHistory(path2);
+ }
+ return newDoc;
+ }
+