package org.openswing.swing.miscellaneous.util.client;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.html.*;
import org.openswing.swing.client.*;
import org.openswing.swing.miscellaneous.client.*;
import org.openswing.swing.util.client.*;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Panel that contains a tip of the day. It can be used combined with a TipFrame or a TipInternalFrame.</p>
* <p>Copyright: Copyright (C) 2006 Mauro Carniel</p>
*
* <p> This file is part of OpenSwing Framework.
* This library is free software; you can redistribute it and/or
* modify it under the terms of the (LGPL) Lesser General Public
* License as published by the Free Software Foundation;
*
* GNU LESSER GENERAL PUBLIC LICENSE
* Version 2.1, February 1999
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* The author may be contacted at:
* maurocarniel@tin.it</p>
*
* @author Mauro Carniel
* @version 1.0
*/
public class TipPanel extends JPanel {
GridBagLayout gridBagLayout1 = new GridBagLayout();
ImagePanel imagePanel = new ImagePanel();
JPanel buttonsPanel = new JPanel();
JPanel mainPanel = new JPanel();
GridBagLayout gridBagLayout2 = new GridBagLayout();
JLabel labelTitle = new JLabel();
JScrollPane scrollPane = new JScrollPane();
JEditorPane tipPane = new JEditorPane();
CheckBoxControl controlShow = new CheckBoxControl();
JButton buttonList = new JButton();
JButton buttonPrev = new JButton();
JButton buttonNext = new JButton();
JButton buttonClose = new JButton();
/** TipPanel container */
private TipPanelContainer tipPanelContainer= null;
/** tip image */
private String imageName = "tip.gif";
/** flag used to define if the checkbox 'show 'tip of the day' after launching' must be showed */
private boolean showCheck = true;
/** TipPanel content manager */
private TipPanelContent tipPanelContent;
/** current index of the showed tip */
private int index = 0;
/**
* Constructor.
* @param tipPanelContainer TipPanel content manager
* @param tipPanelContent TipPanel container
*/
public TipPanel(TipPanelContainer tipPanelContainer,TipPanelContent tipPanelContent) {
this.tipPanelContainer = tipPanelContainer;
this.tipPanelContent = tipPanelContent;
try {
jbInit();
setImageName(imageName);
tipPane.setFont(labelTitle.getFont());
tipPane.setEditorKit(new HTMLEditorKit());
// automatically show a random tip of day...
index = (int)(Math.random()*(double)tipPanelContent.getTips().length);
showTip();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(gridBagLayout1);
mainPanel.setLayout(gridBagLayout2);
tipPane.setEditable(false);
controlShow.setText("show 'tip of the day' after launching");
controlShow.setFont(new Font(labelTitle.getFont().getName(),Font.PLAIN, 9));
buttonList.setText(ClientSettings.getInstance().getResources().getResource("select tip"));
buttonList.addActionListener(new TipPanel_buttonList_actionAdapter(this));
buttonPrev.setText(ClientSettings.getInstance().getResources().getResource("previous tip"));
buttonPrev.addActionListener(new TipPanel_buttonPrev_actionAdapter(this));
buttonNext.setText(ClientSettings.getInstance().getResources().getResource("next tip"));
buttonNext.addActionListener(new TipPanel_buttonNext_actionAdapter(this));
buttonClose.setText(ClientSettings.getInstance().getResources().getResource("close"));
buttonClose.addActionListener(new TipPanel_buttonClose_actionAdapter(this));
labelTitle.setFont(new Font(labelTitle.getFont().getName(),Font.PLAIN, 14));
this.add(imagePanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0
,GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
this.add(mainPanel, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
if (showCheck)
mainPanel.add(controlShow, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
mainPanel.add(labelTitle, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
mainPanel.add(scrollPane, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
mainPanel.add(buttonsPanel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 0), 0, 0));
scrollPane.getViewport().add(tipPane, null);
buttonsPanel.add(buttonList,null);
buttonsPanel.add(buttonPrev,null);
buttonsPanel.add(buttonNext,null);
buttonsPanel.add(buttonClose,null);
}
void buttonPrev_actionPerformed(ActionEvent e) {
if (index==0 && tipPanelContent.getTips().length>0)
index = tipPanelContent.getTips().length-1;
else if (index>0)
index--;
showTip();
}
void buttonNext_actionPerformed(ActionEvent e) {
if (index==tipPanelContent.getTips().length-1 && tipPanelContent.getTips().length>0)
index = 0;
else if (index<tipPanelContent.getTips().length-1)
index++;
showTip();
}
/**
* Show tip text and title.
*/
private void showTip() {
labelTitle.setText(ClientSettings.getInstance().getResources().getResource(tipPanelContent.getTitles()[index]));
tipPane.setText(ClientSettings.getInstance().getResources().getResource(tipPanelContent.getTips()[index]));
}
void buttonClose_actionPerformed(ActionEvent e) {
tipPanelContainer.closeTipPanel();
}
/**
* @return <code>true</code> to show tip frame when launching an application, <code>false</code> otherwise
*/
public final boolean isShowToolTip() {
return controlShow.isSelected();
}
/**
* Set/unset check-box 'show 'tip of the day' after launching'.
* @return <code>true</code> to show check-box 'show 'tip of the day' after launching', <code>false</code> to hide it
*/
public final void setShowToolTip(boolean showToolTip) {
controlShow.setSelected(showToolTip);
}
/**
* Set tip image.
* @param imageName tip image
*/
public final void setImageName(String imageName) {
this.imageName = imageName;
imagePanel.setImageName(imageName);
imagePanel.setScrollBarsPolicy(ImagePanel.SCROLLBAR_NEVER);
imagePanel.setMinimumSize(new Dimension(imagePanel.getImageWidth(),imagePanel.getImageHeight()));
imagePanel.setMaximumSize(new Dimension(imagePanel.getImageWidth(),imagePanel.getImageHeight()));
imagePanel.setPreferredSize(new Dimension(imagePanel.getImageWidth(),imagePanel.getImageHeight()));
}
public final void addNotify() {
super.addNotify();
if (this.isVisible()) {
int w = (int)((Container)tipPanelContainer).getWidth()-imagePanel.getImageWidth()-30;
int h = (int)((Container)tipPanelContainer).getHeight()-imagePanel.getImageHeight()-30;
scrollPane.setMinimumSize(new Dimension(w,h));
scrollPane.setMaximumSize(new Dimension(w,h));
if (tipPanelContainer instanceof JInternalFrame)
((JInternalFrame)tipPanelContainer).setMinimumSize(new Dimension(((Container)tipPanelContainer).getWidth(),((Container)tipPanelContainer).getHeight()));
}
}
/**
* @return tip image
*/
public final String getImageName() {
return imageName;
}
/**
* @return used to define if the checkbox 'show 'tip of the day' after launching' must be showed
*/
public final boolean isShowCheck() {
return showCheck;
}
/**
* Used to define if the checkbox 'show 'tip of the day' after launching' must be showed.
* @param showCheck used to define if the checkbox 'show 'tip of the day' after launching' must be showed
*/
public final void setShowCheck(boolean showCheck) {
if (this.showCheck && !showCheck)
mainPanel.remove(controlShow);
else if (!this.showCheck && showCheck)
mainPanel.add(controlShow, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
mainPanel.revalidate();
this.showCheck = showCheck;
}
void buttonList_actionPerformed(ActionEvent e) {
TipSelectDialog dlg = new TipSelectDialog(tipPanelContent);
int idx = dlg.getTipIndex();
if ((idx >= 0) && (idx < tipPanelContent.getTips().length)) {
index = idx;
showTip();
}
}
}
class TipPanel_buttonPrev_actionAdapter implements java.awt.event.ActionListener {
TipPanel adaptee;
TipPanel_buttonPrev_actionAdapter(TipPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.buttonPrev_actionPerformed(e);
}
}
class TipPanel_buttonNext_actionAdapter implements java.awt.event.ActionListener {
TipPanel adaptee;
TipPanel_buttonNext_actionAdapter(TipPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.buttonNext_actionPerformed(e);
}
}
class TipPanel_buttonClose_actionAdapter implements java.awt.event.ActionListener {
TipPanel adaptee;
TipPanel_buttonClose_actionAdapter(TipPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.buttonClose_actionPerformed(e);
}
}
class TipPanel_buttonList_actionAdapter implements java.awt.event.ActionListener {
TipPanel adaptee;
TipPanel_buttonList_actionAdapter(TipPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.buttonList_actionPerformed(e);
}
}