From 6cdd4553f20b84586df10e5f8319b6462bf3bd41 Mon Sep 17 00:00:00 2001 From: Kevin Lamonte Date: Sat, 17 Aug 2019 07:44:53 -0500 Subject: [PATCH] #46 stubs for LayoutManager --- src/jexer/layout/LayoutManager.java | 62 +++++++++++++++++ src/jexer/layout/StretchLayoutManager.java | 81 ++++++++++++++++++++++ src/jexer/layout/package-info.java | 33 +++++++++ 3 files changed, 176 insertions(+) create mode 100644 src/jexer/layout/LayoutManager.java create mode 100644 src/jexer/layout/StretchLayoutManager.java create mode 100644 src/jexer/layout/package-info.java diff --git a/src/jexer/layout/LayoutManager.java b/src/jexer/layout/LayoutManager.java new file mode 100644 index 00000000..bfa64a09 --- /dev/null +++ b/src/jexer/layout/LayoutManager.java @@ -0,0 +1,62 @@ +/* + * Jexer - Java Text User Interface + * + * The MIT License (MIT) + * + * Copyright (C) 2019 Kevin Lamonte + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * @author Kevin Lamonte [kevin.lamonte@gmail.com] + * @version 1 + */ +package jexer.layout; + +import jexer.TWidget; +import jexer.event.TResizeEvent; + +/** + * A LayoutManager provides automatic positioning and sizing of a TWidget's + * child TWidgets. + */ +public interface LayoutManager { + + /** + * Process the parent widget's resize event, and resize/reposition child + * widgets. + * + * @param resize resize event + */ + public void onResize(final TResizeEvent resize); + + /** + * Add a child widget to manage. + * + * @param child the widget to manage + */ + public void add(final TWidget child); + + /** + * Remove a child widget from those managed by this LayoutManager. + * + * @param child the widget to remove + */ + public void remove(final TWidget child); + +} diff --git a/src/jexer/layout/StretchLayoutManager.java b/src/jexer/layout/StretchLayoutManager.java new file mode 100644 index 00000000..548c04a7 --- /dev/null +++ b/src/jexer/layout/StretchLayoutManager.java @@ -0,0 +1,81 @@ +/* + * Jexer - Java Text User Interface + * + * The MIT License (MIT) + * + * Copyright (C) 2019 Kevin Lamonte + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * @author Kevin Lamonte [kevin.lamonte@gmail.com] + * @version 1 + */ +package jexer.layout; + +import jexer.TWidget; +import jexer.event.TResizeEvent; + +/** + * StretchLayoutManager repositions child widgets based on their coordinates + * when added and the current widget size. + */ +public class StretchLayoutManager implements LayoutManager { + + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ + + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ + + + // ------------------------------------------------------------------------ + // LayoutManager ---------------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * Process the parent widget's resize event, and resize/reposition child + * widgets. + * + * @param resize resize event + */ + public void onResize(final TResizeEvent resize) { + // TODO + } + + /** + * Add a child widget to manage. + * + * @param child the widget to manage + */ + public void add(final TWidget child) { + // TODO + } + + /** + * Remove a child widget from those managed by this LayoutManager. + * + * @param child the widget to remove + */ + public void remove(final TWidget child) { + // TODO + } + +} diff --git a/src/jexer/layout/package-info.java b/src/jexer/layout/package-info.java new file mode 100644 index 00000000..69887ddd --- /dev/null +++ b/src/jexer/layout/package-info.java @@ -0,0 +1,33 @@ +/* + * Jexer - Java Text User Interface + * + * The MIT License (MIT) + * + * Copyright (C) 2019 Kevin Lamonte + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * @author Kevin Lamonte [kevin.lamonte@gmail.com] + * @version 1 + */ + +/** + * Available layout managers. + */ +package jexer.layout; -- 2.27.0