Example usage for com.badlogic.gdx.scenes.scene2d.ui ScrollPane setScrollingDisabled

List of usage examples for com.badlogic.gdx.scenes.scene2d.ui ScrollPane setScrollingDisabled

Introduction

In this page you can find the example usage for com.badlogic.gdx.scenes.scene2d.ui ScrollPane setScrollingDisabled.

Prototype

public void setScrollingDisabled(boolean x, boolean y) 

Source Link

Document

Disables scrolling in a direction.

Usage

From source file:es.eucm.ead.mockup.core.control.screens.gallery.SceneGallery.java

License:Open Source License

@Override
public void create() {
    setPreviousScreen(Screens.PROJECT_MENU);
    navigationGroup = UIAssets.getNavigationGroup();

    super.root = new Group();
    root.setVisible(false);/*from ww w. j  a v a 2  s  .c o  m*/

    topToolbar = new ToolBar(skin);
    ToolBar bottomToolBar = new ToolBar(skin);
    topToolbar.right();

    String search = "Buscar por ...";// TODO use i18n!
    TextField searchtf = new TextField("", skin);
    searchtf.setMessageText(search);
    searchtf.setMaxLength(search.length());
    String[] orders = new String[] { "Ordenar por ...", "nombre A-Z", "nombre Z-A", "ms recientes",
            "menos recientes" };// TODO use
    // i18n!
    SelectBox order = new SelectBox(orders, skin);

    /* filter panel */
    Button applyFilter = new TextButton("Filtrar", skin);

    CheckBox[] tags = new CheckBox[] { new CheckBox("Almohada", skin), new CheckBox("Camilla", skin),
            new CheckBox("Doctor", skin), new CheckBox("Enfermera", skin), new CheckBox("Guantes", skin),
            new CheckBox("Habitacin", skin), new CheckBox("Hospital", skin), new CheckBox("Quirfano", skin),
            new CheckBox("Medicamentos", skin), new CheckBox("Mdico", skin), new CheckBox("Paciente", skin),
            new CheckBox("Vehculo", skin) };
    Table tagList = new Table(skin);
    tagList.left();
    tagList.defaults().left();
    for (int i = 0; i < tags.length; ++i) {
        tagList.add(tags[i]);
        if (i < tags.length - 1)
            tagList.row();
    }
    ScrollPane tagScroll = new ScrollPane(tagList, skin, "opaque");

    final Panel filterPanel = new Panel(skin);
    filterPanel.setVisible(false);
    final float panelw = stagew * .26f, panelx = stagew - panelw;
    filterPanel.add(tagScroll).fill().colspan(3).left();
    filterPanel.row();
    filterPanel.add(applyFilter).colspan(3).expandX();
    filterPanel.setBounds(panelx, topToolbar.getHeight(), panelw, stageh - topToolbar.getHeight() * 2f);

    Button filterButton = new TextButton("Filtrar por tags", skin);
    ClickListener closeFilterListenerTmp = new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            if (filterPanel.isVisible()) {
                mockupController.hide(filterPanel);
            } else {
                mockupController.show(filterPanel);
            }
        }
    };
    applyFilter.addListener(closeFilterListenerTmp);
    filterButton.addListener(closeFilterListenerTmp);

    name = new Label("Galera de escenas", skin);

    topToolbar.add(name).expandX().left().padLeft(UIAssets.NAVIGATION_BUTTON_WIDTH_HEIGHT * 1.1f);
    topToolbar.add(order);
    topToolbar.add(filterButton);
    topToolbar.add(searchtf).width(skin.getFont("default-font").getBounds(search).width + 50); // FIXME
    // hardcoded
    // fixed
    // value
    /***/

    final int COLS = 4, ROWS = 6;
    gridPanel = new GalleryGrid<Actor>(skin, ROWS, COLS, root, new ToolBar[] { topToolbar, bottomToolBar }) {
        @Override
        protected void entityClicked(InputEvent event) {
            Actor target = event.getTarget();
            if (target instanceof Image) {
                if (ProjectMenu.getFROM_INITIAL_SCENE()) {
                    exitAnimation(Screens.PROJECT_MENU);
                } else {
                    SceneEdition.setSCENE_INDEX((Integer) target.getUserObject());
                    exitAnimation(Screens.SCENE_EDITION);
                }
            } else if (target instanceof Label) {
                SceneEdition.setSCENE_INDEX(null);
                exitAnimation(Screens.SCENE_EDITION);
            }
        }
    };
    boolean first = true;
    for (int i = 0; i < ROWS; ++i) {
        for (int j = 0; j < COLS; ++j) {
            if (first) {
                first = false;
                gridPanel.addItem(new TextButton("Imagen en blanco", skin), 0, 0).fill();
            } else {
                int rand = MathUtils.random(Loading.demoScenesThumbnail.length - 1);
                GalleryEntity auxImg = new GalleryEntity(Loading.demoScenesThumbnail[rand]);
                auxImg.setUserObject(Integer.valueOf(rand));
                gridPanel.addItem(auxImg, i, j);
            }
        }
    }
    ScrollPane scrollPane = new ScrollPane(gridPanel);
    scrollPane.setScrollingDisabled(true, false);
    scrollPane.setBounds(0, topToolbar.getHeight(), stagew, stageh - 2 * topToolbar.getHeight());
    final float DEFAULT_ICON_LABEL_SPACE = 10f;
    final Button picButton = new Button(skin);
    picButton.defaults().space(DEFAULT_ICON_LABEL_SPACE);
    Label picLabel = new Label("Nuevo desde cmara", skin);
    Image picImage = new Image(skin.getDrawable("ic_photocamera"));
    picButton.add(picImage);
    picButton.add(picLabel);

    final Button vidButton = new Button(skin);
    vidButton.defaults().space(DEFAULT_ICON_LABEL_SPACE);
    Label vidLabel = new Label("Grabar desde Escena", skin);
    Image vidImage = new Image(skin.getDrawable("ic_videocamera"));
    vidButton.add(vidImage);
    vidButton.add(vidLabel);
    ClickListener mTransitionLIstener = new ClickListener() {

        @Override
        public void clicked(InputEvent event, float x, float y) {
            final Screens next = getNextScreen(event.getListenerActor());
            if (next == null) {
                return;
            }
            exitAnimation(next);
        }

        private Screens getNextScreen(Actor target) {
            Screens next = null;
            if (target == picButton) {
                next = Screens.PICTURE;
            } else if (target == vidButton) {
                next = Screens.RECORDING;
            }
            return next;
        }
    };
    picButton.addListener(mTransitionLIstener);
    vidButton.addListener(mTransitionLIstener);

    bottomToolBar.setY(0);
    bottomToolBar.add(picButton).expandX().left();
    bottomToolBar.add(vidButton).expandX().right();

    root.addActor(topToolbar);
    root.addActor(bottomToolBar);
    root.addActor(scrollPane);
    root.addActor(filterPanel);

    stage.addActor(root);
}

From source file:es.eucm.ead.mockup.core.control.screens.menu.MainMenu.java

License:Open Source License

@Override
public void create() {
    this.optionsGroup = UIAssets.getOptionsGroup();

    super.root = new Group();
    root.setVisible(false);//from   www.  j  a va 2s .c o  m

    final Button newProject, projectGallery;
    newProject = new MenuButton("Nuevo\nproyecto", skin, "ic_newproject", MAIN_MENU_BUTTON_WIDTH_HEIGHT,
            MAIN_MENU_BUTTON_WIDTH_HEIGHT);// TODO
    // use
    // i18n
    // in
    // this
    // class
    projectGallery = new MenuButton("Galera de\nproyectos", skin, "ic_gallery", MAIN_MENU_BUTTON_WIDTH_HEIGHT,
            MAIN_MENU_BUTTON_WIDTH_HEIGHT);// TODO use i18n in this class

    CircularGroup cg = new CircularGroup(halfstageh, 135, 180, true, newProject, projectGallery);
    cg.setX(halfstagew);
    cg.setY(halfstageh);

    // Scan for aviable projects here...
    Table projectsTable = new Table();
    // projectsTable.debug();
    projectsTable.defaults().space(10);
    ScrollPane sp = new ScrollPane(projectsTable);
    sp.setBounds(stagew * .1f, 10, stagew * .8f, stageh * .2f);
    sp.setScrollingDisabled(false, true);
    Texture t = am.get("mockup/temp/proyecto.png", Texture.class);
    t.setFilter(TextureFilter.Linear, TextureFilter.Linear);
    final int PROJECTS = 8;
    final Array<Actor> mProjects = new Array<Actor>(false, PROJECTS);

    // Creating the transition listener
    ClickListener mTransitionListener = new ClickListener() {

        @Override
        public void clicked(InputEvent event, float x, float y) {
            final Screens next = getNextScreen(event.getListenerActor());
            if (next == null) {
                return;
            }
            exitAnimation(next);
        }

        private Screens getNextScreen(Actor target) {
            Screens next = null;
            if (target == newProject) {
                next = Screens.PROJECT_MENU;
            } else if (target == projectGallery) {
                next = Screens.PROJECT_GALLERY;
            } else {
                for (Actor project : mProjects) {
                    if (target == project) {
                        next = Screens.PROJECT_MENU;
                    }
                }
            }
            return next;
        }
    };

    for (int i = 0; i < PROJECTS; ++i) {
        Image im = new Image(t);
        im.addListener(mTransitionListener);

        projectsTable.add(im);

        mProjects.add(im);
    }

    newProject.addListener(mTransitionListener);
    projectGallery.addListener(mTransitionListener);

    Image bg = new Image(skin.getRegion("bg"));
    bg.setTouchable(Touchable.disabled);
    bg.setBounds(0, 0, stagew, stageh);

    root.addActor(bg);
    root.addActor(sp);
    root.addActor(cg);

    Table topName = new Table(skin);
    topName.setBounds(0, stageh - UIAssets.TOOLBAR_HEIGHT, stagew, UIAssets.TOOLBAR_HEIGHT);
    topName.left();
    topName.add("Men principal").padLeft(10f);
    root.addActor(topName);

    stage.addActor(root);

    exitDialog = new Dialog("Salir?", skin, "exit-dialog") {
        protected void result(Object object) {
            if ((Boolean) object) {
                Gdx.app.exit();
            }
        }
    }.text("Ests seguro?").button("Todava no!", false).button("Salir", true).key(Keys.ENTER, true); // TODO use i18n
    exitDialog.setMovable(false);
    exitDialog.padLeft(DEFAULT_DIALOG_PADDING_BOTTON_TOP);
    exitDialog.padRight(DEFAULT_DIALOG_PADDING_BOTTON_TOP);
}

From source file:es.eucm.ead.mockup.core.view.ui.components.edition.ActionsTable.java

License:Open Source License

public ActionsTable(Skin s, final Panel parent, FlagPanel f) {
    super(s);//  w w  w. j  a va 2 s  .co  m

    fPanel = f;
    top = new Table(s);
    bot = new Table(s);
    this.skin = s;

    final String[] pos = { "Activo", "Inactivo" };

    top.defaults().pad(10);
    FlagButton flag = new FlagButton(skin, fPanel);

    top.add(new CheckBox("DAR", s));
    top.add(" a ");
    top.add(new TextButton("Elemento", skin));
    top.add(" cambia si ");
    top.add(flag.getFlag());
    top.add(new SelectBox(pos, skin));

    ScrollPane sp = new ScrollPane(top, skin);
    sp.setupFadeScrollBars(0f, 0f);
    sp.setScrollingDisabled(true, false);

    TextButton accept = new TextButton("Aceptar", skin);
    TextButton newAct = new TextButton("Nueva accin", skin);

    bot.row();
    bot.add(accept).expandX().left();
    bot.add(newAct).expandX().right();

    accept.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            event.cancel();
            AbstractScreen.mockupController.hide(parent);
        }
    });

    newAct.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            event.cancel();
            //add new action
        }
    });

    this.add(sp).expand().fill();
    this.row();
    this.add(bot).expandX().fill().bottom();

    top.debug();
    this.debug();

}

From source file:es.eucm.ead.mockup.core.view.ui.components.edition.FlagPanel.java

License:Open Source License

public FlagPanel(Skin skin) {
    super(skin);//  w w  w .j  av a 2  s  .com

    setHeight(600);
    setWidth(600);

    setVisible(false);
    setModal(false);
    setColor(Color.DARK_GRAY);

    Table top = new Table(skin);
    Table bot = new Table(skin);

    top.defaults().pad(20);

    top.add("Panel de flags, selecciona uno").expandX().fill().center().top();
    top.row();
    top.add(new TextButton("Flag1", skin)).expandX().fill();
    top.add(new TextButton("LuzSala1", skin)).expandX().fill();
    top.add(new TextButton("LuzSala2", skin)).expandX().fill();

    top.row();
    top.add(new TextButton("Flag2", skin)).expandX().fill();
    top.add(new TextButton("Puerta1", skin)).expandX().fill();

    ScrollPane sp = new ScrollPane(top, skin);
    sp.setupFadeScrollBars(0f, 0f);
    sp.setScrollingDisabled(true, false);

    TextButton accept = new TextButton("Aceptar", skin);
    TextButton newAct = new TextButton("Nuevo FLAG", skin);

    bot.row();
    bot.add(accept).expandX().fill().left();
    bot.add(newAct).expandX().fill().right();

    this.add(top).expandY();
    this.row();
    this.add(bot);
}

From source file:es.eucm.ead.mockup.core.view.ui.components.edition.GeneralTable.java

License:Open Source License

public GeneralTable(Skin s, final Panel parent, FlagPanel f) {
    super(s);/*w w w .  j  a va2  s .c  om*/

    fPanel = f;
    top = new Table(s);
    bot = new Table(s);
    this.skin = s;

    top.defaults().pad(10);

    top.add("Elemento solo visible si:").expandX().left().padLeft(50);
    top.row();

    ScrollPane sp = new ScrollPane(top);
    sp.setScrollingDisabled(true, false);

    TextButton accept = new TextButton("Aceptar", skin);
    TextButton newAct = new TextButton("Nueva condicin", skin);

    bot.row();
    bot.add(accept).expandX().left();
    bot.add(newAct).expandX().right();

    accept.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            event.cancel();
            AbstractScreen.mockupController.hide(parent);
        }
    });

    newAct.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            event.cancel();
            top.add(new FragTableVisible(skin, fPanel)).expandX().fill();
        }
    });

    this.add(sp).expand().fill();
    this.row();
    this.add(bot).expandX().fill().bottom();

    top.debug();
    this.debug();

}

From source file:es.eucm.ead.mockup.core.view.ui.components.OptionsPanel.java

License:Open Source License

public OptionsPanel(Skin skin, String styleName) {
    super(skin, styleName);
    this.x = AbstractScreen.stagew * .64f;
    this.y = UIAssets.OPTIONS_BUTTON_WIDTH_HEIGHT;
    setBounds(AbstractScreen.stagew, y, (AbstractScreen.stagew - y) - x, AbstractScreen.stageh - y * 2);
    setVisible(false);/*from  w w w . j  a  v  a  2s . co  m*/
    setModal(true);

    Label cbs1 = new Label("SKINS", skin);
    String skinStyle = "default-radio", line = "- - - - - - - - - - - - -";
    CheckBox cbs2 = new CheckBox("Skin predefinido", skin, skinStyle);
    cbs2.setChecked(true);
    CheckBox cbs3 = new CheckBox("Skin divertido", skin, skinStyle);
    CheckBox cbs4 = new CheckBox("Skin serio", skin, skinStyle);
    CheckBox cbs5 = new CheckBox("Skin profesional", skin, skinStyle);
    Label cbs6 = new Label(line, skin);
    Label cbs7 = new Label("IDIOMAS", skin);
    CheckBox cbs8 = new CheckBox("ES/Espaol", skin, skinStyle);
    cbs8.setChecked(true);
    CheckBox cbs9 = new CheckBox("EN/Ingls", skin, skinStyle);
    CheckBox cbs10 = new CheckBox("FR/Francs", skin, skinStyle);
    Label cbs11 = new Label(line, skin);
    CheckBox cbs12 = new CheckBox("Mostrar ltimos\nproyectos editados", skin, skinStyle);
    cbs12.setChecked(true);

    new ButtonGroup(cbs2, cbs3, cbs4, cbs5);
    new ButtonGroup(cbs8, cbs9, cbs10);

    Table t = new Table();
    t.padTop(DEFAULT_PAD_BOTTON_AND_TOP);
    t.padBottom(DEFAULT_PAD_BOTTON_AND_TOP);
    ScrollPane sp = new ScrollPane(t, skin);
    sp.setupFadeScrollBars(0f, 0f);
    sp.setScrollingDisabled(true, false);
    t.add(cbs1);
    t.row();
    t.add(cbs2).left();
    t.row();
    t.add(cbs3).left();
    t.row();
    t.add(cbs4).left();
    t.row();
    t.add(cbs5).left();
    t.row();
    t.add(cbs6);
    t.row();
    t.add(cbs7);
    t.row();
    t.add(cbs8).left();
    t.row();
    t.add(cbs9).left();
    t.row();
    t.add(cbs10).left();
    t.row();
    t.add(cbs11);
    t.row();
    t.add(cbs12).left();
    add(sp);
}

From source file:io.piotrjastrzebski.sfg.screen.CustomDifficultyScreen.java

License:Open Source License

private Table createTabs() {
    buttons = new Table();
    buttonGroup = new ButtonGroup();
    stack = new Stack();
    tabs = new ArrayMap<String, Tab>();

    addTab(TAB_1, Config.Difficulty.CUSTOM_1);
    addTab(TAB_2, Config.Difficulty.CUSTOM_2);
    addTab(TAB_3, Config.Difficulty.CUSTOM_3);
    showTab(TAB_1);//from   w  w w .  j a  va2s  . c o m

    final Table table = new Table();
    table.add(buttons).pad(0, 10, 10, 10);
    table.row();
    final ScrollPane scrollPane = new ScrollPane(stack);
    // so sliders sort of work
    scrollPane.setCancelTouchFocus(false);
    scrollPane.setScrollingDisabled(true, false);
    table.add(scrollPane).expand().fill();
    //        table.debug();
    return table;
}

From source file:mobi.shad.s3lib.gui.widget.ScrollBoxImageButton.java

License:Apache License

/**
 * @return/*from  www . j a  v  a 2 s.  com*/
 */
public Table getTable() {

    Gui gui = new Gui();
    buttonAct = new Vector<Button>();

    gui.row();
    int j = 0;
    boolean newRow = false;
    for (int i = 0; i < items.size(); i++) {
        newRow = false;
        if (j > buttonX) {
            newRow = true;
            j = 0;
        }
        Button addImgButton = gui.addImgButton(items.get(i), this, "buttonIdx", i, newRow, 1, true, buttonSize,
                "btn" + this.toString(), localChangeListener);
        if (i == value) {
            addImgButton.setChecked(true);
        }
        buttonAct.add(i, addImgButton);
        j++;
    }

    Table table = gui.getTable();
    ScrollPane scrollPane = GuiResource.scrollPane(table, "scroll");
    scrollPane.setFadeScrollBars(true);
    scrollPane.setClamp(true);
    scrollPane.setFlickScroll(true);

    scrollPane.setScrollingDisabled(true, false);

    window = GuiResource.table("window");
    window.row();
    window.add(scrollPane).width(width).height(height);
    window.row();

    return window;
}

From source file:mobi.shad.s3lib.gui.widget.ScrollImageButton.java

License:Apache License

/**
 * //from   ww  w  . j  a va 2 s  . c o  m
 * @return 
 */
public Table getTable() {

    Gui gui = new Gui();
    buttonAct = new Vector<Button>();

    gui.row();
    for (int i = 0; i < items.size(); i++) {
        Button addImgButton = gui.addImgButton(items.get(i), this, "buttonIdx", i, vertical, 1, true,
                buttonSize, "btn" + this.toString(), changeListener);
        if (i == value) {
            addImgButton.setChecked(true);
        }
        buttonAct.add(i, addImgButton);
    }
    if (!vertical) {
        gui.row();
        gui.addLabel("", true, items.size());
    }

    Table table = gui.getTable();
    table.row();
    table.add(" ").colspan(items.size());

    ScrollPane scrollPane = GuiResource.scrollPane(table, "scroll");
    scrollPane.setFadeScrollBars(true);
    scrollPane.setClamp(true);
    scrollPane.setFlickScroll(true);

    if (!vertical) {
        scrollPane.setScrollingDisabled(false, true);
    } else {
        scrollPane.setScrollingDisabled(true, false);
    }

    window = GuiResource.table("window");
    window.row();
    window.add(scrollPane);
    window.row();

    return window;
}

From source file:net.spookygames.gdx.sfx.demo.GdxSfxDemo.java

License:Open Source License

