Add focused color and style for BoxView title

- May define focused color and style for title
  which overrides normal color and style if set.
- Use these in a catalog app.
- Relates #804
This commit is contained in:
Janne Valkealahti
2023-07-21 09:26:31 +01:00
parent 748f41103d
commit c074af314b
2 changed files with 39 additions and 4 deletions

View File

@@ -48,6 +48,8 @@ public class BoxView extends AbstractView {
private Integer backgroundColor = -1;
private int titleColor = -1;
private int titleStyle = -1;
private int focusedTitleColor = -1;
private int focusedTitleStyle = -1;
private HorizontalAlign titleAlign;
@Override
@@ -149,6 +151,26 @@ public class BoxView extends AbstractView {
this.titleStyle = titleStyle;
}
/**
* Sets a focused title color. Takes precedence set from
* {@link #setTitleColor(int)}.
*
* @param focusedTitleColor the title color
*/
public void setFocusedTitleColor(int focusedTitleColor) {
this.focusedTitleColor = focusedTitleColor;
}
/**
* Sets a focused title style. Takes precedence set from
* {@link #setTitleStyle(int)}.
*
* @param focusedTitleStyle the title style
*/
public void setFocusedTitleStyle(int focusedTitleStyle) {
this.focusedTitleStyle = focusedTitleStyle;
}
/**
* Sets a title align.
*
@@ -180,12 +202,22 @@ public class BoxView extends AbstractView {
screen.writerBuilder().layer(getLayer()).build().border(rect.x(), rect.y(), rect.width(), rect.height());
if (StringUtils.hasText(title)) {
Rectangle r = new Rectangle(rect.x() + 1, rect.y(), rect.width() - 2, 1);
if (titleColor > -1) {
screen.writerBuilder().layer(getLayer()).color(titleColor).style(titleStyle).build().text(title, r, titleAlign, VerticalAlign.TOP);
int color = -1;
int style = -1;
if (hasFocus()) {
color = focusedTitleColor;
style = focusedTitleStyle;
}
else {
screen.writerBuilder().layer(getLayer()).build().text(title, r, titleAlign, VerticalAlign.TOP);
if (color < 0) {
color = titleColor;
}
if (style < 0) {
style = titleStyle;
}
screen.writerBuilder().layer(getLayer()).color(color).style(style).build().text(title, r, titleAlign,
VerticalAlign.TOP);
}
}
if (getDrawFunction() != null) {

View File

@@ -47,6 +47,7 @@ import org.springframework.shell.component.view.geom.Rectangle;
import org.springframework.shell.component.view.message.ShellMessageBuilder;
import org.springframework.shell.component.view.screen.Screen;
import org.springframework.shell.component.view.screen.Screen.Writer;
import org.springframework.shell.component.view.screen.ScreenItem;
import org.springframework.shell.samples.catalog.scenario.Scenario;
import org.springframework.shell.samples.catalog.scenario.ScenarioComponent;
import org.springframework.util.ObjectUtils;
@@ -196,6 +197,7 @@ public class Catalog {
List<String> items = List.copyOf(categoryMap.keySet());
categories.setItems(items);
categories.setTitle("Categories");
categories.setFocusedTitleStyle(ScreenItem.STYLE_BOLD);
categories.setShowBorder(true);
return categories;
}
@@ -215,6 +217,7 @@ public class Catalog {
ListView<ScenarioData> scenarios = new ListView<>();
scenarios.setEventLoop(eventLoop);
scenarios.setTitle("Scenarios");
scenarios.setFocusedTitleStyle(ScreenItem.STYLE_BOLD);
scenarios.setShowBorder(true);
scenarios.setCellFactory(list -> new ScenarioListCell());
return scenarios;