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.hxx133
1 files changed, 133 insertions, 0 deletions
diff --git a/basctl/source/inc/layout.hxx b/basctl/source/inc/layout.hxx
new file mode 100644
index 0000000000..29b44896b3
--- /dev/null
+++ b/basctl/source/inc/layout.hxx
@@ -0,0 +1,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 .
+ */
+
+#pragma once
+
+#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(tools::Long nWidth, tools::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;
+ tools::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)
+ tools::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.
+ tools::Long nStartPos, nEndPos;
+ // splitter line window before the window
+ // (the first one is always nullptr)
+ VclPtr<Splitter> pSplit;
+ };
+ std::vector<Item> vItems;
+
+ Point MakePoint(tools::Long, tools::Long) const;
+ Size MakeSize(tools::Long, tools::Long) const;
+ static bool IsDocking(DockingWindow const&);
+ DECL_LINK(SplitHdl, Splitter*, void);
+ void CheckMarginsFor(Splitter*);
+ void InitSplitter(Splitter&);
+ } aLeftSide, aBottomSide;
+};
+
+} // namespace basctl
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */