/*
* ******************************************************************************
* * Copyright 2015 See AUTHORS file.
* *
* * 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.uwsoft.editor.view.ui.dialog;
import java.util.HashMap;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.Align;
import com.kotcrab.vis.ui.VisUI;
import com.kotcrab.vis.ui.widget.VisLabel;
import com.kotcrab.vis.ui.widget.VisProgressBar;
import com.kotcrab.vis.ui.widget.VisTable;
import com.kotcrab.vis.ui.widget.VisTextButton;
import com.uwsoft.editor.Overlap2DFacade;
import com.commons.UIDraggablePanel;
import com.uwsoft.editor.utils.ImportUtils;
public class ImportDialog extends UIDraggablePanel {
public static final String CLASS_NAME = "com.uwsoft.editor.view.ui.dialog.ImportDialog";
public static final String BROWSE_BTN_CLICKED = CLASS_NAME + ".BROWSE_BTN_CLICKED";
public static final String CANCEL_BTN_CLICKED = CLASS_NAME + ".CANCEL_BTN_CLICKED";
public static final String IMPORT_BTN_CLICKED = CLASS_NAME + ".IMPORT_BTN_CLICKED";
private Overlap2DFacade facade;
private VisTable mainTable;
private Image dropRegion;
private VisLabel errorLabel;
private VisProgressBar progressBar;
private HashMap<Integer, String> typeNames = new HashMap<>();
ImportDialog() {
super("Import Resources");
setMovable(true);
setModal(false);
addCloseButton();
setStyle(VisUI.getSkin().get("box", WindowStyle.class));
getTitleLabel().setAlignment(Align.left);
setWidth(250);
setHeight(100);
facade = Overlap2DFacade.getInstance();
fillTypeNames();
mainTable = new VisTable();
add(mainTable).fill().expand();
setDroppingView();
errorLabel = new VisLabel("File you selected was too sexy to import");
errorLabel.setColor(Color.RED);
addActor(errorLabel);
errorLabel.getColor().a = 0;
errorLabel.setTouchable(Touchable.disabled);
}
private void fillTypeNames() {
typeNames.clear();
typeNames.put(ImportUtils.TYPE_ANIMATION_PNG_SEQUENCE, "PNG Sequence Animation");
typeNames.put(ImportUtils.TYPE_BITMAP_FONT, "Bitmap Font");
typeNames.put(ImportUtils.TYPE_IMAGE, "Texture");
typeNames.put(ImportUtils.TYPE_TEXTURE_ATLAS, "Texture Atlas");
typeNames.put(ImportUtils.TYPE_PARTICLE_EFFECT, "Particle Effect");
typeNames.put(ImportUtils.TYPE_SPINE_ANIMATION, "Spine Animation");
typeNames.put(ImportUtils.TYPE_SPRITE_ANIMATION_ATLAS, "Animation Atlas Pack");
typeNames.put(ImportUtils.TYPE_SPRITER_ANIMATION, "Spriter Animation");
typeNames.put(ImportUtils.TYPE_TTF_FONT, "TTF Font");
}
@Override
public void hide(Action action) {
super.hide(action);
}
public Image getDropRegion() {
return dropRegion;
}
public boolean checkDropRegionHit(Vector2 mousePos) {
Vector2 pos = new Vector2(mousePos.x-8, mousePos.y-31);
pos = dropRegion.screenToLocalCoordinates(pos);
if(dropRegion.hit(pos.x, pos.y, false) != null) {
return true;
}
dropRegion.getColor().a = 0.3f;
return false;
}
public void dragOver() {
dropRegion.getColor().a = 0.5f;
}
public void dragExit() {
dropRegion.getColor().a = 0.3f;
}
public void setDroppingView() {
mainTable.clear();
VisLabel helpLbl = new VisLabel("Supported file types: images, sprite animations (atlas or img sequence), spine animations, spriter scml, particle effects");
helpLbl.setWidth(260);
helpLbl.setWrap(true);
mainTable.add(helpLbl).width(260).padLeft(5);
mainTable.row().padBottom(5);
dropRegion = new Image(VisUI.getSkin().getDrawable("dropHere"));
mainTable.add(dropRegion).padRight(6).padBottom(6).padTop(10);
mainTable.row().pad(5);
mainTable.add(new VisLabel("or browse files on file system"));
mainTable.row().pad(5);
VisTextButton showFileSelectBtn = new VisTextButton("Browse");
mainTable.add(showFileSelectBtn).width(88);
mainTable.row().pad(5);
initDropListeners(showFileSelectBtn);
dragExit();
pack();
}
public void setImportingView(int type, boolean isMultiple) {
mainTable.clear();
errorLabel.getColor().a = 0;
errorLabel.clearActions();
String typeText = typeNames.get(type);
if(isMultiple) typeText+="'s";
mainTable.add(new VisLabel("Currently importing: " + typeText)).left();
mainTable.row().padBottom(5);
progressBar = new VisProgressBar(0, 100, 1, false);
mainTable.add(progressBar).fillX().padTop(5).width(250);
mainTable.row().padBottom(5);
VisTextButton cancelBtn = new VisTextButton("Cancel");
VisTextButton importBtn = new VisTextButton("Import");
VisTable btnTable = new VisTable();
btnTable.add("").expand().right();
btnTable.add(cancelBtn).width(50).padRight(5);
btnTable.add(importBtn).width(50).right().padRight(3);
pack();
initImportListeners(cancelBtn, importBtn);
}
private void initDropListeners(VisTextButton browseBtn) {
browseBtn.addListener(new ClickListener() {
public void clicked (InputEvent event, float x, float y) {
facade.sendNotification(BROWSE_BTN_CLICKED);
}
});
}
private void initImportListeners(VisTextButton cancelBtn, VisTextButton importBtn) {
cancelBtn.addListener(new ClickListener() {
public void clicked (InputEvent event, float x, float y) {
facade.sendNotification(CANCEL_BTN_CLICKED);
}
});
importBtn.addListener(new ClickListener() {
public void clicked (InputEvent event, float x, float y) {
facade.sendNotification(IMPORT_BTN_CLICKED);
}
});
}
public void showError(int type) {
String text = "";
if(type == ImportUtils.TYPE_UNSUPPORTED || type == ImportUtils.TYPE_UNCKNOWN) {
text = "unsupported file type/types";
}
if(type == ImportUtils.TYPE_MIXED) {
text = "Multiple import types, please use one";
}
errorLabel.setX(getWidth() / 2 - errorLabel.getWidth() / 2);
errorLabel.setY(getHeight() - errorLabel.getHeight() - 87);
errorLabel.setAlignment(Align.center);
errorLabel.setText(text);
errorLabel.addAction(Actions.sequence(Actions.fadeIn(0.3f), Actions.delay(2f), Actions.fadeOut(0.7f)));
dragExit();
}
}