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(void); MyApp();
virtual bool OnInit(void);
virtual bool OnInit();
}; };
#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.
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 /// Copies selection to clipboard and deletes it.
void ResizeScrollbars(bool exact = false); // don't change this to true! bool Cut(bool privateFormat = false, bool usePrimary = false);
//@}
/// if the flag is true, we send events when user clicks on embedded objects /// find string in buffer
inline void SetMouseTracking(bool doIt = true) { m_doSendEvents = doIt; } bool Find(const wxString &needle,
wxPoint * fromWhere = NULL,
const wxString &configPath = _T("MsgViewFindString"));
/* Returns a pointer to the wxLayoutList object. /// find the same string again
@return the list bool FindAgain();
*/
wxLayoutList * GetLayoutList(void) { return m_llist; }
/**@name Callbacks */ void EnablePopup(bool enable = true) { m_DoPopupMenu = enable; }
//@{
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. /** Sets the wrap margin.
static wxMenu * MakeFormatMenu(void); @param margin set this to 0 to disable it
/// Redraws the window, used by RequestUpdate() or OnPaint(). */
void InternalPaint(const wxRect *updateRect); void SetWrapMargin(CoordType margin) { m_WrapMargin = margin; }
/** Toggle wordwrap as we type.
@param on true to activate word wrap
*/
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; } /// Query whether window needs redrawing.
//@} bool IsModified() const { return m_Modified; }
//@}
/**
@name Dirty flag handling for optimisations.
Normally one should only need to call SetDirty(), e.g. when
manipulating the wxLayoutList directly, so the window will update
itself. ResetDirty() and IsDirty() should only be used
internally. */
//@{
/// 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; }
//@}
/**@name Dirty flag handling for optimisations.
Normally one should only need to call SetDirty(), e.g. when
manipulating the wxLayoutList directly, so the window will update
itself. ResetDirty() and IsDirty() should only be used
internally. */
//@{
/// Set dirty flag.
void SetDirty(void) { m_Dirty = true; m_Modified = true; }
/// Query whether window needs redrawing.
bool IsDirty(void) const { return m_Dirty; }
/// Reset dirty flag.
void ResetDirty(void) { 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