summaryrefslogtreecommitdiffstats
path: root/chart2/source/controller/main/FeatureCommandDispatchBase.hxx
blob: 3ceb35ad1268bc710a2c79a74a9c7fae3057be51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* -*- 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 .
 */
#pragma once

#include "CommandDispatch.hxx"

#include <com/sun/star/frame/DispatchInformation.hpp>

enum class ChartCommandID
{
    NONE                         = 0,

    //Draw Command Ids:
    DrawObjectSelect             = 1,
    DrawLine                     = 2,
    DrawLineArrowEnd             = 3,
    DrawRect                     = 4,
    DrawEllipse                  = 5,
    DrawFreelineNoFill           = 6,
    DrawText                     = 7,
    DrawTextVertical             = 8,
    DrawCaption                  = 9,
    DrawCaptionVertical          = 10,
    DrawToolboxCsBasic           = 11,
    DrawToolboxCsSymbol          = 12,
    DrawToolboxCsArrow           = 13,
    DrawToolboxCsFlowchart       = 14,
    DrawToolboxCsCallout         = 15,
    DrawToolboxCsStar            = 16,

    //Shape Controller Command Ids:
    ShapeFormatLine              =  21,
    ShapeFormatArea              =  22,
    ShapeTextAttributes          =  23,
    ShapeTransformDialog         =  24,
    ShapeObjectTitleDescription  =  25,
    ShapeRenameObject            =  26,
    ShapeBringToFront            =  28,
    ShapeForward                 =  29,
    ShapeBackward                = 30,
    ShapeSendToBack              = 31,
    ShapeFontDialog              = 35,
    ShapeParagraphDialog         = 36
};


namespace chart
{

struct ControllerFeature: public css::frame::DispatchInformation
{
    ChartCommandID nFeatureId;
};

typedef std::map< OUString,
                    ControllerFeature > SupportedFeatures;

struct FeatureState
{
    bool bEnabled;
    css::uno::Any aState;

    FeatureState() : bEnabled( false ) { }
};

/** This is a base class for CommandDispatch implementations with feature support.
 */
class FeatureCommandDispatchBase: public CommandDispatch
{
public:
    explicit FeatureCommandDispatchBase( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
    virtual ~FeatureCommandDispatchBase() override;

    // late initialisation, especially for adding as listener
    virtual void initialize() override;

    virtual bool isFeatureSupported( const OUString& rCommandURL );

protected:
    // XDispatch
    virtual void SAL_CALL dispatch( const css::util::URL& URL,
        const css::uno::Sequence< css::beans::PropertyValue >& Arguments ) override;

    virtual void fireStatusEvent( const OUString& rURL,
        const css::uno::Reference< css::frame::XStatusListener >& xSingleListener ) override;

    // state of a feature
    virtual FeatureState getState( const OUString& rCommand ) = 0;

    // execute a feature
    virtual void execute( const OUString& rCommand, const css::uno::Sequence< css::beans::PropertyValue>& rArgs ) = 0;

    // all the features which should be handled by this class
    virtual void describeSupportedFeatures() = 0;

    /** describes a feature supported by the controller

        Must not be called outside <member>describeSupportedFeatures</member>.

        @param pAsciiCommandURL
            the URL of the feature command
        @param nId
            the id of the feature. Later references to this feature usually happen by id, not by
            URL.
        @param nGroup
            the command group of the feature. This is important for configuring the controller UI
            by the user, see also <type scope="css::frame">CommandGroup</type>.
    */
    void implDescribeSupportedFeature( const char* pAsciiCommandURL, ChartCommandID nId,
        sal_Int16 nGroup );

    mutable SupportedFeatures m_aSupportedFeatures;

    ChartCommandID m_nFeatureId;
};

} //  namespace chart

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */