summaryrefslogtreecommitdiffstats
path: root/reportdesign/source/ui/inc/RptUndo.hxx
blob: 9f0b6c1aa24beef5ff06885978c415839494deb6 (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 .
 */
#ifndef INCLUDED_REPORTDESIGN_SOURCE_UI_INC_RPTUNDO_HXX
#define INCLUDED_REPORTDESIGN_SOURCE_UI_INC_RPTUNDO_HXX

#include <RptModel.hxx>
#include <UndoActions.hxx>
#include <functional>

namespace com::sun::star {
    namespace drawing {
        class XShape;
    }
}

namespace rptui
{
    /** \class OSectionUndo
     * Undo class for section add and remove.
     */
    class OSectionUndo : public OCommentUndoAction
    {
        OSectionUndo(const OSectionUndo&) = delete;
        void operator =(const OSectionUndo&) = delete;
    protected:
        ::std::vector< css::uno::Reference< css::drawing::XShape> >
                                                    m_aControls;
        ::std::vector< ::std::pair< OUString ,css::uno::Any> >
                                                    m_aValues;
        Action                                      m_eAction;
        sal_uInt16                                  m_nSlot;
        bool                                        m_bInserted;

        virtual void    implReInsert( ) = 0;
        virtual void    implReRemove( ) = 0;

        void collectControls(const css::uno::Reference< css::report::XSection >& _xSection);
    public:
        OSectionUndo(   OReportModel& rMod
                        ,sal_uInt16 _nSlot
                        ,Action _eAction
                        ,const char* pCommentID);
        virtual ~OSectionUndo() override;

        virtual void        Undo() override;
        virtual void        Redo() override;
    };

    /** Undo action for the group header, footer, page header, footer
    */
    class OReportSectionUndo : public OSectionUndo
    {
        OReportHelper                               m_aReportHelper;
        ::std::function<css::uno::Reference< css::report::XSection >(OReportHelper *)> m_pMemberFunction;

        void    implReInsert( ) override;
        void    implReRemove( ) override;
        OReportSectionUndo(const OReportSectionUndo&) = delete;
        void operator =(const OReportSectionUndo&) = delete;
    public:
        //OReportSectionUndo(    const css::uno::Reference< css::report::XSection >& _xSection
        OReportSectionUndo( OReportModel& rMod
                            ,sal_uInt16 _nSlot
                            ,::std::function<css::uno::Reference< css::report::XSection >(OReportHelper *)> _pMemberFunction
                            ,const css::uno::Reference< css::report::XReportDefinition >& _xReport
                            ,Action _eAction);
        virtual ~OReportSectionUndo() override;
    };

    /** Undo action for the group header, footer
    */
    class OGroupSectionUndo : public OSectionUndo
    {
        OGroupHelper                                m_aGroupHelper;
        ::std::function<css::uno::Reference< css::report::XSection >(OGroupHelper *)> m_pMemberFunction;

        mutable OUString                     m_sName;

        void    implReInsert( ) override;
        void    implReRemove( ) override;
        OGroupSectionUndo(const OGroupSectionUndo&) = delete;
        void operator =(const OGroupSectionUndo&) = delete;
    public:
        //OGroupSectionUndo(     const css::uno::Reference< css::report::XSection >& _xSection
        OGroupSectionUndo(  OReportModel& rMod
                            ,sal_uInt16 _nSlot
                            ,::std::function<css::uno::Reference< css::report::XSection >(OGroupHelper *)> _pMemberFunction
                            ,const css::uno::Reference< css::report::XGroup >& _xGroup
                            ,Action _eAction
                            ,const char* pCommentID);

        virtual OUString GetComment() const override;
    };

    /** /class OGroupUndo
     * \brief Undo action for removing a group object.
    */
    class OGroupUndo : public OCommentUndoAction
    {
        css::uno::Reference< css::report::XGroup>             m_xGroup; ///<! the group for the undo redo action
        css::uno::Reference< css::report::XReportDefinition > m_xReportDefinition; ///<! the parent report definition
        Action                                                                          m_eAction; ///<! the current action
        sal_Int32                                                                       m_nLastPosition; ///<! the last position of the group

        void    implReInsert( );
        void    implReRemove( );
    public:
        OGroupUndo(OReportModel& rMod
                    ,const char* pCommentID
                    ,Action _eAction
                    ,const css::uno::Reference< css::report::XGroup>& _xGroup
                    ,const css::uno::Reference< css::report::XReportDefinition >& _xReportDefinition);
        virtual void        Undo() override;
        virtual void        Redo() override;
    };
}
#endif // INCLUDED_REPORTDESIGN_SOURCE_UI_INC_RPTUNDO_HXX

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