summaryrefslogtreecommitdiffstats
path: root/basctl/source/inc/layout.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'basctl/source/inc/layout.hxx')
-rw-r--r--basctl/source/inc/layout.hxx134
1 files changed, 134 insertions, 0 deletions
diff --git a/basctl/source/inc/layout.hxx b/basctl/source/inc/layout.hxx
new file mode 100644
index 000000000..0857ccb82
--- /dev/null
+++ b/basctl/source/inc/layout.hxx
@@ -0,0 +1,134 @@
+/* -*- 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_BASCTL_SOURCE_INC_LAYOUT_HXX
+#define INCLUDED_BASCTL_SOURCE_INC_LAYOUT_HXX
+
+#include "bastypes.hxx"
+#include <vcl/split.hxx>
+#include <vcl/vclptr.hxx>
+
+#include <vector>
+
+class DockingWindow;
+class SfxRequest;
+class SfxItemSet;
+
+namespace basctl
+{
+
+class DockingWindow;
+class BaseWindow;
+
+
+// Layout -- the common base of ModulLayout and DialogLayout.
+// Handles the splitting lines and the dockable windows.
+
+class Layout: public vcl::Window
+{
+public:
+ void ArrangeWindows ();
+
+ virtual void Activating (BaseWindow&);
+ virtual void Deactivating ();
+ virtual void ExecuteGlobal (SfxRequest&) { }
+ virtual void GetState (SfxItemSet&, unsigned nWhich) = 0;
+ virtual void UpdateDebug (bool bBasicStopped ) = 0;
+
+ virtual ~Layout() override;
+ virtual void dispose() override;
+
+protected:
+ explicit Layout(vcl::Window* pParent);
+
+ void AddToLeft (DockingWindow* pWin, Size const& rSize) { aLeftSide.Add(pWin, rSize); }
+ void AddToBottom (DockingWindow* pWin, Size const& rSize) { aBottomSide.Add(pWin, rSize); }
+ void Remove (DockingWindow*);
+ bool HasSize () const { return !bFirstSize; }
+
+ // Window:
+ virtual void Resize () override;
+ virtual void DataChanged (DataChangedEvent const& rDCEvt) override;
+ // new:
+ virtual void OnFirstSize (long nWidth, long nHeight) = 0;
+
+private:
+ // the main child window (either ModulWindow or DialogWindow)
+ VclPtr<BaseWindow> pChild;
+
+ // when this window has at first (nonempty) size
+ bool bFirstSize;
+
+ // horizontal or vertical split strip
+ class SplittedSide
+ {
+ public:
+ enum class Side {Left, Bottom};
+ SplittedSide (Layout*, Side);
+ void Add (DockingWindow*, Size const&);
+ void Remove (DockingWindow*);
+ bool IsEmpty () const;
+ long GetSize () const;
+ void ArrangeIn (tools::Rectangle const&);
+ void dispose();
+
+ private:
+ // the layout window
+ Layout& rLayout;
+ // horizontal or vertical strip?
+ bool bVertical;
+ // lower (top or left) or higher (bottom or right) strip?
+ bool bLower;
+ // rectangle to move in
+ tools::Rectangle aRect;
+ // size (width or height)
+ long nSize;
+ // the main splitting line
+ VclPtr<Splitter> aSplitter;
+ // the dockable windows (and some data)
+ struct Item
+ {
+ // pointer to the dockable window
+ VclPtr<DockingWindow> pWin;
+ // starting and ending position in the strip
+ // They may be different from the actual window position, because
+ // the window may fill the space of the adjacent currently
+ // non-docking windows, but this change is not stored in these
+ // variables. These change only when the splitter lines are moved.
+ long nStartPos, nEndPos;
+ // splitter line window before the window
+ // (the first one is always nullptr)
+ VclPtr<Splitter> pSplit;
+ };
+ std::vector<Item> vItems;
+
+ Point MakePoint (long, long) const;
+ Size MakeSize (long, long) const;
+ static bool IsDocking (DockingWindow const&);
+ DECL_LINK(SplitHdl, Splitter*, void);
+ void CheckMarginsFor (Splitter*);
+ void InitSplitter (Splitter&);
+ } aLeftSide, aBottomSide;
+};
+
+} // namespace basctl
+
+#endif // INCLUDED_BASCTL_SOURCE_INC_LAYOUT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */