Java tutorial
/* * 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; } }