/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.wcs.netbeans.liquiface.ui.swing.toolbar;
/*
* #%L
* Liquiface - GUI for Liquibase
* %%
* Copyright (C) 2013 Webstar Csoport Kft.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.google.common.eventbus.Subscribe;
import com.wcs.netbeans.liquiface.eventbus.LiquifaceEventBus;
import com.wcs.netbeans.liquiface.eventbus.event.RedrawGlobalSceneEvent;
import com.wcs.netbeans.liquiface.eventbus.event.RefreshToolbarModelCaptionEvent;
import com.wcs.netbeans.liquiface.eventbus.event.RefreshToolbarToggleButtonsEvent;
import static com.wcs.netbeans.liquiface.eventbus.event.RefreshToolbarToggleButtonsEvent.ToolbarButton.*;
import com.wcs.netbeans.liquiface.eventbus.event.ResetFiltersEvent;
import com.wcs.netbeans.liquiface.eventbus.event.ResetModelClearChangesEvent;
import com.wcs.netbeans.liquiface.facade.FilterFacade;
import com.wcs.netbeans.liquiface.facade.SceneFacade;
import com.wcs.netbeans.liquiface.ui.about.ShowAboutPanelAction;
import com.wcs.netbeans.liquiface.ui.wizards.appendchangelog.AppendToChangelogFileWizardAction;
import com.wcs.netbeans.liquiface.ui.wizards.loadchangelogfile.LoadChangeLogFileWizardAction;
import com.wcs.netbeans.liquiface.ui.wizards.loaddatabase.LoadDatabaseWizardAction;
import com.wcs.netbeans.liquiface.ui.wizards.savechangelog.SaveChangelogWizardAction;
import com.wcs.netbeans.liquiface.ui.wizards.updatedatabase.UpdateDatabaseWizardAction;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import org.openide.util.ImageUtilities;
/**
*
* @author botond
*/
public class LiquifaceToolbar extends JToolBar {
//<editor-fold defaultstate="collapsed" desc="singleton stuff">
private static LiquifaceToolbar instance;
public static LiquifaceToolbar getInstance(){
if(instance == null){
instance = new LiquifaceToolbar();
LiquifaceEventBus.getInstance().register(instance);
}
return instance;
}
//</editor-fold>
private JToggleButton foreignKeysButton;
private JToggleButton directRouterButton;
private JToggleButton animationsButton;
private JLabel changelogSourceLabel;
private LiquifaceToolbar() {
add(createNewFileButton());
add(createLoadFromFileButton());
add(createSaveChangelogButton());
add(createAppendToChangelogButton());
add(new Separator());
add(createLoadFromDatabaseButton());
add(createUpdateDatabaseButton());
add(new Separator());
foreignKeysButton = createToggleForeignKeysButton();
add(foreignKeysButton);
directRouterButton = createToggleDirectRouterButton();
add(directRouterButton);
animationsButton = createToggleAnimationsButton();
add(animationsButton);
add(new Separator());
add(createAboutInfoButton());
add(new Separator());
changelogSourceLabel = new JLabel();
changelogSourceLabel.setMinimumSize(new Dimension(0, 0));
add(changelogSourceLabel);
}
private JButton createSaveChangelogButton() {
JButton button = createButton("save_16x16px.png");
button.setToolTipText("Save changelog");
button.setActionCommand("save_changelog");
button.addActionListener(new SaveChangelogWizardAction());
return button;
}
private JButton createUpdateDatabaseButton() {
JButton button = createButton("database_run_16x16px.png");
button.setToolTipText("Update database");
button.setActionCommand("update_database");
button.addActionListener(new UpdateDatabaseWizardAction());
return button;
}
private JButton createAppendToChangelogButton() {
JButton button = createButton("append_16x16px.png");
button.setToolTipText("Append to changelog");
button.setActionCommand("append_to_changelog");
button.addActionListener(new AppendToChangelogFileWizardAction());
return button;
}
private JButton createLoadFromDatabaseButton() {
JButton button = createButton("database_connect_16x16px.png");
button.setToolTipText("Load model from database");
button.setActionCommand("load_database");
button.addActionListener(new LoadDatabaseWizardAction());
return button;
}
private JButton createLoadFromFileButton() {
JButton button = createButton("open_16x16px.png");
button.setToolTipText("Load model from file");
button.setActionCommand("load_file");
button.addActionListener(new LoadChangeLogFileWizardAction());
return button;
}
private JButton createNewFileButton() {
JButton button = createButton("new_16x16px.png");
button.setToolTipText("Create new");
button.setActionCommand("new");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
LiquifaceEventBus.getInstance().post(
new ResetModelClearChangesEvent(),
new ResetFiltersEvent(),
new RedrawGlobalSceneEvent());
refreshToolbar(new RefreshToolbarModelCaptionEvent(null));
}
});
return button;
}
private JToggleButton createToggleForeignKeysButton() {
final JToggleButton button = createToggleButton(
"foreign_key_not_visible_16x16px.png",
"foreign_key_visible_16x16px.png");
button.setToolTipText("Show/hide foreign keys");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FilterFacade.getInstance().setForeignKeysVisible(button.isSelected());
SceneFacade.getInstance().setRectangularLayout(!button.isSelected());
}
});
return button;
}
private JToggleButton createToggleAnimationsButton() {
final JToggleButton button = createToggleButton(
"table_animation_not_visible_16x16px.png",
"table_animation_visible_16x16px.png");
button.setToolTipText("Animation ON/OFF");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SceneFacade.getInstance().setAnimated(button.isSelected());
LiquifaceEventBus.getInstance().post(new RedrawGlobalSceneEvent());
}
});
return button;
}
private JToggleButton createToggleDirectRouterButton() {
final JToggleButton button = createToggleButton("orthogonal_router_16x16px.png", "direct_router_16x16px.png");
button.setToolTipText("Toggle Direct/Orthogonal foreign key routing");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(button.isSelected()){
SceneFacade.getInstance().setDirectRouter();
} else {
SceneFacade.getInstance().setOrthogonalRouter();
}
LiquifaceEventBus.getInstance().post(new RedrawGlobalSceneEvent());
}
});
return button;
}
private JButton createAboutInfoButton() {
JButton button = createButton("about_16x16px.png");
button.setToolTipText("About");
button.setActionCommand("about");
button.addActionListener(new ShowAboutPanelAction());
return button;
}
@Subscribe
public void refreshToolbar(RefreshToolbarModelCaptionEvent event) {
if (event.getModelSourceCaption() != null){
changelogSourceLabel.setText("Model loaded from: " +event.getModelSourceCaption());
changelogSourceLabel.setVisible(true);
}
else {
changelogSourceLabel.setText("");
changelogSourceLabel.setVisible(false);
}
}
@Subscribe
public void refreshToolbar(RefreshToolbarToggleButtonsEvent event) {
switch (event.getToolbarButton()) {
case FOREIGN_KEYS:
foreignKeysButton.setSelected(event.isSelected());
break;
case DIRECT_ROUTER:
directRouterButton.setSelected(event.isSelected());
break;
case ANIMATIONS:
animationsButton.setSelected(event.isSelected());
break;
}
}
//<editor-fold defaultstate="collapsed" desc="helpers">
private JButton createButton(String iconName) {
Icon icon = getIcon(iconName);
JButton button = new JButton(icon);
button.setFocusPainted(false);
return button;
}
private JToggleButton createToggleButton(String iconName, String selectedIconName) {
Icon icon = getIcon(iconName);
Icon pressedIcon = getIcon(selectedIconName);
JToggleButton button = new JToggleButton(icon);
button.setSelectedIcon(pressedIcon);
button.setFocusPainted(false);
return button;
}
private Icon getIcon(String iconName) {
Image image = ImageUtilities.loadImage("icons/toolbar/" + iconName);
return new ImageIcon(image);
}
//</editor-fold>
}