From: Karsten Ballüder Date: Thu, 10 Jun 1999 17:22:02 +0000 (+0000) Subject: Popup menu and cursor corrected. Some bugs fixed. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/da16935f6cbe92f26a1168b227ef89aabb0b22c7 Popup menu and cursor corrected. Some bugs fixed. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2743 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/samples/richedit/wxLayout.cpp b/samples/richedit/wxLayout.cpp index b4cd05060c..265ead4ebc 100644 --- a/samples/richedit/wxLayout.cpp +++ b/samples/richedit/wxLayout.cpp @@ -36,7 +36,9 @@ IMPLEMENT_APP(MyApp) enum ids{ ID_ADD_SAMPLE = 1, ID_CLEAR, ID_PRINT, ID_PRINT_SETUP, ID_PAGE_SETUP, ID_PREVIEW, ID_PRINT_PS, ID_PRINT_SETUP_PS, ID_PAGE_SETUP_PS,ID_PREVIEW_PS, - ID_WRAP, ID_NOWRAP, ID_PASTE, ID_COPY, ID_CUT, ID_FIND, + ID_WRAP, ID_NOWRAP, ID_PASTE, ID_COPY, ID_CUT, + ID_PASTE_PRIMARY, + ID_FIND, ID_WXLAYOUT_DEBUG, ID_QUIT, ID_CLICK, ID_HTML, ID_TEXT, ID_TEST, ID_LINEBREAKS_TEST, ID_LONG_TEST, ID_URL_TEST }; @@ -99,7 +101,10 @@ MyFrame::MyFrame(void) : edit_menu->AppendSeparator(); edit_menu->Append(ID_COPY, "&Copy", "Copy text to clipboard."); edit_menu->Append(ID_CUT, "Cu&t", "Cut text to clipboard."); +#ifdef __WXGTK__ edit_menu->Append(ID_PASTE,"&Paste", "Paste text from clipboard."); +#endif + edit_menu->Append(ID_PASTE_PRIMARY,"&Paste primary", "Paste text from primary selection."); edit_menu->Append(ID_FIND, "&Find", "Find text."); menu_bar->Append(edit_menu, "&Edit" ); @@ -267,6 +272,12 @@ void MyFrame::OnCommand( wxCommandEvent &event ) m_lwin->Paste(); m_lwin->Refresh(FALSE); break; +#ifdef __WXGTK__ + case ID_PASTE_PRIMARY: + m_lwin->Paste(TRUE); + m_lwin->Refresh(FALSE); + break; +#endif case ID_COPY: m_lwin->Copy(); m_lwin->Refresh(FALSE); diff --git a/samples/richedit/wxllist.cpp b/samples/richedit/wxllist.cpp index 6548ea34eb..40f8b756a1 100644 --- a/samples/richedit/wxllist.cpp +++ b/samples/richedit/wxllist.cpp @@ -1071,6 +1071,7 @@ wxLayoutLine::Layout(wxDC &dc, wxLayoutList *llist, wxPoint *cursorPos, wxPoint *cursorSize, + wxLayoutStyleInfo *cursorStyle, int cx, bool suppressSIupdate) { @@ -1134,6 +1135,8 @@ wxLayoutLine::Layout(wxDC &dc, str = WXLO_CURSORCHAR; dc.GetTextExtent(str, &width, &height, &descent); + if(cursorStyle) // set style info + *cursorStyle = llist->GetStyleInfo(); if ( cursorSize ) { // Just in case some joker inserted an empty string object: @@ -1144,14 +1147,15 @@ wxLayoutLine::Layout(wxDC &dc, cursorSize->x = width; cursorSize->y = height; } - + cursorFound = true; // no more checks } else { // on some other object CoordType top, bottom; // unused - *cursorSize = obj->GetSize(&top,&bottom); + if(cursorSize) + *cursorSize = obj->GetSize(&top,&bottom); cursorPos->y = m_Position.y; cursorFound = true; // no more checks } @@ -1554,6 +1558,7 @@ wxLayoutList::InternalClear(void) m_DefaultStyleInfo.m_bg = *wxWHITE; m_CurrentStyleInfo = m_DefaultStyleInfo; + m_CursorStyleInfo = m_DefaultStyleInfo; } void @@ -2153,11 +2158,13 @@ wxLayoutList::Layout(wxDC &dc, CoordType bottom, bool forceAll, if(line == m_CursorLine) line->Layout(dc, this, (wxPoint *)&m_CursorScreenPos, - (wxPoint *)&m_CursorSize, m_CursorPos.x); + (wxPoint *)&m_CursorSize, + &m_CursorStyleInfo, + m_CursorPos.x); if(cpos && line->GetLineNumber() == cpos->y) line->Layout(dc, this, cpos, - csize, cpos->x); + csize, NULL, cpos->x); else line->Layout(dc, this); // little condition to speed up redrawing: diff --git a/samples/richedit/wxllist.h b/samples/richedit/wxllist.h index a8eaf78ec0..63be75e0d1 100644 --- a/samples/richedit/wxllist.h +++ b/samples/richedit/wxllist.h @@ -580,6 +580,7 @@ public: @param llist th e wxLayoutList @param cursorPos if not NULL, set cursor screen position in there @param cursorSize if not cursorPos != NULL, set cursor size in there + @param cursorStyle if non NULL where to store styleinfo for cursor pos @param cx if cursorPos != NULL, the cursor x position @param suppressStyleUpdate FALSe normally, only to suppress updating of m_StyleInfo */ @@ -587,6 +588,7 @@ public: wxLayoutList *llist, wxPoint *cursorPos = NULL, wxPoint *cursorSize = NULL, + wxLayoutStyleInfo *cursorStyle = NULL, int cx = 0, bool suppressStyleUpdate = FALSE); /** This function finds an object belonging to a given cursor @@ -919,13 +921,14 @@ public: wxLayoutStyleInfo &GetDefaultStyleInfo(void) { return m_DefaultStyleInfo ; } wxLayoutStyleInfo &GetStyleInfo(void) { return m_CurrentStyleInfo ; } const wxLayoutStyleInfo &GetStyleInfo(void) const { return m_CurrentStyleInfo ; } + const wxLayoutStyleInfo &GetCursorStyleInfo(void) const { return m_CursorStyleInfo ; } /// is the current font underlined? - bool IsFontUnderlined() const { return GetStyleInfo().underline != 0; } + bool IsFontUnderlined() const { return GetCursorStyleInfo().underline != 0; } /// is the current font bold? - bool IsFontBold() const { return GetStyleInfo().weight == wxBOLD; } + bool IsFontBold() const { return GetCursorStyleInfo().weight == wxBOLD; } /// is the current font italic? - bool IsFontItalic() const { return GetStyleInfo().style == wxITALIC; } + bool IsFontItalic() const { return GetCursorStyleInfo().style == wxITALIC; } /// set underline if it was off, turn it off if it was on void ToggleFontUnderline() @@ -1162,6 +1165,8 @@ private: wxLayoutStyleInfo m_DefaultStyleInfo; /// the current setting: wxLayoutStyleInfo m_CurrentStyleInfo; + /// the current setting: + wxLayoutStyleInfo m_CursorStyleInfo; //@} }; diff --git a/samples/richedit/wxlwindow.cpp b/samples/richedit/wxlwindow.cpp index c4e292a1a9..d8389b7f8d 100644 --- a/samples/richedit/wxlwindow.cpp +++ b/samples/richedit/wxlwindow.cpp @@ -95,6 +95,7 @@ BEGIN_EVENT_TABLE(wxLayoutWindow,wxScrolledWindow) EVT_LEFT_UP(wxLayoutWindow::OnLeftMouseUp) EVT_RIGHT_DOWN(wxLayoutWindow::OnRightMouseClick) EVT_LEFT_DCLICK(wxLayoutWindow::OnMouseDblClick) + EVT_MIDDLE_DOWN(wxLayoutWindow::OnMiddleMouseDown) EVT_MOTION (wxLayoutWindow::OnMouseMove) EVT_UPDATE_UI(WXLOWIN_MENU_UNDERLINE, wxLayoutWindow::OnUpdateMenuUnderline) @@ -340,8 +341,8 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event) } break; - case WXLOWIN_MENU_RCLICK: - // remove the selection if mouse click is outside it (TODO) + case WXLOWIN_MENU_MDOWN: + Paste(TRUE); break; case WXLOWIN_MENU_DBLCLICK: @@ -911,14 +912,19 @@ wxLayoutWindow::ResizeScrollbars(bool exact) // ---------------------------------------------------------------------------- // clipboard operations +// // ---------------------------------------------------------------------------- void -wxLayoutWindow::Paste(void) +wxLayoutWindow::Paste(bool primary) { // Read some text if (wxTheClipboard->Open()) { +#if __WXGTK__ + if(primary) + wxTheClipboard->UsePrimarySelection(); +#endif #if wxUSE_PRIVATE_CLIPBOARD_FORMAT wxLayoutDataObject wxldo; if (wxTheClipboard->IsSupported( wxldo.GetFormat() )) @@ -1089,28 +1095,21 @@ void wxLayoutWindow::OnMenu(wxCommandEvent& event) switch (event.GetId()) { case WXLOWIN_MENU_LARGER: - m_llist->SetFontLarger(); - break; + m_llist->SetFontLarger(); Refresh(FALSE); break; case WXLOWIN_MENU_SMALLER: - m_llist->SetFontSmaller(); - break; - + m_llist->SetFontSmaller(); Refresh(FALSE); break; case WXLOWIN_MENU_UNDERLINE: - m_llist->ToggleFontUnderline(); - break; + m_llist->ToggleFontUnderline(); Refresh(FALSE); break; case WXLOWIN_MENU_BOLD: - m_llist->ToggleFontWeight(); - break; + m_llist->ToggleFontWeight(); Refresh(FALSE); break; case WXLOWIN_MENU_ITALICS: - m_llist->ToggleFontItalics(); - break; - + m_llist->ToggleFontItalics(); Refresh(FALSE); break; case WXLOWIN_MENU_ROMAN: - m_llist->SetFontFamily(wxROMAN); break; + m_llist->SetFontFamily(wxROMAN); Refresh(FALSE); break; case WXLOWIN_MENU_TYPEWRITER: - m_llist->SetFontFamily(wxFIXED); break; + m_llist->SetFontFamily(wxFIXED); Refresh(FALSE); break; case WXLOWIN_MENU_SANSSERIF: - m_llist->SetFontFamily(wxSWISS); break; + m_llist->SetFontFamily(wxSWISS); Refresh(FALSE); break; } } diff --git a/samples/richedit/wxlwindow.h b/samples/richedit/wxlwindow.h index e0ddabd627..edf9de631e 100644 --- a/samples/richedit/wxlwindow.h +++ b/samples/richedit/wxlwindow.h @@ -37,6 +37,7 @@ enum WXLOWIN_MENU_SANSSERIF, WXLOWIN_MENU_RCLICK, WXLOWIN_MENU_DBLCLICK, + WXLOWIN_MENU_MDOWN, WXLOWIN_MENU_LDOWN, WXLOWIN_MENU_LUP, WXLOWIN_MENU_MOUSEMOVE, @@ -89,7 +90,7 @@ public: m_CursorVisibility = visibility; return v;} /// Pastes text from clipboard. - void Paste(void); + void Paste(bool usePrimarySelection = FALSE); /** Copies selection to clipboard. @param invalidate used internally, see wxllist.h for details */ @@ -138,6 +139,7 @@ public: 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);