-
- m_commands.Append(command);
- m_currentCommand = m_commands.Last();
- SetMenuStrings();
- }
- return success;
-}
-
-bool wxCommandProcessor::Undo(void)
-{
- if (m_currentCommand)
- {
- wxCommand *command = (wxCommand *)m_currentCommand->Data();
- if (command->CanUndo())
- {
- bool success = command->Undo();
- if (success)
- {
- m_currentCommand = m_currentCommand->Previous();
- SetMenuStrings();
- return TRUE;
- }
+
+ return theTemplate;
+}
+
+wxDocTemplate *wxDocManager::SelectDocumentType(wxDocTemplate **templates,
+ int noTemplates, bool sort)
+{
+ wxArrayString strings;
+ wxScopedArray<wxDocTemplate *> data(new wxDocTemplate *[noTemplates]);
+ int i;
+ int n = 0;
+
+ for (i = 0; i < noTemplates; i++)
+ {
+ if (templates[i]->IsVisible())
+ {
+ int j;
+ bool want = true;
+ for (j = 0; j < n; j++)
+ {
+ //filter out NOT unique documents + view combinations
+ if ( templates[i]->m_docTypeName == data[j]->m_docTypeName &&
+ templates[i]->m_viewTypeName == data[j]->m_viewTypeName
+ )
+ want = false;
+ }
+
+ if ( want )
+ {
+ strings.Add(templates[i]->m_description);
+
+ data[n] = templates[i];
+ n ++;
+ }
+ }
+ } // for
+
+ if (sort)
+ {
+ strings.Sort(); // ascending sort
+ // Yes, this will be slow, but template lists
+ // are typically short.
+ int j;
+ n = strings.Count();
+ for (i = 0; i < n; i++)
+ {
+ for (j = 0; j < noTemplates; j++)
+ {
+ if (strings[i] == templates[j]->m_description)
+ data[i] = templates[j];
+ }
+ }
+ }
+
+ wxDocTemplate *theTemplate;
+
+ switch ( n )
+ {
+ case 0:
+ // no visible templates, hence nothing to choose from
+ theTemplate = NULL;
+ break;
+
+ case 1:
+ // don't propose the user to choose if he has no choice
+ theTemplate = data[0];
+ break;
+
+ default:
+ // propose the user to choose one of several
+ theTemplate = (wxDocTemplate *)wxGetSingleChoiceData
+ (
+ _("Select a document template"),
+ _("Templates"),
+ strings,
+ (void **)data.get()
+ );