diff options
-rw-r--r-- | cui/source/dialogs/SpellDialog.cxx | 116 | ||||
-rw-r--r-- | cui/source/inc/SpellDialog.hxx | 31 | ||||
-rw-r--r-- | editeng/source/misc/weldeditview.cxx | 62 | ||||
-rw-r--r-- | include/editeng/weldeditview.hxx | 10 | ||||
-rw-r--r-- | include/svx/ClassificationEditView.hxx | 46 | ||||
-rw-r--r-- | sc/source/ui/inc/tphfedit.hxx | 39 | ||||
-rw-r--r-- | sc/source/ui/pagedlg/tphfedit.cxx | 153 | ||||
-rw-r--r-- | svx/source/dialog/ClassificationDialog.cxx | 23 | ||||
-rw-r--r-- | svx/source/dialog/ClassificationEditView.cxx | 140 |
9 files changed, 125 insertions, 495 deletions
diff --git a/cui/source/dialogs/SpellDialog.cxx b/cui/source/dialogs/SpellDialog.cxx index 6d77aebe8d07..74af6f7d2a57 100644 --- a/cui/source/dialogs/SpellDialog.cxx +++ b/cui/source/dialogs/SpellDialog.cxx @@ -1120,108 +1120,8 @@ void SentenceEditWindow_Impl::SetDrawingArea(weld::DrawingArea* pDrawingArea) { Size aSize(pDrawingArea->get_approximate_digit_width() * 60, pDrawingArea->get_text_height() * 6); - pDrawingArea->set_size_request(aSize.Width(), aSize.Height()); - SetOutputSizePixel(aSize); - - weld::CustomWidgetController::SetDrawingArea(pDrawingArea); - - EnableRTL(false); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color aBgColor = rStyleSettings.GetWindowColor(); - - OutputDevice& rDevice = pDrawingArea->get_ref_device(); - - rDevice.SetMapMode(MapMode(MapUnit::MapTwip)); - rDevice.SetBackground(aBgColor); - - Size aOutputSize(rDevice.PixelToLogic(aSize)); - aSize = aOutputSize; - aSize.setHeight( aSize.Height() * 4 ); - - m_xEditEngine.reset(new EditEngine(EditEngine::CreatePool())); - m_xEditEngine->SetPaperSize( aSize ); - m_xEditEngine->SetRefDevice( &rDevice ); - - m_xEditEngine->SetControlWord(m_xEditEngine->GetControlWord() | EEControlBits::MARKFIELDS); - - m_xEdView.reset(new EditView(m_xEditEngine.get(), nullptr)); - m_xEdView->setEditViewCallbacks(this); - m_xEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); - - m_xEdView->SetBackgroundColor(aBgColor); - m_xEditEngine->InsertView(m_xEdView.get()); - - pDrawingArea->set_cursor(PointerStyle::Text); -} - -void SentenceEditWindow_Impl::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) -{ - //note: ClassificationEditView::Paint is similar - - rRenderContext.Push(PushFlags::ALL); - rRenderContext.SetClipRegion(); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color aBgColor = rStyleSettings.GetWindowColor(); - - m_xEdView->SetBackgroundColor(aBgColor); - - rRenderContext.SetBackground(aBgColor); - - tools::Rectangle aLogicRect(rRenderContext.PixelToLogic(rRect)); - m_xEdView->Paint(aLogicRect, &rRenderContext); - - if (HasFocus()) - { - m_xEdView->ShowCursor(); - vcl::Cursor* pCursor = m_xEdView->GetCursor(); - pCursor->DrawToDevice(rRenderContext); - } - - std::vector<tools::Rectangle> aLogicRects; - - // get logic selection - m_xEdView->GetSelectionRectangles(aLogicRects); - - rRenderContext.SetLineColor(); - rRenderContext.SetFillColor(COL_BLACK); - rRenderContext.SetRasterOp(RasterOp::Invert); - - for (const auto &rSelectionRect : aLogicRects) - rRenderContext.DrawRect(rSelectionRect); - - rRenderContext.Pop(); -} - -bool SentenceEditWindow_Impl::MouseMove(const MouseEvent& rMEvt) -{ - return m_xEdView->MouseMove(rMEvt); -} - -bool SentenceEditWindow_Impl::MouseButtonDown(const MouseEvent& rMEvt) -{ - if (!HasFocus()) - GrabFocus(); - - return m_xEdView->MouseButtonDown(rMEvt); -} - -bool SentenceEditWindow_Impl::MouseButtonUp(const MouseEvent& rMEvt) -{ - return m_xEdView->MouseButtonUp(rMEvt); -} - -void SentenceEditWindow_Impl::Resize() -{ - OutputDevice& rDevice = GetDrawingArea()->get_ref_device(); - Size aOutputSize(rDevice.PixelToLogic(GetOutputSizePixel())); - Size aSize(aOutputSize); - aSize.setHeight( aSize.Height() * 4 ); - m_xEditEngine->SetPaperSize(aSize); - m_xEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); - weld::CustomWidgetController::Resize(); + WeldEditView::SetDrawingArea(pDrawingArea); } SentenceEditWindow_Impl::~SentenceEditWindow_Impl() @@ -1338,7 +1238,7 @@ bool SentenceEditWindow_Impl::KeyInput(const KeyEvent& rKeyEvt) { bConsumed = true; - ESelection aCurrentSelection(m_xEdView->GetSelection()); + ESelection aCurrentSelection(m_xEditView->GetSelection()); aCurrentSelection.Adjust(); //determine if the selection contains a field @@ -1498,13 +1398,13 @@ bool SentenceEditWindow_Impl::KeyInput(const KeyEvent& rKeyEvt) sal_Int32 nCurrentLen = m_xEditEngine->GetText().getLength(); if (nAction != ACTION_SELECTFIELD) { - m_xEdView->PostKeyEvent(rKeyEvt); + m_xEditView->PostKeyEvent(rKeyEvt); } else { const EECharAttrib* pCharAttr = pBackAttr ? pBackAttr : pBackAttrLeft; if (pCharAttr) - m_xEdView->SetSelection(ESelection(0, pCharAttr->nStart, 0, pCharAttr->nEnd)); + m_xEditView->SetSelection(ESelection(0, pCharAttr->nStart, 0, pCharAttr->nEnd)); } if(nAction == ACTION_EXPAND) { @@ -1591,7 +1491,7 @@ bool SentenceEditWindow_Impl::KeyInput(const KeyEvent& rKeyEvt) CallModifyLink(); } else - bConsumed = m_xEdView->PostKeyEvent(rKeyEvt); + bConsumed = m_xEditView->PostKeyEvent(rKeyEvt); return bConsumed; } @@ -1606,7 +1506,7 @@ IMPL_LINK(SentenceEditWindow_Impl, ToolbarHdl, const OString&, rCurItemId, void) { if (rCurItemId == "paste") { - m_xEdView->Paste(); + m_xEditView->Paste(); CallModifyLink(); } else if (rCurItemId == "insert") @@ -1616,7 +1516,7 @@ IMPL_LINK(SentenceEditWindow_Impl, ToolbarHdl, const OString&, rCurItemId, void) OUString aChars = Edit::GetGetSpecialCharsFunction()(GetDrawingArea(), m_xEditEngine->GetStandardFont(0)); if (!aChars.isEmpty()) { - ESelection aCurrentSelection(m_xEdView->GetSelection()); + ESelection aCurrentSelection(m_xEditView->GetSelection()); m_xEditEngine->QuickInsertText(aChars, aCurrentSelection); CallModifyLink(); } @@ -1759,7 +1659,7 @@ void SentenceEditWindow_Impl::MoveErrorMarkTo(sal_Int32 nStart, sal_Int32 nEnd, m_xEditEngine->QuickSetAttribs(aSet, ESelection(0, nStart, 0, nEnd)); // so the editview will autoscroll to make this visible - m_xEdView->SetSelection(ESelection(0, nStart)); + m_xEditView->SetSelection(ESelection(0, nStart)); Invalidate(); m_nErrorStart = nStart; diff --git a/cui/source/inc/SpellDialog.hxx b/cui/source/inc/SpellDialog.hxx index ee6d477ec279..943d19b50dd8 100644 --- a/cui/source/inc/SpellDialog.hxx +++ b/cui/source/inc/SpellDialog.hxx @@ -39,8 +39,7 @@ #include <vcl/xtextedt.hxx> #include <vcl/txtattr.hxx> #include <vcl/customweld.hxx> -#include <editeng/editeng.hxx> -#include <editeng/editview.hxx> +#include <editeng/weldeditview.hxx> #include <editeng/SpellPortions.hxx> #include <set> @@ -59,13 +58,9 @@ namespace svx{ class SpellDialog; struct SpellErrorDescription; -class SentenceEditWindow_Impl : public weld::CustomWidgetController - , public EditViewCallbacks +class SentenceEditWindow_Impl : public WeldEditView { private: - std::unique_ptr<EditEngine> m_xEditEngine; - std::unique_ptr<EditView> m_xEdView; - std::set<sal_Int32> m_aIgnoreErrorsAt; SpellDialog* m_pSpellDialog; weld::Toolbar* m_pToolbar; @@ -84,29 +79,7 @@ private: DECL_LINK(ToolbarHdl, const OString&, void); protected: - virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override; - virtual bool MouseMove( const MouseEvent& rMEvt ) override; - virtual bool MouseButtonDown( const MouseEvent& rMEvt ) override; - virtual bool MouseButtonUp( const MouseEvent& rMEvt ) override; virtual bool KeyInput( const KeyEvent& rKEvt ) override; - virtual void Resize() override; - - virtual void EditViewInvalidate(const tools::Rectangle& rRect) const override - { - weld::DrawingArea* pDrawingArea = GetDrawingArea(); - pDrawingArea->queue_draw_area(rRect.Left(), rRect.Top(), rRect.GetWidth(), rRect.GetHeight()); - } - - virtual void EditViewSelectionChange() const override - { - weld::DrawingArea* pDrawingArea = GetDrawingArea(); - pDrawingArea->queue_draw(); - } - - virtual OutputDevice& EditViewOutputDevice() const override - { - return GetDrawingArea()->get_ref_device(); - } public: SentenceEditWindow_Impl(); diff --git a/editeng/source/misc/weldeditview.cxx b/editeng/source/misc/weldeditview.cxx index dab3796f9b17..38c253d5e6d3 100644 --- a/editeng/source/misc/weldeditview.cxx +++ b/editeng/source/misc/weldeditview.cxx @@ -15,12 +15,22 @@ #include <vcl/settings.hxx> #include <vcl/svapp.hxx> -Size WeldEditView::GetPreferredSize() const { return Size(500, 100); } +WeldEditView::WeldEditView() {} + +void WeldEditView::makeEditEngine() +{ + m_xEditEngine.reset(new EditEngine(EditEngine::CreatePool())); +} void WeldEditView::SetDrawingArea(weld::DrawingArea* pDrawingArea) { - Size aSize(GetPreferredSize()); + Size aSize(pDrawingArea->get_size_request()); + if (aSize.Width() == -1) + aSize.setWidth(500); + if (aSize.Height() == -1) + aSize.setHeight(100); pDrawingArea->set_size_request(aSize.Width(), aSize.Height()); + SetOutputSizePixel(aSize); weld::CustomWidgetController::SetDrawingArea(pDrawingArea); @@ -39,18 +49,18 @@ void WeldEditView::SetDrawingArea(weld::DrawingArea* pDrawingArea) aSize = aOutputSize; aSize.setHeight(aSize.Height()); - m_xEdEngine.reset(new EditEngine(EditEngine::CreatePool())); - m_xEdEngine->SetPaperSize(aSize); - m_xEdEngine->SetRefDevice(&rDevice); + makeEditEngine(); + m_xEditEngine->SetPaperSize(aSize); + m_xEditEngine->SetRefDevice(&rDevice); - m_xEdEngine->SetControlWord(m_xEdEngine->GetControlWord() | EEControlBits::MARKFIELDS); + m_xEditEngine->SetControlWord(m_xEditEngine->GetControlWord() | EEControlBits::MARKFIELDS); - m_xEdView.reset(new EditView(m_xEdEngine.get(), nullptr)); - m_xEdView->setEditViewCallbacks(this); - m_xEdView->SetOutputArea(tools::Rectangle(Point(0, 0), aOutputSize)); + m_xEditView.reset(new EditView(m_xEditEngine.get(), nullptr)); + m_xEditView->setEditViewCallbacks(this); + m_xEditView->SetOutputArea(tools::Rectangle(Point(0, 0), aOutputSize)); - m_xEdView->SetBackgroundColor(aBgColor); - m_xEdEngine->InsertView(m_xEdView.get()); + m_xEditView->SetBackgroundColor(aBgColor); + m_xEditEngine->InsertView(m_xEditView.get()); pDrawingArea->set_cursor(PointerStyle::Text); } @@ -62,8 +72,8 @@ void WeldEditView::Resize() OutputDevice& rDevice = GetDrawingArea()->get_ref_device(); Size aOutputSize(rDevice.PixelToLogic(GetOutputSizePixel())); Size aSize(aOutputSize); - m_xEdEngine->SetPaperSize(aSize); - m_xEdView->SetOutputArea(tools::Rectangle(Point(0, 0), aOutputSize)); + m_xEditEngine->SetPaperSize(aSize); + m_xEditView->SetOutputArea(tools::Rectangle(Point(0, 0), aOutputSize)); weld::CustomWidgetController::Resize(); } @@ -77,24 +87,24 @@ void WeldEditView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectan const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); Color aBgColor = rStyleSettings.GetWindowColor(); - m_xEdView->SetBackgroundColor(aBgColor); + m_xEditView->SetBackgroundColor(aBgColor); rRenderContext.SetBackground(aBgColor); tools::Rectangle aLogicRect(rRenderContext.PixelToLogic(rRect)); - m_xEdView->Paint(aLogicRect, &rRenderContext); + m_xEditView->Paint(aLogicRect, &rRenderContext); if (HasFocus()) { - m_xEdView->ShowCursor(); - vcl::Cursor* pCursor = m_xEdView->GetCursor(); + m_xEditView->ShowCursor(); + vcl::Cursor* pCursor = m_xEditView->GetCursor(); pCursor->DrawToDevice(rRenderContext); } std::vector<tools::Rectangle> aLogicRects; // get logic selection - m_xEdView->GetSelectionRectangles(aLogicRects); + m_xEditView->GetSelectionRectangles(aLogicRects); rRenderContext.SetLineColor(); rRenderContext.SetFillColor(COL_BLACK); @@ -106,19 +116,19 @@ void WeldEditView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectan rRenderContext.Pop(); } -bool WeldEditView::MouseMove(const MouseEvent& rMEvt) { return m_xEdView->MouseMove(rMEvt); } +bool WeldEditView::MouseMove(const MouseEvent& rMEvt) { return m_xEditView->MouseMove(rMEvt); } bool WeldEditView::MouseButtonDown(const MouseEvent& rMEvt) { if (!HasFocus()) GrabFocus(); - return m_xEdView->MouseButtonDown(rMEvt); + return m_xEditView->MouseButtonDown(rMEvt); } bool WeldEditView::MouseButtonUp(const MouseEvent& rMEvt) { - return m_xEdView->MouseButtonUp(rMEvt); + return m_xEditView->MouseButtonUp(rMEvt); } bool WeldEditView::KeyInput(const KeyEvent& rKEvt) @@ -129,7 +139,7 @@ bool WeldEditView::KeyInput(const KeyEvent& rKEvt) { return false; } - else if (!m_xEdView->PostKeyEvent(rKEvt)) + else if (!m_xEditView->PostKeyEvent(rKEvt)) { return false; } @@ -139,9 +149,15 @@ bool WeldEditView::KeyInput(const KeyEvent& rKEvt) void WeldEditView::GetFocus() { - m_xEdView->ShowCursor(); + m_xEditView->ShowCursor(); weld::CustomWidgetController::GetFocus(); } +void WeldEditView::LoseFocus() +{ + weld::CustomWidgetController::LoseFocus(); + Invalidate(); // redraw without cursor +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/editeng/weldeditview.hxx b/include/editeng/weldeditview.hxx index 3d31f589d14f..d14873258d0f 100644 --- a/include/editeng/weldeditview.hxx +++ b/include/editeng/weldeditview.hxx @@ -25,17 +25,19 @@ public: virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override; virtual ~WeldEditView() override; - std::unique_ptr<EditEngine> m_xEdEngine; - std::unique_ptr<EditView> m_xEdView; - protected: - virtual Size GetPreferredSize() const; + std::unique_ptr<EditEngine> m_xEditEngine; + std::unique_ptr<EditView> m_xEditView; + + virtual void makeEditEngine(); + virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override; virtual bool MouseMove(const MouseEvent& rMEvt) override; virtual bool MouseButtonDown(const MouseEvent& rMEvt) override; virtual bool MouseButtonUp(const MouseEvent& rMEvt) override; virtual bool KeyInput(const KeyEvent& rKEvt) override; virtual void GetFocus() override; + virtual void LoseFocus() override; virtual void Resize() override; virtual void EditViewInvalidate(const tools::Rectangle& rRect) const override diff --git a/include/svx/ClassificationEditView.hxx b/include/svx/ClassificationEditView.hxx index f3ce3b9cb58e..0e6d5ed354b6 100644 --- a/include/svx/ClassificationEditView.hxx +++ b/include/svx/ClassificationEditView.hxx @@ -13,8 +13,7 @@ #include <sal/config.h> #include <svx/svxdllapi.h> -#include <editeng/editeng.hxx> -#include <editeng/editview.hxx> +#include <editeng/weldeditview.hxx> #include <editeng/svxenum.hxx> #include <vcl/customweld.hxx> @@ -28,14 +27,14 @@ public: virtual OUString CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor) override; }; -class SVX_DLLPUBLIC ClassificationEditView : public weld::CustomWidgetController - , public EditViewCallbacks +class SVX_DLLPUBLIC ClassificationEditView : public WeldEditView { public: ClassificationEditView(); - virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override; virtual ~ClassificationEditView() override; + virtual void makeEditEngine() override; + void SetCharAttributes(); void InsertField(const SvxFieldItem& rField); @@ -44,44 +43,19 @@ public: void SetNumType(SvxNumType eNumType); - std::unique_ptr<ClassificationEditEngine> pEdEngine; - std::unique_ptr<EditView> pEdView; - - const ClassificationEditEngine& getEditEngine() - { - return *pEdEngine; - } - - void SetModifyHdl(const Link<LinkParamNone*,void>& rLink) - { - pEdEngine->SetModifyHdl(rLink); - } - -protected: - virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override; - virtual bool MouseMove( const MouseEvent& rMEvt ) override; - virtual bool MouseButtonDown( const MouseEvent& rMEvt ) override; - virtual bool MouseButtonUp( const MouseEvent& rMEvt ) override; - virtual bool KeyInput( const KeyEvent& rKEvt ) override; - virtual void GetFocus() override; - virtual void Resize() override; - - - virtual void EditViewInvalidate(const tools::Rectangle& rRect) const override + ClassificationEditEngine& getEditEngine() { - weld::DrawingArea* pDrawingArea = GetDrawingArea(); - pDrawingArea->queue_draw_area(rRect.Left(), rRect.Top(), rRect.GetWidth(), rRect.GetHeight()); + return *static_cast<ClassificationEditEngine*>(m_xEditEngine.get()); } - virtual void EditViewSelectionChange() const override + EditView& getEditView() { - weld::DrawingArea* pDrawingArea = GetDrawingArea(); - pDrawingArea->queue_draw(); + return *m_xEditView.get(); } - virtual OutputDevice& EditViewOutputDevice() const override + void SetModifyHdl(const Link<LinkParamNone*,void>& rLink) { - return GetDrawingArea()->get_ref_device(); + m_xEditEngine->SetModifyHdl(rLink); } }; diff --git a/sc/source/ui/inc/tphfedit.hxx b/sc/source/ui/inc/tphfedit.hxx index 87deb5f7a94b..ce47f287a6c4 100644 --- a/sc/source/ui/inc/tphfedit.hxx +++ b/sc/source/ui/inc/tphfedit.hxx @@ -23,7 +23,7 @@ #include <scdllapi.h> #include <cppuhelper/weakref.hxx> #include <tools/wintypes.hxx> -#include <editeng/editview.hxx> +#include <editeng/weldeditview.hxx> #include <editeng/svxenum.hxx> #include <vcl/customweld.hxx> @@ -46,8 +46,7 @@ enum ScEditWindowLocation Right }; -class SC_DLLPUBLIC ScEditWindow : public weld::CustomWidgetController - , public EditViewCallbacks +class SC_DLLPUBLIC ScEditWindow : public WeldEditView { public: ScEditWindow(ScEditWindowLocation eLoc, weld::Window* pParent); @@ -65,40 +64,17 @@ public: virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override; - ScHeaderEditEngine* GetEditEngine() const { return pEdEngine.get(); } + ScHeaderEditEngine* GetEditEngine() const; void SetObjectSelectHdl( const Link<ScEditWindow&,void>& aLink) { aObjectSelectLink = aLink; } void SetGetFocusHdl(const std::function<void (ScEditWindow&)>& rLink) { m_GetFocusLink = rLink; } protected: - virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override; - virtual bool MouseMove( const MouseEvent& rMEvt ) override; - virtual bool MouseButtonDown( const MouseEvent& rMEvt ) override; - virtual bool MouseButtonUp( const MouseEvent& rMEvt ) override; - virtual bool KeyInput( const KeyEvent& rKEvt ) override; - virtual void GetFocus() override; - virtual void LoseFocus() override; - virtual void Resize() override; - - virtual void EditViewInvalidate(const tools::Rectangle& rRect) const override - { - weld::DrawingArea* pDrawingArea = GetDrawingArea(); - pDrawingArea->queue_draw_area(rRect.Left(), rRect.Top(), rRect.GetWidth(), rRect.GetHeight()); - } - - virtual void EditViewSelectionChange() const override - { - weld::DrawingArea* pDrawingArea = GetDrawingArea(); - pDrawingArea->queue_draw(); - } - - virtual OutputDevice& EditViewOutputDevice() const override - { - return GetDrawingArea()->get_ref_device(); - } + virtual void makeEditEngine() override; + virtual bool KeyInput( const KeyEvent& rKEvt ) override; + virtual void GetFocus() override; + virtual void LoseFocus() override; private: - std::unique_ptr<ScHeaderEditEngine> pEdEngine; - std::unique_ptr<EditView> pEdView; ScEditWindowLocation eLocation; bool mbRTL; weld::Window* mpDialog; @@ -108,6 +84,7 @@ private: Link<ScEditWindow&,void> aObjectSelectLink; std::function<void (ScEditWindow&)> m_GetFocusLink; + }; #endif // INCLUDED_SC_SOURCE_UI_INC_TPHFEDIT_HXX diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx index b515ab70d415..1dd7c64e2bc9 100644 --- a/sc/source/ui/pagedlg/tphfedit.cxx +++ b/sc/source/ui/pagedlg/tphfedit.cxx @@ -68,49 +68,30 @@ ScEditWindow::ScEditWindow(ScEditWindowLocation eLoc, weld::Window* pDialog) { } +void ScEditWindow::makeEditEngine() +{ + m_xEditEngine.reset(new ScHeaderEditEngine(EditEngine::CreatePool())); +} + +ScHeaderEditEngine* ScEditWindow::GetEditEngine() const +{ + return static_cast<ScHeaderEditEngine*>(m_xEditEngine.get()); +} + void ScEditWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea) { OutputDevice& rDevice = pDrawingArea->get_ref_device(); - Size aSize = rDevice.LogicToPixel(Size(80, 120), MapMode(MapUnit::MapAppFont)); pDrawingArea->set_size_request(aSize.Width(), aSize.Height()); - SetOutputSizePixel(aSize); - - weld::CustomWidgetController::SetDrawingArea(pDrawingArea); - - EnableRTL(false); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color aBgColor = rStyleSettings.GetWindowColor(); - - rDevice.SetMapMode(MapMode(MapUnit::MapTwip)); - rDevice.SetBackground(aBgColor); - - Size aOutputSize(rDevice.PixelToLogic(aSize)); - aSize = aOutputSize; - aSize.setHeight( aSize.Height() * 4 ); - pEdEngine.reset( new ScHeaderEditEngine( EditEngine::CreatePool() ) ); - pEdEngine->SetPaperSize( aSize ); - pEdEngine->SetRefDevice( &rDevice ); + WeldEditView::SetDrawingArea(pDrawingArea); ScHeaderFieldData aData; - lcl_GetFieldData( aData ); - + lcl_GetFieldData(aData); // fields - pEdEngine->SetData( aData ); - pEdEngine->SetControlWord( pEdEngine->GetControlWord() | EEControlBits::MARKFIELDS ); + GetEditEngine()->SetData(aData); if (mbRTL) - pEdEngine->SetDefaultHorizontalTextDirection(EEHorizontalTextDirection::R2L); - - pEdView.reset(new EditView(pEdEngine.get(), nullptr)); - pEdView->setEditViewCallbacks(this); - pEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); - - pEdView->SetBackgroundColor( aBgColor ); - pEdEngine->InsertView( pEdView.get() ); - - pDrawingArea->set_cursor(PointerStyle::Text); + m_xEditEngine->SetDefaultHorizontalTextDirection(EEHorizontalTextDirection::R2L); if (pAcc) { @@ -128,22 +109,11 @@ void ScEditWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea) break; } - pAcc->InitAcc(nullptr, pEdView.get(), nullptr, + pAcc->InitAcc(nullptr, m_xEditView.get(), nullptr, sName, pDrawingArea->get_tooltip_text()); } } -void ScEditWindow::Resize() -{ - OutputDevice& rDevice = GetDrawingArea()->get_ref_device(); - Size aOutputSize(rDevice.PixelToLogic(GetOutputSizePixel())); - Size aSize(aOutputSize); - aSize.setHeight( aSize.Height() * 4 ); - pEdEngine->SetPaperSize(aSize); - pEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); - weld::CustomWidgetController::Resize(); -} - ScEditWindow::~ScEditWindow() { // delete Accessible object before deleting EditEngine and EditView @@ -153,14 +123,13 @@ ScEditWindow::~ScEditWindow() if (xTemp.is()) pAcc->dispose(); } - pEdEngine.reset(); - pEdView.reset(); } void ScEditWindow::SetNumType(SvxNumType eNumType) { - pEdEngine->SetNumType(eNumType); - pEdEngine->UpdateFields(); + ScHeaderEditEngine* pEditEngine = GetEditEngine(); + pEditEngine->SetNumType(eNumType); + pEditEngine->UpdateFields(); } std::unique_ptr<EditTextObject> ScEditWindow::CreateTextObject() @@ -168,17 +137,17 @@ std::unique_ptr<EditTextObject> ScEditWindow::CreateTextObject() // reset paragraph attributes // (GetAttribs at creation of format dialog always returns the set items) - const SfxItemSet& rEmpty = pEdEngine->GetEmptyItemSet(); - sal_Int32 nParCnt = pEdEngine->GetParagraphCount(); + const SfxItemSet& rEmpty = m_xEditEngine->GetEmptyItemSet(); + sal_Int32 nParCnt = m_xEditEngine->GetParagraphCount(); for (sal_Int32 i=0; i<nParCnt; i++) - pEdEngine->SetParaAttribs( i, rEmpty ); + m_xEditEngine->SetParaAttribs( i, rEmpty ); - return pEdEngine->CreateTextObject(); + return m_xEditEngine->CreateTextObject(); } void ScEditWindow::SetFont( const ScPatternAttr& rPattern ) { - auto pSet = std::make_unique<SfxItemSet>( pEdEngine->GetEmptyItemSet() ); + auto pSet = std::make_unique<SfxItemSet>( m_xEditEngine->GetEmptyItemSet() ); rPattern.FillEditItemSet( pSet.get() ); // FillEditItemSet adjusts font height to 1/100th mm, // but for header/footer twips is needed, as in the PatternAttr: @@ -187,17 +156,17 @@ void ScEditWindow::SetFont( const ScPatternAttr& rPattern ) pSet->Put( rPattern.GetItem(ATTR_CTL_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); if (mbRTL) pSet->Put( SvxAdjustItem( SvxAdjust::Right, EE_PARA_JUST ) ); - pEdEngine->SetDefaults( std::move(pSet) ); + GetEditEngine()->SetDefaults( std::move(pSet) ); } void ScEditWindow::SetText( const EditTextObject& rTextObject ) { - pEdEngine->SetText( rTextObject ); + m_xEditEngine->SetText( rTextObject ); } void ScEditWindow::InsertField( const SvxFieldItem& rFld ) { - pEdView->InsertField( rFld ); + m_xEditView->InsertField( rFld ); } void ScEditWindow::SetCharAttributes() @@ -215,7 +184,7 @@ void ScEditWindow::SetCharAttributes() { if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(true); - SfxItemSet aSet( pEdView->GetAttribs() ); + SfxItemSet aSet( m_xEditView->GetAttribs() ); ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); @@ -226,70 +195,13 @@ void ScEditWindow::SetCharAttributes() { aSet.ClearItem(); aSet.Put( *pDlg->GetOutputItemSet() ); - pEdView->SetAttribs( aSet ); + m_xEditView->SetAttribs( aSet ); } if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(false); } } -void ScEditWindow::Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) -{ - //note: ClassificationEditView::Paint is similar - - rRenderContext.Push(PushFlags::ALL); - rRenderContext.SetClipRegion(); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color aBgColor = rStyleSettings.GetWindowColor(); - - pEdView->SetBackgroundColor( aBgColor ); - - rRenderContext.SetBackground( aBgColor ); - - tools::Rectangle aLogicRect(rRenderContext.PixelToLogic(rRect)); - pEdView->Paint(aLogicRect, &rRenderContext); - - if (HasFocus()) - { - pEdView->ShowCursor(); - vcl::Cursor* pCursor = pEdView->GetCursor(); - pCursor->DrawToDevice(rRenderContext); - } - - std::vector<tools::Rectangle> aLogicRects; - - // get logic selection - pEdView->GetSelectionRectangles(aLogicRects); - - rRenderContext.SetLineColor(); - rRenderContext.SetFillColor(COL_BLACK); - rRenderContext.SetRasterOp(RasterOp::Invert); - - for (const auto &rSelectionRect : aLogicRects) - rRenderContext.DrawRect(rSelectionRect); - - rRenderContext.Pop(); -} - -bool ScEditWindow::MouseMove( const MouseEvent& rMEvt ) -{ - return pEdView->MouseMove( rMEvt ); -} - -bool ScEditWindow::MouseButtonDown( const MouseEvent& rMEvt ) -{ - if ( !HasFocus() ) - GrabFocus(); - - return pEdView->MouseButtonDown( rMEvt ); -} - -bool ScEditWindow::MouseButtonUp( const MouseEvent& rMEvt ) -{ - return pEdView->MouseButtonUp( rMEvt ); -} - bool ScEditWindow::KeyInput( const KeyEvent& rKEvt ) { sal_uInt16 nKey = rKEvt.GetKeyCode().GetModifier() @@ -299,7 +211,7 @@ bool ScEditWindow::KeyInput( const KeyEvent& rKEvt ) { return false; } - else if ( !pEdView->PostKeyEvent( rKEvt ) ) + else if ( !m_xEditView->PostKeyEvent( rKEvt ) ) { return false; } @@ -314,8 +226,6 @@ bool ScEditWindow::KeyInput( const KeyEvent& rKEvt ) void ScEditWindow::GetFocus() { - pEdView->ShowCursor(); - assert(m_GetFocusLink); m_GetFocusLink(*this); @@ -327,7 +237,7 @@ void ScEditWindow::GetFocus() else pAcc = nullptr; - weld::CustomWidgetController::GetFocus(); + WeldEditView::GetFocus(); } void ScEditWindow::LoseFocus() @@ -339,8 +249,7 @@ void ScEditWindow::LoseFocus() } else pAcc = nullptr; - weld::CustomWidgetController::LoseFocus(); - Invalidate(); // redraw without cursor + WeldEditView::LoseFocus(); } css::uno::Reference< css::accessibility::XAccessible > ScEditWindow::CreateAccessible() diff --git a/svx/source/dialog/ClassificationDialog.cxx b/svx/source/dialog/ClassificationDialog.cxx index a2989cc9a19b..6dbe5dc41a54 100644 --- a/svx/source/dialog/ClassificationDialog.cxx +++ b/svx/source/dialog/ClassificationDialog.cxx @@ -427,7 +427,7 @@ void ClassificationDialog::readIn(std::vector<ClassificationResult> const & rInp { case svx::ClassificationType::TEXT: { - m_xEditWindow->pEdView->InsertText(rClassificationResult.msName); + m_xEditWindow->getEditView().InsertText(rClassificationResult.msName); } break; @@ -469,13 +469,15 @@ void ClassificationDialog::readIn(std::vector<ClassificationResult> const & rInp nParagraph++; if (nParagraph != 0) - m_xEditWindow->pEdView->InsertParaBreak(); + m_xEditWindow->getEditView().InsertParaBreak(); // Set paragraph font weight FontWeight eWeight = (rClassificationResult.msName == "BOLD") ? WEIGHT_BOLD : WEIGHT_NORMAL; - std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(m_xEditWindow->pEdEngine->GetParaAttribs(nParagraph))); + + ClassificationEditEngine& rEdEngine = m_xEditWindow->getEditEngine(); + std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(rEdEngine.GetParaAttribs(nParagraph))); pSet->Put(SvxWeightItem(eWeight, EE_CHAR_WEIGHT)); - m_xEditWindow->pEdEngine->SetParaAttribs(nParagraph, *pSet); + rEdEngine.SetParaAttribs(nParagraph, *pSet); } break; @@ -518,7 +520,8 @@ std::vector<ClassificationResult> ClassificationDialog::getResult() { std::vector<ClassificationResult> aClassificationResults; - std::unique_ptr<EditTextObject> pEditText(m_xEditWindow->pEdEngine->CreateTextObject()); + ClassificationEditEngine& rEdEngine = m_xEditWindow->getEditEngine(); + std::unique_ptr<EditTextObject> pEditText(rEdEngine.CreateTextObject()); sal_Int32 nCurrentParagraph = -1; @@ -532,7 +535,7 @@ std::vector<ClassificationResult> ClassificationDialog::getResult() // Get Weight of current paragraph FontWeight eFontWeight = WEIGHT_NORMAL; - SfxItemSet aItemSet(m_xEditWindow->pEdEngine->GetParaAttribs(nCurrentParagraph)); + SfxItemSet aItemSet(rEdEngine.GetParaAttribs(nCurrentParagraph)); if (const SfxPoolItem* pItem = aItemSet.GetItem(EE_CHAR_WEIGHT, false)) { const SvxWeightItem* pWeightItem = dynamic_cast<const SvxWeightItem*>(pItem); @@ -551,7 +554,7 @@ std::vector<ClassificationResult> ClassificationDialog::getResult() const SvxFieldItem* pFieldItem = findField(rSection); ESelection aSelection(rSection.mnParagraph, rSection.mnStart, rSection.mnParagraph, rSection.mnEnd); - const OUString sDisplayString = m_xEditWindow->pEdEngine->GetText(aSelection); + const OUString sDisplayString = rEdEngine.GetText(aSelection); if (!sDisplayString.isEmpty()) { const ClassificationField* pClassificationField = pFieldItem ? dynamic_cast<const ClassificationField*>(pFieldItem->GetField()) : nullptr; @@ -577,7 +580,7 @@ IMPL_LINK(ClassificationDialog, SelectClassificationHdl, weld::ComboBox&, rBox, if (nSelected < 0 || m_nCurrentSelectedCategory == nSelected) return; - std::unique_ptr<EditTextObject> pEditText(m_xEditWindow->pEdEngine->CreateTextObject()); + std::unique_ptr<EditTextObject> pEditText(m_xEditWindow->getEditEngine().CreateTextObject()); std::vector<editeng::Section> aSections; pEditText->GetAllSections(aSections); @@ -602,7 +605,7 @@ IMPL_LINK(ClassificationDialog, SelectClassificationHdl, weld::ComboBox&, rBox, } if (bReplaceExisting) - m_xEditWindow->pEdView->SetSelection(aExistingFieldSelection); + m_xEditWindow->getEditView().SetSelection(aExistingFieldSelection); insertCategoryField(nSelected); @@ -638,7 +641,7 @@ IMPL_LINK(ClassificationDialog, SelectRecentlyUsedHdl, weld::ComboBox&, rBox, vo sal_Int32 nSelected = rBox.get_active(); if (nSelected >= 0) { - m_xEditWindow->pEdEngine->Clear(); + m_xEditWindow->getEditEngine().Clear(); readIn(m_aRecentlyUsedValuesCollection[nSelected]); } } diff --git a/svx/source/dialog/ClassificationEditView.cxx b/svx/source/dialog/ClassificationEditView.cxx index 2972f1b227d9..bc2266626c35 100644 --- a/svx/source/dialog/ClassificationEditView.cxx +++ b/svx/source/dialog/ClassificationEditView.cxx @@ -45,74 +45,30 @@ ClassificationEditView::ClassificationEditView() { } -void ClassificationEditView::SetDrawingArea(weld::DrawingArea* pDrawingArea) +void ClassificationEditView::makeEditEngine() { - Size aSize(500, 100); - pDrawingArea->set_size_request(aSize.Width(), aSize.Height()); - SetOutputSizePixel(aSize); - - weld::CustomWidgetController::SetDrawingArea(pDrawingArea); - - EnableRTL(false); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color aBgColor = rStyleSettings.GetWindowColor(); - - OutputDevice& rDevice = pDrawingArea->get_ref_device(); - - rDevice.SetMapMode(MapMode(MapUnit::MapTwip)); - rDevice.SetBackground(aBgColor); - - Size aOutputSize(rDevice.PixelToLogic(aSize)); - aSize = aOutputSize; - aSize.setHeight( aSize.Height() * 4 ); - - pEdEngine.reset(new ClassificationEditEngine(EditEngine::CreatePool())); - pEdEngine->SetPaperSize( aSize ); - pEdEngine->SetRefDevice( &rDevice ); - - pEdEngine->SetControlWord(pEdEngine->GetControlWord() | EEControlBits::MARKFIELDS); - - pEdView.reset(new EditView(pEdEngine.get(), nullptr)); - pEdView->setEditViewCallbacks(this); - pEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); - - pEdView->SetBackgroundColor(aBgColor); - pEdEngine->InsertView(pEdView.get()); - - pDrawingArea->set_cursor(PointerStyle::Text); + m_xEditEngine.reset(new ClassificationEditEngine(EditEngine::CreatePool())); } ClassificationEditView::~ClassificationEditView() { } -void ClassificationEditView::Resize() -{ - OutputDevice& rDevice = GetDrawingArea()->get_ref_device(); - Size aOutputSize(rDevice.PixelToLogic(GetOutputSizePixel())); - Size aSize(aOutputSize); - aSize.setHeight( aSize.Height() * 4 ); - pEdEngine->SetPaperSize(aSize); - pEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); - weld::CustomWidgetController::Resize(); -} - void ClassificationEditView::InsertField(const SvxFieldItem& rFieldItem) { - pEdView->InsertField(rFieldItem); - pEdView->Invalidate(); + m_xEditView->InsertField(rFieldItem); + m_xEditView->Invalidate(); } void ClassificationEditView::InvertSelectionWeight() { - ESelection aSelection = pEdView->GetSelection(); + ESelection aSelection = m_xEditView->GetSelection(); for (sal_Int32 nParagraph = aSelection.nStartPara; nParagraph <= aSelection.nEndPara; ++nParagraph) { FontWeight eFontWeight = WEIGHT_BOLD; - std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(pEdEngine->GetParaAttribs(nParagraph))); + std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(m_xEditEngine->GetParaAttribs(nParagraph))); if (const SfxPoolItem* pItem = pSet->GetItem(EE_CHAR_WEIGHT, false)) { const SvxWeightItem* pWeightItem = dynamic_cast<const SvxWeightItem*>(pItem); @@ -121,90 +77,10 @@ void ClassificationEditView::InvertSelectionWeight() } SvxWeightItem aWeight(eFontWeight, EE_CHAR_WEIGHT); pSet->Put(aWeight); - pEdEngine->SetParaAttribs(nParagraph, *pSet); + m_xEditEngine->SetParaAttribs(nParagraph, *pSet); } - pEdView->Invalidate(); -} - -void ClassificationEditView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) -{ - //note: ScEditWindow::Paint is similar - - rRenderContext.Push(PushFlags::ALL); - rRenderContext.SetClipRegion(); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color aBgColor = rStyleSettings.GetWindowColor(); - - pEdView->SetBackgroundColor(aBgColor); - - rRenderContext.SetBackground(aBgColor); - - tools::Rectangle aLogicRect(rRenderContext.PixelToLogic(rRect)); - pEdView->Paint(aLogicRect, &rRenderContext); - - if (HasFocus()) - { - pEdView->ShowCursor(); - vcl::Cursor* pCursor = pEdView->GetCursor(); - pCursor->DrawToDevice(rRenderContext); - } - - std::vector<tools::Rectangle> aLogicRects; - - // get logic selection - pEdView->GetSelectionRectangles(aLogicRects); - - rRenderContext.SetLineColor(); - rRenderContext.SetFillColor(COL_BLACK); - rRenderContext.SetRasterOp(RasterOp::Invert); - - for (const auto &rSelectionRect : aLogicRects) - rRenderContext.DrawRect(rSelectionRect); - - rRenderContext.Pop(); -} - -bool ClassificationEditView::MouseMove(const MouseEvent& rMEvt) -{ - return pEdView->MouseMove(rMEvt); -} - -bool ClassificationEditView::MouseButtonDown(const MouseEvent& rMEvt) -{ - if (!HasFocus()) - GrabFocus(); - - return pEdView->MouseButtonDown(rMEvt); -} - -bool ClassificationEditView::MouseButtonUp(const MouseEvent& rMEvt) -{ - return pEdView->MouseButtonUp(rMEvt); -} - -bool ClassificationEditView::KeyInput(const KeyEvent& rKEvt) -{ - sal_uInt16 nKey = rKEvt.GetKeyCode().GetModifier() + rKEvt.GetKeyCode().GetCode(); - - if (nKey == KEY_TAB || nKey == KEY_TAB + KEY_SHIFT) - { - return false; - } - else if (!pEdView->PostKeyEvent(rKEvt)) - { - return false; - } - - return true; -} - -void ClassificationEditView::GetFocus() -{ - pEdView->ShowCursor(); - - weld::CustomWidgetController::GetFocus(); + m_xEditView->Invalidate(); } } // end sfx2 |