/******************************************************************************* * 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 com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.Cell; import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Scaling; import com.bladecoder.engineeditor.Ctx; public class HeaderPanel extends Table { private Actor content; private HorizontalGroup north; private Label titleLbl; private boolean collapsable = true; private Image collapseImg; private Cell<Actor> contentCell; @SuppressWarnings("unchecked") public HeaderPanel(Skin skin, String title) { titleLbl = new Label(title, skin); north = new HorizontalGroup(); collapseImg = new Image(); collapseImg.setScaling(Scaling.none); if(collapsable) { north.addActor(collapseImg); collapseImg.setDrawable(new TextureRegionDrawable(Ctx.assetManager.getIcon("ic_open"))); } top().left(); north.addActor(titleLbl); north.align(Align.left); north.fill(); north.wrap(true); north.rowAlign(Align.left); add(north).expandX().fillX(); row(); Image image = new Image(skin.getDrawable("white_pixel")); image.setColor(skin.getColor("separator-color")); add(image).height(2).padBottom(4f).expandX().fill(); row().top().left(); contentCell = add().expand().fill(); if (collapsable) { titleLbl.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { toggleCollapse(); invalidateHierarchy(); } }); collapseImg.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { toggleCollapse(); invalidateHierarchy(); } }); } // setDebug(true); } public void setTile(String title) { titleLbl.setText(title); } public void setContent(Actor center) { this.contentCell.clearActor(); this.content = center; this.contentCell.setActor(center); invalidateHierarchy(); } public void setCollapsable(boolean c) { collapsable = c; if (c) { collapseImg.setDrawable(new TextureRegionDrawable(Ctx.assetManager.getIcon("ic_open"))); } else collapseImg.setDrawable(null); } public void toggleCollapse() { if (collapsable) { if (contentCell.getActor() != null) { // if (this.content.isVisible()) { // this.content.setVisible(false); this.contentCell.clearActor(); invalidateHierarchy(); collapseImg.setDrawable(new TextureRegionDrawable(Ctx.assetManager.getIcon("ic_closed"))); } else { this.contentCell.setActor(content); // this.content.setVisible(true); invalidateHierarchy(); collapseImg.setDrawable(new TextureRegionDrawable(Ctx.assetManager.getIcon("ic_open"))); } } } }