/*******************************************************************************
* Copyright 2014 Rafael Garcia Moreno.
*
* 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.bladecoder.engineeditor.ui.panels;
import java.io.File;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.Array;
import com.bladecoder.engineeditor.Ctx;
import com.kotcrab.vis.ui.widget.file.FileChooser;
import com.kotcrab.vis.ui.widget.file.FileChooser.Mode;
import com.kotcrab.vis.ui.widget.file.FileChooser.SelectionMode;
import com.kotcrab.vis.ui.widget.file.FileChooser.ViewMode;
import com.kotcrab.vis.ui.widget.file.FileChooserListener;
public class FileInputPanel extends InputPanel {
public enum DialogType {
OPEN_FILE, SAVE_FILE, DIRECTORY
}
private File cd;
private File selected;
private TextButton button;
private final static String FILE_TEXT = "Select file";
private final static String DIR_TEXT = "Select folder";
private FileChooser fileChooser;
public FileInputPanel(Skin skin, String title, String desc, DialogType dialogType) {
this(skin, title, desc, Ctx.project.getProjectDir() != null ? Ctx.project.getProjectDir() : new File("."),
dialogType, true);
}
public FileInputPanel(Skin skin, String title, String desc, DialogType dialogType, boolean mandatory) {
this(skin, title, desc, Ctx.project.getProjectDir() != null ? Ctx.project.getProjectDir() : new File("."),
dialogType, mandatory);
}
public FileInputPanel(Skin skin, String title, String desc, File current, final DialogType dialogType,
boolean mandatory) {
Table t = new Table();
button = new TextButton(dialogType == DialogType.DIRECTORY ? DIR_TEXT : FILE_TEXT, skin, "no-toggled");
t.add(button);
init(skin, title, desc, t,
mandatory, null);
switch (dialogType) {
case DIRECTORY:
fileChooser = new FileChooser(Mode.OPEN);
fileChooser.setSelectionMode(SelectionMode.DIRECTORIES);
break;
case OPEN_FILE:
fileChooser = new FileChooser(Mode.OPEN);
fileChooser.setSelectionMode(SelectionMode.FILES);
break;
case SAVE_FILE:
fileChooser = new FileChooser(Mode.SAVE);
fileChooser.setSelectionMode(SelectionMode.FILES);
break;
default:
break;
}
fileChooser.setSize(Gdx.graphics.getWidth() * 0.7f, Gdx.graphics.getHeight() * 0.7f);
fileChooser.setViewMode(ViewMode.LIST);
button.addListener(new ClickListener() {
public void clicked(InputEvent event, float x, float y) {
if(cd != null)
fileChooser.setDirectory(cd);
getStage().addActor(fileChooser);
fileChooser.setListener(new FileChooserListener() {
@Override
public void selected(Array<FileHandle> files) {
selected = files.get(0).file();
button.setText(selected.getAbsolutePath());
}
@Override
public void canceled() {
}
});
}
});
// Adds clear button if not mandatory
if(!mandatory) {
TextButton clearButton = new TextButton("Clear", skin, "no-toggled");
clearButton.addListener(new ClickListener() {
public void clicked(InputEvent event, float x, float y) {
button.setText(dialogType == DialogType.DIRECTORY ? DIR_TEXT : FILE_TEXT);
selected = null;
}
});
t.add(clearButton);
}
}
public File getFile() {
return selected;
}
@Override
public String getText() {
if (selected != null)
return selected.getAbsolutePath();
else
return "";
}
@Override
public void setText(String text) {
button.setText(text);
selected = new File(text);
cd = new File(text);
}
}