Applied patch #845402 ("RichEdit sample fixing and cleaning"); In addition made compilation with MSVC (nearly) warning free+some more cleaning up.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24613 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Dimitri Schoolwerth
2003-11-20 17:43:57 +00:00
parent 6c3b4aae47
commit 62a1177692
8 changed files with 3286 additions and 2953 deletions

View File

@@ -136,7 +136,7 @@ public:
deleted by list. See the constructor for more details. deleted by list. See the constructor for more details.
@param ownsflag if true, list will own entries @param ownsflag if true, list will own entries
*/ */
void ownsObjects(bool ownsflag = true) void ownsObjects(bool ownsflag)
{ ownsEntries = ownsflag; } { ownsEntries = ownsflag; }
/** Query whether list owns entries. /** Query whether list owns entries.
@@ -236,7 +236,10 @@ protected:
param iterator i param iterator i
*/ */
inline void deleteContent(iterator i) inline void deleteContent(iterator i)
{ if(ownsEntries) delete *i; } {
iterator *i_ptr = &i;
if(ownsEntries) delete i_ptr;
}
private: private:

View File

@@ -17,8 +17,8 @@
#endif #endif
#include "wxLayout.h" #include "wxLayout.h"
#include <wx/textfile.h> #include "wx/textfile.h"
#include <wx/image.h> #include "wx/image.h"
#if wxUSE_IOSTREAMH #if wxUSE_IOSTREAMH
#include <iostream.h> #include <iostream.h>
@@ -26,7 +26,10 @@
#include <iostream> #include <iostream>
#endif #endif
#include "Micon.xpm" #include "wx/wfstream.h"
#include "wx/txtstrm.h"
#include "Micon.xpm"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -69,9 +72,9 @@ BEGIN_EVENT_TABLE(MyFrame,wxFrame)
END_EVENT_TABLE() END_EVENT_TABLE()
MyFrame::MyFrame(void) : MyFrame::MyFrame() :
wxFrame( (wxFrame *) NULL, -1, _T("wxLayout"), wxFrame( (wxFrame *) NULL, wxID_ANY, _T("wxLayout"),
wxPoint(880,100), wxSize(256,256) ) wxDefaultPosition, wxDefaultSize )
{ {
CreateStatusBar( 2 ); CreateStatusBar( 2 );
@@ -119,7 +122,7 @@ MyFrame::MyFrame(void) :
menu_bar->Append(edit_menu, _T("&Edit") ); menu_bar->Append(edit_menu, _T("&Edit") );
#ifndef __WXMSW__ #ifndef __WXMSW__
menu_bar->Show( TRUE ); menu_bar->Show(true);
#endif // MSW #endif // MSW
SetMenuBar( menu_bar ); SetMenuBar( menu_bar );
@@ -157,12 +160,13 @@ MyFrame::MyFrame(void) :
#endif // 0 #endif // 0
}; };
void void MyFrame::AddSampleText(wxLayoutList *llist)
MyFrame::AddSampleText(wxLayoutList *llist)
{ {
llist->Clear(wxSWISS,16,wxNORMAL,wxNORMAL, false); llist->Clear(wxSWISS,16,wxNORMAL,wxNORMAL, false);
llist->SetFont(-1,-1,-1,-1,-1,_T("blue")); llist->SetFont(-1,-1,-1,-1,-1,_T("blue"));
llist->Insert(_T("blue")); llist->Insert(_T("blue"));
llist->LineBreak();
llist->SetFont(-1,-1,-1,-1,-1,_T("black")); llist->SetFont(-1,-1,-1,-1,-1,_T("black"));
llist->Insert(_T("The quick brown fox jumps over the lazy dog.")); llist->Insert(_T("The quick brown fox jumps over the lazy dog."));
llist->LineBreak(); llist->LineBreak();
@@ -174,89 +178,96 @@ MyFrame::AddSampleText(wxLayoutList *llist)
llist->SetFont(wxROMAN); llist->SetFont(wxROMAN);
llist->Insert(_T("The quick brown fox jumps over the lazy dog.")); llist->Insert(_T("The quick brown fox jumps over the lazy dog."));
llist->LineBreak(); llist->LineBreak();
llist->Insert(_T("Hello "));
llist->Insert(_T("Hello "));
wxBitmap *icon =
#if wxICON_IS_BITMAP #if wxICON_IS_BITMAP
llist->Insert(new wxLayoutObjectIcon(new wxICON(Micon))); new wxIcon(Micon_xpm)
#else #else
llist->Insert(new wxLayoutObjectIcon(new wxBitmap (wxICON(Micon)))); new wxBitmap (wxIcon(Micon_xpm))
#endif #endif
llist->SetFontWeight(wxBOLD);
llist->Insert(_T("World! "));
llist->SetFontWeight(wxNORMAL);
llist->Insert(_T("The quick brown fox jumps..."));
llist->LineBreak();
llist->Insert(_T("over the lazy dog."));
llist->SetFont(-1,-1,-1,-1,true);
llist->Insert(_T("underlined"));
llist->SetFont(-1,-1,-1,-1,false);
llist->SetFont(wxROMAN);
llist->Insert(_T("This is "));
llist->SetFont(-1,-1,-1,wxBOLD); llist->Insert(_T("BOLD ")); llist->SetFont(-1,-1,-1,wxNORMAL);
llist->Insert(_T("and "));
llist->SetFont(-1,-1,wxITALIC);
llist->Insert(_T("italics "));
llist->SetFont(-1,-1,wxNORMAL);
llist->LineBreak();
llist->Insert(_T("and "));
llist->SetFont(-1,-1,wxSLANT);
llist->Insert(_T("slanted"));
llist->SetFont(-1,-1,wxNORMAL);
llist->Insert(_T(" text."));
llist->LineBreak();
llist->Insert(_T("and "));
llist->SetFont(-1,-1,-1,-1,-1,_T("blue"));
llist->Insert(_T("blue"));
llist->SetFont(-1,-1,-1,-1,-1,_T("black"));
llist->Insert(_T(" and "));
llist->SetFont(-1,-1,-1,-1,-1,_T("green"),_T("black"));
llist->Insert(_T("green on black"));
llist->SetFont(-1,-1,-1,-1,-1,_T("black"),_T("white"));
llist->Insert(_T(" text."));
llist->LineBreak();
llist->SetFont(-1,-1,wxSLANT); ;
llist->Insert(_T("Slanted"));
llist->SetFont(-1,-1,wxNORMAL);
llist->Insert(_T(" and normal text and "));
llist->SetFont(-1,-1,wxSLANT);
llist->Insert(_T("slanted"));
llist->SetFont(-1,-1,wxNORMAL);
llist->Insert(_T(" again."));
llist->LineBreak();
// add some more text for testing: llist->Insert(new wxLayoutObjectIcon(icon));
llist->Insert(_T("And here the source for the test program:")); llist->SetFontWeight(wxBOLD);
llist->LineBreak(); llist->Insert(_T("World! "));
llist->SetFont(wxTELETYPE,16); llist->SetFontWeight(wxNORMAL);
llist->Insert(_T("And here the source for the test program:")); llist->Insert(_T("The quick brown fox jumps..."));
llist->LineBreak(); llist->LineBreak();
llist->Insert(_T("And here the source for the test program:"));
llist->LineBreak();
llist->Insert(_T("And here the source for the test program:"));
wxFile file( _T("wxLayout.cpp") ); llist->Insert(_T("over the lazy dog."));
if ( file.IsOpened() ) llist->SetFont(-1,-1,-1,-1,true);
{ llist->Insert(_T("underlined"));
off_t len = file.Length(); llist->SetFont(-1,-1,-1,-1,false);
wxChar *data = (wxChar *)malloc(2*len); llist->SetFont(wxROMAN);
if ( file.Read(data, len) == len ) llist->Insert(_T("This is "));
{ llist->SetFont(-1,-1,-1,wxBOLD);
wxLayoutImportText(llist, data); llist->Insert(_T("BOLD "));
} llist->SetFont(-1,-1,-1,wxNORMAL);
free(data); llist->Insert(_T("and "));
} llist->SetFont(-1,-1,wxITALIC);
llist->Insert(_T("italics "));
llist->SetFont(-1,-1,wxNORMAL);
llist->LineBreak();
llist->MoveCursorTo(wxPoint(0,0)); llist->Insert(_T("and "));
m_lwin->SetDirty(); llist->SetFont(-1,-1,wxSLANT);
m_lwin->Refresh(); llist->Insert(_T("slanted"));
llist->SetFont(-1,-1,wxNORMAL);
llist->Insert(_T(" text."));
llist->LineBreak();
llist->Insert(_T("and "));
llist->SetFont(-1,-1,-1,-1,-1,_T("blue"));
llist->Insert(_T("blue"));
llist->SetFont(-1,-1,-1,-1,-1,_T("black"));
llist->Insert(_T(" and "));
llist->SetFont(-1,-1,-1,-1,-1,_T("green"),_T("black"));
llist->Insert(_T("green on black"));
llist->SetFont(-1,-1,-1,-1,-1,_T("black"),_T("white"));
llist->Insert(_T(" text."));
llist->LineBreak();
llist->SetFont(-1,-1,wxSLANT);
llist->Insert(_T("Slanted"));
llist->SetFont(-1,-1,wxNORMAL);
llist->Insert(_T(" and normal text and "));
llist->SetFont(-1,-1,wxSLANT);
llist->Insert(_T("slanted"));
llist->SetFont(-1,-1,wxNORMAL);
llist->Insert(_T(" again."));
llist->LineBreak();
// add some more text for testing:
llist->Insert(_T("And here the source for the test program:"));
llist->LineBreak();
llist->SetFont(wxTELETYPE,16);
llist->Insert(_T("And here the source for the test program:"));
llist->LineBreak();
wxTextFile file(_T("wxLayout.cpp"));
if ( file.Open() )
{
for ( wxString s = file.GetFirstLine(); !file.Eof(); s = file.GetNextLine() )
{
wxString line;
llist->Insert(line.Format(_T("%6u: %s"),file.GetCurrentLine()+1,s.c_str()));
llist->LineBreak();
}
}
llist->MoveCursorTo(wxPoint(0,0));
m_lwin->SetDirty();
m_lwin->Refresh();
} }
void void MyFrame::Clear()
MyFrame::Clear(void)
{ {
wxColour colBg(0, 0, 0); wxColour colBg(0, 0, 0);
m_lwin->Clear(wxROMAN,16,wxNORMAL,wxNORMAL, false, wxRED, &colBg); m_lwin->Clear(wxROMAN,16,wxNORMAL,wxNORMAL, false, wxRED, &colBg);
} }
@@ -265,13 +276,13 @@ void MyFrame::OnCommand( wxCommandEvent &event )
switch (event.GetId()) switch (event.GetId())
{ {
case ID_QUIT: case ID_QUIT:
Close( TRUE ); Close(true);
break; break;
case ID_PRINT: case ID_PRINT:
{ {
wxPrinter printer; wxPrinter printer;
wxLayoutPrintout printout(m_lwin->GetLayoutList(),_("M: Printout")); wxLayoutPrintout printout(m_lwin->GetLayoutList(),_("M: Printout"));
if (! printer.Print(this, &printout, TRUE)) if (! printer.Print(this, &printout, true))
{ {
// Had to remove the split up strings that used to be below, and // Had to remove the split up strings that used to be below, and
// put them into one long strong. Otherwise MSVC would give an // put them into one long strong. Otherwise MSVC would give an
@@ -297,76 +308,100 @@ void MyFrame::OnCommand( wxCommandEvent &event )
Clear(); Clear();
break; break;
case ID_CLICK: case ID_CLICK:
cerr << "Received click event." << endl; wxLogError( _T("Received click event.") );
break; break;
case ID_PASTE: case ID_PASTE:
m_lwin->Paste(TRUE); m_lwin->Paste(true);
m_lwin->Refresh(FALSE); m_lwin->Refresh(false);
break; break;
#ifdef __WXGTK__ #ifdef __WXGTK__
case ID_PASTE_PRIMARY: case ID_PASTE_PRIMARY:
// text only from primary: // text only from primary:
m_lwin->Paste(FALSE, TRUE); m_lwin->Paste(false, true);
m_lwin->Refresh(FALSE); m_lwin->Refresh(false);
break; break;
case ID_COPY_PRIMARY: case ID_COPY_PRIMARY:
// copy text-only to primary selection: // copy text-only to primary selection:
m_lwin->Copy(FALSE,FALSE,TRUE); m_lwin->Copy(false, false, true);
m_lwin->Refresh(FALSE); m_lwin->Refresh(false);
break; break;
#endif #endif
case ID_COPY: case ID_COPY:
m_lwin->Copy(TRUE,TRUE,FALSE); m_lwin->Copy(true, true, false);
m_lwin->Refresh(FALSE); m_lwin->Refresh(false);
break; break;
case ID_CUT: case ID_CUT:
m_lwin->Cut(); m_lwin->Cut();
m_lwin->Refresh(FALSE); m_lwin->Refresh(false);
break; break;
#ifdef M_BASEDIR #ifdef M_BASEDIR
case ID_FIND: case ID_FIND:
m_lwin->Find("void"); m_lwin->Find("void");
m_lwin->Refresh(FALSE); m_lwin->Refresh(false);
break; break;
#endif #endif
case ID_HTML: case ID_HTML:
{ {
wxLayoutExportObject *export0; wxFileDialog
wxLayoutExportStatus status(m_lwin->GetLayoutList()); HTML_dialog( this,
_T("Save As HTML..."),
wxEmptyString,
wxEmptyString,
_T("HTML file (*.html)|*.html|Text file (*.txt)|*.txt|Any file (*)|*"),
wxSAVE|wxOVERWRITE_PROMPT
);
if (HTML_dialog.ShowModal() == wxID_OK)
{
wxFFileOutputStream output( HTML_dialog.GetPath() );
wxTextOutputStream textout( output );
cout << "<HTML>" << endl; wxLayoutExportObject *export0;
while((export0 = wxLayoutExport( &status, wxString object;
WXLO_EXPORT_AS_HTML)) != NULL) wxLayoutExportStatus status(m_lwin->GetLayoutList());
while((export0 = wxLayoutExport( &status, WXLO_EXPORT_AS_HTML)) != NULL)
{ {
if(export0->type == WXLO_EXPORT_HTML) if(export0->type == WXLO_EXPORT_HTML)
cout << *(export0->content.text); object = *(export0->content.text);
else else
; // ignore itcout << "<!--UNKNOWN OBJECT>"; ; // ignore "<!--UNKNOWN OBJECT>";
delete export0; delete export0;
textout << object;
}
} }
break; break;
} }
case ID_TEXT: case ID_TEXT:
{ {
wxLayoutExportObject *export0; wxFileDialog
wxLayoutExportStatus status(m_lwin->GetLayoutList()); TEXT_dialog( this,
_T("Save As TXT..."),
wxEmptyString,
wxEmptyString,
_T("Text file (*.txt)|*.txt|Any file (*)|*"),
wxSAVE|wxOVERWRITE_PROMPT
);
if (TEXT_dialog.ShowModal() == wxID_OK)
{
wxFFileOutputStream output( TEXT_dialog.GetPath() );
wxTextOutputStream textout( output );
wxLayoutExportObject *export0;
wxString object;
wxLayoutExportStatus status(m_lwin->GetLayoutList());
while((export0 = wxLayoutExport( &status, WXLO_EXPORT_AS_TEXT)) != NULL) while((export0 = wxLayoutExport( &status, WXLO_EXPORT_AS_TEXT)) != NULL)
{ {
if(export0->type == WXLO_EXPORT_TEXT) if(export0->type == WXLO_EXPORT_TEXT)
cout << *(export0->content.text); object = *(export0->content.text);
else else
cout << "<!--UNKNOWN OBJECT>"; object = _T("<!--UNKNOWN OBJECT>");
delete export0; delete export0;
textout << object;
}
} }
break; break;
} }
case ID_LONG_TEST: case ID_LONG_TEST:
{ {
wxString line; wxString line;
@@ -400,6 +435,7 @@ void MyFrame::OnCommand( wxCommandEvent &event )
// wxLayoutWindow should have a flag m_highlightUrls and do it itself // wxLayoutWindow should have a flag m_highlightUrls and do it itself
// (instead of doing it manually like M does now) // (instead of doing it manually like M does now)
m_lwin->GetLayoutList()->Insert(_T("http://www.wxwindows.org/")); m_lwin->GetLayoutList()->Insert(_T("http://www.wxwindows.org/"));
m_lwin->Refresh();
} }
}; };
@@ -412,7 +448,7 @@ void MyFrame::OnPrint(wxCommandEvent& WXUNUSED(event))
#endif #endif
wxPrinter printer; wxPrinter printer;
wxLayoutPrintout printout( m_lwin->GetLayoutList(), _T("Printout from wxLayout")); wxLayoutPrintout printout( m_lwin->GetLayoutList(), _T("Printout from wxLayout"));
if (! printer.Print(this, &printout, TRUE)) if (! printer.Print(this, &printout, true))
wxMessageBox( wxMessageBox(
_T("There was a problem printing.\nPerhaps your current printer is not set correctly?"), _T("There was a problem printing.\nPerhaps your current printer is not set correctly?"),
_T("Printing"), wxOK); _T("Printing"), wxOK);
@@ -425,7 +461,7 @@ void MyFrame::OnPrintPS(wxCommandEvent& WXUNUSED(event))
#ifdef OS_UNIX #ifdef OS_UNIX
wxPostScriptPrinter printer; wxPostScriptPrinter printer;
wxLayoutPrintout printout( m_lwin->GetLayoutList(),"My printout"); wxLayoutPrintout printout( m_lwin->GetLayoutList(),"My printout");
printer.Print(this, &printout, TRUE); printer.Print(this, &printout, true);
#endif #endif
} }
@@ -452,7 +488,7 @@ void MyFrame::OnPrintPreview(wxCommandEvent& WXUNUSED(event))
wxPreviewFrame *frame = new wxPreviewFrame(preview, this, _T("Demo Print Preview"), wxPoint(100, 100), wxSize(600, 650)); wxPreviewFrame *frame = new wxPreviewFrame(preview, this, _T("Demo Print Preview"), wxPoint(100, 100), wxSize(600, 650));
frame->Centre(wxBOTH); frame->Centre(wxBOTH);
frame->Initialize(); frame->Initialize();
frame->Show(TRUE); frame->Show(true);
} }
void MyFrame::OnPrintPreviewPS(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnPrintPreviewPS(wxCommandEvent& WXUNUSED(event))
@@ -466,7 +502,7 @@ void MyFrame::OnPrintPreviewPS(wxCommandEvent& WXUNUSED(event))
wxPreviewFrame *frame = new wxPreviewFrame(preview, this, _T("Demo Print Preview"), wxPoint(100, 100), wxSize(600, 650)); wxPreviewFrame *frame = new wxPreviewFrame(preview, this, _T("Demo Print Preview"), wxPoint(100, 100), wxSize(600, 650));
frame->Centre(wxBOTH); frame->Centre(wxBOTH);
frame->Initialize(); frame->Initialize();
frame->Show(TRUE); frame->Show(true);
} }
void MyFrame::OnPrintSetup(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnPrintSetup(wxCommandEvent& WXUNUSED(event))
@@ -531,18 +567,18 @@ void MyFrame::OnPageSetupPS(wxCommandEvent& WXUNUSED(event))
// MyApp // MyApp
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
MyApp::MyApp(void) : MyApp::MyApp() :
wxApp( ) wxApp( )
{ {
}; };
bool MyApp::OnInit(void) bool MyApp::OnInit()
{ {
wxFrame *frame = new MyFrame(); wxFrame *frame = new MyFrame();
wxInitAllImageHandlers(); wxInitAllImageHandlers();
frame->Show( TRUE ); frame->Show( true );
// wxSetAFMPath("/usr/local/src/wxWindows/misc/afm/"); // wxSetAFMPath("/usr/local/src/wxWindows/misc/afm/");
return TRUE; return true;
}; };

View File

@@ -7,7 +7,7 @@
#pragma interface #pragma interface
#endif #endif
#include <wx/wx.h> #include "wx/wx.h"
#include "wxllist.h" #include "wxllist.h"
#include "wxlwindow.h" #include "wxlwindow.h"
@@ -26,14 +26,13 @@ class MyApp;
class MyFrame: public wxFrame class MyFrame: public wxFrame
{ {
DECLARE_DYNAMIC_CLASS(MyFrame)
public: public:
MyFrame(void); MyFrame();
void AddSampleText(wxLayoutList *llist); void AddSampleText(wxLayoutList *llist);
void Clear(void); void Clear();
void OnCommand( wxCommandEvent &event ); void OnCommand( wxCommandEvent &event );
void OnPrint(wxCommandEvent& event); void OnPrint(wxCommandEvent& event);
void OnPrintPreview(wxCommandEvent& event); void OnPrintPreview(wxCommandEvent& event);
@@ -44,11 +43,14 @@ class MyFrame: public wxFrame
void OnPrintSetupPS(wxCommandEvent& event); void OnPrintSetupPS(wxCommandEvent& event);
void OnPageSetupPS(wxCommandEvent& event); void OnPageSetupPS(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
private: private:
wxLayoutWindow *m_lwin; wxLayoutWindow *m_lwin;
wxPrintData m_PrintData; wxPrintData m_PrintData;
DECLARE_DYNAMIC_CLASS(MyFrame)
DECLARE_EVENT_TABLE()
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -57,10 +59,13 @@ private:
class MyApp: public wxApp class MyApp: public wxApp
{ {
public: public:
MyApp();
virtual bool OnInit();
MyApp(void);
virtual bool OnInit(void);
}; };
#endif // __WXCONVERTH__ #endif // __WXCONVERTH__

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -45,6 +45,7 @@ void wxLayoutImportText(wxLayoutList *list, wxString const &str)
// VZ: I still don't like it... the string data may be shared... // VZ: I still don't like it... the string data may be shared...
wxChar * cptr = (wxChar *)str.c_str(); // const_cast wxChar * cptr = (wxChar *)str.c_str(); // const_cast
const wxChar * begin = cptr; const wxChar * begin = cptr;
wxUnusedVar(begin);
wxChar backup; wxChar backup;
for(;;) for(;;)
@@ -165,7 +166,7 @@ wxLayoutExportStatus::wxLayoutExportStatus(wxLayoutList *list)
m_si = list->GetDefaultStyleInfo(); m_si = list->GetDefaultStyleInfo();
m_line = list->GetFirstLine(); m_line = list->GetFirstLine();
m_iterator = m_line->GetFirstObject(); m_iterator = m_line->GetFirstObject();
m_FirstTime = TRUE; m_FirstTime = true;
} }
@@ -215,6 +216,7 @@ wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
else else
type = WXLO_TYPE_TEXT; type = WXLO_TYPE_TEXT;
} }
wxUnusedVar(type);
wxString *str = new wxString(); wxString *str = new wxString();
// text must be concatenated // text must be concatenated
@@ -250,7 +252,7 @@ wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
*str += wxLayoutExportCmdAsHTML( *str += wxLayoutExportCmdAsHTML(
*(wxLayoutObjectCmd const *)*status->m_iterator, *(wxLayoutObjectCmd const *)*status->m_iterator,
& status->m_si, status->m_FirstTime); & status->m_si, status->m_FirstTime);
status->m_FirstTime = FALSE; status->m_FirstTime = false;
break; break;
default: // ignore icons default: // ignore icons
; ;

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,7 @@
#endif #endif
#ifndef USE_PCH #ifndef USE_PCH
# include <wx/wx.h> # include "wx/wx.h"
#endif #endif
#include "wxllist.h" #include "wxllist.h"
@@ -25,270 +25,314 @@
enum enum
{ {
WXLOWIN_MENU_LARGER = WXLOWIN_MENU_FIRST, WXLOWIN_MENU_LARGER = WXLOWIN_MENU_FIRST,
WXLOWIN_MENU_SMALLER, WXLOWIN_MENU_SMALLER,
WXLOWIN_MENU_UNDERLINE, WXLOWIN_MENU_UNDERLINE,
WXLOWIN_MENU_BOLD, WXLOWIN_MENU_BOLD,
WXLOWIN_MENU_ITALICS, WXLOWIN_MENU_ITALICS,
WXLOWIN_MENU_ROMAN, WXLOWIN_MENU_ROMAN,
WXLOWIN_MENU_TYPEWRITER, WXLOWIN_MENU_TYPEWRITER,
WXLOWIN_MENU_SANSSERIF, WXLOWIN_MENU_SANSSERIF,
WXLOWIN_MENU_RCLICK, WXLOWIN_MENU_RCLICK,
WXLOWIN_MENU_DBLCLICK, WXLOWIN_MENU_DBLCLICK,
WXLOWIN_MENU_MDOWN, WXLOWIN_MENU_MDOWN,
WXLOWIN_MENU_LDOWN, WXLOWIN_MENU_LDOWN,
WXLOWIN_MENU_LCLICK = WXLOWIN_MENU_LDOWN, WXLOWIN_MENU_LCLICK = WXLOWIN_MENU_LDOWN,
WXLOWIN_MENU_LUP, WXLOWIN_MENU_LUP,
WXLOWIN_MENU_MOUSEMOVE, WXLOWIN_MENU_MOUSEMOVE,
WXLOWIN_MENU_LAST = WXLOWIN_MENU_MOUSEMOVE WXLOWIN_MENU_LAST = WXLOWIN_MENU_MOUSEMOVE
}; };
/** /**
This class is a rich text editing widget. This class is a rich text editing widget.
*/ */
class wxLayoutWindow : public wxScrolledWindow class wxLayoutWindow : public wxScrolledWindow
{ {
public: public:
/** Constructor. /** Constructor.
@param parent parent window to display this panel in @param parent parent window to display this panel in
*/ */
wxLayoutWindow(wxWindow *parent); wxLayoutWindow(wxWindow *parent);
/// Destructor. /// Destructor.
virtual ~wxLayoutWindow(); virtual ~wxLayoutWindow();
/**@name Editing functionality */ /**@name Editing functionality */
//@{ //@{
/// Clears the window and sets default parameters. /// Clears the window and sets default parameters.
void Clear(int family = wxROMAN, void Clear(int family = wxROMAN,
int size=12, int size = 12,
int style=wxNORMAL, int style = wxNORMAL,
int weight=wxNORMAL, int weight = wxNORMAL,
int underline=0, int underline = 0,
wxColour *fg=NULL, wxColour *fg = NULL,
wxColour *bg=NULL); wxColour *bg = NULL);
/// override base class virtual to also refresh the scrollbar position /// override base class virtual to also refresh the scrollbar position
virtual void Refresh(bool eraseBackground = TRUE, virtual void Refresh(bool eraseBackground = true,
const wxRect *rect = (const wxRect *)NULL); const wxRect *rect = (const wxRect *)NULL);
/** Sets a background image, only used on screen, not on printouts. /** Sets a background image, only used on screen, not on printouts.
@param bitmap a pointer to a wxBitmap or NULL to remove it @param bitmap a pointer to a wxBitmap or NULL to remove it
*/ */
void SetBackgroundBitmap(wxBitmap *bitmap = NULL) void SetBackgroundBitmap(wxBitmap *bitmap = NULL)
{ {
if(m_BGbitmap) delete m_BGbitmap; if(m_BGbitmap) delete m_BGbitmap;
m_BGbitmap = bitmap; m_BGbitmap = bitmap;
} }
/// Enable or disable editing, i.e. processing of keystrokes.
void SetEditable(bool toggle)
{ m_Editable = toggle; SetCursorVisibility(toggle); }
/// Query whether list can be edited by user.
bool IsEditable(void) const { return m_Editable; }
/** Sets cursor visibility, visible=1, invisible=0,
visible-on-demand=-1, to hide it until moved.
@param visibility -1,0 or 1
@return the old visibility
*/
inline int SetCursorVisibility(int visibility = -1)
{ int v =m_CursorVisibility;
m_CursorVisibility = visibility; return v;}
/// Pastes text from clipboard. /// Enable or disable editing, i.e. processing of keystrokes.
void Paste(bool privateFormat = FALSE, bool usePrimarySelection = FALSE); void SetEditable(bool toggle)
/** Copies selection to clipboard. {
@param invalidate used internally, see wxllist.h for details m_Editable = toggle;
*/ SetCursorVisibility(toggle);
bool Copy(bool invalidate = true, bool privateFormat = FALSE, bool primary = FALSE); }
/// Copies selection to clipboard and deletes it.
bool Cut(bool privateFormat = FALSE, bool usePrimary = FALSE);
//@}
/// find string in buffer /// Query whether list can be edited by user.
bool Find(const wxString &needle, bool IsEditable() const { return m_Editable; }
wxPoint * fromWhere = NULL,
const wxString &configPath = _T("MsgViewFindString"));
/// find the same string again
bool FindAgain(void);
void EnablePopup(bool enable = true) { m_DoPopupMenu = enable; } /** Sets cursor visibility, visible=1, invisible=0,
visible-on-demand=-1, to hide it until moved.
@param visibility -1,0 or 1
@return the old visibility
*/
inline int SetCursorVisibility(int visibility = -1)
{
int v =m_CursorVisibility;
m_CursorVisibility = visibility; return v;
}
/** Sets the wrap margin. /// Pastes text from clipboard.
@param margin set this to 0 to disable it void Paste(bool privateFormat = false, bool usePrimarySelection = false);
*/
void SetWrapMargin(CoordType margin) { m_WrapMargin = margin; }
/** Toggle wordwrap as we type. /** Copies selection to clipboard.
@param on true to activate word wrap @param invalidate used internally, see wxllist.h for details
*/ */
void SetWordWrap(bool on = true) { m_DoWordWrap = on; } bool Copy(bool invalidate = true, bool privateFormat = false, bool primary = false);
/** Redraws the window. /// Copies selection to clipboard and deletes it.
Internally, this stores the parameter and calls a refresh on bool Cut(bool privateFormat = false, bool usePrimary = false);
wxMSW, draws directly on wxGTK. //@}
*/
void RequestUpdate(const wxRect *updateRect = NULL);
/// if exact == false, assume 50% extra size for the future /// find string in buffer
void ResizeScrollbars(bool exact = false); // don't change this to true! bool Find(const wxString &needle,
wxPoint * fromWhere = NULL,
const wxString &configPath = _T("MsgViewFindString"));
/// if the flag is true, we send events when user clicks on embedded objects /// find the same string again
inline void SetMouseTracking(bool doIt = true) { m_doSendEvents = doIt; } bool FindAgain();
/* Returns a pointer to the wxLayoutList object. void EnablePopup(bool enable = true) { m_DoPopupMenu = enable; }
@return the list
*/
wxLayoutList * GetLayoutList(void) { return m_llist; }
/**@name Callbacks */ /** Sets the wrap margin.
//@{ @param margin set this to 0 to disable it
void OnSize(wxSizeEvent &event); */
void OnPaint(wxPaintEvent &event); void SetWrapMargin(CoordType margin) { m_WrapMargin = margin; }
void OnChar(wxKeyEvent& event);
void OnKeyUp(wxKeyEvent& event);
void OnUpdateMenuUnderline(wxUpdateUIEvent& event);
void OnUpdateMenuBold(wxUpdateUIEvent& event);
void OnUpdateMenuItalic(wxUpdateUIEvent& event);
void OnMenu(wxCommandEvent& event);
void OnLeftMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LDOWN, event); }
void OnLeftMouseUp(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LUP, event); }
void OnRightMouseClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_RCLICK, event); }
void OnMiddleMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_MDOWN, event); }
void OnMouseDblClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_DBLCLICK, event); }
void OnMouseMove(wxMouseEvent &event) { OnMouse(WXLOWIN_MENU_MOUSEMOVE, event) ; }
void OnSetFocus(wxFocusEvent &ev);
void OnKillFocus(wxFocusEvent &ev);
//@}
/// Creates a wxMenu for use as a format popup. /** Toggle wordwrap as we type.
static wxMenu * MakeFormatMenu(void); @param on true to activate word wrap
/// Redraws the window, used by RequestUpdate() or OnPaint(). */
void InternalPaint(const wxRect *updateRect); void SetWordWrap(bool on = true) { m_DoWordWrap = on; }
/** Redraws the window.
Internally, this stores the parameter and calls a refresh on
wxMSW, draws directly on wxGTK.
*/
void RequestUpdate(const wxRect *updateRect = NULL);
/// if exact == false, assume 50% extra size for the future
void ResizeScrollbars(bool exact = false); // don't change this to true!
/// if the flag is true, we send events when user clicks on embedded objects
inline void SetMouseTracking(bool doIt = true) { m_doSendEvents = doIt; }
/** Returns a pointer to the wxLayoutList object.
@return the list
*/
wxLayoutList * GetLayoutList() { return m_llist; }
/**@name Callbacks */
//@{
void OnSize(wxSizeEvent &event);
void OnPaint(wxPaintEvent &event);
void OnChar(wxKeyEvent& event);
void OnKeyUp(wxKeyEvent& event);
void OnUpdateMenuUnderline(wxUpdateUIEvent& event);
void OnUpdateMenuBold(wxUpdateUIEvent& event);
void OnUpdateMenuItalic(wxUpdateUIEvent& event);
void OnMenu(wxCommandEvent& event);
void OnLeftMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LDOWN, event); }
void OnLeftMouseUp(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LUP, event); }
void OnRightMouseClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_RCLICK, event); }
void OnMiddleMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_MDOWN, event); }
void OnMouseDblClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_DBLCLICK, event); }
void OnMouseMove(wxMouseEvent &event) { OnMouse(WXLOWIN_MENU_MOUSEMOVE, event) ; }
void OnSetFocus(wxFocusEvent &ev);
void OnKillFocus(wxFocusEvent &ev);
//@}
/// Creates a wxMenu for use as a format popup.
static wxMenu * MakeFormatMenu();
/// Redraws the window, used by RequestUpdate() or OnPaint().
void InternalPaint(const wxRect *updateRect);
/** Tell window to update a wxStatusBar with UserData labels and
cursor positions.
@param bar wxStatusBar pointer
@param labelfield field to use in statusbar for URLs/userdata labels, or -1 to disable
@param cursorfield field to use for cursor position, or -1 to disable
*/
void SetStatusBar(class wxStatusBar *bar,
int labelfield = -1,
int cursorfield = -1)
{
m_StatusBar = bar; m_StatusFieldLabel = labelfield;
m_StatusFieldCursor = cursorfield;
}
/** Tell window to update a wxStatusBar with UserData labels and
cursor positions.
@param bar wxStatusBar pointer
@param labelfield field to use in statusbar for URLs/userdata labels, or -1 to disable
@param cursorfield field to use for cursor position, or -1 to disable
*/
void SetStatusBar(class wxStatusBar *bar,
int labelfield = -1,
int cursorfield = -1)
{
m_StatusBar = bar; m_StatusFieldLabel = labelfield;
m_StatusFieldCursor = cursorfield;
}
#ifndef __WXMSW__ #ifndef __WXMSW__
/// Enable or disable focus follow mode under non-MSW /// Enable or disable focus follow mode under non-MSW
void SetFocusFollowMode(bool enable = TRUE) void SetFocusFollowMode(bool enable = true)
{ m_FocusFollowMode = enable; } {
m_FocusFollowMode = enable;
}
#endif #endif
/**@name Modified flag handling, will not get reset by list unless /** @name Modified flag handling, will not get reset by list unless
in Clear() */ in Clear() */
//@{ //@{
/// Set dirty flag. /// Set dirty flag.
void SetModified(bool modified = TRUE) { m_Modified = modified; } void SetModified(bool modified = true) { m_Modified = modified; }
/// Query whether window needs redrawing.
bool IsModified(void) const { return m_Modified; }
//@}
/**@name Dirty flag handling for optimisations. /// Query whether window needs redrawing.
Normally one should only need to call SetDirty(), e.g. when bool IsModified() const { return m_Modified; }
manipulating the wxLayoutList directly, so the window will update //@}
itself. ResetDirty() and IsDirty() should only be used
internally. */ /**
//@{ @name Dirty flag handling for optimisations.
/// Set dirty flag. Normally one should only need to call SetDirty(), e.g. when
void SetDirty(void) { m_Dirty = true; m_Modified = true; } manipulating the wxLayoutList directly, so the window will update
/// Query whether window needs redrawing. itself. ResetDirty() and IsDirty() should only be used
bool IsDirty(void) const { return m_Dirty; } internally. */
/// Reset dirty flag. //@{
void ResetDirty(void) { m_Dirty = false; } /// Set dirty flag.
//@} void SetDirty() { m_Dirty = true; m_Modified = true; }
/// Query whether window needs redrawing.
bool IsDirty() const { return m_Dirty; }
/// Reset dirty flag.
void ResetDirty() { m_Dirty = false; }
//@}
protected: protected:
/// generic function for mouse events processing /// generic function for mouse events processing
void OnMouse(int eventId, wxMouseEvent& event); void OnMouse(int eventId, wxMouseEvent& event);
/// as the name says
void ScrollToCursor(void);
/// for sending events
wxWindow *m_Parent;
/// Shall we send events?
bool m_doSendEvents;
/// Where does the current view start?
int m_ViewStartX; int m_ViewStartY;
/// Do we currently have the focus?
bool m_HaveFocus;
/// do we handle clicks of the right mouse button?
bool m_DoPopupMenu;
/// Should InternalPaint() scroll to cursor (VZ: seems unused any more)
bool m_ScrollToCursor;
/// Do we currently have a non-standard cursor?
bool m_HandCursor;
/// the menu
wxMenu * m_PopupMenu;
/// for derived classes, set when mouse is clicked
wxPoint m_ClickPosition;
/// for scrollbar calculations:
int m_maxx;
int m_maxy;
int m_lineHeight;
/// do we want automatic word wrap?
bool m_DoWordWrap;
/// wrap margin
CoordType m_WrapMargin;
/// do we have the corresponding scrollbar? /// as the name says
bool m_hasHScrollbar, void ScrollToCursor();
/// for sending events
wxWindow *m_Parent;
/// Shall we send events?
bool m_doSendEvents;
/// Where does the current view start?
int m_ViewStartX; int m_ViewStartY;
/// Do we currently have the focus?
bool m_HaveFocus;
/// do we handle clicks of the right mouse button?
bool m_DoPopupMenu;
/// Should InternalPaint() scroll to cursor (VZ: seems unused any more)
bool m_ScrollToCursor;
/// Do we currently have a non-standard cursor?
bool m_HandCursor;
/// the menu
wxMenu * m_PopupMenu;
/// for derived classes, set when mouse is clicked
wxPoint m_ClickPosition;
/// for scrollbar calculations:
int m_maxx;
int m_maxy;
int m_lineHeight;
/// do we want automatic word wrap?
bool m_DoWordWrap;
/// wrap margin
CoordType m_WrapMargin;
/// do we have the corresponding scrollbar?
bool m_hasHScrollbar,
m_hasVScrollbar; m_hasVScrollbar;
/** Visibility parameter for cursor. 0/1 as expected, -1: visible /** Visibility parameter for cursor. 0/1 as expected, -1: visible
on demand. on demand.
*/ */
int m_CursorVisibility; int m_CursorVisibility;
bool SetAutoDeleteSelection(bool enable = TRUE) bool SetAutoDeleteSelection(bool enable = true)
{ {
bool old = m_AutoDeleteSelection; bool old = m_AutoDeleteSelection;
m_AutoDeleteSelection = enable; m_AutoDeleteSelection = enable;
return old; return old;
} }
private: private:
/// The layout list to be displayed. /// The layout list to be displayed.
wxLayoutList *m_llist; wxLayoutList *m_llist;
/// Can user edit the window?
bool m_Editable; /// Can user edit the window?
/// Are we currently building a selection with the keyboard? bool m_Editable;
bool m_Selecting;
/// Has list changed since last redraw, e.g. in size? /// Are we currently building a selection with the keyboard?
bool m_Dirty; bool m_Selecting;
/// Has the list ever been modified?
bool m_Modified; /// Has list changed since last redraw, e.g. in size?
wxMemoryDC *m_memDC; bool m_Dirty;
wxBitmap *m_bitmap;
wxPoint m_bitmapSize; /// Has the list ever been modified?
/// A frame's statusbar to update bool m_Modified;
class wxStatusBar *m_StatusBar;
/// statusbar field for labels wxMemoryDC *m_memDC;
int m_StatusFieldLabel; wxBitmap *m_bitmap;
/// statusbar field for cursor positions wxPoint m_bitmapSize;
int m_StatusFieldCursor;
/// a pointer to a bitmap for the background /// A frame's statusbar to update
wxBitmap *m_BGbitmap; class wxStatusBar *m_StatusBar;
/**@name Some configuration options */
//@{ /// statusbar field for labels
/// Do we want to auto-replace the selection with new text? int m_StatusFieldLabel;
bool m_AutoDeleteSelection;
/// statusbar field for cursor positions
int m_StatusFieldCursor;
/// a pointer to a bitmap for the background
wxBitmap *m_BGbitmap;
/**@name Some configuration options */
//@{
/// Do we want to auto-replace the selection with new text?
bool m_AutoDeleteSelection;
#ifndef __WXMSW__ #ifndef __WXMSW__
/// Do we want the focus to follow the mouse? /// Do we want the focus to follow the mouse?
bool m_FocusFollowMode; bool m_FocusFollowMode;
#endif #endif
/// For finding text and finding it again: /// For finding text and finding it again:
wxString m_FindString; wxString m_FindString;
//@} //@}
DECLARE_EVENT_TABLE()
DECLARE_EVENT_TABLE()
}; };
#endif #endif