[Libreoffice-commits] core.git: officecfg/registry sc/sdi sc/source sc/uiconfig sc/UIConfig_scalc.mk
Gulsah Kose
gulsah.1004 at gmail.com
Sun Sep 25 07:01:43 UTC 2016
officecfg/registry/data/org/openoffice/Office/UI/CalcWindowState.xcu | 11
sc/UIConfig_scalc.mk | 1
sc/sdi/tabvwsh.sdi | 8
sc/source/ui/drawfunc/fuconrec.cxx | 199 ++++++++++
sc/source/ui/inc/fuconrec.hxx | 1
sc/source/ui/view/tabvwsh2.cxx | 14
sc/uiconfig/scalc/toolbar/arrowsbar.xml | 30 +
sc/uiconfig/scalc/toolbar/drawbar.xml | 1
8 files changed, 265 insertions(+)
New commits:
commit 7b8832ff972a4e9f3e03fd7d96882b2a78c03b3e
Author: Gulsah Kose <gulsah.1004 at gmail.com>
Date: Mon Sep 19 12:43:34 2016 +0300
tdf#101390 Add Arrows toolbox functions on calc drawingbar.
Calc arrows toolbox includes following commands
.uno:LineArrowEnd
.uno:LineCircleArrow
.uno:LineSquareArrow
.uno:LineArrows
.uno:LineArrowStart
.uno:LineArrowCircle
.uno:LineArrowSquare
.uno:Line
Change-Id: I09c93447baeafd3f7d4993117458d4585d21cbaf
Signed-off-by: Gulsah Kose <gulsah.1004 at gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/29021
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Maxim Monastirsky <momonasmon at gmail.com>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/CalcWindowState.xcu b/officecfg/registry/data/org/openoffice/Office/UI/CalcWindowState.xcu
index ddb27a8..0a797cd 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/CalcWindowState.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/CalcWindowState.xcu
@@ -717,6 +717,17 @@
<value>false</value>
</prop>
</node>
+ <node oor:name="private:resource/toolbar/arrowsbar" oor:op="replace">
+ <prop oor:name="Docked" oor:type="xs:boolean">
+ <value>false</value>
+ </prop>
+ <prop oor:name="UIName" oor:type="xs:string">
+ <value xml:lang="en-US">Arrows</value>
+ </prop>
+ <prop oor:name="Visible" oor:type="xs:boolean">
+ <value>false</value>
+ </prop>
+ </node>
</node>
</node>
</oor:component-data>
diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index 707936d..d05aa66 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -50,6 +50,7 @@ $(eval $(call gb_UIConfig_add_statusbarfiles,modules/scalc,\
$(eval $(call gb_UIConfig_add_toolbarfiles,modules/scalc,\
sc/uiconfig/scalc/toolbar/alignmentbar \
+ sc/uiconfig/scalc/toolbar/arrowsbar \
sc/uiconfig/scalc/toolbar/arrowshapes \
sc/uiconfig/scalc/toolbar/basicshapes \
sc/uiconfig/scalc/toolbar/calloutshapes \
diff --git a/sc/sdi/tabvwsh.sdi b/sc/sdi/tabvwsh.sdi
index 46859c5..91e92c9 100644
--- a/sc/sdi/tabvwsh.sdi
+++ b/sc/sdi/tabvwsh.sdi
@@ -88,6 +88,14 @@ interface BaseSelection
SID_OBJECT_SELECT [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
SID_DRAW_LINE [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_LINE_ARROW_END [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_LINE_ARROW_CIRCLE [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_LINE_ARROW_SQUARE [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_LINE_ARROW_START [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_LINE_CIRCLE_ARROW [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_LINE_SQUARE_ARROW [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_LINE_ARROWS [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
+ SID_DRAWTBX_ARROWS [ StateMethod = GetDrawState; ]
SID_DRAW_RECT [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
SID_DRAW_ELLIPSE [ ExecMethod = ExecDraw; StateMethod = GetDrawState; ]
SID_DRAWTBX_LINES [ StateMethod = GetDrawState; ]
diff --git a/sc/source/ui/drawfunc/fuconrec.cxx b/sc/source/ui/drawfunc/fuconrec.cxx
index c7563cd..310b114 100644
--- a/sc/source/ui/drawfunc/fuconrec.cxx
+++ b/sc/source/ui/drawfunc/fuconrec.cxx
@@ -26,6 +26,15 @@
// Create default drawing objects via keyboard
#include <svx/svdopath.hxx>
#include <svx/svdocapt.hxx>
+#include <svx/dialogs.hrc>
+#include <svx/xlnwtit.hxx>
+#include <svx/xlnstwit.hxx>
+#include <svx/xlnedwit.hxx>
+#include <svx/xlnedit.hxx>
+#include <svx/xlnstit.hxx>
+#include <svx/dialmgr.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+
#include <basegfx/polygon/b2dpolygon.hxx>
#include <basegfx/point/b2dpoint.hxx>
@@ -53,6 +62,38 @@ FuConstRectangle::~FuConstRectangle()
{
}
+/**
+ * set line starts and ends for the object to be created
+ */
+
+namespace {
+
+::basegfx::B2DPolyPolygon getPolygon( sal_uInt16 nResId, SdrModel* pDoc )
+{
+ ::basegfx::B2DPolyPolygon aRetval;
+ XLineEndListRef pLineEndList = pDoc->GetLineEndList();
+
+ if( pLineEndList.is() )
+ {
+ OUString aArrowName( SVX_RES(nResId) );
+ long nCount = pLineEndList->Count();
+ long nIndex;
+ for( nIndex = 0L; nIndex < nCount; nIndex++ )
+ {
+ const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nIndex);
+ if( pEntry->GetName() == aArrowName )
+ {
+ aRetval = pEntry->GetLineEnd();
+ break;
+ }
+ }
+ }
+
+ return aRetval;
+}
+
+}
+
/*************************************************************************
|*
|* MouseButtonDown-event
@@ -86,6 +127,16 @@ bool FuConstRectangle::MouseButtonDown(const MouseEvent& rMEvt)
}
else
bReturn = pView->BegCreateObj(aPos);
+
+ SdrObject* pObj = pView->GetCreateObj();
+
+ if (pObj)
+ {
+ SfxItemSet aAttr(pObj->GetModel()->GetItemPool());
+ SetLineEnds(aAttr, pObj, aSfxRequest.GetSlot());
+ pObj->SetMergedItemSet(aAttr);
+ }
+
if ( bReturn )
pView->GetCreateObj()->SetGridOffset( aGridOff );
}
@@ -144,6 +195,13 @@ void FuConstRectangle::Activate()
switch (aSfxRequest.GetSlot() )
{
case SID_DRAW_LINE:
+ case SID_LINE_ARROW_END:
+ case SID_LINE_ARROW_CIRCLE:
+ case SID_LINE_ARROW_SQUARE:
+ case SID_LINE_ARROW_START:
+ case SID_LINE_CIRCLE_ARROW:
+ case SID_LINE_SQUARE_ARROW:
+ case SID_LINE_ARROWS:
aNewPointer = Pointer( PointerStyle::DrawLine );
aObjKind = OBJ_LINE;
break;
@@ -178,6 +236,139 @@ void FuConstRectangle::Activate()
FuConstruct::Activate();
}
+void FuConstRectangle::SetLineEnds(SfxItemSet& rAttr, SdrObject* pObj, sal_uInt16 nSlotId)
+{
+ SdrModel *pDoc = pObj->GetModel();
+
+ if ( nSlotId == SID_LINE_ARROW_START ||
+ nSlotId == SID_LINE_ARROW_END ||
+ nSlotId == SID_LINE_ARROWS ||
+ nSlotId == SID_LINE_ARROW_CIRCLE ||
+ nSlotId == SID_LINE_CIRCLE_ARROW ||
+ nSlotId == SID_LINE_ARROW_SQUARE ||
+ nSlotId == SID_LINE_SQUARE_ARROW )
+ {
+
+ // set attributes of line start and ends
+
+ // arrowhead
+ ::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, pDoc ) );
+ if( !aArrow.count() )
+ {
+ ::basegfx::B2DPolygon aNewArrow;
+ aNewArrow.append(::basegfx::B2DPoint(10.0, 0.0));
+ aNewArrow.append(::basegfx::B2DPoint(0.0, 30.0));
+ aNewArrow.append(::basegfx::B2DPoint(20.0, 30.0));
+ aNewArrow.setClosed(true);
+ aArrow.append(aNewArrow);
+ }
+
+ // Circles
+ ::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, pDoc ) );
+ if( !aCircle.count() )
+ {
+ ::basegfx::B2DPolygon aNewCircle;
+ aNewCircle = ::basegfx::tools::createPolygonFromEllipse(::basegfx::B2DPoint(0.0, 0.0), 250.0, 250.0);
+ aNewCircle.setClosed(true);
+ aCircle.append(aNewCircle);
+ }
+
+ // Square
+ ::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, pDoc ) );
+ if( !aSquare.count() )
+ {
+ ::basegfx::B2DPolygon aNewSquare;
+ aNewSquare.append(::basegfx::B2DPoint(0.0, 0.0));
+ aNewSquare.append(::basegfx::B2DPoint(10.0, 0.0));
+ aNewSquare.append(::basegfx::B2DPoint(10.0, 10.0));
+ aNewSquare.append(::basegfx::B2DPoint(0.0, 10.0));
+ aNewSquare.setClosed(true);
+ aSquare.append(aNewSquare);
+ }
+
+ SfxItemSet aSet( pDoc->GetItemPool() );
+ long nWidth = 200; // (1/100th mm)
+
+ // determine line width and calculate with it the line end width
+ if( aSet.GetItemState( XATTR_LINEWIDTH ) != SfxItemState::DONTCARE )
+ {
+ long nValue = static_cast<const XLineWidthItem&>( aSet.Get( XATTR_LINEWIDTH ) ).GetValue();
+ if( nValue > 0 )
+ nWidth = nValue * 3;
+ }
+
+ switch (nSlotId)
+ {
+ case SID_LINE_ARROWS:
+ {
+ // connector with arrow ends
+ rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow));
+ rAttr.Put(XLineStartWidthItem(nWidth));
+ rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow));
+ rAttr.Put(XLineEndWidthItem(nWidth));
+ }
+ break;
+
+ case SID_LINE_ARROW_START:
+ case SID_LINE_ARROW_CIRCLE:
+ case SID_LINE_ARROW_SQUARE:
+ {
+ // connector with arrow start
+ rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow));
+ rAttr.Put(XLineStartWidthItem(nWidth));
+ }
+ break;
+
+ case SID_LINE_ARROW_END:
+ case SID_LINE_CIRCLE_ARROW:
+ case SID_LINE_SQUARE_ARROW:
+ {
+ // connector with arrow end
+ rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow));
+ rAttr.Put(XLineEndWidthItem(nWidth));
+ }
+ break;
+ }
+
+ // and again, for the still missing ends
+ switch (nSlotId)
+ {
+ case SID_LINE_ARROW_CIRCLE:
+ {
+ // circle end
+ rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle));
+ rAttr.Put(XLineEndWidthItem(nWidth));
+ }
+ break;
+
+ case SID_LINE_CIRCLE_ARROW:
+ {
+ // circle start
+ rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle));
+ rAttr.Put(XLineStartWidthItem(nWidth));
+ }
+ break;
+
+ case SID_LINE_ARROW_SQUARE:
+ {
+ // square end
+ rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_SQUARE), aSquare));
+ rAttr.Put(XLineEndWidthItem(nWidth));
+ }
+ break;
+
+ case SID_LINE_SQUARE_ARROW:
+ {
+ // square start
+ rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_SQUARE), aSquare));
+ rAttr.Put(XLineStartWidthItem(nWidth));
+ }
+ break;
+ }
+ }
+}
+
+
/*************************************************************************
|*
|* Function deaktivieren
@@ -206,6 +397,13 @@ SdrObject* FuConstRectangle::CreateDefaultObject(const sal_uInt16 nID, const Rec
switch(nID)
{
case SID_DRAW_LINE:
+ case SID_LINE_ARROW_END:
+ case SID_LINE_ARROW_CIRCLE:
+ case SID_LINE_ARROW_SQUARE:
+ case SID_LINE_ARROW_START:
+ case SID_LINE_CIRCLE_ARROW:
+ case SID_LINE_SQUARE_ARROW:
+ case SID_LINE_ARROWS:
{
if(dynamic_cast<const SdrPathObj*>( pObj) != nullptr)
{
@@ -264,6 +462,7 @@ SdrObject* FuConstRectangle::CreateDefaultObject(const sal_uInt16 nID, const Rec
}
SfxItemSet aAttr(pDrDoc->GetItemPool());
+ SetLineEnds(aAttr, pObj, nID);
pObj->SetMergedItemSet(aAttr);
}
diff --git a/sc/source/ui/inc/fuconrec.hxx b/sc/source/ui/inc/fuconrec.hxx
index 72885d3..d69d0e3 100644
--- a/sc/source/ui/inc/fuconrec.hxx
+++ b/sc/source/ui/inc/fuconrec.hxx
@@ -36,6 +36,7 @@ class FuConstRectangle : public FuConstruct
virtual void Activate() override;
virtual void Deactivate() override;
+ static void SetLineEnds(SfxItemSet& rAttr, SdrObject* pObj, sal_uInt16 nSlotId);
// Create default drawing objects via keyboard
virtual SdrObject* CreateDefaultObject(const sal_uInt16 nID, const Rectangle& rRectangle) override;
diff --git a/sc/source/ui/view/tabvwsh2.cxx b/sc/source/ui/view/tabvwsh2.cxx
index b81fc42..f1a0f48 100644
--- a/sc/source/ui/view/tabvwsh2.cxx
+++ b/sc/source/ui/view/tabvwsh2.cxx
@@ -218,6 +218,13 @@ void ScTabViewShell::ExecDraw(SfxRequest& rReq)
break;
case SID_DRAW_LINE:
+ case SID_LINE_ARROW_END:
+ case SID_LINE_ARROW_CIRCLE:
+ case SID_LINE_ARROW_SQUARE:
+ case SID_LINE_ARROW_START:
+ case SID_LINE_CIRCLE_ARROW:
+ case SID_LINE_SQUARE_ARROW:
+ case SID_LINE_ARROWS:
case SID_DRAW_RECT:
case SID_DRAW_ELLIPSE:
pTabView->SetDrawFuncPtr(new FuConstRectangle(this, pWin, pView, pDoc, rReq));
@@ -361,6 +368,13 @@ void ScTabViewShell::GetDrawState(SfxItemSet &rSet)
break;
case SID_DRAW_LINE:
+ case SID_LINE_ARROW_END:
+ case SID_LINE_ARROW_CIRCLE:
+ case SID_LINE_ARROW_SQUARE:
+ case SID_LINE_ARROW_START:
+ case SID_LINE_CIRCLE_ARROW:
+ case SID_LINE_SQUARE_ARROW:
+ case SID_LINE_ARROWS:
case SID_DRAW_RECT:
case SID_DRAW_ELLIPSE:
case SID_DRAW_POLYGON:
diff --git a/sc/uiconfig/scalc/toolbar/arrowsbar.xml b/sc/uiconfig/scalc/toolbar/arrowsbar.xml
new file mode 100644
index 0000000..5ec4d8a
--- /dev/null
+++ b/sc/uiconfig/scalc/toolbar/arrowsbar.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+-->
+<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
+ <toolbar:toolbaritem xlink:href=".uno:LineArrowEnd"/>
+ <toolbar:toolbaritem xlink:href=".uno:LineCircleArrow"/>
+ <toolbar:toolbaritem xlink:href=".uno:LineSquareArrow"/>
+ <toolbar:toolbaritem xlink:href=".uno:LineArrows"/>
+ <toolbar:toolbarbreak/>
+ <toolbar:toolbaritem xlink:href=".uno:LineArrowStart"/>
+ <toolbar:toolbaritem xlink:href=".uno:LineArrowCircle"/>
+ <toolbar:toolbaritem xlink:href=".uno:LineArrowSquare"/>
+ <toolbar:toolbaritem xlink:href=".uno:Line"/>
+</toolbar:toolbar>
diff --git a/sc/uiconfig/scalc/toolbar/drawbar.xml b/sc/uiconfig/scalc/toolbar/drawbar.xml
index fef6c7e..3c6ba26 100644
--- a/sc/uiconfig/scalc/toolbar/drawbar.xml
+++ b/sc/uiconfig/scalc/toolbar/drawbar.xml
@@ -21,6 +21,7 @@
<toolbar:toolbaritem xlink:href=".uno:SelectObject" toolbar:helpid="10128"/>
<toolbar:toolbarseparator/>
<toolbar:toolbaritem xlink:href=".uno:Line" toolbar:helpid="10102"/>
+ <toolbar:toolbaritem xlink:href=".uno:ArrowsToolbox"/>
<toolbar:toolbaritem xlink:href=".uno:LineToolbox"/>
<toolbar:toolbaritem xlink:href=".uno:Freeline" toolbar:visible="false"/>
<toolbar:toolbaritem xlink:href=".uno:Bezier_Unfilled" toolbar:helpid="10397" toolbar:visible="false"/>
More information about the Libreoffice-commits
mailing list