Kaydet (Commit) 9bcd98fd authored tarafından Cédric Bosdonnat's avatar Cédric Bosdonnat

Template Manager: ban double-click and right click to start selection mode

Change-Id: I49383a884b5806679ec6f79d49b8bc194d28d557
üst 3eaa0cb7
...@@ -106,7 +106,7 @@ public: ...@@ -106,7 +106,7 @@ public:
void setOverlayItemStateHdl (const Link &aLink) { maOverlayItemStateHdl = aLink; } void setOverlayItemStateHdl (const Link &aLink) { maOverlayItemStateHdl = aLink; }
void setOverlayDblClickHdl (const Link &rLink); void setOverlayClickHdl (const Link &rLink);
void setOverlayCloseHdl (const Link &rLink); void setOverlayCloseHdl (const Link &rLink);
...@@ -125,10 +125,12 @@ protected: ...@@ -125,10 +125,12 @@ protected:
virtual void OnSelectionMode (bool bMode); virtual void OnSelectionMode (bool bMode);
DECL_LINK(OverlayItemStateHdl, const ThumbnailViewItem*); DECL_LINK(OverlayItemStateHdl, const ThumbnailViewItem*);
DECL_LINK(OverlaySelectionModeHdl, bool*);
protected: protected:
TemplateView *mpItemView; TemplateView *mpItemView;
bool mbInSelectionModeHdl;
Link maOverlayItemStateHdl; Link maOverlayItemStateHdl;
}; };
......
...@@ -75,7 +75,7 @@ public: ...@@ -75,7 +75,7 @@ public:
private: private:
virtual void OnItemDblClicked (ThumbnailViewItem *pRegionItem); virtual void OnItemClicked (ThumbnailViewItem *pRegionItem);
DECL_LINK(ChangeNameHdl, TemplateView*); DECL_LINK(ChangeNameHdl, TemplateView*);
......
...@@ -37,7 +37,7 @@ public: ...@@ -37,7 +37,7 @@ public:
void InsertItems (const std::vector<TemplateItemProperties> &rTemplates); void InsertItems (const std::vector<TemplateItemProperties> &rTemplates);
void setDblClickHdl (const Link &rLink) { maDblClickHdl = rLink; } void setClickHdl (const Link &rLink) { maClickHdl = rLink; }
void setChangeNameHdl (const Link &rLink) { maChangeNameHdl = rLink; } void setChangeNameHdl (const Link &rLink) { maChangeNameHdl = rLink; }
...@@ -49,7 +49,7 @@ protected: ...@@ -49,7 +49,7 @@ protected:
virtual void MouseButtonDown (const MouseEvent &rMEvt); virtual void MouseButtonDown (const MouseEvent &rMEvt);
virtual void OnItemDblClicked (ThumbnailViewItem *pItem); virtual void OnItemClicked (ThumbnailViewItem *pItem);
DECL_LINK (ChangeNameHdl, void*); DECL_LINK (ChangeNameHdl, void*);
...@@ -59,7 +59,7 @@ private: ...@@ -59,7 +59,7 @@ private:
bool mbRenderTitle; bool mbRenderTitle;
sal_uInt16 mnId; sal_uInt16 mnId;
OUString maName; OUString maName;
Link maDblClickHdl; Link maClickHdl;
Link maChangeNameHdl; Link maChangeNameHdl;
Link maCloseHdl; Link maCloseHdl;
......
...@@ -241,6 +241,7 @@ public: ...@@ -241,6 +241,7 @@ public:
const ThumbnailViewItem*) > &func); const ThumbnailViewItem*) > &func);
void setItemStateHdl (const Link &aLink) { maItemStateHdl = aLink; } void setItemStateHdl (const Link &aLink) { maItemStateHdl = aLink; }
void setSelectionModeHdl (const Link &aLink) { maSelectionModeHdl = aLink; }
protected: protected:
...@@ -276,7 +277,7 @@ protected: ...@@ -276,7 +277,7 @@ protected:
virtual void OnSelectionMode (bool bMode); virtual void OnSelectionMode (bool bMode);
virtual void OnItemDblClicked (ThumbnailViewItem *pItem); virtual void OnItemClicked (ThumbnailViewItem *pItem);
protected: protected:
...@@ -330,6 +331,7 @@ protected: ...@@ -330,6 +331,7 @@ protected:
Color maColor; Color maColor;
Link maItemStateHdl; Link maItemStateHdl;
Link maSelectionModeHdl;
ThumbnailItemAttributes *mpItemAttrs; ThumbnailItemAttributes *mpItemAttrs;
drawinglayer::processor2d::BaseProcessor2D *mpProcessor; drawinglayer::processor2d::BaseProcessor2D *mpProcessor;
boost::function<bool (const ThumbnailViewItem*) > maFilterFunc; boost::function<bool (const ThumbnailViewItem*) > maFilterFunc;
......
...@@ -58,6 +58,7 @@ private: ...@@ -58,6 +58,7 @@ private:
DECL_LINK(CloseOverlayHdl, void*); DECL_LINK(CloseOverlayHdl, void*);
DECL_LINK(OnClickSelectionMode, ImageButton*); DECL_LINK(OnClickSelectionMode, ImageButton*);
DECL_LINK(SelectionModeHdl, bool*);
DECL_LINK(TBXViewHdl, void*); DECL_LINK(TBXViewHdl, void*);
DECL_LINK(TBXActionHdl, void*); DECL_LINK(TBXActionHdl, void*);
...@@ -141,6 +142,7 @@ private: ...@@ -141,6 +142,7 @@ private:
std::set<const ThumbnailViewItem*> maSelFolders; std::set<const ThumbnailViewItem*> maSelFolders;
bool mbIsSaveMode; ///< Flag that indicates if we are in save mode or not. bool mbIsSaveMode; ///< Flag that indicates if we are in save mode or not.
bool mbInSelectionModeHdl; ///< Flag avoiding selection mode handler loop
com::sun::star::uno::Reference< com::sun::star::frame::XModel > m_xModel; com::sun::star::uno::Reference< com::sun::star::frame::XModel > m_xModel;
com::sun::star::uno::Reference< com::sun::star::frame::XComponentLoader > mxDesktop; com::sun::star::uno::Reference< com::sun::star::frame::XComponentLoader > mxDesktop;
}; };
......
...@@ -58,16 +58,20 @@ bool ViewFilter_Keyword::operator ()(const ThumbnailViewItem *pItem) ...@@ -58,16 +58,20 @@ bool ViewFilter_Keyword::operator ()(const ThumbnailViewItem *pItem)
TemplateAbstractView::TemplateAbstractView (Window *pParent, WinBits nWinStyle, bool bDisableTransientChildren) TemplateAbstractView::TemplateAbstractView (Window *pParent, WinBits nWinStyle, bool bDisableTransientChildren)
: ThumbnailView(pParent,nWinStyle,bDisableTransientChildren), : ThumbnailView(pParent,nWinStyle,bDisableTransientChildren),
mpItemView(new TemplateView(this)) mpItemView(new TemplateView(this)),
mbInSelectionModeHdl(false)
{ {
mpItemView->setItemStateHdl(LINK(this,TemplateAbstractView,OverlayItemStateHdl)); mpItemView->setItemStateHdl(LINK(this,TemplateAbstractView,OverlayItemStateHdl));
mpItemView->setSelectionModeHdl(LINK(this,TemplateAbstractView,OverlaySelectionModeHdl));
} }
TemplateAbstractView::TemplateAbstractView(Window *pParent, const ResId &rResId, bool bDisableTransientChildren) TemplateAbstractView::TemplateAbstractView(Window *pParent, const ResId &rResId, bool bDisableTransientChildren)
: ThumbnailView(pParent,rResId,bDisableTransientChildren), : ThumbnailView(pParent,rResId,bDisableTransientChildren),
mpItemView(new TemplateView(this)) mpItemView(new TemplateView(this)),
mbInSelectionModeHdl(false)
{ {
mpItemView->setItemStateHdl(LINK(this,TemplateAbstractView,OverlayItemStateHdl)); mpItemView->setItemStateHdl(LINK(this,TemplateAbstractView,OverlayItemStateHdl));
mpItemView->setSelectionModeHdl(LINK(this,TemplateAbstractView,OverlaySelectionModeHdl));
} }
TemplateAbstractView::~TemplateAbstractView () TemplateAbstractView::~TemplateAbstractView ()
...@@ -119,9 +123,9 @@ void TemplateAbstractView::filterTemplatesByKeyword(const OUString &rKeyword) ...@@ -119,9 +123,9 @@ void TemplateAbstractView::filterTemplatesByKeyword(const OUString &rKeyword)
mpItemView->filterItems(ViewFilter_Keyword(rKeyword)); mpItemView->filterItems(ViewFilter_Keyword(rKeyword));
} }
void TemplateAbstractView::setOverlayDblClickHdl(const Link &rLink) void TemplateAbstractView::setOverlayClickHdl(const Link &rLink)
{ {
mpItemView->setDblClickHdl(rLink); mpItemView->setClickHdl(rLink);
} }
void TemplateAbstractView::setOverlayCloseHdl(const Link &rLink) void TemplateAbstractView::setOverlayCloseHdl(const Link &rLink)
...@@ -269,13 +273,16 @@ void TemplateAbstractView::DrawItem(ThumbnailViewItem *pItem) ...@@ -269,13 +273,16 @@ void TemplateAbstractView::DrawItem(ThumbnailViewItem *pItem)
void TemplateAbstractView::OnSelectionMode (bool bMode) void TemplateAbstractView::OnSelectionMode (bool bMode)
{ {
if (mpItemView->IsVisible()) if (!mbInSelectionModeHdl)
{ {
mbSelectionMode = bMode; if (mpItemView->IsVisible())
mpItemView->setSelectionMode(bMode); {
mbSelectionMode = bMode;
mpItemView->setSelectionMode(bMode);
}
else
ThumbnailView::OnSelectionMode(bMode);
} }
else
ThumbnailView::OnSelectionMode(bMode);
} }
IMPL_LINK(TemplateAbstractView, OverlayItemStateHdl, const ThumbnailViewItem*, pItem) IMPL_LINK(TemplateAbstractView, OverlayItemStateHdl, const ThumbnailViewItem*, pItem)
...@@ -284,4 +291,16 @@ IMPL_LINK(TemplateAbstractView, OverlayItemStateHdl, const ThumbnailViewItem*, p ...@@ -284,4 +291,16 @@ IMPL_LINK(TemplateAbstractView, OverlayItemStateHdl, const ThumbnailViewItem*, p
return 0; return 0;
} }
IMPL_LINK(TemplateAbstractView, OverlaySelectionModeHdl, bool*, pMode)
{
mbInSelectionModeHdl = true;
setSelectionMode(*pMode);
if (!*pMode)
{
deselectOverlayItems();
}
mbInSelectionModeHdl = false;
return 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -702,7 +702,7 @@ bool TemplateLocalView::isTemplateNameUnique(const sal_uInt16 nRegionItemId, con ...@@ -702,7 +702,7 @@ bool TemplateLocalView::isTemplateNameUnique(const sal_uInt16 nRegionItemId, con
return true; return true;
} }
void TemplateLocalView::OnItemDblClicked (ThumbnailViewItem *pRegionItem) void TemplateLocalView::OnItemClicked (ThumbnailViewItem *pRegionItem)
{ {
// Fill templates // Fill templates
sal_uInt16 nRegionId = pRegionItem->mnId-1; sal_uInt16 nRegionId = pRegionItem->mnId-1;
......
...@@ -208,9 +208,9 @@ void TemplateView::MouseButtonDown (const MouseEvent &rMEvt) ...@@ -208,9 +208,9 @@ void TemplateView::MouseButtonDown (const MouseEvent &rMEvt)
ThumbnailView::MouseButtonDown(rMEvt); ThumbnailView::MouseButtonDown(rMEvt);
} }
void TemplateView::OnItemDblClicked(ThumbnailViewItem *pItem) void TemplateView::OnItemClicked(ThumbnailViewItem *pItem)
{ {
maDblClickHdl.Call(pItem); maClickHdl.Call(pItem);
} }
IMPL_LINK_NOARG(TemplateView, ChangeNameHdl) IMPL_LINK_NOARG(TemplateView, ChangeNameHdl)
......
...@@ -202,6 +202,9 @@ void ThumbnailView::DrawItem (ThumbnailViewItem *pItem) ...@@ -202,6 +202,9 @@ void ThumbnailView::DrawItem (ThumbnailViewItem *pItem)
void ThumbnailView::OnSelectionMode (bool bMode) void ThumbnailView::OnSelectionMode (bool bMode)
{ {
if ( !bMode )
deselectItems();
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = mItemList.size(); i < n; ++i)
{ {
mItemList[i]->setSelectionMode(bMode); mItemList[i]->setSelectionMode(bMode);
...@@ -211,7 +214,7 @@ void ThumbnailView::OnSelectionMode (bool bMode) ...@@ -211,7 +214,7 @@ void ThumbnailView::OnSelectionMode (bool bMode)
} }
} }
void ThumbnailView::OnItemDblClicked (ThumbnailViewItem*) void ThumbnailView::OnItemClicked (ThumbnailViewItem*)
{ {
} }
...@@ -508,7 +511,19 @@ IMPL_LINK (ThumbnailView, OnItemSelected, ThumbnailViewItem*, pItem) ...@@ -508,7 +511,19 @@ IMPL_LINK (ThumbnailView, OnItemSelected, ThumbnailViewItem*, pItem)
void ThumbnailView::MouseButtonDown( const MouseEvent& rMEvt ) void ThumbnailView::MouseButtonDown( const MouseEvent& rMEvt )
{ {
if ( rMEvt.IsLeft() ) bool bProcessClick = rMEvt.IsLeft();
if ( rMEvt.IsRight( ) )
{
// Set selection mode with right click
if (!mbSelectionMode)
{
setSelectionMode( true );
bProcessClick = true;
}
}
if ( bProcessClick )
{ {
ThumbnailViewItem* pItem = ImplGetItem( ImplGetItem( rMEvt.GetPosPixel() ) ); ThumbnailViewItem* pItem = ImplGetItem( ImplGetItem( rMEvt.GetPosPixel() ) );
...@@ -530,36 +545,17 @@ void ThumbnailView::MouseButtonDown( const MouseEvent& rMEvt ) ...@@ -530,36 +545,17 @@ void ThumbnailView::MouseButtonDown( const MouseEvent& rMEvt )
else else
{ {
Rectangle aRect(pItem->getDrawArea()); Rectangle aRect(pItem->getDrawArea());
aRect.setY(aRect.getY()+mnItemPadding+mnThumbnailHeight); aRect.SetSize(Size(mnItemWidth,mnThumbnailHeight));
aRect.SetSize(Size(mnItemWidth,mnDisplayHeight+mnItemPadding));
if (aRect.IsInside(rMEvt.GetPosPixel()))
{
pItem->setSelection(!pItem->isSelected());
if (!pItem->isHighlighted()) if (!mbSelectionMode && aRect.IsInside(rMEvt.GetPosPixel()))
DrawItem(pItem); OnItemClicked(pItem);
maItemStateHdl.Call(pItem);
}
//StartTracking( STARTTRACK_SCROLLREPEAT );
} }
} }
else if ( rMEvt.GetClicks() == 2 )
{
Rectangle aRect(pItem->getDrawArea());
aRect.SetSize(Size(mnItemWidth,mnThumbnailHeight));
if (!mbSelectionMode && aRect.IsInside(rMEvt.GetPosPixel()))
OnItemDblClicked(pItem);
}
} }
return; return;
} }
} }
Control::MouseButtonDown( rMEvt ); Control::MouseButtonDown( rMEvt );
} }
...@@ -1059,8 +1055,8 @@ long ThumbnailView::GetScrollWidth() const ...@@ -1059,8 +1055,8 @@ long ThumbnailView::GetScrollWidth() const
void ThumbnailView::setSelectionMode (bool mode) void ThumbnailView::setSelectionMode (bool mode)
{ {
mbSelectionMode = mode; mbSelectionMode = mode;
OnSelectionMode(mode); OnSelectionMode(mode);
maSelectionModeHdl.Call(&mode);
} }
void ThumbnailView::filterItems (const boost::function<bool (const ThumbnailViewItem*) > &func) void ThumbnailView::filterItems (const boost::function<bool (const ThumbnailViewItem*) > &func)
......
...@@ -114,6 +114,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -114,6 +114,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
maView(new TemplateLocalView(this,SfxResId(TEMPLATE_VIEW))), maView(new TemplateLocalView(this,SfxResId(TEMPLATE_VIEW))),
mpOnlineView(new TemplateRemoteView(this, WB_VSCROLL,false)), mpOnlineView(new TemplateRemoteView(this, WB_VSCROLL,false)),
mbIsSaveMode(false), mbIsSaveMode(false),
mbInSelectionModeHdl(false),
mxDesktop(comphelper::getProcessServiceFactory()->createInstance( "com.sun.star.frame.Desktop" ),uno::UNO_QUERY ) mxDesktop(comphelper::getProcessServiceFactory()->createInstance( "com.sun.star.frame.Desktop" ),uno::UNO_QUERY )
{ {
maButtonSelMode.SetStyle(maButtonSelMode.GetStyle() | WB_TOGGLE); maButtonSelMode.SetStyle(maButtonSelMode.GetStyle() | WB_TOGGLE);
...@@ -202,8 +203,9 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -202,8 +203,9 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
maView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVFolderStateHdl)); maView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVFolderStateHdl));
maView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl)); maView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl));
maView->setOverlayDblClickHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl)); maView->setOverlayClickHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl));
maView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl)); maView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl));
maView->setSelectionModeHdl(LINK(this,SfxTemplateManagerDlg,SelectionModeHdl));
// Set online view position and dimensions // Set online view position and dimensions
mpOnlineView->SetPosSizePixel(aViewPos,aThumbSize); mpOnlineView->SetPosSizePixel(aViewPos,aThumbSize);
...@@ -214,9 +216,10 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -214,9 +216,10 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
TEMPLATE_ITEM_PADDING); TEMPLATE_ITEM_PADDING);
mpOnlineView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl)); mpOnlineView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl));
mpOnlineView->setOverlayDblClickHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl)); mpOnlineView->setOverlayClickHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl));
mpOnlineView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl)); mpOnlineView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl));
mpOnlineView->setOverlayChangeNameHdl(LINK(this,SfxTemplateManagerDlg,RepositoryChangeNameHdl)); mpOnlineView->setOverlayChangeNameHdl(LINK(this,SfxTemplateManagerDlg,RepositoryChangeNameHdl));
mpOnlineView->setSelectionModeHdl(LINK(this,SfxTemplateManagerDlg,SelectionModeHdl));
mpSearchView->SetSizePixel(aThumbSize); mpSearchView->SetSizePixel(aThumbSize);
mpSearchView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH); mpSearchView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH);
...@@ -226,6 +229,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -226,6 +229,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
TEMPLATE_ITEM_PADDING); TEMPLATE_ITEM_PADDING);
mpSearchView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl)); mpSearchView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl));
mpSearchView->setSelectionModeHdl(LINK(this,SfxTemplateManagerDlg,SelectionModeHdl));
aButtonAll.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewAllHdl)); aButtonAll.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewAllHdl));
aButtonDocs.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewDocsHdl)); aButtonDocs.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewDocsHdl));
...@@ -353,7 +357,16 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, CloseOverlayHdl) ...@@ -353,7 +357,16 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, CloseOverlayHdl)
IMPL_LINK (SfxTemplateManagerDlg, OnClickSelectionMode, ImageButton*, pButton) IMPL_LINK (SfxTemplateManagerDlg, OnClickSelectionMode, ImageButton*, pButton)
{ {
maView->setSelectionMode(pButton->GetState() == STATE_CHECK); if (!mbInSelectionModeHdl)
maView->setSelectionMode(pButton->GetState() == STATE_CHECK);
return 0;
}
IMPL_LINK (SfxTemplateManagerDlg, SelectionModeHdl, bool*, pMode)
{
mbInSelectionModeHdl = true;
maButtonSelMode.SetState( *pMode ? STATE_CHECK : STATE_NOCHECK );
mbInSelectionModeHdl = false;
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment