Skip to content

Commit

Permalink
POC 2
Browse files Browse the repository at this point in the history
  • Loading branch information
mgsx-dev committed Aug 16, 2018
1 parent 15530ad commit ee94b88
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 7 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,5 @@ Thumbs.db
!/ios-moe/xcode/*.xcodeproj/project.pbxproj
/ios-moe/xcode/native/
/bin/

/audio/*.wav
Empty file added audio/.gitkeep
Empty file.
148 changes: 141 additions & 7 deletions src/net/mgsx/pfxr/PFXRScreen.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
package net.mgsx.pfxr;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.ui.ButtonGroup;
import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.ui.TextField.TextFieldListener;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ObjectMap;
Expand Down Expand Up @@ -39,6 +46,8 @@ public class PFXRScreen extends StageScreen
private boolean requestUpdate, requestWaveFormUpdate;
private float updateTimeout;

private String lastPresetName = "";

public PFXRScreen(Array<PfxrControl> controls)
{
Pd.audio.addListener("duration", new PdAdapter(){
Expand Down Expand Up @@ -208,7 +217,8 @@ public void changed(ChangeEvent event, Actor actor) {
root.add(controlsTable);
}

private void savePreset() {
private void savePreset(FileHandle file) {

// TODO user define
Preset preset = new Preset();
for(ControlUI c : sliders){
Expand All @@ -220,17 +230,142 @@ else if(c.group != null)
p.value = c.group.getCheckedIndex();
preset.entries.add(p);
}
new PresetParser().save(preset, Gdx.files.local("../test.txt"));
new PresetParser().save(preset, file);
}

protected void loadPreset() {
// TODO user define
Preset preset = new PresetParser().parse(Gdx.files.local("../presets/bonus.txt"));

final Dialog dialog = new Dialog("Load Preset", skin);
dialog.getStyle().stageBackground = skin.newDrawable("white", new Color(0, 0, 0, .75f));
dialog.setMovable(false);
Table presetList = new Table(skin);
presetList.defaults().fill().padRight(20).padLeft(20);

for(final FileHandle file : Gdx.files.local("../presets").list("txt")){
TextButton btPreset = new TextButton(file.nameWithoutExtension(), skin);
presetList.add(btPreset).row();
btPreset.addListener(new ChangeListener() {

@Override
public void changed(ChangeEvent event, Actor actor) {
loadPreset(file);
dialog.hide();
}
});
}

ScrollPane sp = new ScrollPane(presetList, skin);
sp.setHeight(100);
sp.setScrollingDisabled(true, false);
sp.setForceScroll(false, true);

Table t = new Table();
t.add(sp).growX().height(300);

dialog.getContentTable().add(t);

dialog.button("Cancel", null);

dialog.show(stage);
}

protected void savePreset() {

final TextField tf = new TextField(lastPresetName, skin);

final Dialog dialog = new Dialog("Save Preset", skin){
@Override
protected void result(Object object) {
if(Boolean.TRUE.equals(object)){
String name = tf.getText().trim();
if(!name.isEmpty()){
lastPresetName = name;
savePreset(Gdx.files.local("../presets").child(name + ".txt"));
}
}
}
};
dialog.getStyle().stageBackground = skin.newDrawable("white", new Color(0, 0, 0, .75f));
dialog.setMovable(false);

final Label lb = new Label("File already exists and will be replaced", skin);
lb.setColor(Color.ORANGE);
lb.setVisible(false);

dialog.getContentTable().defaults().fill();
dialog.getContentTable().add(tf).row();
dialog.getContentTable().add(lb).row();

dialog.button("OK", true);
dialog.button("Cancel", false);

dialog.show(stage);

tf.setTextFieldListener(new TextFieldListener() {
@Override
public void keyTyped(TextField textField, char c) {
if(Gdx.files.local("../presets").child(textField.getText().trim() + ".txt").exists()){
lb.setVisible(true);
}else{
lb.setVisible(false);
}
}
});
}

protected void exportAudio() {

final TextField tf = new TextField(lastPresetName, skin);

final Dialog dialog = new Dialog("Export Audio", skin){
@Override
protected void result(Object object) {
if(Boolean.TRUE.equals(object)){
String name = tf.getText().trim();
if(!name.isEmpty()){
lastPresetName = name;
exportAudio(Gdx.files.local("../audio").child(name + ".wav"));
}
}
}
};
dialog.getStyle().stageBackground = skin.newDrawable("white", new Color(0, 0, 0, .75f));
dialog.setMovable(false);

final Label lb = new Label("File already exists and will be replaced", skin);
lb.setColor(Color.ORANGE);
lb.setVisible(false);

dialog.getContentTable().defaults().fill();
dialog.getContentTable().add(tf).row();
dialog.getContentTable().add(lb).row();

dialog.button("OK", true);
dialog.button("Cancel", false);

dialog.show(stage);

tf.setTextFieldListener(new TextFieldListener() {
@Override
public void keyTyped(TextField textField, char c) {
if(Gdx.files.local("../audio").child(textField.getText().trim() + ".wav").exists()){
lb.setVisible(true);
}else{
lb.setVisible(false);
}
}
});
}

protected void loadPreset(FileHandle file) {
Preset preset = new PresetParser().parse(file);
ObjectMap<String, PresetEntry> map = new ObjectMap<String, PresetEntry>();
for(PresetEntry p : preset.entries){
map.put(p.name, p);
}

lastPresetName = file.nameWithoutExtension();

disableEvents = true;
for(ControlUI c : sliders){
PresetEntry p = map.get(c.control.name);
Expand All @@ -249,9 +384,8 @@ else if(c.group != null){
Pd.audio.sendBang("control-change");
}

private void exportAudio() {
// TODO user enter a path ...
Pd.audio.sendSymbol("export-wave", "../test.wav");
private void exportAudio(FileHandle file) {
Pd.audio.sendSymbol("export-wave", file.file().getAbsolutePath());
}

private void randomize() {
Expand Down

0 comments on commit ee94b88

Please sign in to comment.