Coverage Report

Created: 2025-12-08 09:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/include/unotools/moduleoptions.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#ifndef INCLUDED_UNOTOOLS_MODULEOPTIONS_HXX
21
#define INCLUDED_UNOTOOLS_MODULEOPTIONS_HXX
22
23
#include <unotools/unotoolsdllapi.h>
24
#include <com/sun/star/uno/Sequence.hxx>
25
#include <rtl/ustring.hxx>
26
#include <sal/types.h>
27
#include <unotools/options.hxx>
28
#include <memory>
29
30
namespace com::sun::star::frame { class XModel; }
31
namespace com::sun::star::beans { struct PropertyValue; }
32
33
/*-************************************************************************************************************
34
    @short          forward declaration to our private date container implementation
35
    @descr          We use these class as internal member to support small memory requirements.
36
                    You can create the container if it is necessary. The class which use these mechanism
37
                    is faster and smaller then a complete implementation!
38
*//*-*************************************************************************************************************/
39
class SvtModuleOptions_Impl;
40
41
/*-************************************************************************************************************
42
    @short          collect information about installation state of modules
43
    @descr          Use these class to get installation state of different office modules like writer, calc etc
44
                    Further you can ask for additional information; e.g. name of standard template file, which
45
                    should be used by corresponding module; or short/long name of these module factory.
46
    @devstatus      ready to use
47
    @threadsafe     yes
48
*//*-*************************************************************************************************************/
49
class SAL_WARN_UNUSED UNOTOOLS_DLLPUBLIC SvtModuleOptions final : public utl::detail::Options
50
{
51
    public:
52
53
        enum class EModule
54
        {
55
            WRITER       = 0,
56
            CALC         = 1,
57
            DRAW         = 2,
58
            IMPRESS      = 3,
59
            MATH         = 4,
60
            CHART        = 5,
61
            STARTMODULE  = 6,
62
            BASIC        = 7,
63
            DATABASE     = 8,
64
            WEB          = 9,
65
            GLOBAL       = 10
66
        };
67
68
        /*ATTENTION:
69
            If you change these enum ... don't forget to change reading/writing and order of configuration values too!
70
            See "SvtModuleOptions_Impl::impl_GetSetNames()" and his ctor for further information.
71
         */
72
        enum class EFactory
73
        {
74
            UNKNOWN_FACTORY = -1,
75
            WRITER        =  0,
76
            WRITERWEB     =  1,
77
            WRITERGLOBAL  =  2,
78
            CALC          =  3,
79
            DRAW          =  4,
80
            IMPRESS       =  5,
81
            MATH          =  6,
82
            CHART         =  7,
83
            STARTMODULE   =  8,
84
            DATABASE      =  9,
85
            BASIC         = 10,
86
            LAST = BASIC
87
        };
88
89
    public:
90
         SvtModuleOptions();
91
        virtual ~SvtModuleOptions() override;
92
93
        bool        IsModuleInstalled         (       EModule          eModule    ) const;
94
        OUString GetModuleName             (       EModule          eModule    ) const;
95
        const OUString & GetFactoryName    (       EFactory         eFactory   ) const;
96
        OUString GetFactoryStandardTemplate(       EFactory         eFactory   ) const;
97
        OUString GetFactoryEmptyDocumentURL(       EFactory         eFactory   ) const;
98
        OUString GetFactoryDefaultFilter   (       EFactory         eFactory   ) const;
99
        bool        IsDefaultFilterReadonly   (       EFactory         eFactory   ) const;
100
        sal_Int32       GetFactoryIcon            (       EFactory         eFactory   ) const;
101
        static bool ClassifyFactoryByName     ( std::u16string_view sName      ,
102
                                                          EFactory&        eFactory   );
103
        void            SetFactoryStandardTemplate(       EFactory         eFactory   ,
104
                                                    const OUString& sTemplate  );
105
        void            SetFactoryDefaultFilter   (       EFactory         eFactory   ,
106
                                                    const OUString& sFilter    );
107
108
        /** @short  return the corresponding application ID for the given
109
                    document service name.
110
         */
111
        static EFactory ClassifyFactoryByServiceName(std::u16string_view sName);
112
113
        /** @short  return the corresponding application ID for the given
114
                    short name.
115
         */
116
        static EFactory ClassifyFactoryByShortName(std::u16string_view sName);
117
118
        /** @short  return the corresponding application ID for the given properties.
119
120
            @descr  Because this search base on filters currently (till we have a better solution)
121
                    a result is not guaranteed every time. May a filter does not exists for the specified
122
                    content (but a FrameLoader which is not bound to any application!) ... or
123
                    the given properties describe a stream (and we make no deep detection inside here!).
124
125
            @attention  The module BASIC can't be detected here. Because it does not
126
                        has an own URL schema.
127
128
            @param  sURL
129
                    the complete URL!
130
131
            @param  lMediaDescriptor
132
                    additional information
133
134
            @return A suitable enum value. See EFactory above.
135
         */
136
        static EFactory ClassifyFactoryByURL(const OUString&                                                           sURL            ,
137
                                             const css::uno::Sequence< css::beans::PropertyValue >& lMediaDescriptor);
138
139
        /** @short  return the corresponding application ID for the given properties.
140
141
            @descr  Here we try to use the list of supported service names of the given model
142
                    to find out the right application module.
143
144
            @attention  The module BASIC can't be detected here. Because it does not
145
                        support any model/ctrl/view paradigm.
146
147
            @param  xModel
148
                    the document model
149
150
            @return A suitable enum value. See EFactory above.
151
         */
152
        static EFactory ClassifyFactoryByModel(const css::uno::Reference< css::frame::XModel >& xModel);
153
154
        static OUString GetFactoryShortName(EFactory eFactory);
155
156
        OUString GetDefaultModuleName() const;
157
158
0
        bool IsMathInstalled() const { return IsModuleInstalled(EModule::MATH); }
159
468
        bool IsChartInstalled() const { return IsModuleInstalled(EModule::CHART); }
160
0
        bool IsCalcInstalled() const { return IsModuleInstalled(EModule::CALC); }
161
0
        bool IsDrawInstalled() const { return IsModuleInstalled(EModule::DRAW); }
162
0
        bool IsWriterInstalled() const { return IsModuleInstalled(EModule::WRITER); }
163
0
        bool IsImpressInstalled() const { return IsModuleInstalled(EModule::IMPRESS); }
164
0
        static bool IsBasicIDEInstalled() { return true; }
165
0
        bool IsDataBaseInstalled() const { return IsModuleInstalled(EModule::DATABASE); }
166
167
        css::uno::Sequence < OUString > GetAllServiceNames();
168
169
    private:
170
        std::shared_ptr<SvtModuleOptions_Impl>   m_pImpl;
171
172
};      // class SvtModuleOptions
173
174
#endif // INCLUDED_UNOTOOLS_MODULEOPTIONS_HXX
175
176
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */