com.lyndir.lanterna.view.TitledView.java Source code

Java tutorial

Introduction

Here is the source code for com.lyndir.lanterna.view.TitledView.java

Source

/*
 * Copyright 2010, Maarten Billemont
 *
 *   Licensed 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
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package com.lyndir.lanterna.view;

import static com.lyndir.lhunath.opal.system.util.ObjectUtils.*;

import com.google.common.base.Preconditions;
import com.googlecode.lanterna.screen.Screen;
import com.googlecode.lanterna.terminal.Terminal;
import javax.annotation.Nonnull;

/**
 * A view that renders a title and maximizes a single subview below it.
 *
 * @author lhunath, 2013-07-20
 */
public class TitledView extends View {

    private String title;
    private Terminal.Color backgroundColor;
    private Terminal.Color textColor;
    private Inset textPadding = new Inset(0, 2, 0, 2);

    public TitledView(final String title) {
        this.title = title;
    }

    @Override
    public void addChild(final View child) {
        Preconditions.checkState(getChildren().isEmpty(), "Can only add a single child to a titled view.");

        super.addChild(child);
    }

    @Override
    protected Box measuredBoxForChildInView(final View child) {
        return super.measuredBoxForChildInView(child).shrink(new Inset(1, 0, 0, 0));
    }

    @Override
    protected void drawForeground(final Screen screen) {
        super.drawForeground(screen);

        Box contentBox = getContentBoxOnScreen().shrink(getTextPadding());
        String titleOnScreen = getTitle().substring(0,
                Math.min(getTitle().length(), contentBox.getSize().getWidth()));
        screen.putString(contentBox.getLeft(), contentBox.getTop(), titleOnScreen, getTextColor(),
                getBackgroundColor());
    }

    @Nonnull
    public String getTitle() {
        return title;
    }

    public void setTitle(@Nonnull final String title) {
        this.title = title;
    }

    public Inset getTextPadding() {
        return textPadding;
    }

    public void setTextPadding(final Inset textPadding) {
        this.textPadding = textPadding;
    }

    @Override
    public Terminal.Color getBackgroundColor() {
        return ifNotNullElse(backgroundColor, getTheme().barBg());
    }

    @Override
    public void setBackgroundColor(final Terminal.Color backgroundColor) {
        this.backgroundColor = backgroundColor;
    }

    public Terminal.Color getTextColor() {
        return ifNotNullElse(textColor, getTheme().barFg());
    }

    public void setTextColor(final Terminal.Color textColor) {
        this.textColor = textColor;
    }
}