1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _DBAUI_MODULE_DBU_HXX_ 25 #define _DBAUI_MODULE_DBU_HXX_ 26 27 #ifndef _OSL_MUTEX_HXX_ 28 #include <osl/mutex.hxx> 29 #endif 30 #ifndef _TOOLS_RESID_HXX 31 #include <tools/resid.hxx> 32 #endif 33 34 class ResMgr; 35 36 //......................................................................... 37 namespace dbaui 38 { 39 //......................................................................... 40 41 //========================================================================= 42 //= OModule 43 //========================================================================= 44 class OModuleImpl; 45 class OModule 46 { 47 friend class OModuleClient; 48 49 private: 50 OModule(); 51 // not implemented. OModule is a static class 52 53 protected: 54 static ::osl::Mutex s_aMutex; /// access safety 55 static sal_Int32 s_nClients; /// number of registered clients 56 static OModuleImpl* s_pImpl; /// impl class. lives as long as at least one client for the module is registered 57 58 public: 59 /// get the vcl res manager of the module 60 static ResMgr* getResManager(); 61 62 protected: 63 /// register a client for the module 64 static void registerClient(); 65 /// revoke a client for the module 66 static void revokeClient(); 67 68 private: 69 /** ensure that the impl class exists 70 @precond m_aMutex is guarded when this method gets called 71 */ 72 static void ensureImpl(); 73 }; 74 75 //========================================================================= 76 //= OModuleClient 77 //========================================================================= 78 /** base class for objects which uses any global module-specific ressources 79 */ 80 class OModuleClient 81 { 82 public: OModuleClient()83 OModuleClient() { OModule::registerClient(); } ~OModuleClient()84 ~OModuleClient() { OModule::revokeClient(); } 85 }; 86 87 //========================================================================= 88 //= ModuleRes 89 //========================================================================= 90 /** specialized ResId, using the ressource manager provided by the global module 91 */ 92 class ModuleRes : public ::ResId 93 { 94 public: ModuleRes(sal_uInt16 _nId)95 ModuleRes(sal_uInt16 _nId) : ResId(_nId, *OModule::getResManager()) { } 96 }; 97 98 //......................................................................... 99 } // namespace dbaui 100 //......................................................................... 101 102 #endif // _DBAUI_MODULE_DBU_HXX_ 103 104