]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/poem/wxpoem.cpp
Try to avoid truncation of the message in wxMSW wxMessageDialog.
[wxWidgets.git] / demos / poem / wxpoem.cpp
index 334027ae0b9e280c813be979ed27f6848fc6bb9e..41221b2504f37d14c785b09cd2c6b09a9b0d58aa 100644 (file)
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "wxpoem.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 
 #include "wxpoem.h"
 
-#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXX11__)
 #include "corner1.xpm"
 #include "corner2.xpm"
 #include "corner3.xpm"
 #include "corner4.xpm"
 #include "wxpoem.xpm"
-#endif
 
-#define         buf_size 10000
+#define         BUFFER_SIZE 10000
 #define         DEFAULT_POETRY_DAT "wxpoem"
 #define         DEFAULT_POETRY_IND "wxpoem"
 #define         DEFAULT_CHAR_HEIGHT 18
@@ -54,7 +48,7 @@
 #define         X_SIZE 30
 #define         Y_SIZE 20
 
-static wxChar   *poem_buffer;          // Storage for each poem
+static wxChar   *poem_buffer;                   // Storage for each poem
 static wxChar   line[150];                      // Storage for a line
 static int      pages[30];                      // For multipage poems -
                                                 // store the start of each page
@@ -73,8 +67,8 @@ static int      XPos;                           // Startup X position
 static int      YPos;                           // Startup Y position
 static int      pointSize = 12;                 // Font size
 
-static wxChar   *index_filename = NULL;            // Index filename
-static wxChar   *data_filename = NULL;             // Data filename
+static const wxChar   *index_filename = NULL;            // Index filename
+static const wxChar   *data_filename = NULL;             // Data filename
 static wxChar   error_buf[300];                 // Error message buffer
 static bool     loaded_ok = false;              // Poem loaded ok
 static bool     index_ok = false;               // Index loaded ok
@@ -82,25 +76,15 @@ static bool     index_ok = false;               // Index loaded ok
 static bool     paging = false;                 // Are we paging?
 static int      current_page = 0;               // Currently viewed page
 
-wxIcon          *Corner1 = NULL;
-wxIcon          *Corner2 = NULL;
-wxIcon          *Corner3 = NULL;
-wxIcon          *Corner4 = NULL;
-
-// Pens
-wxPen           *GreyPen = NULL;
-wxPen           *DarkGreyPen = NULL;
-wxPen           *WhitePen = NULL;
-
 // Backing bitmap
 wxBitmap        *backingBitmap = NULL;
 
-void            PoetryError(wxChar *, wxChar *caption=_T("wxPoem Error"));
-void            PoetryNotify(wxChar *Msg, wxChar *caption=_T("wxPoem"));
+void            PoetryError(const wxChar *, const wxChar *caption=wxT("wxPoem Error"));
+void            PoetryNotify(const wxChar *Msg, const wxChar *caption=wxT("wxPoem"));
 void            TryLoadIndex();
-bool            LoadPoem(wxChar *, long);
+bool            LoadPoem(const wxChar *, long);
 int             GetIndex();
-int             LoadIndex(wxChar *);
+int             LoadIndex(const wxChar *);
 bool            Compile(void);
 void            FindMax(int *max_thing, int thing);
 
@@ -135,8 +119,28 @@ MainWindow::MainWindow(wxFrame *frame, wxWindowID id, const wxString& title,
      const wxPoint& pos, const wxSize& size, long style):
      wxFrame(frame, id, title, pos, size, style)
 {
+    m_corners[0] = m_corners[1] = m_corners[2] = m_corners[3] = NULL;
+
     ReadPreferences();
     CreateFonts();
+
+    SetIcon(wxpoem_xpm);
+
+    m_corners[0] = new wxIcon( corner1_xpm );
+    m_corners[1] = new wxIcon( corner2_xpm );
+    m_corners[2] = new wxIcon( corner3_xpm );
+    m_corners[3] = new wxIcon( corner4_xpm );
+}
+
+MainWindow::~MainWindow()
+{
+    for (int i=0;i<4;i++)
+    {
+        if(m_corners[i])
+        {
+            delete m_corners[i];
+        }
+    }
 }
 
 // Read the poetry buffer, either for finding the size
