diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-10-15 15:24:26 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-10-22 17:26:08 +0200 |
commit | 5a342bde16fb46c895eec302af73d7836226eccf (patch) | |
tree | 32363a701b9530b1e9961163edcc1359563ce0a2 /sfx2/source/control | |
parent | f4a5893eceabc1f6d541164a0e858456f0ce0905 (diff) |
weld backing window
Change-Id: I250e46d3f1d558567bddbd4f0330470222e8fd4b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104442
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sfx2/source/control')
-rw-r--r-- | sfx2/source/control/recentdocsview.cxx | 83 | ||||
-rw-r--r-- | sfx2/source/control/recentdocsviewitem.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/control/templatedefaultview.cxx | 40 | ||||
-rw-r--r-- | sfx2/source/control/templatelocalview.cxx | 8 | ||||
-rw-r--r-- | sfx2/source/control/thumbnailview.cxx | 9 |
5 files changed, 74 insertions, 68 deletions
diff --git a/sfx2/source/control/recentdocsview.cxx b/sfx2/source/control/recentdocsview.cxx index 063051642fa0..83b0cb2fed82 100644 --- a/sfx2/source/control/recentdocsview.cxx +++ b/sfx2/source/control/recentdocsview.cxx @@ -23,7 +23,6 @@ #include <sfx2/sfxresid.hxx> #include <tools/diagnose_ex.h> #include <unotools/historyoptions.hxx> -#include <vcl/builderfactory.hxx> #include <vcl/event.hxx> #include <vcl/pngread.hxx> #include <vcl/ptrstyle.hxx> @@ -43,6 +42,8 @@ #include <officecfg/Office/Common.hxx> +#include <map> + using namespace ::com::sun::star; using namespace com::sun::star::uno; using namespace com::sun::star::lang; @@ -121,18 +122,18 @@ static std::map<ApplicationType,OUString> EncryptedBitmapForExtension = constexpr tools::Long gnTextHeight = 30; constexpr tools::Long gnItemPadding = 5; -RecentDocsView::RecentDocsView( vcl::Window* pParent ) - : ThumbnailView(pParent) +RecentDocsView::RecentDocsView(std::unique_ptr<weld::ScrolledWindow> xWindow, std::unique_ptr<weld::Menu> xMenu) + : SfxThumbnailView(std::move(xWindow), std::move(xMenu)) , mnFileTypes(ApplicationType::TYPE_NONE) , mnLastMouseDownItem(THUMBNAILVIEW_ITEM_NOTFOUND) , maWelcomeImage() , maWelcomeLine1(SfxResId(STR_WELCOME_LINE1)) , maWelcomeLine2(SfxResId(STR_WELCOME_LINE2)) + , mpLoadRecentFile(nullptr) { tools::Rectangle aScreen = Application::GetScreenPosSizePixel(Application::GetDisplayBuiltInScreen()); mnItemMaxSize = std::min(aScreen.GetWidth(),aScreen.GetHeight()) > 800 ? 256 : 192; - SetStyle(GetStyle() | WB_VSCROLL); setItemMaxTextLength( 30 ); setItemDimensions( mnItemMaxSize, mnItemMaxSize, gnTextHeight, gnItemPadding ); @@ -141,9 +142,18 @@ RecentDocsView::RecentDocsView( vcl::Window* pParent ) maHighlightColor = Color(officecfg::Office::Common::Help::StartCenter::StartCenterThumbnailsHighlightColor::get()); maHighlightTextColor = Color(officecfg::Office::Common::Help::StartCenter::StartCenterThumbnailsHighlightTextColor::get()); mfHighlightTransparence = 0.25; + + UpdateColors(); } -VCL_BUILDER_FACTORY(RecentDocsView) +RecentDocsView::~RecentDocsView() +{ + if (mpLoadRecentFile) + { + mpLoadRecentFile->pView = nullptr; + mpLoadRecentFile = nullptr; + } +} bool RecentDocsView::typeMatchesExtension(ApplicationType type, const OUString &rExt) { @@ -288,25 +298,25 @@ void RecentDocsView::Reload() Invalidate(); } -void RecentDocsView::MouseButtonDown( const MouseEvent& rMEvt ) +bool RecentDocsView::MouseButtonDown( const MouseEvent& rMEvt ) { if (rMEvt.IsLeft()) { mnLastMouseDownItem = ImplGetItem(rMEvt.GetPosPixel()); - // ignore to avoid stuff done in ThumbnailView; we don't do selections etc. - return; + // ignore to avoid stuff done in SfxThumbnailView; we don't do selections etc. + return true; } - ThumbnailView::MouseButtonDown(rMEvt); + return SfxThumbnailView::MouseButtonDown(rMEvt); } -void RecentDocsView::MouseButtonUp(const MouseEvent& rMEvt) +bool RecentDocsView::MouseButtonUp(const MouseEvent& rMEvt) { if (rMEvt.IsLeft()) { if( rMEvt.GetClicks() > 1 ) - return; + return true; size_t nPos = ImplGetItem(rMEvt.GetPosPixel()); ThumbnailViewItem* pItem = ImplGetItem(nPos); @@ -323,9 +333,9 @@ void RecentDocsView::MouseButtonUp(const MouseEvent& rMEvt) mnLastMouseDownItem = THUMBNAILVIEW_ITEM_NOTFOUND; if (pItem) - return; + return true; } - ThumbnailView::MouseButtonUp(rMEvt); + return SfxThumbnailView::MouseButtonUp(rMEvt); } void RecentDocsView::OnItemDblClicked(ThumbnailViewItem *pItem) @@ -337,19 +347,7 @@ void RecentDocsView::OnItemDblClicked(ThumbnailViewItem *pItem) void RecentDocsView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle &aRect) { - // Set preferred width - if (mFilteredItemList.empty()) - { - rRenderContext.Push(PushFlags::FONT); - SetMessageFont(rRenderContext); - set_width_request(std::max(rRenderContext.GetTextWidth(maWelcomeLine1), - rRenderContext.GetTextWidth(maWelcomeLine2))); - rRenderContext.Pop(); - } - else - { - set_width_request(gnTextHeight + mnItemMaxSize + 2 * gnItemPadding); - } + SfxThumbnailView::Paint(rRenderContext, aRect); if (mItemList.empty()) { @@ -362,12 +360,12 @@ void RecentDocsView::Paint(vcl::RenderContext& rRenderContext, const tools::Rect // No recent files to be shown yet. Show a welcome screen. rRenderContext.Push(PushFlags::FONT | PushFlags::TEXTCOLOR); SetMessageFont(rRenderContext); - SetTextColor(maTextColor); + rRenderContext.SetTextColor(maTextColor); tools::Long nTextHeight = rRenderContext.GetTextHeight(); const Size& rImgSize = maWelcomeImage.GetSizePixel(); - const Size& rSize = GetSizePixel(); + const Size& rSize = GetOutputSizePixel(); const int nX = (rSize.Width() - rImgSize.Width())/2; int nY = (rSize.Height() - 3 * nTextHeight - rImgSize.Height())/2; @@ -384,28 +382,36 @@ void RecentDocsView::Paint(vcl::RenderContext& rRenderContext, const tools::Rect rRenderContext.Pop(); } - else - { - ThumbnailView::Paint(rRenderContext, aRect); - } } void RecentDocsView::LoseFocus() { deselectItems(); - ThumbnailView::LoseFocus(); + SfxThumbnailView::LoseFocus(); } void RecentDocsView::Clear() { Invalidate(); - ThumbnailView::Clear(); + SfxThumbnailView::Clear(); +} + +void RecentDocsView::PostLoadRecentUsedFile(LoadRecentFile* pLoadRecentFile) +{ + assert(!mpLoadRecentFile); + mpLoadRecentFile = pLoadRecentFile; + Application::PostUserEvent(LINK(nullptr, RecentDocsView, ExecuteHdl_Impl), pLoadRecentFile); +} + +void RecentDocsView::DispatchedLoadRecentUsedFile() +{ + mpLoadRecentFile = nullptr; } IMPL_STATIC_LINK( RecentDocsView, ExecuteHdl_Impl, void*, p, void ) { - LoadRecentFile* pLoadRecentFile = static_cast< LoadRecentFile*>(p); + LoadRecentFile* pLoadRecentFile = static_cast<LoadRecentFile*>(p); try { // Asynchronous execution as this can lead to our own destruction! @@ -417,8 +423,11 @@ IMPL_STATIC_LINK( RecentDocsView, ExecuteHdl_Impl, void*, p, void ) { } - if ( !pLoadRecentFile->pView->IsDisposed() ) - pLoadRecentFile->pView->SetPointer( PointerStyle::Arrow ); + if (pLoadRecentFile->pView) + { + pLoadRecentFile->pView->DispatchedLoadRecentUsedFile(); + pLoadRecentFile->pView->SetPointer(PointerStyle::Arrow); + } delete pLoadRecentFile; } diff --git a/sfx2/source/control/recentdocsviewitem.cxx b/sfx2/source/control/recentdocsviewitem.cxx index e7676f1ac74b..8a047b20ee8d 100644 --- a/sfx2/source/control/recentdocsviewitem.cxx +++ b/sfx2/source/control/recentdocsviewitem.cxx @@ -211,7 +211,7 @@ void RecentDocsViewItem::OpenDocument() pLoadRecentFile->aArgSeq = aArgsList; pLoadRecentFile->pView = &mrParentView; - Application::PostUserEvent(LINK(nullptr, sfx2::RecentDocsView, ExecuteHdl_Impl), pLoadRecentFile, true); + mrParentView.PostLoadRecentUsedFile(pLoadRecentFile); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/control/templatedefaultview.cxx b/sfx2/source/control/templatedefaultview.cxx index 5b4a4ccd429a..6c4fd3d241eb 100644 --- a/sfx2/source/control/templatedefaultview.cxx +++ b/sfx2/source/control/templatedefaultview.cxx @@ -11,28 +11,23 @@ #include <sfx2/thumbnailview.hxx> #include <templateviewitem.hxx> #include <sfx2/sfxresid.hxx> -#include <vcl/builderfactory.hxx> #include <vcl/event.hxx> #include <vcl/svapp.hxx> #include <sfx2/strings.hrc> -#define MNI_OPEN 1 -#define MNI_EDIT 2 - #include <officecfg/Office/Common.hxx> -VCL_BUILDER_FACTORY(TemplateDefaultView) - constexpr int gnItemPadding(5); //TODO:: Change padding to 10. It looks really crowded and occupied. constexpr tools::Long gnTextHeight = 30; -TemplateDefaultView::TemplateDefaultView( Window* pParent) - : TemplateLocalView(pParent) +TemplateDefaultView::TemplateDefaultView(std::unique_ptr<weld::ScrolledWindow> xWindow, + std::unique_ptr<weld::Menu> xMenu) + : SfxTemplateLocalView(std::move(xWindow), std::move(xMenu)) { tools::Rectangle aScreen = Application::GetScreenPosSizePixel(Application::GetDisplayBuiltInScreen()); mnItemMaxSize = std::min(aScreen.GetWidth(),aScreen.GetHeight()) > 800 ? 256 : 192; - ThumbnailView::setItemDimensions( mnItemMaxSize, mnItemMaxSize, gnTextHeight, gnItemPadding ); + SfxThumbnailView::setItemDimensions( mnItemMaxSize, mnItemMaxSize, gnTextHeight, gnItemPadding ); updateThumbnailDimensions(mnItemMaxSize); // startcenter specific settings @@ -41,13 +36,8 @@ TemplateDefaultView::TemplateDefaultView( Window* pParent) maHighlightColor = Color(officecfg::Office::Common::Help::StartCenter::StartCenterThumbnailsHighlightColor::get()); maHighlightTextColor = Color(officecfg::Office::Common::Help::StartCenter::StartCenterThumbnailsHighlightTextColor::get()); mfHighlightTransparence = 0.25; -} -void TemplateDefaultView::reload() -{ - TemplateLocalView::reload(); - // Set preferred width - set_width_request(gnTextHeight + mnItemMaxSize + 2*gnItemPadding); + UpdateColors(); } void TemplateDefaultView::showAllTemplates() @@ -57,12 +47,12 @@ void TemplateDefaultView::showAllTemplates() insertItems(maAllTemplates, false); } -void TemplateDefaultView::KeyInput( const KeyEvent& rKEvt ) +bool TemplateDefaultView::KeyInput( const KeyEvent& rKEvt ) { - ThumbnailView::KeyInput(rKEvt); + return SfxThumbnailView::KeyInput(rKEvt); } -void TemplateDefaultView::MouseButtonDown( const MouseEvent& rMEvt ) +bool TemplateDefaultView::MouseButtonDown( const MouseEvent& rMEvt ) { if( rMEvt.IsLeft() && rMEvt.GetClicks() == 1 ) { @@ -71,21 +61,21 @@ void TemplateDefaultView::MouseButtonDown( const MouseEvent& rMEvt ) TemplateViewItem* pViewItem = dynamic_cast<TemplateViewItem*>(pItem); if(pViewItem) maOpenTemplateHdl.Call(pViewItem); - return; + return true; } - TemplateLocalView::MouseButtonDown(rMEvt); + return SfxTemplateLocalView::MouseButtonDown(rMEvt); } void TemplateDefaultView::createContextMenu() { - ScopedVclPtrInstance<PopupMenu> pItemMenu; - pItemMenu->InsertItem(MNI_OPEN,SfxResId(STR_OPEN)); - pItemMenu->InsertItem(MNI_EDIT,SfxResId(STR_EDIT_TEMPLATE)); + mxContextMenu->clear(); + mxContextMenu->append("open",SfxResId(STR_OPEN)); + mxContextMenu->append("edit",SfxResId(STR_EDIT_TEMPLATE)); deselectItems(); maSelectedItem->setSelection(true); - pItemMenu->SetSelectHdl(LINK(this, TemplateLocalView, ContextMenuSelectHdl)); - pItemMenu->Execute(this, tools::Rectangle(maPosition,Size(1,1)), PopupMenuFlags::ExecuteDown); + maItemStateHdl.Call(maSelectedItem); + ContextMenuSelectHdl(mxContextMenu->popup_at_rect(GetDrawingArea(), tools::Rectangle(maPosition, Size(1,1)))); Invalidate(); } diff --git a/sfx2/source/control/templatelocalview.cxx b/sfx2/source/control/templatelocalview.cxx index c043102e73ae..1657a3bae43c 100644 --- a/sfx2/source/control/templatelocalview.cxx +++ b/sfx2/source/control/templatelocalview.cxx @@ -289,7 +289,7 @@ void TemplateLocalView::insertItems(const std::vector<TemplateItemProperties> &r updateItems(std::move(aItems)); } -void TemplateLocalView::updateThumbnailDimensions(tools::Long itemMaxSize) +void SfxTemplateLocalView::updateThumbnailDimensions(tools::Long itemMaxSize) { mnThumbnailWidth = itemMaxSize; mnThumbnailHeight = itemMaxSize; @@ -471,6 +471,8 @@ SfxTemplateLocalView::SfxTemplateLocalView(std::unique_ptr<weld::ScrolledWindow> : SfxThumbnailView(std::move(xWindow), std::move(xMenu)) , mnCurRegionId(0) , maSelectedItem(nullptr) + , mnThumbnailWidth(TEMPLATE_THUMBNAIL_MAX_WIDTH) + , mnThumbnailHeight(TEMPLATE_THUMBNAIL_MAX_HEIGHT) , maPosition(0,0) , mpDocTemplates(new SfxDocumentTemplates) { @@ -509,8 +511,8 @@ void SfxTemplateLocalView::Populate() aProperties.aPath = aURL; aProperties.aRegionName = aRegionName; aProperties.aThumbnail = TemplateLocalView::fetchThumbnail(aURL, - TEMPLATE_THUMBNAIL_MAX_WIDTH, - TEMPLATE_THUMBNAIL_MAX_HEIGHT); + mnThumbnailWidth, + mnThumbnailHeight); pItem->maTemplates.push_back(aProperties); maAllTemplates.push_back(aProperties); diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx index b0827d4922cc..de2415c8640e 100644 --- a/sfx2/source/control/thumbnailview.cxx +++ b/sfx2/source/control/thumbnailview.cxx @@ -1327,6 +1327,13 @@ void SfxThumbnailView::ImplInit() mpStartSelRange = mFilteredItemList.end(); + UpdateColors(); + + mpItemAttrs->nMaxTextLength = 0; +} + +void SfxThumbnailView::UpdateColors() +{ mpItemAttrs->aFillColor = maFillColor.getBColor(); mpItemAttrs->aTextColor = maTextColor.getBColor(); mpItemAttrs->aHighlightColor = maHighlightColor.getBColor(); @@ -1334,8 +1341,6 @@ void SfxThumbnailView::ImplInit() mpItemAttrs->aSelectHighlightColor = maSelectHighlightColor.getBColor(); mpItemAttrs->aSelectHighlightTextColor = maSelectHighlightTextColor.getBColor(); mpItemAttrs->fHighlightTransparence = mfHighlightTransparence; - - mpItemAttrs->nMaxTextLength = 0; } void SfxThumbnailView::ImplDeleteItems() |