/*******************************************************************************
* 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.util.ArrayList;
import java.util.List;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.ui.ButtonGroup;
import com.badlogic.gdx.scenes.scene2d.ui.Container;
import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
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.Align;
import com.badlogic.gdx.utils.Array;
public class TabPanel extends Table {
private ButtonGroup<Button> buttonGroup;
private HorizontalGroup header;
private Container<Actor> body;
private List<Tab> tabs;
private Skin skin;
public class Tab {
public Button button;
public Actor content;
public Tab(Button b, Actor c) {
button = b;
content = c;
}
}
public TabPanel(Skin skin) {
super(skin);
this.skin = skin;
buttonGroup = new ButtonGroup<Button>();
header = new HorizontalGroup();
body = new Container<Actor>();
tabs = new ArrayList<Tab>();
buttonGroup.setMaxCheckCount(1);
buttonGroup.setMinCheckCount(1);
buttonGroup.setUncheckLast(true);
header.wrap(true);
header.rowAlign(Align.left);
add(header).expandX().fillX().left();
row();
add(body).expand().fill();
body.fill();
}
public void addTab(String name, Actor panel) {
Button button = new TextButton(name, skin);
buttonGroup.add(button);
header.addActor(button);
tabs.add(new Tab(button, panel));
button.addListener(new ClickListener() {
@Override
public void clicked (InputEvent event, float x, float y) {
setTab((Button)event.getListenerActor());
}
});
if(tabs.size() == 1)
setTab(0);
}
private void setTab(Button b) {
for(int i = 0; i < tabs.size(); i++) {
if(tabs.get(i).button == b) {
setTab(i);
break;
}
}
}
public int getSelectedIndex() {
for(int i=0; i < buttonGroup.getButtons().size; i++) {
if(buttonGroup.getButtons().get(i) == buttonGroup.getChecked())
return i;
}
return -1;
}
public int getTabCount() {
return tabs.size();
}
public String getTitleAt(int i) {
return ((TextButton)buttonGroup.getButtons().get(i)).getText().toString();
}
public void setTab(int i) {
Actor panel = tabs.get(i).content;
tabs.get(i).button.setChecked(true);
body.setActor(null);
body.clear();
body.setActor(panel);
}
public void clear() {
Array<Button> buttons = buttonGroup.getButtons();
buttons.clear();
header.clear();
tabs.clear();
body.setActor(null);
body.clear();
}
}