diff options
author | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2013-01-16 13:51:45 +0100 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2013-01-16 14:17:50 +0100 |
commit | 7c7520bad93185eb4a5a3b60241b53c989aeb4c8 (patch) | |
tree | e33e2615b2327ce570a93d6ac56914c246e20fd0 /sfx2 | |
parent | 34856077702907aed5568ff3d4b98888ced37edf (diff) |
Template Manager: show names on several lines
Change-Id: I6990bb6ac52889de36f3ec2cce33e4dc2f3da2ea
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/inc/sfx2/thumbnailviewitem.hxx | 2 | ||||
-rw-r--r-- | sfx2/source/control/templatecontaineritem.cxx | 18 | ||||
-rw-r--r-- | sfx2/source/control/templatelocalview.cxx | 18 | ||||
-rw-r--r-- | sfx2/source/control/templateviewitem.cxx | 27 | ||||
-rw-r--r-- | sfx2/source/control/thumbnailviewitem.cxx | 81 |
5 files changed, 70 insertions, 76 deletions
diff --git a/sfx2/inc/sfx2/thumbnailviewitem.hxx b/sfx2/inc/sfx2/thumbnailviewitem.hxx index 96096670f36d..18b7eae57f90 100644 --- a/sfx2/inc/sfx2/thumbnailviewitem.hxx +++ b/sfx2/inc/sfx2/thumbnailviewitem.hxx @@ -22,6 +22,7 @@ #include <basegfx/vector/b2dvector.hxx> #include <drawinglayer/attribute/fontattribute.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <osl/mutex.hxx> #include <vcl/bitmapex.hxx> #include "sfx2/dllapi.h" @@ -106,6 +107,7 @@ public: virtual void Paint (drawinglayer::processor2d::BaseProcessor2D *pProcessor, const ThumbnailItemAttributes *pAttrs); + void addTextPrimitives (const rtl::OUString& rText, const ThumbnailItemAttributes *pAttrs, Point aPos, drawinglayer::primitive2d::Primitive2DSequence& rSeq); static drawinglayer::primitive2d::PolygonHairlinePrimitive2D* createBorderLine (const basegfx::B2DPolygon &rPolygon); diff --git a/sfx2/source/control/templatecontaineritem.cxx b/sfx2/source/control/templatecontaineritem.cxx index 25fa5fe89920..febd87f718b4 100644 --- a/sfx2/source/control/templatecontaineritem.cxx +++ b/sfx2/source/control/templatecontaineritem.cxx @@ -84,8 +84,6 @@ void TemplateContainerItem::Paint (drawinglayer::processor2d::BaseProcessor2D *p Size aThumbSize( ( maThumbnailArea.getWidth() - 3 * nThumbPadding ) / 2, ( maThumbnailArea.getHeight() - 3* nThumbPadding ) / 2 ); // Draw thumbnail - Point aPos = maPrev1Pos; - for (int i=0; i<4; ++i) { long nPosX = 0; @@ -153,21 +151,7 @@ void TemplateContainerItem::Paint (drawinglayer::processor2d::BaseProcessor2D *p } } - // Draw centered text below thumbnail - aPos = maTextPos; - - // Create the text primitive - basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix( - pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(), - double( aPos.X() ), double( aPos.Y() ) ) ); - - aSeq[nCount++] = Primitive2DReference( - new TextSimplePortionPrimitive2D(aTextMatrix, - maTitle,0,maTitle.getLength(), - std::vector< double >( ), - pAttrs->aFontAttr, - com::sun::star::lang::Locale(), - Color(COL_BLACK).getBColor() ) ); + addTextPrimitives(maTitle, pAttrs, maTextPos, aSeq); pProcessor->process(aSeq); } diff --git a/sfx2/source/control/templatelocalview.cxx b/sfx2/source/control/templatelocalview.cxx index a2e9ff1037ee..2cacc9b3b3d7 100644 --- a/sfx2/source/control/templatelocalview.cxx +++ b/sfx2/source/control/templatelocalview.cxx @@ -51,12 +51,6 @@ void TemplateLocalView::Populate () { OUString aRegionName(mpDocTemplates->GetFullRegionName(i)); - if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght) - { - aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3); - aRegionName += "..."; - } - TemplateContainerItem* pItem = new TemplateContainerItem( *this ); pItem->mnId = i+1; pItem->maTitle = aRegionName; @@ -69,12 +63,6 @@ void TemplateLocalView::Populate () OUString aName = mpDocTemplates->GetName(i,j); OUString aURL = mpDocTemplates->GetPath(i,j); - if ((sal_uInt32)aName.getLength() > mpItemAttrs->nMaxTextLenght) - { - aName = aName.copy(0,mpItemAttrs->nMaxTextLenght-3); - aName += "..."; - } - TemplateItemProperties aProperties;; aProperties.nId = j+1; aProperties.nDocId = j; @@ -162,12 +150,6 @@ sal_uInt16 TemplateLocalView::createRegion(const OUString &rName) OUString aRegionName = rName; - if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght) - { - aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3); - aRegionName += "..."; - } - TemplateContainerItem* pItem = new TemplateContainerItem( *this ); pItem->mnId = nRegionId+1; pItem->maTitle = aRegionName; diff --git a/sfx2/source/control/templateviewitem.cxx b/sfx2/source/control/templateviewitem.cxx index 51a28622e511..9f06ebbddcbf 100644 --- a/sfx2/source/control/templateviewitem.cxx +++ b/sfx2/source/control/templateviewitem.cxx @@ -108,34 +108,11 @@ void TemplateViewItem::Paint(drawinglayer::processor2d::BaseProcessor2D *pProces // draw thumbnail borders aSeq[3] = Primitive2DReference(createBorderLine(aBounds)); - // Draw centered text below thumbnail - - // Create the text primitive - basegfx::B2DHomMatrix aTitleMatrix( createScaleTranslateB2DHomMatrix( - pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(), - double( maTextPos.X() ), double( maTextPos.Y() ) ) ); - - aSeq[4] = Primitive2DReference( - new TextSimplePortionPrimitive2D(aTitleMatrix, - maTitle,0,pAttrs->nMaxTextLenght, - std::vector< double >( ), - pAttrs->aFontAttr, - com::sun::star::lang::Locale(), - Color(COL_BLACK).getBColor() ) ); + addTextPrimitives(maTitle, pAttrs, maTextPos, aSeq); if (!maSubTitle.isEmpty()) { - basegfx::B2DHomMatrix aSubTitleMatrix( createScaleTranslateB2DHomMatrix( - pAttrs->aFontSize.getX()*SUBTITLE_SCALE_FACTOR, pAttrs->aFontSize.getY()*SUBTITLE_SCALE_FACTOR, - double( maSubTitlePos.X() ), double( maSubTitlePos.Y() ) ) ); - - aSeq[5] = Primitive2DReference( - new TextSimplePortionPrimitive2D(aSubTitleMatrix, - maSubTitle,0,pAttrs->nMaxTextLenght, - std::vector< double >( ), - pAttrs->aFontAttr, - com::sun::star::lang::Locale(), - Color(COL_BLACK).getBColor() ) ); + addTextPrimitives(maSubTitle, pAttrs, maSubTitlePos, aSeq); } pProcessor->process(aSeq); diff --git a/sfx2/source/control/thumbnailviewitem.cxx b/sfx2/source/control/thumbnailviewitem.cxx index e5a07dbfd26d..2e6eb96a7910 100644 --- a/sfx2/source/control/thumbnailviewitem.cxx +++ b/sfx2/source/control/thumbnailviewitem.cxx @@ -34,6 +34,7 @@ #include <drawinglayer/processor2d/baseprocessor2d.hxx> #include <vcl/button.hxx> #include <vcl/svapp.hxx> +#include <vcl/texteng.hxx> using namespace basegfx; using namespace basegfx::tools; @@ -127,7 +128,8 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc if ( mbSelected || mbHover ) aFillColor = pAttrs->aHighlightColor; - aSeq[0] = Primitive2DReference( new PolyPolygonColorPrimitive2D( + sal_uInt32 nPrimitive = 0; + aSeq[nPrimitive++] = Primitive2DReference( new PolyPolygonColorPrimitive2D( B2DPolyPolygon(Polygon(maDrawArea,5,5).getB2DPolygon()), aFillColor)); @@ -135,7 +137,7 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc Point aPos = maPrev1Pos; Size aImageSize = maPreview1.GetSizePixel(); - aSeq[1] = Primitive2DReference( new FillBitmapPrimitive2D( + aSeq[nPrimitive++] = Primitive2DReference( new FillBitmapPrimitive2D( createTranslateB2DHomMatrix(aPos.X(),aPos.Y()), FillBitmapAttribute(maPreview1, B2DPoint(0,0), @@ -156,27 +158,74 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc aBounds.append(B2DPoint(fPosX,fPosY+fHeight)); aBounds.setClosed(true); - aSeq[2] = Primitive2DReference(createBorderLine(aBounds)); + aSeq[nPrimitive++] = Primitive2DReference(createBorderLine(aBounds)); - // Draw centered text below thumbnail + // Draw text below thumbnail aPos = maTextPos; - // Create the text primitive - basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix( - pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(), - double( aPos.X() ), double( aPos.Y() ) ) ); - - aSeq[3] = Primitive2DReference( - new TextSimplePortionPrimitive2D(aTextMatrix, - maTitle,0,pAttrs->nMaxTextLenght, - std::vector< double >( ), - pAttrs->aFontAttr, - com::sun::star::lang::Locale(), - Color(COL_BLACK).getBColor() ) ); + addTextPrimitives( maTitle, pAttrs, maTextPos, aSeq ); pProcessor->process(aSeq); } +void ThumbnailViewItem::addTextPrimitives (const rtl::OUString& rText, const ThumbnailItemAttributes *pAttrs, Point aPos, Primitive2DSequence& rSeq) +{ + drawinglayer::primitive2d::TextLayouterDevice aTextDev; + + rtl::OUString aText (rText); + + TextEngine aTextEngine; + aTextEngine.SetMaxTextWidth(maDrawArea.getWidth()); + aTextEngine.SetText(rText); + + sal_Int32 nPrimitives = rSeq.getLength(); + rSeq.realloc(nPrimitives + aTextEngine.GetLineCount(0)); + + // Create the text primitives + sal_uInt16 nLineStart = 0; + for (sal_uInt16 i=0; i<aTextEngine.GetLineCount(0); ++i) + { + sal_uInt16 nLineLength = aTextEngine.GetLineLen(0, i); + double nLineWidth = aTextDev.getTextWidth (aText, nLineStart, nLineLength); + + bool bTooLong = (aPos.getY() + aTextEngine.GetCharHeight()) > maDrawArea.Bottom(); + if (bTooLong && (nLineLength + nLineStart) < rText.getLength()) + { + // Add the '...' to the last line to show, even though it may require to shorten the line + double nDotsWidth = aTextDev.getTextWidth(rtl::OUString("..."),0,3); + + sal_uInt16 nLength = nLineLength - 1; + while ( nDotsWidth + aTextDev.getTextWidth(aText, nLineStart, nLength) > maDrawArea.getWidth() && nLength > 0) + { + --nLength; + } + + aText = aText.copy(0, nLineStart+nLength); + aText += "..."; + nLineLength = nLength + 3; + } + + double nLineX = maDrawArea.Left() + (maDrawArea.getWidth() - nLineWidth) / 2.0; + + basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix( + pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(), + nLineX, double( aPos.Y() ) ) ); + + rSeq[nPrimitives++] = Primitive2DReference( + new TextSimplePortionPrimitive2D(aTextMatrix, + aText,nLineStart,nLineLength, + std::vector< double >( ), + pAttrs->aFontAttr, + com::sun::star::lang::Locale(), + Color(COL_BLACK).getBColor() ) ); + nLineStart += nLineLength; + aPos.setY(aPos.getY() + aTextEngine.GetCharHeight()); + + if (bTooLong) + break; + } +} + drawinglayer::primitive2d::PolygonHairlinePrimitive2D* ThumbnailViewItem::createBorderLine (const basegfx::B2DPolygon& rPolygon) { |