summaryrefslogtreecommitdiff
path: root/sfx2/source/inc/splitwin.hxx
blob: 2ef9c1f9582d7d98dad7d1067bebccb85be0dcee (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
/* -*- 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_SFX2_SOURCE_INC_SPLITWIN_HXX
#define INCLUDED_SFX2_SOURCE_INC_SPLITWIN_HXX

#include <vcl/splitwin.hxx>
#include <sfx2/childwin.hxx>

#include <vector>
#include <memory>

class SfxWorkWindow;
class SfxDockingWindow;
class SfxEmptySplitWin_Impl;

struct SfxDock_Impl
{
    sal_uInt16        nType;
    VclPtr<SfxDockingWindow> pWin;      // SplitWindow has this window
    bool              bNewLine;
    bool              bHide;     // SplitWindow had this window
    long              nSize;
};

typedef std::vector<std::unique_ptr<SfxDock_Impl> > SfxDockArr_Impl;

class SfxSplitWindow : public SplitWindow
{
friend class SfxEmptySplitWin_Impl;

private:
    SfxChildAlignment   eAlign;
    SfxWorkWindow*      pWorkWin;
    SfxDockArr_Impl*    pDockArr;
    bool                bLocked;
    bool                bPinned;
    VclPtr<SfxEmptySplitWin_Impl>  pEmptyWin;
    VclPtr<SfxDockingWindow>       pActive;

    void                InsertWindow_Impl( SfxDock_Impl* pDockWin,
                            const Size& rSize,
                            sal_uInt16 nLine,
                            sal_uInt16 nPos,
                            bool bNewLine );

    DECL_LINK_TYPED(    TimerHdl, Timer*, void );
    bool                CursorIsOverRect() const;
    void                SetPinned_Impl( bool );
    void                SetFadeIn_Impl( bool );
    void                SaveConfig_Impl();
    void                FadeOut_Impl();

protected:

    virtual void        StartSplit() override;
    virtual void        SplitResize() override;
    virtual void        Split() override;
    virtual void        Command ( const CommandEvent& rCEvt ) override;
    virtual void        MouseButtonDown ( const MouseEvent& ) override;

public:
                        SfxSplitWindow( vcl::Window* pParent, SfxChildAlignment eAl,
                            SfxWorkWindow *pW, bool bWithButtons );

                        virtual ~SfxSplitWindow() override;
    virtual void        dispose() override;

    void                ReleaseWindow_Impl(SfxDockingWindow *pWin, bool bSaveConfig=true);

    void                InsertWindow( SfxDockingWindow* pDockWin,
                            const Size& rSize);

    void                InsertWindow( SfxDockingWindow* pDockWin,
                            const Size& rSize,
                            sal_uInt16 nLine,
                            sal_uInt16 nPos,
                            bool bNewLine );

    void                MoveWindow( SfxDockingWindow* pDockWin,
                            const Size& rSize,
                            sal_uInt16 nLine,
                            sal_uInt16 nPos,
                            bool bNewLine );

    void                RemoveWindow( SfxDockingWindow* pDockWin, bool bHide=true);

    void                Lock( bool bLock=true )
                        {
                            bLocked = bLock;
                            SetUpdateMode( !bLock );
                        }
    using Window::IsLocked;

    bool                GetWindowPos( const SfxDockingWindow* pWindow,
                                      sal_uInt16& rLine, sal_uInt16& rPos ) const;
    bool                GetWindowPos( const Point& rTestPos,
                                      sal_uInt16& rLine, sal_uInt16& rPos ) const;
    sal_uInt16              GetLineCount() const;
    long                GetLineSize( sal_uInt16 ) const;
    sal_uInt16              GetWindowCount(sal_uInt16 nLine) const;
    sal_uInt16              GetWindowCount() const;

    bool                IsPinned() const { return bPinned; }
    bool                IsFadeIn() const;
    bool                IsAutoHide( bool bSelf ) const;
    SplitWindow*        GetSplitWindow();

    virtual void        AutoHide() override;
    virtual void        FadeOut() override;
    virtual void        FadeIn() override;
    void                SetActiveWindow_Impl( SfxDockingWindow* pWin );
};

#endif // INCLUDED_SFX2_SOURCE_INC_SPLITWIN_HXX


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