diff options
author | Rafael Dominguez <venccsralph@gmail.com> | 2012-06-29 20:16:18 -0430 |
---|---|---|
committer | Rafael Dominguez <venccsralph@gmail.com> | 2012-06-29 20:16:18 -0430 |
commit | a049352ac90700181007623603b3e301c66bb20b (patch) | |
tree | e44f20deaa9daf8bd0ce2ffc72d7170bcaba070f | |
parent | d1a5c90d52d9cae18b02fd826ee10ae77d8569be (diff) |
Rename a folder by clicking on the name in the overlay.
Change-Id: I1b3b118667d268bbcda1f1500a2ec2d6916b8f78
-rw-r--r-- | sfx2/inc/sfx2/templatefolderview.hxx | 2 | ||||
-rw-r--r-- | sfx2/inc/sfx2/templateview.hxx | 12 | ||||
-rw-r--r-- | sfx2/source/control/templatefolderview.cxx | 23 | ||||
-rw-r--r-- | sfx2/source/control/templateview.cxx | 75 |
4 files changed, 110 insertions, 2 deletions
diff --git a/sfx2/inc/sfx2/templatefolderview.hxx b/sfx2/inc/sfx2/templatefolderview.hxx index 87cfb1448ac3..cf949302d70f 100644 --- a/sfx2/inc/sfx2/templatefolderview.hxx +++ b/sfx2/inc/sfx2/templatefolderview.hxx @@ -62,6 +62,8 @@ private: DECL_LINK(TVTemplateStateHdl, const ThumbnailViewItem*); + DECL_LINK(ChangeNameHdl, TemplateView*); + private: bool mbFilteredResults; // Flag keep track if overlay has been filtered so folders can get filtered too afterwards diff --git a/sfx2/inc/sfx2/templateview.hxx b/sfx2/inc/sfx2/templateview.hxx index 45f755a0dfd7..ba9baa07850b 100644 --- a/sfx2/inc/sfx2/templateview.hxx +++ b/sfx2/inc/sfx2/templateview.hxx @@ -13,6 +13,7 @@ #include <sfx2/thumbnailview.hxx> #include <vcl/image.hxx> +class Edit; class SfxDocumentTemplates; class TemplateViewItem; @@ -28,6 +29,8 @@ public: sal_uInt16 getRegionId () const { return mnRegionId; } + const rtl::OUString& getRegionName () const { return maFolderName; } + virtual void Paint (const Rectangle &rRect); void InsertItem (const TemplateViewItem *pItem); @@ -36,12 +39,18 @@ public: void setDblClickHdl (const Link &rLink) { maDblClickHdl = rLink; } + void setChangeNameHdl (const Link &rLink) { maChangeNameHdl = rLink; } + protected: + virtual void Resize (); + virtual void MouseButtonDown (const MouseEvent &rMEvt); virtual void OnItemDblClicked (ThumbnailViewItem *pItem); + DECL_LINK (ChangeNameHdl, void*); + private: Image maCloseImg; @@ -49,6 +58,9 @@ private: rtl::OUString maFolderName; SfxDocumentTemplates *mpDocTemplates; Link maDblClickHdl; + Link maChangeNameHdl; + + Edit *mpEditName; }; #endif // TEMPLATEVIEW_HXX diff --git a/sfx2/source/control/templatefolderview.cxx b/sfx2/source/control/templatefolderview.cxx index 68f622b8d177..d784851fbc13 100644 --- a/sfx2/source/control/templatefolderview.cxx +++ b/sfx2/source/control/templatefolderview.cxx @@ -262,6 +262,7 @@ TemplateFolderView::TemplateFolderView ( Window* pParent, const ResId& rResId, b ITEM_PADDING); mpItemView->setItemStateHdl(LINK(this,TemplateFolderView,TVTemplateStateHdl)); + mpItemView->setChangeNameHdl(LINK(this,TemplateFolderView,ChangeNameHdl)); } TemplateFolderView::~TemplateFolderView() @@ -479,6 +480,26 @@ IMPL_LINK(TemplateFolderView, TVTemplateStateHdl, const ThumbnailViewItem*, pIte return 0; } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +IMPL_LINK(TemplateFolderView, ChangeNameHdl, TemplateView*, pView) +{ + sal_uInt16 nRegionId = pView->getRegionId(); + sal_uInt16 nItemId = nRegionId + 1; + if (!mpDocTemplates->SetName(pView->getRegionName(),nRegionId,USHRT_MAX)) + return false; + for (size_t i = 0; i < mItemList.size(); ++i) + { + if (mItemList[i]->mnId == nItemId) + { + mItemList[i]->maText = pView->getRegionName(); + mItemList[i]->calculateItemsPosition(mpItemAttrs->nMaxTextLenght); + Invalidate(); + break; + } + } + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/control/templateview.cxx b/sfx2/source/control/templateview.cxx index f0f0ed9244be..c757356a0a7c 100644 --- a/sfx2/source/control/templateview.cxx +++ b/sfx2/source/control/templateview.cxx @@ -11,6 +11,7 @@ #include <basegfx/matrix/b2dhommatrixtools.hxx> #include <basegfx/point/b2dpoint.hxx> +#include <basegfx/range/b2drange.hxx> #include <basegfx/vector/b2dvector.hxx> #include <drawinglayer/attribute/fillbitmapattribute.hxx> #include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> @@ -20,9 +21,13 @@ #include <sfx2/doctempl.hxx> #include <sfx2/sfxresid.hxx> #include <sfx2/templateviewitem.hxx> +#include <vcl/edit.hxx> #include "templateview.hrc" +#define EDIT_WIDTH 180 +#define EDIT_HEIGHT 20 + using namespace basegfx; using namespace basegfx::tools; using namespace drawinglayer::attribute; @@ -32,9 +37,12 @@ TemplateView::TemplateView (Window *pParent, SfxDocumentTemplates *pTemplates) : ThumbnailView(pParent,WB_VSCROLL), maCloseImg(SfxResId(IMG_TEMPLATE_VIEW_CLOSE)), mnRegionId(0), - mpDocTemplates(pTemplates) + mpDocTemplates(pTemplates), + mpEditName(new Edit(this, WB_BORDER | WB_HIDE)) { mnHeaderHeight = 30; + + mpEditName->SetSizePixel(Size(EDIT_WIDTH,EDIT_HEIGHT)); } TemplateView::~TemplateView () @@ -45,6 +53,7 @@ void TemplateView::setRegionId (const sal_uInt16 nRegionId) { mnRegionId = nRegionId; maFolderName = mpDocTemplates->GetRegionName(nRegionId); + mpEditName->SetText(rtl::OUString()); } void TemplateView::Paint (const Rectangle &rRect) @@ -129,10 +138,46 @@ void TemplateView::InsertItems (const std::vector<TemplateViewItem*> &rTemplates Invalidate(); } +void TemplateView::Resize() +{ + // Set editbox size and position + Size aEditSize = mpEditName->GetSizePixel(); + Size aWinSize = GetOutputSize(); + + Point aPos; + aPos.X() = (aWinSize.getWidth() - aEditSize.getWidth())/2; + aPos.Y() = (mnHeaderHeight - aEditSize.getHeight())/2; + + mpEditName->SetPosPixel(aPos); + + ThumbnailView::Resize(); +} + void TemplateView::MouseButtonDown (const MouseEvent &rMEvt) { if (rMEvt.IsLeft()) { + // Check if we are editing title + if (mpEditName->IsVisible()) + { + mpEditName->Show(false); + + // Update name if its not empty + rtl::OUString aTmp = mpEditName->GetText(); + + if (!aTmp.isEmpty()) + { + PostUserEvent(LINK(this,TemplateView,ChangeNameHdl)); + } + else + { + mpEditName->SetText(rtl::OUString()); + Invalidate(); + } + + return; + } + Size aWinSize = GetOutputSizePixel(); Size aImageSize = maCloseImg.GetSizePixel(); @@ -147,6 +192,20 @@ void TemplateView::MouseButtonDown (const MouseEvent &rMEvt) Show(false); Clear(); } + else + { + drawinglayer::primitive2d::TextLayouterDevice aTextDev; + + float fTextWidth = aTextDev.getTextWidth(maFolderName,0,maFolderName.getLength()); + + aPos.X() = (aWinSize.getWidth() - fTextWidth)/2; + aPos.Y() = (mnHeaderHeight - aTextDev.getTextHeight())/2; + + Rectangle aTitleRect(aPos,Size(fTextWidth,aTextDev.getTextHeight())); + + if (aTitleRect.IsInside(rMEvt.GetPosPixel())) + mpEditName->Show(); + } } ThumbnailView::MouseButtonDown(rMEvt); @@ -157,6 +216,20 @@ void TemplateView::OnItemDblClicked(ThumbnailViewItem *pItem) maDblClickHdl.Call(pItem); } +IMPL_LINK_NOARG(TemplateView, ChangeNameHdl) +{ + rtl::OUString aTmp = maFolderName; + maFolderName = mpEditName->GetText(); + + if (!maChangeNameHdl.Call(this)) + maFolderName = aTmp; + + mpEditName->SetText(rtl::OUString()); + + Invalidate(); + return 0; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |