X-Git-Url: http://git.nikiroo.be/?p=jvcard.git;a=blobdiff_plain;f=src%2Fcom%2Fgooglecode%2Flanterna%2Fgui2%2FAbstractBasePane.java;fp=src%2Fcom%2Fgooglecode%2Flanterna%2Fgui2%2FAbstractBasePane.java;h=0000000000000000000000000000000000000000;hp=0cd47bb3cf3cf6788df5becdc2faaa2b929fb8b7;hb=f06c81000632cfb5f525ca458f719338f55f9f66;hpb=a73a906356c971b080c36368e71a15d87e8b8d31 diff --git a/src/com/googlecode/lanterna/gui2/AbstractBasePane.java b/src/com/googlecode/lanterna/gui2/AbstractBasePane.java deleted file mode 100644 index 0cd47bb..0000000 --- a/src/com/googlecode/lanterna/gui2/AbstractBasePane.java +++ /dev/null @@ -1,290 +0,0 @@ -/* - * This file is part of lanterna (http://code.google.com/p/lanterna/). - * - * lanterna is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Copyright (C) 2010-2015 Martin - */ -package com.googlecode.lanterna.gui2; - -import com.googlecode.lanterna.TerminalPosition; -import com.googlecode.lanterna.TerminalSize; -import com.googlecode.lanterna.input.KeyStroke; -import com.googlecode.lanterna.input.KeyType; -import com.googlecode.lanterna.input.MouseAction; - -/** - * This abstract implementation of {@code BasePane} has the common code shared by all different concrete - * implementations. - */ -public abstract class AbstractBasePane implements BasePane { - protected final ContentHolder contentHolder; - protected InteractableLookupMap interactableLookupMap; - private Interactable focusedInteractable; - private boolean invalid; - private boolean strictFocusChange; - private boolean enableDirectionBasedMovements; - - protected AbstractBasePane() { - this.contentHolder = new ContentHolder(); - this.interactableLookupMap = new InteractableLookupMap(new TerminalSize(80, 25)); - this.invalid = false; - this.strictFocusChange = false; - this.enableDirectionBasedMovements = true; - } - - @Override - public boolean isInvalid() { - return invalid || contentHolder.isInvalid(); - } - - @Override - public void invalidate() { - invalid = true; - - //Propagate - contentHolder.invalidate(); - } - - @Override - public void draw(TextGUIGraphics graphics) { - graphics.applyThemeStyle(graphics.getThemeDefinition(Window.class).getNormal()); - graphics.fill(' '); - contentHolder.draw(graphics); - - if(!interactableLookupMap.getSize().equals(graphics.getSize())) { - interactableLookupMap = new InteractableLookupMap(graphics.getSize()); - } else { - interactableLookupMap.reset(); - } - contentHolder.updateLookupMap(interactableLookupMap); - //interactableLookupMap.debug(); - invalid = false; - } - - @Override - public boolean handleInput(KeyStroke key) { - if(key.getKeyType() == KeyType.MouseEvent) { - MouseAction mouseAction = (MouseAction)key; - TerminalPosition localCoordinates = fromGlobal(mouseAction.getPosition()); - Interactable interactable = interactableLookupMap.getInteractableAt(localCoordinates); - interactable.handleInput(key); - } - else if(focusedInteractable != null) { - Interactable next = null; - Interactable.FocusChangeDirection direction = Interactable.FocusChangeDirection.TELEPORT; //Default - Interactable.Result result = focusedInteractable.handleInput(key); - if(!enableDirectionBasedMovements) { - if(result == Interactable.Result.MOVE_FOCUS_DOWN || result == Interactable.Result.MOVE_FOCUS_RIGHT) { - result = Interactable.Result.MOVE_FOCUS_NEXT; - } - else if(result == Interactable.Result.MOVE_FOCUS_UP || result == Interactable.Result.MOVE_FOCUS_LEFT) { - result = Interactable.Result.MOVE_FOCUS_PREVIOUS; - } - } - switch (result) { - case HANDLED: - return true; - case UNHANDLED: - //Filter the event recursively through all parent containers until we hit null; give the containers - //a chance to absorb the event - Container parent = focusedInteractable.getParent(); - while(parent != null) { - if(parent.handleInput(key)) { - return true; - } - parent = parent.getParent(); - } - return false; - case MOVE_FOCUS_NEXT: - next = contentHolder.nextFocus(focusedInteractable); - if(next == null) { - next = contentHolder.nextFocus(null); - } - direction = Interactable.FocusChangeDirection.NEXT; - break; - case MOVE_FOCUS_PREVIOUS: - next = contentHolder.previousFocus(focusedInteractable); - if(next == null) { - next = contentHolder.previousFocus(null); - } - direction = Interactable.FocusChangeDirection.PREVIOUS; - break; - case MOVE_FOCUS_DOWN: - next = interactableLookupMap.findNextDown(focusedInteractable); - direction = Interactable.FocusChangeDirection.DOWN; - if(next == null && !strictFocusChange) { - next = contentHolder.nextFocus(focusedInteractable); - direction = Interactable.FocusChangeDirection.NEXT; - } - break; - case MOVE_FOCUS_LEFT: - next = interactableLookupMap.findNextLeft(focusedInteractable); - direction = Interactable.FocusChangeDirection.LEFT; - break; - case MOVE_FOCUS_RIGHT: - next = interactableLookupMap.findNextRight(focusedInteractable); - direction = Interactable.FocusChangeDirection.RIGHT; - break; - case MOVE_FOCUS_UP: - next = interactableLookupMap.findNextUp(focusedInteractable); - direction = Interactable.FocusChangeDirection.UP; - if(next == null && !strictFocusChange) { - next = contentHolder.previousFocus(focusedInteractable); - direction = Interactable.FocusChangeDirection.PREVIOUS; - } - break; - } - if(next != null) { - setFocusedInteractable(next, direction); - } - return true; - } - return false; - } - - @Override - public Component getComponent() { - return contentHolder.getComponent(); - } - - @Override - public void setComponent(Component component) { - contentHolder.setComponent(component); - } - - @Override - public Interactable getFocusedInteractable() { - return focusedInteractable; - } - - @Override - public TerminalPosition getCursorPosition() { - if(focusedInteractable == null) { - return null; - } - TerminalPosition position = focusedInteractable.getCursorLocation(); - if(position == null) { - return null; - } - //Don't allow the component to set the cursor outside of its own boundaries - if(position.getColumn() < 0 || - position.getRow() < 0 || - position.getColumn() >= focusedInteractable.getSize().getColumns() || - position.getRow() >= focusedInteractable.getSize().getRows()) { - return null; - } - return focusedInteractable.toBasePane(position); - } - - @Override - public void setFocusedInteractable(Interactable toFocus) { - setFocusedInteractable(toFocus, - toFocus != null ? - Interactable.FocusChangeDirection.TELEPORT : Interactable.FocusChangeDirection.RESET); - } - - protected void setFocusedInteractable(Interactable toFocus, Interactable.FocusChangeDirection direction) { - if(focusedInteractable == toFocus) { - return; - } - if(focusedInteractable != null) { - focusedInteractable.onLeaveFocus(direction, focusedInteractable); - } - Interactable previous = focusedInteractable; - focusedInteractable = toFocus; - if(toFocus != null) { - toFocus.onEnterFocus(direction, previous); - } - invalidate(); - } - - @Override - public void setStrictFocusChange(boolean strictFocusChange) { - this.strictFocusChange = strictFocusChange; - } - - @Override - public void setEnableDirectionBasedMovements(boolean enableDirectionBasedMovements) { - this.enableDirectionBasedMovements = enableDirectionBasedMovements; - } - - protected class ContentHolder extends AbstractComposite { - @Override - public void setComponent(Component component) { - if(getComponent() == component) { - return; - } - setFocusedInteractable(null); - super.setComponent(component); - if(focusedInteractable == null && component instanceof Interactable) { - setFocusedInteractable((Interactable)component); - } - else if(focusedInteractable == null && component instanceof Container) { - setFocusedInteractable(((Container)component).nextFocus(null)); - } - } - - public boolean removeComponent(Component component) { - boolean removed = super.removeComponent(component); - if (removed) { - focusedInteractable = null; - } - return removed; - } - - @Override - public TextGUI getTextGUI() { - return AbstractBasePane.this.getTextGUI(); - } - - @Override - protected ComponentRenderer createDefaultRenderer() { - return new ComponentRenderer() { - @Override - public TerminalSize getPreferredSize(Container component) { - Component subComponent = getComponent(); - if(subComponent == null) { - return TerminalSize.ZERO; - } - return subComponent.getPreferredSize(); - } - - @Override - public void drawComponent(TextGUIGraphics graphics, Container component) { - Component subComponent = getComponent(); - if(subComponent == null) { - return; - } - subComponent.draw(graphics); - } - }; - } - - @Override - public TerminalPosition toGlobal(TerminalPosition position) { - return AbstractBasePane.this.toGlobal(position); - } - - @Override - public TerminalPosition toBasePane(TerminalPosition position) { - return position; - } - - @Override - public BasePane getBasePane() { - return AbstractBasePane.this; - } - } -}