Package com.baulsupp.kolja.log.viewer.commands

Source Code of com.baulsupp.kolja.log.viewer.commands.RendererCommand

package com.baulsupp.kolja.log.viewer.commands;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

import jcurses.system.InputChar;
import jcurses.system.Toolkit;

import com.baulsupp.curses.application.Command;
import com.baulsupp.curses.application.KeyBinding;
import com.baulsupp.curses.list.CursesListRenderer;
import com.baulsupp.curses.list.TextRenderer;
import com.baulsupp.curses.list.Util;
import com.baulsupp.kolja.log.line.Line;
import com.baulsupp.kolja.log.viewer.importing.LogFormat;
import com.baulsupp.kolja.log.viewer.renderer.FieldRenderer;
import com.baulsupp.kolja.log.viewer.renderer.Renderer;
import com.baulsupp.kolja.log.viewer.renderer.Wrap;
import com.baulsupp.less.Less;
import com.baulsupp.less.ViewRowRenderer;

public class RendererCommand implements Command<Less> {
  private java.util.List<CursesListRenderer<Line>> renderers;

  public RendererCommand(Less less, LogFormat format) {

    renderers = new ArrayList<CursesListRenderer<Line>>();

    Renderer<Line> gridNonWrapped = format.getLineRenderer();
    gridNonWrapped.setWidth(Toolkit.getScreenWidth());

    ViewRowRenderer viewRenderer = new ViewRowRenderer(gridNonWrapped);
    renderers.add(viewRenderer);

    if (gridNonWrapped instanceof FieldRenderer) {
      ((FieldRenderer) gridNonWrapped).setWrappingMode(Wrap.NONE);

      Renderer<Line> gridWrapped = format.getLineRenderer();
      gridWrapped.setWidth(Toolkit.getScreenWidth());
      ((FieldRenderer) gridWrapped).setWrappingMode(Wrap.LAST_COLUMN);

      ((FieldRenderer) gridWrapped).addHighlight(less.getExtraHighlights());
      ((FieldRenderer) gridNonWrapped).addHighlight(less.getExtraHighlights());

      viewRenderer = new ViewRowRenderer(gridWrapped);
      renderers.add(viewRenderer);
    }

    TextRenderer<Line> plain = new TextRenderer<Line>();
    plain.setWrapping(Toolkit.getScreenWidth());
    renderers.add(plain);

    TextRenderer<Line> plainUnwrapped = new TextRenderer<Line>();
    plainUnwrapped.setWrapping(TextRenderer.NO_WRAP);
    renderers.add(plainUnwrapped);

    rotateRenderer(less);
  }

  public boolean handle(Less less, InputChar input) {
    if (!Util.wasLetter(input, 'r')) {
      return false;
    }

    rotateRenderer(less);

    return true;
  }

  public void rotateRenderer(Less less) {
    CursesListRenderer<Line> nextRenderer = getNextRenderer();

    if (nextRenderer instanceof ViewRowRenderer) {
      ViewRowRenderer viewRenderer = (ViewRowRenderer) nextRenderer;

      if (viewRenderer.getRenderer() instanceof FieldRenderer) {
        FieldRenderer fieldRenderer = (FieldRenderer) viewRenderer.getRenderer();
        less.list.setSidewaysSteps(fieldRenderer.getWidths().getSteps());
      }
    } else {
      less.list.setSidewaysSteps(null);
    }

    less.list.setSidewaysMove(10);

    less.setRenderer(nextRenderer);
  }

  CursesListRenderer<Line> getNextRenderer() {
    CursesListRenderer<Line> r = (CursesListRenderer<Line>) renderers.remove(0);
    renderers.add(r);

    return r;
  }

  public Collection<KeyBinding> getDescription() {
    return Collections.singleton(new KeyBinding(new InputChar('r'), "View", "Next Renderer"));
  }
}
TOP

Related Classes of com.baulsupp.kolja.log.viewer.commands.RendererCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.