@@ -167,7 +171,7 @@ void MainWindow::ScanBuffer(wxDC *dc, bool DrawIt, int *max_x, int *max_y)
     if (DrawIt && wxColourDisplay())
     {
         dc->SetBrush(*wxLIGHT_GREY_BRUSH);
-        dc->SetPen(*GreyPen);
+        dc->SetPen(*wxGREY_PEN);
         dc->DrawRectangle(0, 0, width, height);
         dc->SetBackgroundMode(wxTRANSPARENT);
     }
@@ -175,9 +179,9 @@ void MainWindow::ScanBuffer(wxDC *dc, bool DrawIt, int *max_x, int *max_y)
     // See what ACTUAL char height is
     if(m_normalFont)
         dc->SetFont(*m_normalFont);
-    long xx;
-    long yy;
-    dc->GetTextExtent(_T("X"), &xx, &yy);
+    wxCoord xx;
+    wxCoord yy;
+    dc->GetTextExtent(wxT("X"), &xx, &yy);
     char_height = (int)yy;
 
     if (current_page == 0)
@@ -258,7 +262,7 @@ void MainWindow::ScanBuffer(wxDC *dc, bool DrawIt, int *max_x, int *max_y)
                         line_ptr = line+3;
 
                         m_title = line_ptr;
-                        m_title << _T(" (cont'd)");
+                        m_title << wxT(" (cont'd)");
 
                         dc->GetTextExtent(line_ptr, &xx, &yy);
                         FindMax(&curr_width, (int)xx);
@@ -321,7 +325,7 @@ void MainWindow::ScanBuffer(wxDC *dc, bool DrawIt, int *max_x, int *max_y)
     // Write (cont'd)
     if (page_break)
     {
-        wxChar *cont = _T("(cont'd)");
+        const wxChar *cont = wxT("(cont'd)");
 
         dc->SetFont(* m_normalFont);
 
@@ -378,9 +382,9 @@ void MainWindow::ScanBuffer(wxDC *dc, bool DrawIt, int *max_x, int *max_y)
         // Right and bottom white lines - 'grey' (black!) if
         // we're running on a mono display.
         if (wxColourDisplay())
-            dc->SetPen(*WhitePen);
+            dc->SetPen(*wxWHITE_PEN);
         else
-            dc->SetPen(*DarkGreyPen);
+            dc->SetPen(*wxBLACK_PEN);
 
         dc->DrawLine(width-THICK_LINE_BORDER, THICK_LINE_BORDER,
                      width-THICK_LINE_BORDER, height-THICK_LINE_BORDER);
@@ -388,20 +392,20 @@ void MainWindow::ScanBuffer(wxDC *dc, bool DrawIt, int *max_x, int *max_y)
                      THICK_LINE_BORDER, height-THICK_LINE_BORDER);
 
         // Left and top grey lines
-        dc->SetPen(*DarkGreyPen);
+        dc->SetPen(*wxBLACK_PEN);
         dc->DrawLine(THICK_LINE_BORDER, height-THICK_LINE_BORDER,
                      THICK_LINE_BORDER, THICK_LINE_BORDER);
         dc->DrawLine(THICK_LINE_BORDER, THICK_LINE_BORDER,
                      width-THICK_LINE_BORDER, THICK_LINE_BORDER);
 
         // Draw icons
-        dc->DrawIcon(* Corner1, 0, 0);
-        dc->DrawIcon(* Corner2, int(width-32), 0);
+        dc->DrawIcon(* m_corners[0], 0, 0);
+        dc->DrawIcon(* m_corners[1], int(width-32), 0);
 
         int y2 = height - 32;
         int x2 = (width-32);
-        dc->DrawIcon(* Corner3, 0, y2);
-        dc->DrawIcon(* Corner4, x2, y2);
+        dc->DrawIcon(* m_corners[2], 0, y2);
+        dc->DrawIcon(* m_corners[3], x2, y2);
     }
 }
 
