summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Dominguez <venccsralph@gmail.com>2012-06-29 20:16:18 -0430
committerRafael Dominguez <venccsralph@gmail.com>2012-06-29 20:16:18 -0430
commita049352ac90700181007623603b3e301c66bb20b (patch)
treee44f20deaa9daf8bd0ce2ffc72d7170bcaba070f
parentd1a5c90d52d9cae18b02fd826ee10ae77d8569be (diff)
Rename a folder by clicking on the name in the overlay.
Change-Id: I1b3b118667d268bbcda1f1500a2ec2d6916b8f78
-rw-r--r--sfx2/inc/sfx2/templatefolderview.hxx2
-rw-r--r--sfx2/inc/sfx2/templateview.hxx12
-rw-r--r--sfx2/source/control/templatefolderview.cxx23
-rw-r--r--sfx2/source/control/templateview.cxx75
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: */