git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@938 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Karsten Ballüder
1998-10-30 10:14:58 +00:00
parent dce85cd4e7
commit a5e13868ca
5 changed files with 339 additions and 53 deletions

View File

@@ -39,6 +39,14 @@ BEGIN_EVENT_TABLE(wxLayoutWindow,wxScrolledWindow)
EVT_LEFT_DOWN(wxLayoutWindow::OnLeftMouseClick)
EVT_RIGHT_DOWN(wxLayoutWindow::OnRightMouseClick)
EVT_LEFT_DCLICK(wxLayoutWindow::OnMouseDblClick)
EVT_MENU(WXLOWIN_MENU_LARGER, wxLayoutWindow::OnMenu)
EVT_MENU(WXLOWIN_MENU_SMALLER, wxLayoutWindow::OnMenu)
EVT_MENU(WXLOWIN_MENU_UNDERLINE, wxLayoutWindow::OnMenu)
EVT_MENU(WXLOWIN_MENU_BOLD, wxLayoutWindow::OnMenu)
EVT_MENU(WXLOWIN_MENU_ITALICS, wxLayoutWindow::OnMenu)
EVT_MENU(WXLOWIN_MENU_ROMAN, wxLayoutWindow::OnMenu)
EVT_MENU(WXLOWIN_MENU_TYPEWRITER, wxLayoutWindow::OnMenu)
EVT_MENU(WXLOWIN_MENU_SANSSERIF, wxLayoutWindow::OnMenu)
END_EVENT_TABLE()
wxLayoutWindow::wxLayoutWindow(wxWindow *parent)
@@ -49,8 +57,9 @@ wxLayoutWindow::wxLayoutWindow(wxWindow *parent)
m_ScrollbarsSet = false;
m_doSendEvents = false;
m_ViewStartX = 0; m_ViewStartY = 0;
m_DoPopupMenu = true;
m_PopupMenu = NULL;
CoordType
max_x, max_y, lineHeight;
m_llist.GetSize(&max_x, &max_y, &lineHeight);
@@ -90,7 +99,7 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event)
wxPaintDC dc( this );
PrepareDC( dc );
SetFocus();
wxPoint findPos;
findPos.x = dc.DeviceToLogicalX(event.GetX());
findPos.y = dc.DeviceToLogicalY(event.GetY());
@@ -98,6 +107,13 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event)
TRACEMESSAGE(("wxLayoutWindow::OnMouse: (%d, %d) -> (%d, %d)",
event.GetX(), event.GetY(), findPos.x, findPos.y));
if(eventId == WXLOWIN_MENU_RCLICK && m_DoPopupMenu && m_llist.IsEditable())
{
// when does this menu get freed?
// how do we handle toggling? FIXME
PopupMenu(MakeFormatMenu(), event.GetX(), event.GetY());
return;
}
// find the object at this position
wxLayoutObjectBase *obj = m_llist.Find(findPos);
if(obj)
@@ -290,3 +306,61 @@ wxLayoutWindow::Print(void)
dc.EndDoc();
}
}
wxMenu *
wxLayoutWindow::MakeFormatMenu()
{
if(m_PopupMenu)
return m_PopupMenu;
wxMenu *m = new wxMenu();
m->Append(WXLOWIN_MENU_LARGER ,_("&Larger"),_("Switch to larger font."), false);
m->Append(WXLOWIN_MENU_SMALLER ,_("&Smaller"),_("Switch to smaller font."), false);
m->AppendSeparator();
m->Append(WXLOWIN_MENU_UNDERLINE,_("&Underline"),_("Toggle underline mode."), true);
m->Append(WXLOWIN_MENU_BOLD ,_("&Bold"),_("Toggle bold mode."), true);
m->Append(WXLOWIN_MENU_ITALICS ,_("&Italics"),_("Toggle italics mode."), true);
m->AppendSeparator();
m->Append(WXLOWIN_MENU_ROMAN ,_("&Roman"),_("Toggle underline mode."), false);
m->Append(WXLOWIN_MENU_TYPEWRITER,_("&Typewriter"),_("Toggle bold mode."), false);
m->Append(WXLOWIN_MENU_SANSSERIF ,_("&Sans Serif"),_("Toggle italics mode."), false);
return m_PopupMenu = m;
}
void wxLayoutWindow::OnMenu(wxCommandEvent& event)
{
if(! m_llist.IsEditable())
return;
switch (event.GetId())
{
case WXLOWIN_MENU_LARGER:
m_llist.SetFontLarger();
break;
case WXLOWIN_MENU_SMALLER:
m_llist.SetFontSmaller();
break;
case WXLOWIN_MENU_UNDERLINE:
m_llist.SetFontUnderline(
m_PopupMenu->IsChecked(WXLOWIN_MENU_UNDERLINE) ? false : true
);
break;
case WXLOWIN_MENU_BOLD:
m_llist.SetFontWeight(
m_PopupMenu->IsChecked(WXLOWIN_MENU_BOLD) ? wxNORMAL : wxBOLD
);
case WXLOWIN_MENU_ITALICS:
m_llist.SetFontStyle(
m_PopupMenu->IsChecked(WXLOWIN_MENU_ITALICS) ? wxNORMAL : wxITALIC
);
break;
case WXLOWIN_MENU_ROMAN:
m_llist.SetFontFamily(wxROMAN); break;
case WXLOWIN_MENU_TYPEWRITER:
m_llist.SetFontFamily(wxFIXED); break;
case WXLOWIN_MENU_SANSSERIF:
m_llist.SetFontFamily(wxSWISS); break;
}
}