@@ -477,8 +481,8 @@ void MainWindow::Search(bool ask)
 
     if (ask || m_searchString.empty())
     {
-        wxString s = wxGetTextFromUser( _T("Enter search string"), _T("Search"), m_searchString);
-        if (s != wxEmptyString)
+        wxString s = wxGetTextFromUser( wxT("Enter search string"), wxT("Search"), m_searchString);
+        if (!s.empty())
         {
             s.MakeLower();
             m_searchString = s;
@@ -506,98 +510,71 @@ void MainWindow::Search(bool ask)
         else
         {
             last_poem_start = 0;
-            PoetryNotify(_T("Search string not found."));
+            PoetryNotify(wxT("Search string not found."));
         }
     }
 }
 
 bool MyApp::OnInit()
 {
-  poem_buffer = new wxChar[buf_size];
+    poem_buffer = new wxChar[BUFFER_SIZE];
 
-  GreyPen = new wxPen(_T("LIGHT GREY"), THICK_LINE_WIDTH, wxSOLID);
-  DarkGreyPen = new wxPen(_T("GREY"), THICK_LINE_WIDTH, wxSOLID);
-  WhitePen = new wxPen(_T("WHITE"), THICK_LINE_WIDTH, wxSOLID);
-
-  // Seed the random number generator
+    // Seed the random number generator
 #ifdef __WXWINCE__
-  srand((unsigned) CeGetRandomSeed());
+    srand((unsigned) CeGetRandomSeed());
 #else
-  time_t current_time;
+    time_t current_time;
 
-  (void)time(&current_time);
-  srand((unsigned int)current_time);
+    (void)time(&current_time);
+    srand((unsigned int)current_time);
 #endif
 
 //    randomize();
-  pages[0] = 0;
-
-  TheMainWindow = new MainWindow(NULL,
-                                 wxID_ANY,
-                                 _T("wxPoem"),
-                                 wxPoint(XPos, YPos),
-                                 wxDefaultSize,
-                                 wxCAPTION|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxCLOSE_BOX|wxFULL_REPAINT_ON_RESIZE
-                                 );
+    pages[0] = 0;
 
-  TheMainWindow->SetIcon(wxICON(wxpoem));
+    TheMainWindow = new MainWindow(NULL,
+                                   wxID_ANY,
+                                   wxT("wxPoem"),
+                                   wxPoint(XPos, YPos),
+                                   wxDefaultSize,
+                                   wxCAPTION|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxCLOSE_BOX|wxFULL_REPAINT_ON_RESIZE
+                                   );
 
-  TheMainWindow->canvas = new MyCanvas(TheMainWindow);
-
-  if (argc > 1)
-  {
-    index_filename = wxStrcpy(new wxChar[wxStrlen(argv[1]) + 1], argv[1]);
-    data_filename = wxStrcpy(new wxChar[wxStrlen(argv[1]) + 1], argv[1]);
-  }
-  else
-  {
-    index_filename = _T(DEFAULT_POETRY_IND);
-    data_filename = _T(DEFAULT_POETRY_DAT);
-  }
-  TryLoadIndex();
+    TheMainWindow->canvas = new MyCanvas(TheMainWindow);
 
-#ifdef __WXMSW__
-  Corner1 = new wxIcon(_T("icon_1"));
-  Corner2 = new wxIcon(_T("icon_2"));
-  Corner3 = new wxIcon(_T("icon_3"));
-  Corner4 = new wxIcon(_T("icon_4"));
-#endif
-#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXX11__)
-  Corner1 = new wxIcon( corner1_xpm );
-  Corner2 = new wxIcon( corner2_xpm );
-  Corner3 = new wxIcon( corner3_xpm );
-  Corner4 = new wxIcon( corner4_xpm );
-#endif
+    if (argc > 1)
+    {
+        index_filename = wxStrcpy(new wxChar[wxStrlen(argv[1]) + 1], argv[1]);
+        data_filename = wxStrcpy(new wxChar[wxStrlen(argv[1]) + 1], argv[1]);
+    }
+    else
+    {
+        index_filename = wxT(DEFAULT_POETRY_IND);
+        data_filename = wxT(DEFAULT_POETRY_DAT);
+    }
+    TryLoadIndex();
 
-  TheMainWindow->GetIndexLoadPoem();
-  TheMainWindow->Resize();
-  TheMainWindow->Show(true);
+    TheMainWindow->GetIndexLoadPoem();
+    TheMainWindow->Resize();
+    TheMainWindow->Show(true);
 
-  return true;
+    return true;
 }
 
 int MyApp::OnExit()
 {
-  if (backingBitmap)
-    delete backingBitmap;
-  delete GreyPen;
-  delete DarkGreyPen;
-  delete WhitePen;
-
-  delete Corner1;
-  delete Corner2;
-  delete Corner3;
-  delete Corner4;
+    if (backingBitmap)
+        delete backingBitmap;
 
-  delete[] poem_buffer;
+    delete[] poem_buffer;
 
-  return 0;
+    return 0;
 }
 
 void MainWindow::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 {
-  WritePreferences();
-  this->Destroy();
+    WritePreferences();
+    this->Destroy();
 }
 
 void MainWindow::OnChar(wxKeyEvent& event)
