X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c7bde65d2b8d1d735eb0e8343f7b9c0b43acf04b..b5ec0c78b521cfa0f276e4d5d830f35b4fa26e91:/demos/poem/wxpoem.cpp diff --git a/demos/poem/wxpoem.cpp b/demos/poem/wxpoem.cpp index 334027ae0b..41221b2504 100644 --- a/demos/poem/wxpoem.cpp +++ b/demos/poem/wxpoem.cpp @@ -14,10 +14,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "wxpoem.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -31,15 +27,13 @@ #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(¤t_time); - srand((unsigned int)current_time); + (void)time(¤t_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