Search in sources :

Example 81 with FileHandle

use of com.badlogic.gdx.files.FileHandle in project skin-composer by raeleus.

the class ProjectData method getRecentFiles.

public Array<RecentFile> getRecentFiles() {
    Array<RecentFile> returnValue = new Array<>();
    int maxIndex = Math.min(MAX_RECENT_FILES, generalPref.getInteger("recentFilesCount", 0));
    for (int i = 0; i < maxIndex; i++) {
        String path = generalPref.getString("recentFile" + i);
        FileHandle file = new FileHandle(path);
        RecentFile recentFile = new RecentFile();
        recentFile.fileHandle = file;
        recentFile.name = isFullPathInRecentFiles() ? file.path() : file.nameWithoutExtension();
        if (file.exists()) {
            returnValue.add(recentFile);
        }
    }
    return returnValue;
}
Also used : FileHandle(com.badlogic.gdx.files.FileHandle) Lwjgl3FileHandle(com.badlogic.gdx.backends.lwjgl3.Lwjgl3FileHandle)

Example 82 with FileHandle

use of com.badlogic.gdx.files.FileHandle in project skin-composer by raeleus.

the class ProjectData method putRecentFile.

public void putRecentFile(String filePath) {
    if (Gdx.files.absolute(filePath).exists()) {
        Array<RecentFile> recentFiles = getRecentFiles();
        Iterator<RecentFile> iter = recentFiles.iterator();
        while (iter.hasNext()) {
            RecentFile recentFile = iter.next();
            if (recentFile.fileHandle.toString().equals(filePath)) {
                iter.remove();
            }
        }
        RecentFile newFile = new RecentFile();
        newFile.fileHandle = new FileHandle(filePath);
        newFile.name = newFile.fileHandle.nameWithoutExtension();
        recentFiles.add(newFile);
        while (recentFiles.size > MAX_RECENT_FILES) {
            recentFiles.removeIndex(0);
        }
        int size = Math.min(MAX_RECENT_FILES, recentFiles.size);
        generalPref.putInteger("recentFilesCount", size);
        for (int i = 0; i < size; i++) {
            RecentFile recentFile = recentFiles.get(i);
            generalPref.putString("recentFile" + i, recentFile.fileHandle.toString());
        }
        generalPref.flush();
        rootTable.updateRecentFiles();
    }
}
Also used : FileHandle(com.badlogic.gdx.files.FileHandle) Lwjgl3FileHandle(com.badlogic.gdx.backends.lwjgl3.Lwjgl3FileHandle)

Example 83 with FileHandle

use of com.badlogic.gdx.files.FileHandle in project skin-composer by raeleus.

the class ProjectData method moveImportedFiles.

private void moveImportedFiles(FileHandle oldSave, FileHandle newSave) {
    FileHandle tempImportFolder = Main.appFolder.child("temp/" + getId() + "_data/");
    FileHandle localImportFolder;
    if (oldSave != null) {
        localImportFolder = oldSave.sibling(oldSave.nameWithoutExtension() + "_data/");
    } else {
        localImportFolder = null;
    }
    FileHandle targetFolder = newSave.sibling(newSave.nameWithoutExtension() + "_data/");
    for (DrawableData drawableData : atlasData.getDrawables()) {
        if (drawableData.file != null && drawableData.file.exists()) {
            targetFolder.mkdirs();
            // drawable files in the temp folder
            if (drawableData.file.parent().equals(tempImportFolder)) {
                drawableData.file.moveTo(targetFolder);
                drawableData.file = targetFolder.child(drawableData.file.name());
            } else // drawable files in the folder next to the old save
            if (localImportFolder != null && !localImportFolder.equals(targetFolder) && drawableData.file.parent().equals(localImportFolder)) {
                drawableData.file.copyTo(targetFolder);
                drawableData.file = targetFolder.child(drawableData.file.name());
            }
        }
    }
    for (DrawableData drawableData : atlasData.getFontDrawables()) {
        if (drawableData.file != null && drawableData.file.exists()) {
            targetFolder.mkdirs();
            // drawable files in the temp folder
            if (drawableData.file.parent().equals(tempImportFolder)) {
                drawableData.file.moveTo(targetFolder);
                drawableData.file = targetFolder.child(drawableData.file.name());
            } else // drawable files in the folder next to the old save
            if (localImportFolder != null && !localImportFolder.equals(targetFolder) && drawableData.file.parent().equals(localImportFolder)) {
                drawableData.file.copyTo(targetFolder);
                drawableData.file = targetFolder.child(drawableData.file.name());
            }
        }
    }
    for (FontData fontData : jsonData.getFonts()) {
        if (fontData.file.exists()) {
            targetFolder.mkdirs();
            // font files in the temp folder
            if (fontData.file.parent().equals(tempImportFolder)) {
                fontData.file.moveTo(targetFolder);
                fontData.file = targetFolder.child(fontData.file.name());
            } else // font files in the data folder next to the old save
            if (localImportFolder != null && !localImportFolder.equals(targetFolder) && fontData.file.parent().equals(localImportFolder)) {
                fontData.file.copyTo(targetFolder);
                fontData.file = targetFolder.child(fontData.file.name());
            }
        }
    }
    for (FreeTypeFontData fontData : jsonData.getFreeTypeFonts()) {
        if (fontData.file != null && fontData.file.exists()) {
            targetFolder.mkdirs();
            // font files in the temp folder
            if (fontData.file.parent().equals(tempImportFolder)) {
                fontData.file.moveTo(targetFolder);
                fontData.file = targetFolder.child(fontData.file.name());
            } else // font files in the data folder next to the old save
            if (localImportFolder != null && !localImportFolder.equals(targetFolder) && fontData.file.parent().equals(localImportFolder)) {
                fontData.file.copyTo(targetFolder);
                fontData.file = targetFolder.child(fontData.file.name());
            }
        }
    }
}
Also used : FileHandle(com.badlogic.gdx.files.FileHandle) Lwjgl3FileHandle(com.badlogic.gdx.backends.lwjgl3.Lwjgl3FileHandle)

Example 84 with FileHandle

use of com.badlogic.gdx.files.FileHandle in project skin-composer by raeleus.

the class ProjectData method correctFilePaths.

private void correctFilePaths() {
    FileHandle targetFolder = saveFile.sibling(saveFile.nameWithoutExtension() + "_data/");
    boolean resourcesRelative = projectData.areResourcesRelative();
    if (targetFolder.exists()) {
        for (DrawableData drawableData : atlasData.getDrawables()) {
            if (drawableData.type != DrawableType.PIXEL && (resourcesRelative || drawableData.file != null && !drawableData.file.exists())) {
                FileHandle newFile = targetFolder.child(drawableData.file.name());
                if (newFile.exists()) {
                    drawableData.file = newFile;
                }
            }
        }
        for (DrawableData drawableData : atlasData.getFontDrawables()) {
            if (resourcesRelative || drawableData.file != null && !drawableData.file.exists()) {
                FileHandle newFile = targetFolder.child(drawableData.file.name());
                if (newFile.exists()) {
                    drawableData.file = newFile;
                }
            }
        }
        for (FontData fontData : jsonData.getFonts()) {
            if (resourcesRelative || !fontData.file.exists()) {
                FileHandle newFile = targetFolder.child(fontData.file.name());
                if (newFile.exists()) {
                    fontData.file = newFile;
                }
            }
        }
    }
}
Also used : FileHandle(com.badlogic.gdx.files.FileHandle) Lwjgl3FileHandle(com.badlogic.gdx.backends.lwjgl3.Lwjgl3FileHandle)

Example 85 with FileHandle

use of com.badlogic.gdx.files.FileHandle in project skin-composer by raeleus.

the class Dialog9Patch method populate.

private void populate() {
    var root = getContentTable();
    root.clear();
    root.pad(10);
    var horizontalGroup = new HorizontalGroup();
    horizontalGroup.space(5.0f);
    horizontalGroup.wrap();
    horizontalGroup.wrapSpace(5.0f);
    horizontalGroup.center();
    root.add(horizontalGroup).growX();
    var textButton = new TextButton("Load Image", getSkin());
    horizontalGroup.addActor(textButton);
    textButton.addListener(handListener);
    textButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            showLoadImageDialog();
        }
    });
    textButton = new TextButton("Reset", getSkin());
    textButton.setName("reset-button");
    horizontalGroup.addActor(textButton);
    textButton.addListener(handListener);
    textButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinnerItem = (Spinner) findActor("spinner-padding-left");
            spinnerItem.setValue(ninePatchLeftOriginal);
            widget.setPaddingLeft(ninePatchLeftOriginal);
            ninePatchLeft = ninePatchLeftOriginal;
            spinnerItem = (Spinner) findActor("spinner-padding-right");
            spinnerItem.setValue(ninePatchRightOriginal);
            widget.setPaddingRight(ninePatchRightOriginal);
            ninePatchRight = ninePatchRightOriginal;
            spinnerItem = (Spinner) findActor("spinner-padding-bottom");
            spinnerItem.setValue(ninePatchBottomOriginal);
            widget.setPaddingBottom(ninePatchBottomOriginal);
            ninePatchBottom = ninePatchBottomOriginal;
            spinnerItem = (Spinner) findActor("spinner-padding-top");
            spinnerItem.setValue(ninePatchTopOriginal);
            widget.setPaddingTop(ninePatchTopOriginal);
            ninePatchTop = ninePatchTopOriginal;
            spinnerItem = (Spinner) findActor("spinner-content-left");
            spinnerItem.setValue(ninePatchContentLeftOriginal);
            widget.setContentLeft(ninePatchContentLeftOriginal);
            ninePatchContentLeft = ninePatchContentLeftOriginal;
            spinnerItem = (Spinner) findActor("spinner-content-right");
            spinnerItem.setValue(ninePatchContentRightOriginal);
            widget.setContentRight(ninePatchContentRightOriginal);
            ninePatchContentRight = ninePatchContentRightOriginal;
            spinnerItem = (Spinner) findActor("spinner-content-bottom");
            spinnerItem.setValue(ninePatchContentBottomOriginal);
            widget.setContentBottom(ninePatchContentBottomOriginal);
            ninePatchContentBottom = ninePatchContentBottomOriginal;
            spinnerItem = (Spinner) findActor("spinner-content-top");
            spinnerItem.setValue(ninePatchContentTopOriginal);
            widget.setContentTop(ninePatchContentTopOriginal);
            ninePatchContentTop = ninePatchContentTopOriginal;
            updatePreviewSplits();
        }
    });
    textButton = new TextButton("Auto Patches", getSkin());
    textButton.setName("auto-button");
    horizontalGroup.addActor(textButton);
    textButton.addListener(handListener);
    textButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            autoPatches();
        }
    });
    textButton = new TextButton("Load Patches From File", getSkin());
    textButton.setName("load-patches-button");
    horizontalGroup.addActor(textButton);
    textButton.addListener(handListener);
    textButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            showLoadPatchesDialog();
        }
    });
    textButton = new TextButton("Batch Apply to File(s)", getSkin());
    textButton.setName("batch-button");
    horizontalGroup.addActor(textButton);
    textButton.addListener(handListener);
    textButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            showBatchApplyDialog();
        }
    });
    root.row();
    var image = new Image(getSkin(), "welcome-separator");
    root.add(image).growX().space(15.0f);
    image.setScaling(Scaling.stretch);
    var top = new Table();
    top.setTouchable(Touchable.enabled);
    var bottom = new Table();
    bottom.setBackground(getSkin().getDrawable("white"));
    bottom.setTouchable(Touchable.enabled);
    root.row();
    var splitPane = new SplitPane(top, bottom, true, getSkin());
    splitPane.setName("split");
    root.add(splitPane).grow();
    splitPane.addListener(verticalResizeListener);
    var table = new Table();
    top.add(table).growX();
    var spinner = new Spinner(0, 1, true, Spinner.Orientation.HORIZONTAL, getSkin());
    spinner.setName("spinner-padding-left");
    spinner.setValue(ninePatchLeft);
    spinner.setMinimum(0);
    table.add(spinner).expandX().left().padLeft(50.0f);
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchLeft = spinner.getValueAsInt();
            widget.setPaddingLeft(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(false);
            var otherSpinner = (Spinner) findActor("spinner-padding-right");
            otherSpinner.setMaximum(widget.getRegionWidth() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    var label = new Label("STRETCH REGION", getSkin());
    table.add(label);
    spinner = new Spinner(0, 1, true, Spinner.Orientation.HORIZONTAL_FLIPPED, getSkin(), "horizontal-reversed");
    spinner.setName("spinner-padding-right");
    spinner.setValue(ninePatchRight);
    spinner.setMinimum(0);
    table.add(spinner).expandX().right().padRight(50.0f);
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchRight = spinner.getValueAsInt();
            widget.setPaddingRight(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(false);
            var otherSpinner = (Spinner) findActor("spinner-padding-left");
            otherSpinner.setMaximum(widget.getRegionWidth() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    top.row();
    table = new Table();
    top.add(table).grow();
    var subTable = new Table();
    table.add(subTable).growY();
    spinner = new Spinner(0, 1, true, Spinner.Orientation.VERTICAL_FLIPPED, getSkin(), "vertical-reversed");
    spinner.setName("spinner-padding-top");
    spinner.setValue(ninePatchTop);
    spinner.setMinimum(0);
    subTable.add(spinner).expandY().top();
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchTop = spinner.getValueAsInt();
            widget.setPaddingTop(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(false);
            var otherSpinner = (Spinner) findActor("spinner-padding-bottom");
            otherSpinner.setMaximum(widget.getRegionHeight() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    subTable.row();
    var group = new Table();
    group.setTransform(true);
    subTable.add(group).size(0).minHeight(100.0f);
    label = new Label("STRETCH REGION", getSkin());
    group.add(label);
    group.setOriginY(50.0f);
    group.rotateBy(90.0f);
    subTable.row();
    spinner = new Spinner(0, 1, true, Spinner.Orientation.VERTICAL, getSkin(), "vertical");
    spinner.setName("spinner-padding-bottom");
    spinner.setValue(ninePatchBottom);
    spinner.setMinimum(0);
    subTable.add(spinner).expandY().bottom();
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchBottom = spinner.getValueAsInt();
            widget.setPaddingBottom(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(false);
            var otherSpinner = (Spinner) findActor("spinner-padding-top");
            otherSpinner.setMaximum(widget.getRegionHeight() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    var ninePatchWidget = new NinePatchWidget(getSkin());
    ninePatchWidget.setName("ninePatchWidget");
    ninePatchWidget.setTouchable(Touchable.enabled);
    table.add(ninePatchWidget).grow().pad(5.0f);
    ninePatchWidget.getPaddingButton().addListener(handListener);
    ninePatchWidget.addListener((NinePatchWidget.HandleType handle, int value) -> {
        switch(handle) {
            case PADDING_LEFT:
                var spinnerItem = (Spinner) findActor("spinner-padding-left");
                spinnerItem.setValue(value);
                ninePatchLeft = value;
                var otherSpinner = (Spinner) findActor("spinner-padding-right");
                otherSpinner.setMaximum(ninePatchWidget.getRegionWidth() - value);
                break;
            case PADDING_RIGHT:
                spinnerItem = (Spinner) findActor("spinner-padding-right");
                spinnerItem.setValue(value);
                ninePatchRight = value;
                otherSpinner = (Spinner) findActor("spinner-padding-left");
                otherSpinner.setMaximum(ninePatchWidget.getRegionWidth() - value);
                break;
            case PADDING_BOTTOM:
                spinnerItem = (Spinner) findActor("spinner-padding-bottom");
                spinnerItem.setValue(value);
                ninePatchBottom = value;
                otherSpinner = (Spinner) findActor("spinner-padding-top");
                otherSpinner.setMaximum(ninePatchWidget.getRegionHeight() - value);
                break;
            case PADDING_TOP:
                spinnerItem = (Spinner) findActor("spinner-padding-top");
                spinnerItem.setValue(value);
                ninePatchTop = value;
                otherSpinner = (Spinner) findActor("spinner-padding-bottom");
                otherSpinner.setMaximum(ninePatchWidget.getRegionHeight() - value);
                break;
            case CONTENT_LEFT:
                spinnerItem = (Spinner) findActor("spinner-content-left");
                spinnerItem.setValue(value);
                ninePatchContentLeft = value;
                otherSpinner = (Spinner) findActor("spinner-content-right");
                otherSpinner.setMaximum(ninePatchWidget.getRegionWidth() - value);
                break;
            case CONTENT_RIGHT:
                spinnerItem = (Spinner) findActor("spinner-content-right");
                spinnerItem.setValue(value);
                ninePatchContentRight = value;
                otherSpinner = (Spinner) findActor("spinner-content-left");
                otherSpinner.setMaximum(ninePatchWidget.getRegionWidth() - value);
                break;
            case CONTENT_BOTTOM:
                spinnerItem = (Spinner) findActor("spinner-content-bottom");
                spinnerItem.setValue(value);
                ninePatchContentBottom = value;
                otherSpinner = (Spinner) findActor("spinner-content-top");
                otherSpinner.setMaximum(ninePatchWidget.getRegionHeight() - value);
                break;
            case CONTENT_TOP:
                spinnerItem = (Spinner) findActor("spinner-content-top");
                spinnerItem.setValue(value);
                ninePatchContentTop = value;
                otherSpinner = (Spinner) findActor("spinner-content-bottom");
                otherSpinner.setMaximum(ninePatchWidget.getRegionHeight() - value);
                break;
        }
        updatePreviewSplits();
    });
    var inputListener = new InputListener() {

        @Override
        public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
            getStage().setScrollFocus(ninePatchWidget);
        }

        @Override
        public boolean scrolled(InputEvent event, float x, float y, float amountX, float amountY) {
            var slider = (Slider) findActor("top-zoom");
            slider.setValue(slider.getValue() - amountY * 3);
            return true;
        }
    };
    ninePatchWidget.addCaptureListener(inputListener);
    subTable = new Table();
    table.add(subTable).growY();
    spinner = new Spinner(0, 1, true, Spinner.Orientation.VERTICAL_FLIPPED, getSkin(), "vertical-reversed");
    spinner.setName("spinner-content-top");
    spinner.setValue(ninePatchContentTop);
    spinner.setMinimum(0);
    subTable.add(spinner).expandY().top();
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchContentTop = spinner.getValueAsInt();
            widget.setContentTop(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(true);
            var otherSpinner = (Spinner) findActor("spinner-content-bottom");
            otherSpinner.setMaximum(widget.getRegionHeight() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    subTable.row();
    group = new Table();
    group.setTransform(true);
    subTable.add(group).size(0).minHeight(100.0f);
    label = new Label("CONTENT", getSkin());
    group.add(label);
    group.setOriginY(50.0f);
    group.rotateBy(-90);
    subTable.row();
    spinner = new Spinner(0, 1, true, Spinner.Orientation.VERTICAL, getSkin(), "vertical");
    spinner.setName("spinner-content-bottom");
    spinner.setValue(ninePatchContentBottom);
    spinner.setMinimum(0);
    subTable.add(spinner).expandY().bottom();
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchContentBottom = spinner.getValueAsInt();
            widget.setContentBottom(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(true);
            var otherSpinner = (Spinner) findActor("spinner-content-top");
            otherSpinner.setMaximum(widget.getRegionHeight() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    top.row().padBottom(15.0f);
    table = new Table();
    top.add(table).growX();
    spinner = new Spinner(0, 1, true, Spinner.Orientation.HORIZONTAL, getSkin());
    spinner.setName("spinner-content-left");
    spinner.setValue(ninePatchContentLeft);
    spinner.setMinimum(0);
    table.add(spinner).expandX().left().padLeft(50.0f);
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchContentLeft = spinner.getValueAsInt();
            widget.setContentLeft(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(true);
            var otherSpinner = (Spinner) findActor("spinner-content-right");
            otherSpinner.setMaximum(widget.getRegionWidth() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    label = new Label("CONTENT", getSkin());
    table.add(label);
    spinner = new Spinner(0, 1, true, Spinner.Orientation.HORIZONTAL_FLIPPED, getSkin(), "horizontal-reversed");
    spinner.setName("spinner-content-right");
    spinner.setValue(ninePatchContentRight);
    spinner.setMinimum(0);
    table.add(spinner).expandX().right().padRight(50.0f);
    spinner.getButtonMinus().addListener(handListener);
    spinner.getButtonPlus().addListener(handListener);
    spinner.getTextField().addListener(ibeamListener);
    spinner.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            var spinner = (Spinner) actor;
            ninePatchContentRight = spinner.getValueAsInt();
            widget.setContentRight(spinner.getValueAsInt());
            widget.getPaddingButton().setChecked(true);
            var otherSpinner = (Spinner) findActor("spinner-content-left");
            otherSpinner.setMaximum(widget.getRegionWidth() - spinner.getValueAsInt());
            updatePreviewSplits();
        }
    });
    top.row();
    table = new Table();
    table.pad(5);
    top.add(table).growX();
    table.defaults().space(5);
    var imageButton = new ImageButton(getSkin(), "grid-light");
    imageButton.setName("grid-light");
    imageButton.setProgrammaticChangeEvents(false);
    table.add(imageButton);
    imageButton.addListener(handListener);
    imageButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            if (((ImageButton) actor).isChecked()) {
                widget.setGridType(NinePatchWidget.GridType.LIGHT);
            } else {
                widget.setGridType(NinePatchWidget.GridType.NONE);
            }
            ((ImageButton) findActor("grid-dark")).setChecked(false);
        }
    });
    imageButton = new ImageButton(getSkin(), "grid-dark");
    imageButton.setName("grid-dark");
    imageButton.setProgrammaticChangeEvents(false);
    table.add(imageButton);
    imageButton.addListener(handListener);
    imageButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var widget = (NinePatchWidget) findActor("ninePatchWidget");
            if (((ImageButton) actor).isChecked()) {
                widget.setGridType(NinePatchWidget.GridType.DARK);
            } else {
                widget.setGridType(NinePatchWidget.GridType.NONE);
            }
            ((ImageButton) findActor("grid-light")).setChecked(false);
        }
    });
    imageButton = new ImageButton(getSkin(), "resize");
    table.add(imageButton).expandX().right();
    imageButton.addListener(handListener);
    imageButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            zoomAndRecenter();
        }
    });
    var slider = new Slider(1, 50, 1, false, getSkin(), "zoom-horizontal");
    slider.setName("top-zoom");
    table.add(slider);
    slider.addListener(handListener);
    slider.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var slider = (Slider) findActor("top-zoom");
            ninePatchWidget.setZoom((int) slider.getValue());
        }
    });
    label = new Label("Preview", getSkin(), "title");
    bottom.add(label);
    bottom.row();
    var resizer = new ResizeWidget(null, getSkin());
    resizer.setTouchable(Touchable.enabled);
    resizer.setName("resizer");
    table = new Table();
    resizer.setActor(table);
    if (previewZoomed == null) {
        resizer.setMinWidth(100);
        resizer.setMinHeight(100);
    } else {
        resizer.setMinWidth(previewZoomed.getTotalWidth());
        resizer.setMinHeight(previewZoomed.getTotalHeight());
        table.setBackground(new NinePatchDrawable(previewZoomed));
    }
    resizer.setResizingFromCenter(true);
    resizer.getBottomLeftHandle().addListener(neResizeListener);
    resizer.getBottomRightHandle().addListener(nwResizeListener);
    resizer.getTopLeftHandle().addListener(nwResizeListener);
    resizer.getTopRightHandle().addListener(neResizeListener);
    resizer.getBottomHandle().addListener(verticalResizeListener);
    resizer.getTopHandle().addListener(verticalResizeListener);
    resizer.getLeftHandle().addListener(horizontalResizeListener);
    resizer.getRightHandle().addListener(horizontalResizeListener);
    resizer.addListener(new InputListener() {

        @Override
        public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
            getStage().setScrollFocus(resizer);
        }

        @Override
        public boolean scrolled(InputEvent event, float x, float y, float amountX, float amountY) {
            var slider = (Slider) findActor("bottom-zoom");
            slider.setValue(slider.getValue() - amountY * 5);
            return true;
        }
    });
    var scrollPane = new ScrollPane(resizer, getSkin());
    scrollPane.setName("scroll");
    scrollPane.setFlickScroll(false);
    scrollPane.setFadeScrollBars(false);
    bottom.add(scrollPane).grow();
    bottom.row();
    table = new Table();
    table.padLeft(5);
    table.padRight(5);
    bottom.add(table).growX();
    table.defaults().space(5);
    label = new Label("Content:", getSkin());
    table.add(label);
    var selectBox = new SelectBox<String>(getSkin());
    selectBox.setName("contentSelectBox");
    table.add(selectBox);
    selectBox.setItems("None", "Text", "Color", "Drawable");
    selectBox.addListener(handListener);
    selectBox.getList().addListener(handListener);
    selectBox.getList().addListener(new ClickListener() {

        @Override
        public void clicked(InputEvent event, float x, float y) {
            selectBox.fire(new ChangeListener.ChangeEvent());
        }
    });
    selectBox.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            switch(selectBox.getSelected()) {
                case "None":
                    updatePreviewContentActor(null);
                    break;
                case "Text":
                    dialogFactory.showInputDialog("Text Content", "Enter the text to be displayed inside of the preview:", "Lorem Ipsum", new DialogFactory.InputDialogListener() {

                        @Override
                        public void confirmed(String text) {
                            dialogFactory.showDialogColors(new StyleProperty(), (colorData, pressedCancel) -> {
                                if (colorData == null) {
                                    selectBox.setSelected("None");
                                } else {
                                    var label = new Label(text, getSkin(), "white");
                                    label.setAlignment(Align.center);
                                    label.setColor(colorData.color);
                                    label.setUserObject("Text");
                                    updatePreviewContentActor(label);
                                }
                            }, null);
                        }

                        @Override
                        public void cancelled() {
                            selectBox.setSelected("None");
                        }
                    });
                    break;
                case "Color":
                    dialogFactory.showDialogColors(new StyleProperty(), (colorData, pressedCancel) -> {
                        if (colorData == null) {
                            selectBox.setSelected("None");
                        } else {
                            var image = new Image(getSkin(), "white");
                            image.setScaling(Scaling.stretch);
                            image.setColor(colorData.color);
                            image.setUserObject("Color");
                            updatePreviewContentActor(image);
                        }
                    }, null);
                    break;
                case "Drawable":
                    var dialog = dialogFactory.showDialogDrawables(true, new DialogDrawables.DialogDrawablesListener() {

                        @Override
                        public void confirmed(DrawableData drawable, DialogDrawables dialog) {
                            var image = new Image(drawablePairs.get(drawable));
                            image.setScaling(Scaling.none);
                            image.setUserObject("Drawable");
                            updatePreviewContentActor(image);
                        }

                        @Override
                        public void emptied(DialogDrawables dialog) {
                            selectBox.setSelected("None");
                        }

                        @Override
                        public void cancelled(DialogDrawables dialog) {
                            selectBox.setSelected("None");
                        }
                    }, null);
                    dialog.setShowing9patchButton(false);
                    break;
            }
        }
    });
    imageButton = new ImageButton(getSkin(), "color");
    table.add(imageButton);
    imageButton.addListener(handListener);
    imageButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            dialogFactory.showDialogColorPicker(previewBGcolor, new DialogColorPicker.ColorListener() {

                @Override
                public void selected(Color color) {
                    if (color != null) {
                        previewBGcolor.set(color);
                        bottom.setColor(color);
                    }
                }
            });
        }
    });
    var toolTip = new TextTooltip("Background color for preview pane.", tooltipManager, getSkin());
    imageButton.addListener(toolTip);
    slider = new Slider(1.0f, 100.0f, 1.0f, false, getSkin(), "zoom-horizontal");
    slider.setName("bottom-zoom");
    slider.setValue(1.0f);
    table.add(slider).expandX().right();
    slider.addListener(handListener);
    slider.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            var slider = (Slider) findActor("bottom-zoom");
            var zoom = slider.getValue();
            if (previewZoomed != null) {
                previewZoomed.setLeftWidth(preview.getLeftWidth() * zoom);
                previewZoomed.setRightWidth(preview.getRightWidth() * zoom);
                previewZoomed.setTopHeight(preview.getTopHeight() * zoom);
                previewZoomed.setBottomHeight(preview.getBottomHeight() * zoom);
                if (preview.getPadLeft() != -1) {
                    previewZoomed.setPadLeft(preview.getPadLeft() * zoom);
                }
                if (preview.getPadRight() != -1) {
                    previewZoomed.setPadRight(preview.getPadRight() * zoom);
                }
                if (preview.getPadTop() != -1) {
                    previewZoomed.setPadTop(preview.getPadTop() * zoom);
                }
                if (preview.getPadBottom() != -1) {
                    previewZoomed.setPadBottom(preview.getPadBottom() * zoom);
                }
                var table = new Table();
                resizer.setActor(table);
                resizer.setMinWidth(previewZoomed.getTotalWidth() + previewZoomed.getPadLeft() + preview.getPadRight());
                resizer.setMinHeight(previewZoomed.getTotalHeight() + previewZoomed.getPadTop() + preview.getPadBottom());
                table.setBackground(new NinePatchDrawable(previewZoomed));
                updatePreviewContentActor(previewContentActor);
                if (previewContentActor != null) {
                    var selectBox = (SelectBox<String>) findActor("contentSelectBox");
                    var listeners = new Array<EventListener>(selectBox.getListeners());
                    for (var listener : listeners) {
                        if (listener instanceof ChangeListener) {
                            selectBox.removeListener(listener);
                        }
                    }
                    selectBox.setSelected((String) previewContentActor.getUserObject());
                    for (var listener : listeners) {
                        if (listener instanceof ChangeListener) {
                            selectBox.addListener(listener);
                        }
                    }
                }
            }
        }
    });
    getButtonTable().clearChildren();
    getButtonTable().pad(10);
    getButtonTable().defaults().space(10).minWidth(100);
    textButton = new TextButton("Save", getSkin());
    textButton.setName("save-button");
    getButtonTable().add(textButton);
    textButton.addListener(handListener);
    textButton.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeListener.ChangeEvent event, Actor actor) {
            dialogFactory.showDialogLoading(() -> {
                String defaultPath = loadedFile.path();
                if (!defaultPath.toLowerCase(Locale.ROOT).endsWith(".9.png")) {
                    defaultPath = loadedFile.sibling(loadedFile.nameWithoutExtension() + ".9.png").path();
                }
                String[] filterPatterns = { "*.9.png" };
                File file = desktopWorker.saveDialog("Save nine patch file as...", defaultPath, filterPatterns, "Nine Patch files");
                if (file != null) {
                    Gdx.app.postRunnable(() -> {
                        FileHandle fileHandle = new FileHandle(file);
                        if (fileHandle.extension() == null || !fileHandle.name().toLowerCase(Locale.ROOT).endsWith(".9.png")) {
                            fileHandle = fileHandle.sibling(fileHandle.nameWithoutExtension() + ".9.png");
                        }
                        saveNinePatch(fileHandle);
                        projectData.setLastDrawablePath(fileHandle.parent().path() + "/");
                        hide();
                        for (var listener : listeners) {
                            listener.fileSaved(fileHandle);
                        }
                    });
                }
            });
        }
    });
    textButton = new TextButton("Cancel", getSkin());
    button(textButton, false);
    textButton.addListener(handListener);
    key(Keys.ESCAPE, false);
    updateDisabled();
}
Also used : FileHandle(com.badlogic.gdx.files.FileHandle) MathUtils(com.badlogic.gdx.math.MathUtils) Array(com.badlogic.gdx.utils.Array) Scaling(com.badlogic.gdx.utils.Scaling) Utils(com.ray3k.skincomposer.utils.Utils) Spinner(com.ray3k.stripe.Spinner) Gdx(com.badlogic.gdx.Gdx) Texture(com.badlogic.gdx.graphics.Texture) ResizeWidget(com.ray3k.stripe.ResizeWidget) Locale(java.util.Locale) NinePatchWidget(com.ray3k.skincomposer.NinePatchWidget) TextureRegion(com.badlogic.gdx.graphics.g2d.TextureRegion) PixmapIO(com.badlogic.gdx.graphics.PixmapIO) com.badlogic.gdx.scenes.scene2d(com.badlogic.gdx.scenes.scene2d) NinePatch(com.badlogic.gdx.graphics.g2d.NinePatch) DrawableData(com.ray3k.skincomposer.data.DrawableData) com.badlogic.gdx.scenes.scene2d.ui(com.badlogic.gdx.scenes.scene2d.ui) Pixmap(com.badlogic.gdx.graphics.Pixmap) FilesDroppedListener(com.ray3k.skincomposer.FilesDroppedListener) Align(com.badlogic.gdx.utils.Align) Color(com.badlogic.gdx.graphics.Color) com.badlogic.gdx.scenes.scene2d.utils(com.badlogic.gdx.scenes.scene2d.utils) File(java.io.File) Keys(com.badlogic.gdx.Input.Keys) ResizeFourArrowListener(com.ray3k.skincomposer.ResizeFourArrowListener) Main(com.ray3k.skincomposer.Main) ObjectMap(com.badlogic.gdx.utils.ObjectMap) StyleProperty(com.ray3k.skincomposer.data.StyleProperty) Spinner(com.ray3k.stripe.Spinner) FileHandle(com.badlogic.gdx.files.FileHandle) DrawableData(com.ray3k.skincomposer.data.DrawableData) Color(com.badlogic.gdx.graphics.Color) StyleProperty(com.ray3k.skincomposer.data.StyleProperty) NinePatchWidget(com.ray3k.skincomposer.NinePatchWidget) ResizeWidget(com.ray3k.stripe.ResizeWidget) File(java.io.File)

Aggregations

FileHandle (com.badlogic.gdx.files.FileHandle)207 File (java.io.File)62 IOException (java.io.IOException)38 Array (com.badlogic.gdx.utils.Array)36 GdxRuntimeException (com.badlogic.gdx.utils.GdxRuntimeException)28 BitmapFont (com.badlogic.gdx.graphics.g2d.BitmapFont)16 TextureAtlasData (com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData)16 Texture (com.badlogic.gdx.graphics.Texture)15 TextureRegion (com.badlogic.gdx.graphics.g2d.TextureRegion)13 ChangeListener (com.badlogic.gdx.scenes.scene2d.utils.ChangeListener)12 ArrayList (java.util.ArrayList)12 Region (com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData.Region)11 Color (com.badlogic.gdx.graphics.Color)10 TextureAtlas (com.badlogic.gdx.graphics.g2d.TextureAtlas)10 IntArray (com.badlogic.gdx.utils.IntArray)10 Pixmap (com.badlogic.gdx.graphics.Pixmap)9 BitmapFontData (com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData)9 Element (com.badlogic.gdx.utils.XmlReader.Element)9 Locale (java.util.Locale)9 FreeTypeFontGenerator (com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator)8