/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #ifndef INCLUDED_UNOTOOLS_COMPONENTRESMODULE_HXX #define INCLUDED_UNOTOOLS_COMPONENTRESMODULE_HXX #include #include #include #include #include class ResMgr; namespace utl { class OComponentResModuleImpl; //= OComponentResourceModule /** extends the comphelper::OModule implementation with simply resource access */ class UNOTOOLS_DLLPUBLIC OComponentResourceModule : public ::comphelper::OModule { private: typedef ::comphelper::OModule BaseClass; private: ::std::unique_ptr< OComponentResModuleImpl > m_pImpl; public: OComponentResourceModule( const OString& _rResFilePrefix ); virtual ~OComponentResourceModule(); /// get the vcl res manager of the module ResMgr* getResManager(); protected: // OModule overridables virtual void onFirstClient() SAL_OVERRIDE; virtual void onLastClient() SAL_OVERRIDE; }; //= ModuleRes /** specialized ResId, using the resource manager provided by a given OModule */ class UNOTOOLS_DLLPUBLIC ModuleRes : public ::ResId { public: ModuleRes( sal_uInt16 _nId, OComponentResourceModule& _rModule ) : ResId( _nId, *_rModule.getResManager() ) { } }; //= defining a concrete module #define DEFINE_MODULE( ModuleClass, ClientClass, ResClass ) \ /* -------------------------------------------------------------------- */ \ class ModuleClass : public ::utl::OComponentResourceModule \ { \ friend struct CreateModuleClass; \ typedef ::utl::OComponentResourceModule BaseClass; \ \ public: \ static ModuleClass& getInstance(); \ \ private: \ ModuleClass(); \ }; \ \ /* -------------------------------------------------------------------- */ \ class ClientClass : public ::comphelper::OModuleClient \ { \ private: \ typedef ::comphelper::OModuleClient BaseClass; \ \ public: \ ClientClass() : BaseClass( ModuleClass::getInstance() ) \ { \ } \ }; \ \ /* -------------------------------------------------------------------- */ \ class ResClass : public ::utl::ModuleRes \ { \ private: \ typedef ::utl::ModuleRes BaseClass; \ \ public: \ ResClass( sal_uInt16 _nId ) : BaseClass( _nId, ModuleClass::getInstance() ) \ { \ } \ }; \ \ /* -------------------------------------------------------------------- */ \ template < class TYPE > \ class OAutoRegistration : public ::comphelper::OAutoRegistration< TYPE > \ { \ private: \ typedef ::comphelper::OAutoRegistration< TYPE > BaseClass; \ \ public: \ OAutoRegistration() : BaseClass( ModuleClass::getInstance() ) \ { \ } \ }; \ \ /* -------------------------------------------------------------------- */ \ template < class TYPE > \ class OSingletonRegistration : public ::comphelper::OSingletonRegistration< TYPE > \ { \ private: \ typedef ::comphelper::OSingletonRegistration< TYPE > BaseClass; \ \ public: \ OSingletonRegistration() : BaseClass( ModuleClass::getInstance() ) \ { \ } \ }; //= implementing a concrete module #define IMPLEMENT_MODULE( ModuleClass, resprefix ) \ struct CreateModuleClass \ { \ ModuleClass* operator()() \ { \ static ModuleClass* pModule = new ModuleClass; \ return pModule; \ /* yes, in theory, this is a resource leak, since the ModuleClass \ will never be cleaned up. However, using a non-heap instance of ModuleClass \ would not work: It would be cleaned up when the module is unloaded. \ This might happen (and is likely to happen) *after* the tools-library \ has been unloaded. However, the module's dtor is where we would delete \ our resource manager (in case not all our clients de-registered) - which \ would call into the already-unloaded tools-library. */ \ } \ }; \ \ ModuleClass::ModuleClass() \ :BaseClass( OString( resprefix ) ) \ { \ } \ \ ModuleClass& ModuleClass::getInstance() \ { \ return *rtl_Instance< ModuleClass, CreateModuleClass, ::osl::MutexGuard, ::osl::GetGlobalMutex >:: \ create( CreateModuleClass(), ::osl::GetGlobalMutex() ); \ } \ } // namespace utl #endif // INCLUDED_UNOTOOLS_COMPONENTRESMODULE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ fice-6-1+backports LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2016-07-18Resolves: tdf#100941 LibreLogo: replace literal '\n' with newlineTakeshi Abe
2015-08-18fix broken PICTURE (group handling) of LibreLogoLászló Németh
2015-07-02Related: tdf#92287 Add LibreLogo Tango icons for future useAdolfo Jayme Barrientos
2015-07-02tdf#92287: Store the Breeze icons for LibreLogo in a subdir.Jan Holesovsky
2015-07-02Revert "Related: tdf#92287 Breeze: change LogoToolbar icons into breeze icons"Jan Holesovsky
2015-07-02Related: tdf#92287 Breeze: change LogoToolbar icons into breeze iconsandreask
2015-06-27tdf#92368 fix saved positions of arcs, segments drawn by LibreLogoLászló Németh
2015-05-18LibreLogo: CLOSE closes, FILL fills points, tooLászló Németh
2015-04-20tdf#90723 LibreLogo: missing oldlcap initializationLászló Németh
2014-11-10avoid exceeding commandline limitsChristian Lohmaier
2014-10-22Replace DISABLE_SCRIPTING with HAVE_FEATURE_SCRIPTINGTor Lillqvist
2014-03-31fdo#75109 librelogo: fix localized proceduresLászló Németh
2014-03-18librelogo UI fixes, gradients, log10, improved random colorsLászló Németh
2014-02-04librelogo: keep comments at translationLászló Németh
2014-01-30LibreLogo is not a UNO componentStephan Bergmann
2014-01-08Remove bad Emacs mode lineStephan Bergmann
2014-01-08Some ConfigurationProvider -> theDefaultProvider simplificationsStephan Bergmann
2014-01-07librelogo: fix messagebox (API changes)László Németh
2014-01-01fdo#73199 librelogo: path, interop. and color name fixesLászló Németh
2013-10-28gbuild: set Package default target to INSTDIRMichael Stahl
2013-10-28fdo#70951 librelogo: fix parsing problem of functionsLászló Németh
2013-10-25fdo#70858 librelogo: fix Logo program halt at font settings (Windows)László Németh
2013-10-25librelogo: fix division with measurementsLászló Németh
2013-10-24librelogo: more invisible settings (on UI, hatching), see ChangeLogLászló Németh
2013-10-24librelogo: fix Writer/Draw synchronization in cropped SVG exportLászló Németh
2013-10-24librelogo: fix blinking LABELLászló Németh
2013-10-23librelogo: support linecap settingsLászló Németh
2013-10-23librelogo: optional SVG/SMIL looping (at ending SLEEP)László Németh
2013-10-22librelogo: fix black (not refreshed) invisible filling colorLászló Németh
2013-09-23Try to fix cross-compilationTor Lillqvist
2013-09-11Towards a working instdir for Mac OS XStephan Bergmann
2013-09-06fdo#69041 LibreLogo: fix SVG/SMIL timing with filled polylinesLászló Németh
2013-08-29LibreLogo fixes (eg. fdo#68713 fix SVG cropping), see ChangeLogLászló Németh
2013-08-18Further work on the "Mac-like app structure" optionTor Lillqvist
2013-07-18librelogo: fix LibO SVG export for W3C Validator/WikipediaLászló Németh
2013-07-16fix misleading typos in librelogo/changelogLászló Németh
2013-07-15librelogo: hexa arguments fdo#66917 and cropped SVG savingLászló Németh
2013-07-10added FIXME-BCP47 commentEike Rathke
2013-06-26fdo#66180 librelogo: clockwise HEADINGLászló Németh
2013-06-26fdo#66180 librelogo: clockwise HEADINGLászló Németh