sfx2/inc/templatedlg.hxx | 4 + sfx2/source/doc/templatedlg.cxx | 159 +++++++++++++++++++++++++++++++++++++++- sfx2/source/doc/templatedlg.hrc | 2 sfx2/source/doc/templatedlg.src | 13 ++- 4 files changed, 174 insertions(+), 4 deletions(-)
New commits: commit f74a116fe3303c69cb8d6f886f3678f183e35f84 Author: Rafael Dominguez <venccsra...@gmail.com> Date: Tue Jun 5 22:13:31 2012 -0430 Display documents embedded thumbnails. Change-Id: I0f56c6e564dbfcfc646717c562d61b8bd977edd1 diff --git a/sfx2/source/doc/templatedlg.cxx b/sfx2/source/doc/templatedlg.cxx index e6393dc..337061c 100644 --- a/sfx2/source/doc/templatedlg.cxx +++ b/sfx2/source/doc/templatedlg.cxx @@ -9,17 +9,138 @@ #include "templatedlg.hxx" +#include <comphelper/processfactory.hxx> #include <sfx2/doctempl.hxx> #include <sfx2/sfxresid.hxx> +#include <unotools/ucbstreamhelper.hxx> +#include <vcl/pngread.hxx> + +#include <com/sun/star/embed/ElementModes.hpp> +#include <com/sun/star/embed/XStorage.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/lang/XSingleServiceFactory.hpp> #include "orgmgr.hxx" #include "doc.hrc" #include "templatedlg.hrc" +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + #define MAX_COLUMN_COUNT 4 #define MAX_LINE_COUNT 2 +Image lcl_fetchThumbnail (const rtl::OUString &msURL) +{ + + // Load the thumbnail from a template document. + uno::Reference<io::XInputStream> xIStream; + + uno::Reference< lang::XMultiServiceFactory > xServiceManager ( + ::comphelper::getProcessServiceFactory()); + if (xServiceManager.is()) + { + try + { + uno::Reference<lang::XSingleServiceFactory> xStorageFactory( + xServiceManager->createInstance( "com.sun.star.embed.StorageFactory"), + uno::UNO_QUERY); + + if (xStorageFactory.is()) + { + uno::Sequence<uno::Any> aArgs (2); + aArgs[0] <<= msURL; + aArgs[1] <<= embed::ElementModes::READ; + uno::Reference<embed::XStorage> xDocStorage ( + xStorageFactory->createInstanceWithArguments(aArgs), + uno::UNO_QUERY); + + try + { + if (xDocStorage.is()) + { + uno::Reference<embed::XStorage> xStorage ( + xDocStorage->openStorageElement( + "Thumbnails", + embed::ElementModes::READ)); + if (xStorage.is()) + { + uno::Reference<io::XStream> xThumbnailCopy ( + xStorage->cloneStreamElement("thumbnail.png")); + if (xThumbnailCopy.is()) + xIStream = xThumbnailCopy->getInputStream(); + } + } + } + catch (const uno::Exception& rException) + { + OSL_TRACE ( + "caught exception while trying to access Thumbnail/thumbnail.png of %s: %s", + ::rtl::OUStringToOString(msURL, + RTL_TEXTENCODING_UTF8).getStr(), + ::rtl::OUStringToOString(rException.Message, + RTL_TEXTENCODING_UTF8).getStr()); + } + + try + { + // An (older) implementation had a bug - The storage + // name was "Thumbnail" instead of "Thumbnails". The + // old name is still used as fallback but this code can + // be removed soon. + if ( ! xIStream.is()) + { + uno::Reference<embed::XStorage> xStorage ( + xDocStorage->openStorageElement( "Thumbnail", + embed::ElementModes::READ)); + if (xStorage.is()) + { + uno::Reference<io::XStream> xThumbnailCopy ( + xStorage->cloneStreamElement("thumbnail.png")); + if (xThumbnailCopy.is()) + xIStream = xThumbnailCopy->getInputStream(); + } + } + } + catch (const uno::Exception& rException) + { + OSL_TRACE ( + "caught exception while trying to access Thumbnails/thumbnail.png of %s: %s", + ::rtl::OUStringToOString(msURL, + RTL_TEXTENCODING_UTF8).getStr(), + ::rtl::OUStringToOString(rException.Message, + RTL_TEXTENCODING_UTF8).getStr()); + } + } + } + catch (const uno::Exception& rException) + { + OSL_TRACE ( + "caught exception while trying to access tuhmbnail of %s: %s", + ::rtl::OUStringToOString(msURL, + RTL_TEXTENCODING_UTF8).getStr(), + ::rtl::OUStringToOString(rException.Message, + RTL_TEXTENCODING_UTF8).getStr()); + } + } + + // Extract the image from the stream. + BitmapEx aThumbnail; + if (xIStream.is()) + { + ::std::auto_ptr<SvStream> pStream ( + ::utl::UcbStreamHelper::CreateStream (xIStream)); + ::vcl::PNGReader aReader (*pStream); + aThumbnail = aReader.Read (); + } + + // Note that the preview is returned without scaling it to the desired + // width. This gives the caller the chance to take advantage of a + // possibly larger resolution then was asked for. + return aThumbnail; +} + SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) : ModalDialog(parent, SfxResId(DLG_TEMPLATE_MANAGER)), aButtonAll(this,SfxResId(BTN_SELECT_ALL)), @@ -37,17 +158,22 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) aButtonAll.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewAllHdl)); aButtonDocs.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewDocsHdl)); - sal_uInt16 nCount = mpMgr->GetTemplates()->GetRegionCount(); + const SfxDocumentTemplates* pTemplates = mpMgr->GetTemplates(); + + sal_uInt16 nCount = pTemplates->GetRegionCount(); for (sal_uInt16 i = 0; i < nCount; ++i) { - rtl::OUString aRegionName(mpMgr->GetTemplates()->GetFullRegionName(i)); + rtl::OUString aRegionName(pTemplates->GetFullRegionName(i)); if (aRegionName == "My Templates") { - sal_uInt16 nEntries = mpMgr->GetTemplates()->GetCount(i); + sal_uInt16 nEntries = pTemplates->GetCount(i); for ( sal_uInt16 j = 0; j < nEntries; ++j) - maView.InsertItem(i,mpMgr->GetTemplates()->GetName(i,j),THUMBNAILVIEW_APPEND); + { + Image aImg = lcl_fetchThumbnail(pTemplates->GetPath(i,j)); + maView.InsertItem(i,aImg,pTemplates->GetName(i,j)); + } break; } commit f19a58570f34888b17ec243f345ddeb5877c24aa Author: Rafael Dominguez <venccsra...@gmail.com> Date: Tue Jun 5 21:43:51 2012 -0430 Hide thumbnail view as default. Change-Id: Ied6d9b9e1ceb2605013273b6361770e97d2065da diff --git a/sfx2/source/doc/templatedlg.src b/sfx2/source/doc/templatedlg.src index f59e025..73ea0c7 100644 --- a/sfx2/source/doc/templatedlg.src +++ b/sfx2/source/doc/templatedlg.src @@ -17,6 +17,7 @@ ModalDialog DLG_TEMPLATE_MANAGER SVLook = TRUE; Moveable = TRUE; Closeable = TRUE; + Hide = TRUE; Size = MAP_APPFONT ( 270 , 190 ); Text [en-US] = "Template Manager"; commit 87bbe2b6c906357b8e05f9e89a2c91bc7f802014 Author: Rafael Dominguez <venccsra...@gmail.com> Date: Tue Jun 5 21:37:05 2012 -0430 Display filesystem templates under My Templates folder. Change-Id: I9d504d62392b30a7eca2be9be5330e6118967a1a diff --git a/sfx2/inc/templatedlg.hxx b/sfx2/inc/templatedlg.hxx index 1317381..0af1cb7 100644 --- a/sfx2/inc/templatedlg.hxx +++ b/sfx2/inc/templatedlg.hxx @@ -15,6 +15,8 @@ #include <vcl/dialog.hxx> #include <vcl/button.hxx> +class SfxOrganizeMgr; + class SfxTemplateManagerDlg : public ModalDialog { public: @@ -38,6 +40,8 @@ private: PushButton aButtonDraws; ThumbnailView maView; + + SfxOrganizeMgr *mpMgr; }; #endif // TEMPLATEDLG_HXX diff --git a/sfx2/source/doc/templatedlg.cxx b/sfx2/source/doc/templatedlg.cxx index 18cad11..e6393dc 100644 --- a/sfx2/source/doc/templatedlg.cxx +++ b/sfx2/source/doc/templatedlg.cxx @@ -7,13 +7,19 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "templatedlg.hxx" + +#include <sfx2/doctempl.hxx> #include <sfx2/sfxresid.hxx> -#include "templatedlg.hxx" +#include "orgmgr.hxx" #include "doc.hrc" #include "templatedlg.hrc" +#define MAX_COLUMN_COUNT 4 +#define MAX_LINE_COUNT 2 + SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) : ModalDialog(parent, SfxResId(DLG_TEMPLATE_MANAGER)), aButtonAll(this,SfxResId(BTN_SELECT_ALL)), @@ -21,11 +27,34 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) aButtonPresents(this,SfxResId(BTN_SELECT_PRESENTATIONS)), aButtonSheets(this,SfxResId(BTN_SELECT_SHEETS)), aButtonDraws(this,SfxResId(BTN_SELECT_DRAWS)), - maView(this,SfxResId(TEMPLATE_VIEW)) + maView(this,SfxResId(TEMPLATE_VIEW)), + mpMgr(new SfxOrganizeMgr(NULL,NULL)) { + maView.SetStyle(WB_RADIOSEL | WB_TABSTOP); + maView.SetColCount(MAX_COLUMN_COUNT); + maView.SetLineCount(MAX_LINE_COUNT); + aButtonAll.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewAllHdl)); aButtonDocs.SetClickHdl(LINK(this,SfxTemplateManagerDlg,ViewDocsHdl)); + sal_uInt16 nCount = mpMgr->GetTemplates()->GetRegionCount(); + for (sal_uInt16 i = 0; i < nCount; ++i) + { + rtl::OUString aRegionName(mpMgr->GetTemplates()->GetFullRegionName(i)); + + if (aRegionName == "My Templates") + { + sal_uInt16 nEntries = mpMgr->GetTemplates()->GetCount(i); + + for ( sal_uInt16 j = 0; j < nEntries; ++j) + maView.InsertItem(i,mpMgr->GetTemplates()->GetName(i,j),THUMBNAILVIEW_APPEND); + + break; + } + } + + maView.Show(); + FreeResource(); } diff --git a/sfx2/source/doc/templatedlg.hrc b/sfx2/source/doc/templatedlg.hrc index 78fe393..cd48687 100644 --- a/sfx2/source/doc/templatedlg.hrc +++ b/sfx2/source/doc/templatedlg.hrc @@ -13,3 +13,5 @@ #define BTN_SELECT_DRAWS 5 #define TEMPLATE_VIEW 6 + +#define IMG_ONLINE_REPOSITORY 100 diff --git a/sfx2/source/doc/templatedlg.src b/sfx2/source/doc/templatedlg.src index 3d73d11..f59e025 100644 --- a/sfx2/source/doc/templatedlg.src +++ b/sfx2/source/doc/templatedlg.src @@ -17,7 +17,7 @@ ModalDialog DLG_TEMPLATE_MANAGER SVLook = TRUE; Moveable = TRUE; Closeable = TRUE; - Size = MAP_APPFONT ( 270 , 165 ); + Size = MAP_APPFONT ( 270 , 190 ); Text [en-US] = "Template Manager"; PushButton BTN_SELECT_ALL @@ -64,7 +64,15 @@ ModalDialog DLG_TEMPLATE_MANAGER Control TEMPLATE_VIEW { Pos = MAP_APPFONT(5,30); - Size = MAP_APPFONT(50,260); + Size = MAP_APPFONT(260,150); TabStop = TRUE; }; + + Image IMG_ONLINE_REPOSITORY + { + ImageBitmap = Bitmap + { + File = "signet.png"; + }; + }; }; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits