package gui.windows.device; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import game.Hakd; import gui.windows.dialogs.fileops.FileClose; import gui.windows.dialogs.fileops.FileOpen; import gui.windows.dialogs.fileops.FileSave; import other.File; import other.Util; public class TextEdit extends SceneWindow implements FileHandler { private final TextArea display; private final Slider scroll; private final Table buttonTable; private final Button newFile; private final Button open; private final Button save; private final Button close; private File file; public TextEdit(DeviceScene scene) { super(scene); window.setTitle("TextEdit"); buttonTable = new Table(skin); display = new TextArea("", skin.get("text-edit", TextField.TextFieldStyle.class)); scroll = new Slider(1, 1, 1, true, skin); newFile = new Button(skin); open = new Button(skin); save = new Button(skin); close = new TextButton("Close", skin); newFile.add(new Image(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("file"))); open.add(new Image(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("folder"))); save.add(new Image(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("save"))); // close.add(new Image(Assets.linearTextures.findRegion("close"))); buttonTable.add(newFile, open, save, close); window.add(buttonTable).left(); window.row(); window.add(display).expand().fill(); window.add(scroll).expandY().fill(); newFile.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); if (isModified()) { FileSave save = new FileSave(device, TextEdit.this); save.show(TextEdit.this.scene.getStage()); } else { file = null; display.setText(""); } } }); open.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); FileOpen open = new FileOpen(device, TextEdit.this); open.show(TextEdit.this.scene.getStage()); } }); save.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); if (isModified()) { FileSave save = new FileSave(device, TextEdit.this); save.show(TextEdit.this.scene.getStage()); } else { save(); } } }); close.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); if (isModified()) { FileClose close = new FileClose(device, TextEdit.this); close.show(TextEdit.this.scene.getStage()); } else { close(); } } }); display.addListener(new InputListener() { @Override public boolean keyTyped(InputEvent event, char character) { isModified(); updateScroll(); return true; } @Override public boolean scrolled(InputEvent event, float x, float y, int amount) { display.moveCursorLine((int) (scroll.getMaxValue() - scroll.getValue())); return true; } }); scroll.addListener(new InputListener() { @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { display.moveCursorLine((int) (scroll.getMaxValue() - scroll.getValue())); return true; } @Override public void touchDragged(InputEvent event, float x, float y, int pointer) { display.moveCursorLine((int) (scroll.getMaxValue() - scroll.getValue())); } @Override public void touchUp(InputEvent event, float x, float y, int pointer, int button) { display.moveCursorLine((int) (scroll.getMaxValue() - scroll.getValue())); } }); } private void updateScroll() { int max = display.getLines() - (int) (display.getLinesShowing() / 2f); // rounding should not matter too much max = max < 1 ? 1 : max; scroll.setRange(1, max); scroll.setStepSize(1); scroll.setValue(display.getCursorLine() < 1 ? 1 : display.getCursorLine()); } @Override public void openFile(File file) { if (file != null) { this.file = file; display.setText(file.getData()); } } @Override public boolean saveAsFile(File directory, String name) { file = directory.getFile(name); if (file == null) { return false; } else { file.setData(display.getText()); return true; } } @Override public void save() { if (file == null) { return; } file.setData(display.getText()); } @Override public File getFile() { return file; } @Override public boolean isModified() { if (file != null) { if (file.getData().equals(display.getText())) { window.setTitle("TextEdit " + file.getName()); return false; } else { window.setTitle("TextEdit " + file.getName() + " *"); return true; } } else { if (display.getText().isEmpty()) { window.setTitle("TextEdit "); return false; } else { window.setTitle("TextEdit " + " *"); return true; } } } @Override public void close() { super.close(); display.setText(""); file = null; } }