package org.jtheque.ui.utils.builders;
import org.jtheque.i18n.Internationalizable;
import org.jtheque.i18n.InternationalizableContainer;
import org.jtheque.ui.components.Borders;
import org.jtheque.ui.components.Components;
import org.jtheque.ui.components.I18nLabel;
import org.jtheque.ui.components.JThequeCheckBox;
import org.jtheque.utils.ui.ButtonBarBuilder;
import org.jtheque.utils.ui.GridBagUtils;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.JXTree;
import javax.swing.Action;
import javax.swing.ComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableModel;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeModel;
import java.awt.Color;
import java.awt.LayoutManager;
/*
* Copyright JTheque (Baptiste Wicht)
*
* 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.
*/
/**
* A panel builder.
*
* @author Baptiste Wicht
*/
public class JThequePanelBuilder extends BasicPanelBuilder implements I18nPanelBuilder {
private InternationalizableContainer container;
/**
* Construct a new JThequePanelBuilder.
*/
public JThequePanelBuilder() {
super();
}
/**
* Construct a new panel builder.
*
* @param panel The panel to build.
*/
public JThequePanelBuilder(JPanel panel) {
super(panel);
}
/**
* Construct a new JThequePanelBuilder with a specified layout.
*
* @param layout The layout to set to the builded panel.
*/
public JThequePanelBuilder(LayoutManager layout) {
super(layout);
}
/**
* Construct a new JThequePanelBuilder.
*
* @param panel The panel to build.
* @param layout If true set a default layout (GridBagLayout) to the builded panel.
*/
public JThequePanelBuilder(JPanel panel, boolean layout) {
super(panel, layout);
}
@Override
public void setInternationalizableContainer(InternationalizableContainer container) {
this.container = container;
}
/**
* Return the internationalizable container of this builder.
*
* @return The internationalizable container of this builder.
*/
public InternationalizableContainer getContainer() {
return container;
}
@Override
void initDefaults() {
getPanel().setBackground(Color.white);
getPanel().setBorder(Borders.DIALOG_BORDER);
}
@Override
public JComboBox addComboBox(ComboBoxModel model, Object constraints) {
JComboBox combo = new JComboBox(model);
combo.setBackground(Color.white);
return add(combo, constraints);
}
@Override
public JCheckBox addI18nCheckBox(String key, Object constraints) {
JThequeCheckBox checkBox = Components.newCheckBox(key);
addInternationalizable(checkBox);
return add(checkBox, constraints);
}
@Override
public I18nLabel addI18nLabel(String key, Object constraints) {
return addI18nLabel(key, 0, constraints);
}
@Override
public I18nLabel addI18nLabel(String key, int style, Object constraints) {
I18nLabel label = Components.newI18nLabel(key);
addInternationalizable(label);
applyStyle(style, label);
return add(label, constraints);
}
@Override
public I18nLabel addI18nLabel(String key, int style, float size, Object constraints) {
I18nLabel label = Components.newI18nLabel(key);
addInternationalizable(label);
applyStyle(style, label);
label.setFont(label.getFont().deriveFont(size));
return add(label, constraints);
}
@Override
public JXTree addScrolledTree(TreeModel model, TreeCellRenderer renderer, Object constraints) {
JXTree tree = new JXTree(model);
if (renderer != null) {
tree.setCellRenderer(renderer);
}
return addScrolled(tree, constraints);
}
@Override
public void addI18nSeparator(String key, Object constraints) {
I18nPanelBuilder separatorBuilder = addPanel(constraints);
if (container != null) {
separatorBuilder.setInternationalizableContainer(container);
}
separatorBuilder.addI18nLabel(key, gbcSet(0, 0));
separatorBuilder.add(new JSeparator(), gbcSet(1, 0, GridBagUtils.HORIZONTAL));
}
@Override
public I18nPanelBuilder addPanel(Object constraints) {
I18nPanelBuilder builder = new JThequePanelBuilder();
if (container != null) {
builder.setInternationalizableContainer(container);
}
add(builder.getPanel(), constraints);
return builder;
}
@Override
public I18nPanelBuilder addPanel(LayoutManager layout, Object constraints) {
I18nPanelBuilder builder = new JThequePanelBuilder(layout);
if (container != null) {
builder.setInternationalizableContainer(container);
}
add(builder.getPanel(), constraints);
return builder;
}
@Override
public void setI18nTitleBorder(String key) {
setBorder(Borders.createI18nTitleBorder(key, container));
}
@Override
public JButton addButton(Action action, Object constraints) {
JButton button = add(new JButton(action), constraints);
if (action instanceof Internationalizable) {
addInternationalizable((Internationalizable) action);
}
return button;
}
@Override
public void addButtonBar(Object constraints, Action... actions) {
ButtonBarBuilder builder = new ButtonBarBuilder();
builder.addGlue();
builder.addActions(actions);
for (Action action : actions) {
if (action instanceof Internationalizable) {
addInternationalizable((Internationalizable) action);
}
}
((JComponent) builder.getPanel()).setOpaque(false);
add(builder.getPanel(), constraints);
}
@Override
public JTable addTable(TableModel model, Object constraints) {
return add(createTable(model), constraints);
}
@Override
public JTable addScrolledTable(TableModel model, Object constraints) {
return addScrolled(createTable(model), constraints);
}
/**
* Create a JXTable with JTheque defaults.
*
* @param model The model to use.
*
* @return The created JXTable.
*/
private static JXTable createTable(TableModel model) {
JXTable table = new JXTable(model);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setVisibleRowCount(5);
table.setColumnControlVisible(true);
table.packAll();
return table;
}
/**
* Add an internationalizable to the builder.
*
* @param internationalizable The internationalizable to the builder.
*/
void addInternationalizable(Internationalizable internationalizable) {
if (container != null) {
container.addInternationalizable(internationalizable);
}
}
}