@@ -616,20 +593,20 @@ MyCanvas::MyCanvas(wxFrame *frame):
           wxWindow(frame, wxID_ANY)
 {
     m_popupMenu = new wxMenu;
-    m_popupMenu->Append(POEM_NEXT, _T("Next poem/page"));
-    m_popupMenu->Append(POEM_PREVIOUS, _T("Previous page"));
+    m_popupMenu->Append(POEM_NEXT, wxT("Next poem/page"));
+    m_popupMenu->Append(POEM_PREVIOUS, wxT("Previous page"));
     m_popupMenu->AppendSeparator();
-    m_popupMenu->Append(POEM_SEARCH, _T("Search"));
-    m_popupMenu->Append(POEM_NEXT_MATCH, _T("Next match"));
-    m_popupMenu->Append(POEM_COPY, _T("Copy to clipboard"));
-    m_popupMenu->Append(POEM_MINIMIZE, _T("Minimize"));
+    m_popupMenu->Append(POEM_SEARCH, wxT("Search"));
+    m_popupMenu->Append(POEM_NEXT_MATCH, wxT("Next match"));
+    m_popupMenu->Append(POEM_COPY, wxT("Copy to clipboard"));
+    m_popupMenu->Append(POEM_MINIMIZE, wxT("Minimize"));
     m_popupMenu->AppendSeparator();
-    m_popupMenu->Append(POEM_BIGGER_TEXT, _T("Bigger text"));
-    m_popupMenu->Append(POEM_SMALLER_TEXT, _T("Smaller text"));
+    m_popupMenu->Append(POEM_BIGGER_TEXT, wxT("Bigger text"));
+    m_popupMenu->Append(POEM_SMALLER_TEXT, wxT("Smaller text"));
     m_popupMenu->AppendSeparator();
-    m_popupMenu->Append(POEM_ABOUT, _T("About wxPoem"));
+    m_popupMenu->Append(POEM_ABOUT, wxT("About wxPoem"));
     m_popupMenu->AppendSeparator();
-    m_popupMenu->Append(POEM_EXIT, _T("Exit"));
+    m_popupMenu->Append(POEM_EXIT, wxT("Exit"));
 }
 
 MyCanvas::~MyCanvas()
@@ -729,7 +706,7 @@ void MyCanvas::OnChar(wxKeyEvent& event)
 }
 
 // Load index file
