wxString wxRealPath(const wxString& path) { wxChar *buf1=MYcopystring(path); wxChar *buf2=wxRealPath(buf1); wxString buf(buf2); delete [] buf1; return buf; }
// Must be destroyed wxChar *wxCopyAbsolutePath(const wxString& filename) { if (filename.empty()) return NULL; if (! wxIsAbsolutePath(wxExpandPath(wxFileFunctionsBuffer, filename))) { wxString buf = ::wxGetCwd(); wxChar ch = buf.Last(); #ifdef __WINDOWS__ if (ch != wxT('\\') && ch != wxT('/')) buf << wxT("\\"); #else if (ch != wxT('/')) buf << wxT("/"); #endif buf << wxFileFunctionsBuffer; buf = wxRealPath( buf ); return MYcopystring( buf ); } return MYcopystring( wxFileFunctionsBuffer ); }
// Get a temporary filename, opening and closing the file. wxChar *wxGetTempFileName(const wxString& prefix, wxChar *buf) { wxString filename; if ( !wxGetTempFileName(prefix, filename) ) return NULL; if ( buf ) wxStrcpy(buf, filename); else buf = MYcopystring(filename); return buf; }
int wxChoice::DoInsert(const wxString& item, unsigned int pos) { #ifndef XmNpositionIndex wxCHECK_MSG( pos == GetCount(), -1, wxT("insert not implemented")); #endif Widget w = XtVaCreateManagedWidget (GetLabelText(item), #if wxUSE_GADGETS xmPushButtonGadgetClass, (Widget) m_menuWidget, #else xmPushButtonWidgetClass, (Widget) m_menuWidget, #endif #ifdef XmNpositionIndex XmNpositionIndex, pos, #endif NULL); wxDoChangeBackgroundColour((WXWidget) w, m_backgroundColour); if( m_font.Ok() ) wxDoChangeFont( w, m_font ); m_widgetArray.Insert(w, pos); char mnem = wxFindMnemonic (item); if (mnem != 0) XtVaSetValues (w, XmNmnemonic, mnem, NULL); XtAddCallback (w, XmNactivateCallback, (XtCallbackProc) wxChoiceCallback, (XtPointer) this); if (m_noStrings == 0 && m_buttonWidget) { XtVaSetValues ((Widget) m_buttonWidget, XmNmenuHistory, w, NULL); Widget label = XmOptionButtonGadget ((Widget) m_buttonWidget); wxXmString text( item ); XtVaSetValues (label, XmNlabelString, text(), NULL); } // need to ditch wxStringList for wxArrayString m_stringList.Insert(pos, MYcopystring(item)); m_noStrings ++; return pos; }
wxNode *wxStringList::Prepend(const wxChar *s) { return (wxNode *)(wxStringListBase::Node *) wxStringListBase::Insert(MYcopystring(s)); }
wxNode *wxStringList::Add(const wxChar *s) { return (wxNode *)(wxStringListBase::Node *) wxStringListBase::Append(MYcopystring(s)); }
// Recent List management void MadRecentList::AddFileToHistory(const wxString& file) #if (wxMAJOR_VERSION < 3) { size_t i; // Check we don't already have this item for (i = 0; i < m_fileHistoryN; ++i) { if ( m_fileHistory[i] && ItemEQ(file, m_fileHistory[i]) ) { // we do have it, move it to the top of the history RemoveFileFromHistory (i); AddFileToHistory (file); return; } } // if we already have a full history, delete the one at the end if ( m_fileMaxFiles == m_fileHistoryN ) { RemoveFileFromHistory (m_fileHistoryN - 1); AddFileToHistory (file); return; } // Add to the project file history: // Move existing files (if any) down so we can insert file at beginning. if (m_fileHistoryN < m_fileMaxFiles) { wxList::compatibility_iterator node = m_fileMenus.GetFirst(); while (node) { wxMenu* menu = (wxMenu*) node->GetData(); if ( m_fileHistoryN == 0 && menu->GetMenuItemCount() ) { menu->AppendSeparator(); } menu->Append(GetBaseId()+m_fileHistoryN, _("[EMPTY]")); node = node->GetNext(); } ++m_fileHistoryN; } // Shuffle files down for (i = (m_fileHistoryN-1); i > 0; --i) { m_fileHistory[i] = m_fileHistory[i-1]; } m_fileHistory[0] = MYcopystring(file); for (i = 0; i < m_fileHistoryN; ++i) { if ( m_fileHistory[i] ) { wxString itemInMenu = m_fileHistory[i]; // we need to quote '&' characters which are used for mnemonics itemInMenu.Replace(_T("&"), _T("&&")); wxString buf; buf.Printf(s_MRUEntryFormat, i + 1, itemInMenu.c_str()); wxList::compatibility_iterator node = m_fileMenus.GetFirst(); while (node) { wxMenu* menu = (wxMenu*) node->GetData(); menu->SetLabel(GetBaseId() + i, buf); node = node->GetNext(); } } } }
// Recent List management void wxRecentList::AddFileToHistory(const wxString& item) { #if wxMAJOR_VERSION==2 size_t i; // Check we don't already have this item for (i = 0; i < m_fileHistoryN; i++) { if ( m_fileHistory[i] && ItemEqual(item, m_fileHistory[i]) ) { // we do have it, move it to the top of the history RemoveFileFromHistory (i); AddFileToHistory (item); return; } } // if we already have a full history, delete the one at the end if ( m_fileMaxFiles == m_fileHistoryN ) { RemoveFileFromHistory (m_fileHistoryN - 1); AddFileToHistory (item); return; } // Add to the project item history: // Move existing items (if any) down so we can insert item at beginning. if (m_fileHistoryN < m_fileMaxFiles) { wxList::compatibility_iterator node = m_fileMenus.GetFirst(); while (node) { wxMenu* menu = (wxMenu*) node->GetData(); if ( m_fileHistoryN == 0 && menu->GetMenuItemCount() ) { menu->AppendSeparator(); } menu->Append(GetBaseId()+m_fileHistoryN, _("[EMPTY]")); node = node->GetNext(); } m_fileHistoryN ++; } // Shuffle items down for (i = (m_fileHistoryN-1); i > 0; i--) { m_fileHistory[i] = m_fileHistory[i-1]; } m_fileHistory[0] = MYcopystring(item); for (i = 0; i < m_fileHistoryN; i++) { if ( m_fileHistory[i] ) { wxString itemInMenu = m_fileHistory[i]; // we need to quote '&' characters which are used for mnemonics itemInMenu.Replace(_T("&"), _T("&&")); wxString buf; buf.Printf(s_MRUEntryFormat, i + 1, itemInMenu.c_str()); wxList::compatibility_iterator node = m_fileMenus.GetFirst(); while (node) { wxMenu* menu = (wxMenu*) node->GetData(); menu->SetLabel(GetBaseId() + i, buf); node = node->GetNext(); } } } #else // Check if we don't already have this item. size_t i, numItems = m_fileHistory.size(); for (i = 0; i < numItems; i++) { if (ItemEqual(item, m_fileHistory[i])) { // we do have it, move it to the top of the history RemoveFileFromHistory(i); numItems--; break; } } // if we already have a full history, delete the one at the end if (numItems == m_fileMaxFiles) { RemoveFileFromHistory(--numItems); } // add a new menu item to all item menus (they will be updated below) for (wxList::compatibility_iterator node = m_fileMenus.GetFirst(); node; node = node->GetNext()) { wxMenu * const menu = (wxMenu *)node->GetData(); if (!numItems && menu->GetMenuItemCount()) menu->AppendSeparator(); // label doesn't matter, it will be set below anyhow, but it can't // be empty (this is supposed to indicate a stock item) menu->Append(GetBaseId() + numItems, " "); } // insert the new item in the beginning of the item history m_fileHistory.insert(m_fileHistory.begin(), item); numItems++; // update the labels in all menus for (i = 0; i < numItems; i++) { wxString itemInMenu = m_fileHistory[i]; for (wxList::compatibility_iterator node = m_fileMenus.GetFirst(); node; node = node->GetNext()) { wxMenu * const menu = (wxMenu *)node->GetData(); menu->SetLabel(GetBaseId() + i, GetMRUEntryLabel(i, itemInMenu)); } } #endif }