/*
* Copyright (c) 2010-2011 by Stefan Laubenberger.
*
* Tyr is free software: you can redistribute it and/or modify
* it under the terms of the General Public License v2.0.
*
* Tyr 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:
* <http://www.gnu.org/licenses>
*
* This distribution is available at:
* <http://code.google.com/p/tyr/>
* <http://dev.laubenberger.net/tyr/>
*
* Contact information:
* Stefan Laubenberger
* Bullingerstrasse 53
* CH-8004 Zuerich
*
* <http://www.laubenberger.net>
*
* <laubenberger@gmail.com>
*/
package net.laubenberger.tyr.view.dialog;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Observable;
import java.util.Observer;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import net.laubenberger.bogatyr.helper.HelperLog;
import net.laubenberger.bogatyr.helper.HelperString;
import net.laubenberger.bogatyr.service.localizer.Localizer;
import net.laubenberger.bogatyr.view.swing.ActionAbstract;
import net.laubenberger.bogatyr.view.swing.Button;
import net.laubenberger.bogatyr.view.swing.Dialog;
import net.laubenberger.bogatyr.view.swing.Group;
import net.laubenberger.bogatyr.view.swing.Label;
import net.laubenberger.bogatyr.view.swing.Panel;
import net.laubenberger.tyr.helper.HelperResource;
import net.laubenberger.tyr.model.Icon;
import net.laubenberger.tyr.model.TyrData;
import net.laubenberger.tyr.view.ViewTyr;
import org.jdesktop.swingx.JXHyperlink;
import org.jdesktop.swingx.JXTitledSeparator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Dialog for the about informations.
*
* @author Stefan Laubenberger
* @version 0.8.0 (20110123)
* @since 0.2.0
*/
public class DialogAbout extends Dialog implements Observer {
private static final long serialVersionUID = 4161135982451721307L;
private static final Logger log = LoggerFactory.getLogger(DialogAbout.class);
final ViewTyr view;
final Localizer localizer;
final Dialog dialogInfo;
public DialogAbout(final ViewTyr view) {
super(view.getOwner());
if (log.isTraceEnabled()) log.trace(HelperLog.constructor(view));
this.view = view;
localizer = view.getController().getModel().getLocalizer();
dialogInfo = new DialogInfo(view);
}
{
// setAlwaysOnTop(true);
setResizable(false);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
/*
* Private methods
*/
private void createLayout() {
getContentPane().removeAll();
setTitle(view.getController().getModel().getName() + HelperString.COLON + HelperString.SPACE + localizer.getValue(HelperResource.RES_ACTION_ABOUT));
final JPanel panel = new Panel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10));
final JPanel panelWest = new Panel(new BorderLayout());
panelWest.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));
final JPanel panelEast = new Panel(new GridLayout(0, 1));
panelEast.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 10));
panelWest.add(new Label(view.getController().getScaledIcon(Icon.LOGO)), BorderLayout.NORTH);
panelEast.add(new Label(view.getController().getModel().getName() + HelperString.SPACE + view.getController().getModel().getVersion()));
panelEast.add(new JXTitledSeparator(null));
panelEast.add(new Label(HelperString.COPYRIGHT + " 2010-2011:")); //$NON-NLS-1$
panelEast.add(new Label());
panelEast.add(new Label("Stefan Laubenberger")); //$NON-NLS-1$
panelEast.add(new Label("Bullingerstrasse 53")); //$NON-NLS-1$
panelEast.add(new Label("CH-8004 Zürich")); //$NON-NLS-1$
panelEast.add(new Label());
final JXHyperlink link = new JXHyperlink();
final JXHyperlink mail = new JXHyperlink();
try {
link.setURI(new URI(HelperResource.URL));
// link.setURI(view.getController().getModel().getUrl().toURI());
mail.setURI(new URI(HelperResource.MAIL));
// mail.setText(HelperResource.MAIL);
} catch (URISyntaxException ex) {
//should never happen!
log.error("Invalid URI", ex); //$NON-NLS-1$
}
panelEast.add(link);
panelEast.add(mail);
panelEast.add(new Label());
//
panel.add(panelWest, BorderLayout.WEST);
panel.add(panelEast, BorderLayout.EAST);
final Group group = new Group(new Insets(0, 0, 0, 10), new Button(new ActionClose()), new Button(new ActionInfo()));
panel.add(group, BorderLayout.SOUTH);
getContentPane().add(panel);
pack();
}
/*
* Overridden methods
*/
@Override
public void createAndShowGUI() {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart());
view.getController().getData().addObserver(this);
createLayout();
super.createAndShowGUI();
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public void dispose() {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart());
view.getController().getData().deleteObserver(this);
super.dispose();
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
/*
* Implemented methods
*/
@Override
public void update(final Observable o, final Object arg) {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(o, arg));
if (TyrData.MEMBER_FONT_SIZE_OFFSET == arg) {
pack();
} else if (TyrData.MEMBER_LANGUAGE == arg || TyrData.MEMBER_ICON_SIZE == arg) {
createLayout();
} else if (TyrData.MEMBER_LOOK_AND_FEEL == arg) {
SwingUtilities.updateComponentTreeUI(this);
pack();
}
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
/*
* Inner classes
*/
private class ActionClose extends ActionAbstract {
private static final long serialVersionUID = 3521248435384827073L;
public ActionClose() {
super(localizer.getValue(HelperResource.RES_ACTION_CLOSE), view.getController().getScaledIcon(Icon.OK), localizer
.getTooltip(HelperResource.RES_ACTION_CLOSE), localizer.getMnemonic(HelperResource.RES_ACTION_CLOSE));
}
@Override
public void actionPerformed(final ActionEvent e) {
clearAndHide();
}
}
private class ActionInfo extends ActionAbstract {
private static final long serialVersionUID = 7942034123828092338L;
public ActionInfo() {
super(localizer.getValue(HelperResource.RES_ACTION_INFO), view.getController().getScaledIcon(Icon.SYSTEM_INFORMATION), localizer
.getTooltip(HelperResource.RES_ACTION_INFO), localizer.getMnemonic(HelperResource.RES_ACTION_INFO));
}
@Override
public void actionPerformed(final ActionEvent e) {
dialogInfo.createAndShowGUI();
}
}
}