-int LoadIndex(wxChar *file_name)
+int LoadIndex(const wxChar *file_name)
 {
     long data;
     FILE *index_file;
@@ -739,17 +716,17 @@ int LoadIndex(wxChar *file_name)
     if (file_name == NULL)
         return 0;
 
-    wxSprintf(buf, _T("%s.idx"), file_name);
+    wxSprintf(buf, wxT("%s.idx"), file_name);
 
-    index_file = wxFopen(buf, _T("r"));
+    index_file = wxFopen(buf, wxT("r"));
     if (index_file == NULL)
         return 0;
 
-    wxFscanf(index_file, _T("%ld"), &nitems);
+    wxFscanf(index_file, wxT("%ld"), &nitems);
 
     for (int i = 0; i < nitems; i++)
     {
-        wxFscanf(index_file, _T("%ld"), &data);
+        wxFscanf(index_file, wxT("%ld"), &data);
         poem_index[i] = data;
     }
 
@@ -764,7 +741,7 @@ int GetIndex()
     int indexn = (int)(rand() % nitems);
 
     if ((indexn < 0) || (indexn > nitems))
-    { PoetryError(_T("No such poem!"));
+    { PoetryError(wxT("No such poem!"));
       return -1;
     }
     else
@@ -774,11 +751,13 @@ int GetIndex()
 // Read preferences
 void MainWindow::ReadPreferences()
 {
+/* TODO: convert this code to use wxConfig
 #if wxUSE_RESOURCES
-    wxGetResource(_T("wxPoem"), _T("FontSize"), &pointSize);
-    wxGetResource(_T("wxPoem"), _T("X"), &XPos);
-    wxGetResource(_T("wxPoem"), _T("Y"), &YPos);
+    wxGetResource(wxT("wxPoem"), wxT("FontSize"), &pointSize);
+    wxGetResource(wxT("wxPoem"), wxT("X"), &XPos);
+    wxGetResource(wxT("wxPoem"), wxT("Y"), &YPos);
 #endif
+*/
 }
 
 // Write preferences to disk
@@ -786,18 +765,20 @@ void MainWindow::WritePreferences()
 {
 #ifdef __WXMSW__
     TheMainWindow->GetPosition(&XPos, &YPos);
+/* TODO: convert this code to use wxConfig
 #if wxUSE_RESOURCES
-    wxWriteResource(_T("wxPoem"), _T("FontSize"), pointSize);
-    wxWriteResource(_T("wxPoem"), _T("X"), XPos);
-    wxWriteResource(_T("wxPoem"), _T("Y"), YPos);
+    wxWriteResource(wxT("wxPoem"), wxT("FontSize"), pointSize);
+    wxWriteResource(wxT("wxPoem"), wxT("X"), XPos);
+    wxWriteResource(wxT("wxPoem"), wxT("Y"), YPos);
 #endif
+*/
 #endif
 }
 
 // Load a poem from given file, at given point in file.
 // If position is > -1, use this for the position in the
 // file, otherwise use index[index_ptr] to find the correct position.
-bool LoadPoem(wxChar *file_name, long position)
+bool LoadPoem(const wxChar *file_name, long position)
 {
 //    int j = 0;
 //    int indexn = 0;
@@ -810,17 +791,17 @@ bool LoadPoem(wxChar *file_name, long position)
 
     if (file_name == NULL)
     {
-      wxSprintf(error_buf, _T("Error in Poem loading."));
+      wxSprintf(error_buf, wxT("Error in Poem loading."));
       PoetryError(error_buf);
       return false;
     }
 
-    wxSprintf(buf, _T("%s.dat"), file_name);
-    data_file = wxFopen(buf, _T("r"));
+    wxSprintf(buf, wxT("%s.dat"), file_name);
+    data_file = wxFopen(buf, wxT("r"));
 
     if (data_file == NULL)
     {
-      wxSprintf(error_buf, _T("Data file %s not found."), buf);
+      wxSprintf(error_buf, wxT("Data file %s not found."), buf);
       PoetryError(error_buf);
       return false;
     }
@@ -847,9 +828,9 @@ bool LoadPoem(wxChar *file_name, long position)
         poem_buffer[i] = (wxChar)ch;
         i ++;
 
-        if (i == buf_size)
+        if (i == BUFFER_SIZE)
         {
-            wxSprintf(error_buf, _T("%s"), _T("Poetry buffer exceeded."));
+            wxSprintf(error_buf, wxT("%s"), wxT("Poetry buffer exceeded."));
             PoetryError(error_buf);
             return false;
         }
@@ -866,14 +847,14 @@ long MainWindow::DoSearch(void)
         return false;
 
     FILE *file;
-    long i = 0;
+    size_t i = 0;
     int ch = 0;
     wxChar buf[100];
     long find_start;
     long previous_poem_start;
 
     bool found = false;
-    int search_length = m_searchString.length();
+    size_t search_length = m_searchString.length();
 
     if (same_search)
     {
@@ -888,12 +869,12 @@ long MainWindow::DoSearch(void)
     }
 
     if (data_filename)
-        wxSprintf(buf, _T("%s.dat"), data_filename);
+        wxSprintf(buf, wxT("%s.dat"), data_filename);
 
-    file = wxFopen(buf, _T("r"));
+    file = wxFopen(buf, wxT("r"));
     if (! (data_filename && file))
     {
-        wxSprintf(error_buf, _T("Poetry data file %s not found\n"), buf);
+        wxSprintf(error_buf, wxT("Poetry data file %s not found\n"), buf);
         PoetryError(error_buf);
         return false;
     }
@@ -907,7 +888,7 @@ long MainWindow::DoSearch(void)
 
         // Only match if we're looking at a different poem
         // (no point in displaying the same poem again)
-        if ((ch == m_searchString[i]) && (last_poem_start != previous_poem_start))
+        if ((m_searchString[i] == ch) && (last_poem_start != previous_poem_start))
         {
             if (i == 0)
                 last_find = ftell(file);
@@ -947,19 +928,19 @@ void TryLoadIndex()
     index_ok = (LoadIndex(index_filename) != 0);
     if (!index_ok || (nitems == 0))
     {
-        PoetryError(_T("Index file not found; will compile new one"), _T("wxPoem"));
+        PoetryError(wxT("Index file not found; will compile new one"), wxT("wxPoem"));
         index_ok = Compile();
     }
 }
 
 // Error message
-void PoetryError(wxChar *msg, wxChar *caption)
+void PoetryError(const wxChar *msg, const wxChar *caption)
 {
     wxMessageBox(msg, caption, wxOK|wxICON_EXCLAMATION);
 }
 
 // Notification (change icon to something appropriate!)
-void PoetryNotify(wxChar *Msg, wxChar *caption)
+void PoetryNotify(const wxChar *Msg, const wxChar *caption)
 {
     wxMessageBox(Msg, caption, wxOK | wxICON_INFORMATION);
 }
@@ -974,12 +955,12 @@ bool Compile(void)
     wxChar buf[100];
 
     if (data_filename)
-        wxSprintf(buf, _T("%s.dat"), data_filename);
+        wxSprintf(buf, wxT("%s.dat"), data_filename);
 
-    file = wxFopen(buf, _T("r"));
+    file = wxFopen(buf, wxT("r"));
     if (! (data_filename && file))
     {
-        wxSprintf(error_buf, _T("Poetry data file %s not found\n"), buf);
+        wxSprintf(error_buf, wxT("Poetry data file %s not found\n"), buf);
         PoetryError(error_buf);
         return false;
     }
@@ -1006,22 +987,22 @@ bool Compile(void)
     fclose(file);
 
     if (index_filename)
-      wxSprintf(buf, _T("%s.idx"), index_filename);
+      wxSprintf(buf, wxT("%s.idx"), index_filename);
 
-    file = wxFopen(buf, _T("w"));
+    file = wxFopen(buf, wxT("w"));
     if (! (data_filename && file))
     {
-        wxSprintf(error_buf, _T("Poetry index file %s cannot be created\n"), buf);
+        wxSprintf(error_buf, wxT("Poetry index file %s cannot be created\n"), buf);
         PoetryError(error_buf);
         return false;
     }
 
-    wxFprintf(file, _T("%ld\n\n"), nitems);
+    wxFprintf(file, wxT("%ld\n\n"), nitems);
     for (j = 0; j < nitems; j++)
-        wxFprintf(file, _T("%ld\n"), poem_index[j]);
+        wxFprintf(file, wxT("%ld\n"), poem_index[j]);
 
     fclose(file);
-    PoetryNotify(_T("Poetry index compiled."));
+    PoetryNotify(wxT("Poetry index compiled."));
     return true;
 }
 
@@ -1055,18 +1036,18 @@ void MainWindow::OnPopup(wxCommandEvent& event)
             {
                 static wxString s;
                 s = poem_buffer;
-                s.Replace( _T("@P"),wxEmptyString);
-                s.Replace( _T("@A "),wxEmptyString);
-                s.Replace( _T("@A"),wxEmptyString);
-                s.Replace( _T("@T "),wxEmptyString);
-                s.Replace( _T("@T"),wxEmptyString);
+                s.Replace( wxT("@P"),wxEmptyString);
+                s.Replace( wxT("@A "),wxEmptyString);
+                s.Replace( wxT("@A"),wxEmptyString);
+                s.Replace( wxT("@T "),wxEmptyString);
+                s.Replace( wxT("@T"),wxEmptyString);
                 wxTextDataObject *data = new wxTextDataObject( s.c_str() );
                 if (!wxTheClipboard->SetData( data ))
-                    wxMessageBox(_T("Error while copying to the clipboard."));
+                    wxMessageBox(wxT("Error while copying to the clipboard."));
             }
             else
             {
-                wxMessageBox(_T("Error opening the clipboard."));
+                wxMessageBox(wxT("Error opening the clipboard."));
             }
             wxTheClipboard->Close();
             break;
@@ -1085,8 +1066,8 @@ void MainWindow::OnPopup(wxCommandEvent& event)
             }
             break;
         case POEM_ABOUT:
-            (void)wxMessageBox(_T("wxPoem Version 1.1\nJulian Smart (c) 1995"),
-                               _T("About wxPoem"), wxOK, TheMainWindow);
+            (void)wxMessageBox(wxT("wxPoem Version 1.1\nJulian Smart (c) 1995"),
+                               wxT("About wxPoem"), wxOK, TheMainWindow);
             break;
         case POEM_EXIT:
             // Exit