// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. /*----------------------------------------------------------------------------- | Copyright (c) 2014-2017, PhosphorJS Contributors | | Distributed under the terms of the BSD 3-Clause License. | | The full license is in the file LICENSE, distributed with this software. |----------------------------------------------------------------------------*/ import { BoxLayout } from './boxlayout'; import { Panel } from './panel'; import { Widget } from './widget'; /** * A panel which arranges its widgets in a single row or column. * * #### Notes * This class provides a convenience wrapper around a [[BoxLayout]]. */ export class BoxPanel extends Panel { /** * Construct a new box panel. * * @param options - The options for initializing the box panel. */ constructor(options: BoxPanel.IOptions = {}) { super({ layout: Private.createLayout(options) }); this.addClass('lm-BoxPanel'); /* */ this.addClass('p-BoxPanel'); /* */ } /** * Get the layout direction for the box panel. */ get direction(): BoxPanel.Direction { return (this.layout as BoxLayout).direction; } /** * Set the layout direction for the box panel. */ set direction(value: BoxPanel.Direction) { (this.layout as BoxLayout).direction = value; } /** * Get the content alignment for the box panel. * * #### Notes * This is the alignment of the widgets in the layout direction. * * The alignment has no effect if the widgets can expand to fill the * entire box layout. */ get alignment(): BoxPanel.Alignment { return (this.layout as BoxLayout).alignment; } /** * Set the content alignment for the box panel. * * #### Notes * This is the alignment of the widgets in the layout direction. * * The alignment has no effect if the widgets can expand to fill the * entire box layout. */ set alignment(value: BoxPanel.Alignment) { (this.layout as BoxLayout).alignment = value; } /** * Get the inter-element spacing for the box panel. */ get spacing(): number { return (this.layout as BoxLayout).spacing; } /** * Set the inter-element spacing for the box panel. */ set spacing(value: number) { (this.layout as BoxLayout).spacing = value; } /** * A message handler invoked on a `'child-added'` message. */ protected onChildAdded(msg: Widget.ChildMessage): void { msg.child.addClass('lm-BoxPanel-child'); /* */ msg.child.addClass('p-BoxPanel-child'); /* */ } /** * A message handler invoked on a `'child-removed'` message. */ protected onChildRemoved(msg: Widget.ChildMessage): void { msg.child.removeClass('lm-BoxPanel-child'); /* */ msg.child.removeClass('p-BoxPanel-child'); /* */ } } /** * The namespace for the `BoxPanel` class statics. */ export namespace BoxPanel { /** * A type alias for a box panel direction. */ export type Direction = BoxLayout.Direction; /** * A type alias for a box panel alignment. */ export type Alignment = BoxLayout.Alignment; /** * An options object for initializing a box panel. */ export interface IOptions { /** * The layout direction of the panel. * * The default is `'top-to-bottom'`. */ direction?: Direction; /** * The content alignment of the panel. * * The default is `'start'`. */ alignment?: Alignment; /** * The spacing between items in the panel. * * The default is `4`. */ spacing?: number; /** * The box layout to use for the box panel. * * If this is provided, the other options are ignored. * * The default is a new `BoxLayout`. */ layout?: BoxLayout; } /** * Get the box panel stretch factor for the given widget. * * @param widget - The widget of interest. * * @returns The box panel stretch factor for the widget. */ export function getStretch(widget: Widget): number { return BoxLayout.getStretch(widget); } /** * Set the box panel stretch factor for the given widget. * * @param widget - The widget of interest. * * @param value - The value for the stretch factor. */ export function setStretch(widget: Widget, value: number): void { BoxLayout.setStretch(widget, value); } /** * Get the box panel size basis for the given widget. * * @param widget - The widget of interest. * * @returns The box panel size basis for the widget. */ export function getSizeBasis(widget: Widget): number { return BoxLayout.getSizeBasis(widget); } /** * Set the box panel size basis for the given widget. * * @param widget - The widget of interest. * * @param value - The value for the size basis. */ export function setSizeBasis(widget: Widget, value: number): void { BoxLayout.setSizeBasis(widget, value); } } /** * The namespace for the module implementation details. */ namespace Private { /** * Create a box layout for the given panel options. */ export function createLayout(options: BoxPanel.IOptions): BoxLayout { return options.layout || new BoxLayout(options); } }