@Override
public void create() {

    /******************/
    /* Initialization */
    /******************/

    prefs = Gdx.app.getPreferences("GdxSfxDemo");

    batch = new SpriteBatch();

    Camera camera = new OrthographicCamera();

    FileHandleResolver resolver = new AbsoluteFileHandleResolver();
    assetManager = new AssetManager(resolver);
    assetManager.setLoader(SfxMusic.class, new SfxMusicLoader(resolver));

    skin = new Skin(Gdx.files.internal("skin/uiskin.json"));

    player = new SfxMusicPlayer();

    /************/
    /* Playlist */
    /************/

    final VerticalGroup playlistGroup = new VerticalGroup();
    playlistGroup.fill().left();/* w w w  .  j  a  v a 2 s  . c  o  m*/

    final Label invitationLabel = new Label("Add some music and let's have fun", skin, "subtitle");
    invitationLabel.setAlignment(Align.center);

    ScrollPane scrollablePlaylistTable = new ScrollPane(playlistGroup, skin);
    scrollablePlaylistTable.setScrollingDisabled(true, false);

    playlistGroup.addActor(invitationLabel);

    /********/
    /* File */
    /********/

    Button fileFinder = new TextButton("Add music", skin, "round");
    fileFinder.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeEvent event, Actor actor) {

            NativeFileChooserConfiguration conf = new NativeFileChooserConfiguration();
            conf.directory = Gdx.files.absolute(prefs.getString("last",
                    Gdx.files.isExternalStorageAvailable() ? Gdx.files.getExternalStoragePath()
                            : (Gdx.files.isLocalStorageAvailable() ? Gdx.files.getLocalStoragePath()
                                    : System.getProperty("user.home"))));
            conf.nameFilter = new FilenameFilter() {
                final String[] extensions = { "wav", "mp3", "ogg" };

                @Override
                public boolean accept(File dir, String name) {
                    int i = name.lastIndexOf('.');
                    if (i > 0 && i < name.length() - 1) {
                        String desiredExtension = name.substring(i + 1).toLowerCase(Locale.ENGLISH);
                        for (String extension : extensions) {
                            if (desiredExtension.equals(extension)) {
                                return true;
                            }
                        }
                    }
                    return false;
                }
            };
            conf.mimeFilter = "audio/*";
            conf.title = "Choose audio file";

            fileChooser.chooseFile(conf, new NativeFileChooserCallback() {
                @Override
                public void onFileChosen(FileHandle file) {
                    if (file == null)
                        return;

                    prefs.putString("last", file.parent().file().getAbsolutePath());
                    MusicParameters parameters = new MusicParameters();
                    parameters.title = file.name();
                    parameters.loadedCallback = new LoadedCallback() {
                        @Override
                        public void finishedLoading(AssetManager assetManager, String fileName,
                                @SuppressWarnings("rawtypes") Class type) {
                            final SfxMusic music = assetManager.get(fileName, SfxMusic.class);
                            if (player.addToPlaylist(music)) {
                                final MusicWidget widget = new MusicWidget(skin, music);
                                playlistGroup.addActor(widget);
                                widget.removeButton.addListener(new ChangeListener() {
                                    @Override
                                    public void changed(ChangeEvent event, Actor actor) {
                                        if (player.removeFromPlaylist(music))
                                            widget.remove();
                                    }
                                });
                            }
                        }
                    };

                    assetManager.load(new AssetDescriptor<SfxMusic>(file, SfxMusic.class, parameters));
                }

                @Override
                public void onCancellation() {
                }

                @Override
                public void onError(Exception exception) {
                }
            });
        }
    });

    /***********/
    /* Control */
    /***********/

    Table controlTable = new Table(skin);

    final Button playPauseButton = new Button(skin, "music");
    playPauseButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (playPauseButton.isChecked()) {
                player.play();
            } else {
                player.pause();
            }
        }
    });

    Button previousButton = new Button(skin, "left");
    previousButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            player.previous();
        }
    });

    Button nextButton = new Button(skin, "right");
    nextButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            player.next();
        }
    });

    final Button muteButton = new Button(skin, "sound");
    muteButton.setChecked(true);
    muteButton.addListener(new ChangeListener() {
        float formerVolume = player.getVolume();

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            float newVolume;
            if (muteButton.isChecked()) {
                // Un-mute
                newVolume = formerVolume;
            } else {
                // Mute
                formerVolume = player.getVolume();
                newVolume = 0f;
            }
            player.setVolume(newVolume);
        }
    });

    final Slider panSlider = new Slider(-1f, 1f, 0.02f, false, skin);
    panSlider.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            player.setPan(panSlider.getValue());
        }
    });
    panSlider.setValue(player.getPan());

    final Slider volumeSlider = new Slider(0f, 1f, 0.01f, false, skin);
    volumeSlider.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            muteButton.setChecked(true);
            player.setVolume(volumeSlider.getValue());
        }
    });
    volumeSlider.setValue(player.getVolume());

    final CheckBox shuffleCheckBox = new CheckBox("Shuffle", skin, "switch");
    shuffleCheckBox.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            player.setShuffleEnabled(shuffleCheckBox.isChecked());
        }
    });
    shuffleCheckBox.setChecked(player.isShuffleEnabled());

    final CheckBox repeatCheckBox = new CheckBox("Repeat", skin, "switch");
    repeatCheckBox.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            player.setRepeatEnabled(repeatCheckBox.isChecked());
        }
    });
    repeatCheckBox.setChecked(player.isRepeatEnabled());

    final Table fadeTable = new Table(skin);

    final Label fadeDurationLabel = new Label("0.0s", skin);
    final Slider fadeDurationSlider = new Slider(0.1f, 5f, 0.1f, false, skin);
    fadeDurationSlider.addListener(new ChangeListener() {
        String format = "%.1fs";

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            float value = fadeDurationSlider.getValue();
            player.setFadeDuration(value);
            fadeDurationLabel.setText(String.format(format, value));
        }
    });
    fadeDurationSlider.setValue(player.getFadeDuration());

    final SelectBox<String> fadeInterpolationSelectBox = new SelectBox<String>(skin);
    final ObjectMap<String, Interpolation> interpolations = new ObjectMap<String, Interpolation>();
    interpolations.put("Linear", Interpolation.linear);
    interpolations.put("Fade", Interpolation.fade);
    interpolations.put("Circle", Interpolation.circle);
    interpolations.put("Sine", Interpolation.sine);
    interpolations.put("Bounce", Interpolation.bounce);
    interpolations.put("Elastic", Interpolation.elastic);
    interpolations.put("Swing", Interpolation.swing);
    fadeInterpolationSelectBox.setItems(interpolations.keys().toArray());
    fadeInterpolationSelectBox.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            player.setFadeInterpolation(interpolations.get(fadeInterpolationSelectBox.getSelected()));
        }
    });

    fadeTable.defaults().left().pad(1f);
    fadeTable.row();
    fadeTable.add("Duration");
    fadeTable.add(fadeDurationSlider).expandX().fill();
    fadeTable.add(fadeDurationLabel).width(40);
    fadeTable.row();
    fadeTable.add("Interpolation");
    fadeTable.add(fadeInterpolationSelectBox).colspan(2).expandX().fill();

    final CheckBox fadeCheckBox = new CheckBox("Fade", skin, "switch");
    fadeCheckBox.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            boolean fade = fadeCheckBox.isChecked();
            player.setFadingEnabled(fade);
            fadeTable.setVisible(fade);
        }
    });
    fadeCheckBox.setChecked(player.isFadingEnabled());
    fadeTable.setVisible(player.isFadingEnabled());

    controlTable.defaults().padTop(4f);
    controlTable.row().colspan(3);
    controlTable.add(shuffleCheckBox).left();
    controlTable.row().colspan(3);
    controlTable.add(repeatCheckBox).left();
    controlTable.row().colspan(3);
    controlTable.add(fadeCheckBox).left();
    controlTable.row().colspan(3);
    controlTable.add(fadeTable);
    controlTable.row();
    controlTable.add("Pan");
    controlTable.add(panSlider).colspan(2);
    controlTable.row().colspan(3);
    controlTable.add().expand();
    controlTable.row();
    controlTable.add(previousButton).right();
    controlTable.add(playPauseButton);
    controlTable.add(nextButton).left();
    controlTable.row();
    controlTable.add("Volume");
    controlTable.add(volumeSlider).colspan(2);
    controlTable.row();
    controlTable.add("Mute");
    controlTable.add(muteButton).colspan(2).left();

    /*********/
    /* Debug */
    /*********/

    Label debugLabel = new Label("", skin) {
        @Override
        public void act(float delta) {
            setText(player.toString());
            super.act(delta);
        }
    };

    /***************/
    /* Stage setup */
    /***************/

    Table leftTable = new Table(skin);
    leftTable.row();
    leftTable.add(scrollablePlaylistTable).expand().fillX().top();
    leftTable.row();
    leftTable.add(debugLabel).expandX().left().padLeft(30f).padTop(8f);

    Table rightTable = new Table(skin);
    rightTable.row();
    rightTable.add(controlTable).expandY().fill();
    rightTable.row();
    rightTable.add(fileFinder).padTop(10f);

    Table rootTable = new Table(skin);
    rootTable.setFillParent(true);
    rootTable.row();
    rootTable.add(leftTable).expand().fill();
    rootTable.add(rightTable).expandY().fill().padTop(25f).padLeft(8f);

    stage = new Stage(new ScreenViewport(camera), batch);
    stage.addActor(rootTable);

    /*********/
    /* Input */
    /*********/

    Gdx.input.setInputProcessor(stage);
}