summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-06-25 15:21:40 +0100
committerMiklos Vajna <vmiklos@collabora.com>2019-09-13 15:10:34 +0200
commit6d2efae662a57bf49fd4367e603f307b50885620 (patch)
tree21c34d8f3077f57c50c33ac2084b65f92caab290
parented7c96738298a19d375937f38642be08e65fcf46 (diff)
use common WeldEditView
Reviewed-on: https://gerrit.libreoffice.org/74705 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 2cebba0e4042ca2cab37cf38874c2576c2ac6a6f) Change-Id: I873cb64a167027030c9eeef61344e6f6f885a924 Reviewed-on: https://gerrit.libreoffice.org/78544 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r--cui/source/dialogs/SpellDialog.cxx116
-rw-r--r--cui/source/inc/SpellDialog.hxx31
-rw-r--r--editeng/source/misc/weldeditview.cxx62
-rw-r--r--include/editeng/weldeditview.hxx10
-rw-r--r--include/svx/ClassificationEditView.hxx46
-rw-r--r--sc/source/ui/inc/tphfedit.hxx39
-rw-r--r--sc/source/ui/pagedlg/tphfedit.cxx156
-rw-r--r--svx/source/dialog/ClassificationDialog.cxx23
-rw-r--r--svx/source/dialog/ClassificationEditView.cxx140
9 files changed, 125 insertions, 498 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 ff01ce68e606..9a41ffdd5476 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,73 +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();
- GetFocus();
- }
-
- 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()
@@ -302,7 +211,7 @@ bool ScEditWindow::KeyInput( const KeyEvent& rKEvt )
{
return false;
}
- else if ( !pEdView->PostKeyEvent( rKEvt ) )
+ else if ( !m_xEditView->PostKeyEvent( rKEvt ) )
{
return false;
}
@@ -317,8 +226,6 @@ bool ScEditWindow::KeyInput( const KeyEvent& rKEvt )
void ScEditWindow::GetFocus()
{
- pEdView->ShowCursor();
-
assert(m_GetFocusLink);
m_GetFocusLink(*this);
@@ -330,7 +237,7 @@ void ScEditWindow::GetFocus()
else
pAcc = nullptr;
- weld::CustomWidgetController::GetFocus();
+ WeldEditView::GetFocus();
}
void ScEditWindow::LoseFocus()
@@ -342,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 3c61c5399c47..0c0b9c7c6f07 100644
--- a/svx/source/dialog/ClassificationDialog.cxx
+++ b/svx/source/dialog/ClassificationDialog.cxx
@@ -426,7 +426,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;
@@ -468,13 +468,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;
@@ -517,7 +519,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;
@@ -531,7 +534,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);
@@ -550,7 +553,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;
@@ -576,7 +579,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);
@@ -601,7 +604,7 @@ IMPL_LINK(ClassificationDialog, SelectClassificationHdl, weld::ComboBox&, rBox,
}
if (bReplaceExisting)
- m_xEditWindow->pEdView->SetSelection(aExistingFieldSelection);
+ m_xEditWindow->getEditView().SetSelection(aExistingFieldSelection);
insertCategoryField(nSelected);
@@ -637,7 +640,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