summaryrefslogtreecommitdiffstats
path: root/include/svx/fmview.hxx
blob: 00cecc94d8be966ad69c59a35b8f39b68d9d3e9c (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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/* -*- 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_SVX_FMVIEW_HXX
#define INCLUDED_SVX_FMVIEW_HXX

#include <svx/view3d.hxx>
#include <svx/svxdllapi.h>

namespace com::sun::star {
    namespace beans {
        class XPropertySet;
    }
    namespace util {
        class XNumberFormats;
    }
}

class OutputDevice;
class FmFormObj;
class FmFormPage;
class FmFormShell;
class FmXFormView;

namespace svx {
    class ODataAccessDescriptor;
    struct OXFormsDescriptor;
}

class SdrUnoObj;
namespace com::sun::star::form {
    class XForm;
    namespace runtime {
        class XFormController;
    }
}

class SVXCORE_DLLPUBLIC FmFormView : public E3dView
{
    rtl::Reference<FmXFormView> pImpl;
    FmFormShell*    pFormShell;

    void Init();

public:
    FmFormView(
        SdrModel& rSdrModel,
        OutputDevice* pOut);

    virtual ~FmFormView() override;

    /** create a control pair (label/bound control) for the database field description given.
        @param rFieldDesc
            description of the field. see clipboard format SBA-FIELDFORMAT
        @deprecated
            This method is deprecated. Use the version with an ODataAccessDescriptor instead.
    */
    SdrObjectUniquePtr CreateFieldControl(const OUString& rFieldDesc) const;

    /** create a control pair (label/bound control) for the database field description given.
    */
    SdrObjectUniquePtr CreateFieldControl( const svx::ODataAccessDescriptor& _rColumnDescriptor );

    /** create a control pair (label/bound control) for the xforms description given.
    */
    SdrObjectUniquePtr CreateXFormsControl( const svx::OXFormsDescriptor &_rDesc );

    virtual void MarkListHasChanged() override;
    virtual void AddWindowToPaintView(OutputDevice* pNewWin, vcl::Window* pWindow) override;
    virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin) override;

    static void createControlLabelPair(
        OutputDevice const * _pOutDev,
        sal_Int32 _nXOffsetMM,
        sal_Int32 _nYOffsetMM,
        const css::uno::Reference< css::beans::XPropertySet >& _rxField,
        const css::uno::Reference< css::util::XNumberFormats >& _rxNumberFormats,
        sal_uInt16 _nControlObjectID,
        SdrInventor _nInventor,
        sal_uInt16 _nLabelObjectID,

        // tdf#118963 Need a SdrModel for SdrObject creation. To make the
        // demand clear, hand over a SdrMldel&
        SdrModel& _rModel,

        std::unique_ptr<SdrUnoObj, SdrObjectFreeOp>& _rpLabel,
        std::unique_ptr<SdrUnoObj, SdrObjectFreeOp>& _rpControl
    );

    virtual SdrPageView* ShowSdrPage(SdrPage* pPage) override;
    virtual void HideSdrPage() override;

    virtual bool MouseButtonDown( const MouseEvent& _rMEvt, OutputDevice* _pWin ) override;

    /** grab the focus to the first form control on the view
    */
    SVX_DLLPRIVATE void GrabFirstControlFocus();

    /** returns the form controller for a given form and a given device
    */
    SVX_DLLPRIVATE css::uno::Reference< css::form::runtime::XFormController >
            GetFormController( const css::uno::Reference< css::form::XForm >& _rxForm, const OutputDevice& _rDevice ) const;

    // SdrView
    bool KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) override;

    /// shortcut to "GetSdrPageView() ? PTR_CAST( FmFormPage, GetSdrPageView() ) : NULL"
    FmFormPage* GetCurPage();

    SVX_DLLPRIVATE void ActivateControls(SdrPageView const *);
    SVX_DLLPRIVATE void DeactivateControls(SdrPageView const *);

    SVX_DLLPRIVATE void ChangeDesignMode(bool bDesign);

    SVX_DLLPRIVATE FmXFormView* GetImpl() const { return pImpl.get(); }
    SVX_DLLPRIVATE FmFormShell* GetFormShell() const { return pFormShell; }

    struct FormShellAccess { friend class FmFormShell; private: FormShellAccess() { } };
     void SetFormShell( FmFormShell* pShell, FormShellAccess ) { pFormShell = pShell; }

    struct ImplAccess { friend class FmXFormView; private: ImplAccess() { } };
    void SetMoveOutside( bool _bMoveOutside, ImplAccess ) { E3dView::SetMoveOutside( _bMoveOutside ); }
     void InsertControlContainer(const css::uno::Reference< css::awt::XControlContainer >& xCC);
     void RemoveControlContainer(const css::uno::Reference< css::awt::XControlContainer >& xCC);

    virtual SdrPaintWindow* BeginCompleteRedraw(OutputDevice* pOut) override;
    virtual void EndCompleteRedraw(SdrPaintWindow& rPaintWindow, bool bPaintFormLayer) override;

    SVX_DLLPRIVATE const OutputDevice* GetActualOutDev() const {return mpActualOutDev;}
    SVX_DLLPRIVATE bool checkUnMarkAll(const css::uno::Reference< css::uno::XInterface >& _xSource);

private:
    SVX_DLLPRIVATE FmFormObj* getMarkedGrid() const;
 protected:
    using E3dView::SetMoveOutside;
};

#endif          // _FML_FMVIEW_HXX

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