You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

550 lines
17 KiB
Java

/*
* Copyright (C) 2009-2017 Alistair Neil <info@dazzleships.net>
*
* 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 2
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package lib;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import javax.swing.JProgressBar;
import javax.swing.JTextArea;
import javax.swing.Timer;
import javax.swing.WindowConstants;
/**
*
* @author Alistair Neil, <info@dazzleships.net>
*/
public class InfoDialog extends javax.swing.JDialog {
public static final int CANCEL_BUTTON = 0;
public static final int CANCEL_WINDOW = 1;
public static final int OK = 2;
private Color fg = null;
private final Frame parent;
private String strButtClose;
private String strTitle = "";
private final Font fontDefault;
private Timer tmrAutoClose;
private Timer tmrButtonLock;
/**
* Creates new InfoDialog, for parent frame with modality modal
*
* @param parent
*/
public InfoDialog(Frame parent) {
super(parent, true);
this.parent = parent;
initComponents();
jCheckBoxOption.setVisible(false);
jProgressBar.setVisible(false);
fg = jTextInfo.getForeground();
fontDefault = jTextInfo.getFont();
setContinueButtonText("Continue");
setCancelButtonText("Cancel");
setCloseButtonText("Close");
}
@Override
public final Font getFont() {
return jPanelMain.getFont();
}
/**
* Convenience methods
*
* @param title
*/
public final void createInfo(String title) {
createInfo(title, null);
}
/**
*
* @param title
* @param info
*/
public final void createInfo(String title, String info) {
super.setTitle(strTitle + " " + title);
setModal(true);
setCancelVisible(false);
setContinueButtonText(strButtClose);
jProgressBar.setVisible(false);
FontMetrics fm = getFontMetrics(getFont());
int width = fm.stringWidth(getTitle());
if (width > getWidth()) {
setSize(width, getHeight());
}
jTextInfo.setFont(fontDefault);
jTextInfo.setForeground(fg);
jTextInfo.setText("");
if (info != null) {
jTextInfo.setText(info);
}
jTextInfo.setCaretPosition(0);
setLocationRelativeTo(parent);
}
/**
* Set dialog title
*
* @param title
*/
@Override
public final void setTitle(String title) {
strTitle = title;
super.setTitle(strTitle);
}
/**
*
* @param title
*/
public final void createWarn(String title) {
createWarn(title, null);
}
/**
* Create warning dialog
*
* @param title
* @param info
*/
public final void createWarn(String title, String info) {
super.setTitle(strTitle + " " + title);
setModal(true);
setCancelVisible(true);
jProgressBar.setVisible(false);
FontMetrics fm = getFontMetrics(getFont());
int width = fm.stringWidth(getTitle());
if (width > getWidth()) {
setSize(width, getHeight());
}
jTextInfo.setFont(fontDefault);
jTextInfo.setForeground(fg);
jTextInfo.setText("");
if (info != null) {
jTextInfo.setText(info);
}
setLocationRelativeTo(parent);
jTextInfo.setCaretPosition(0);
}
/**
* Create progress bar dialog
*
* @param title
* @param info
*/
public final void createProgress(String title, String info) {
super.setTitle(strTitle + " " + title);
setModal(true);
setCancelVisible(true);
jProgressBar.setVisible(true);
FontMetrics fm = getFontMetrics(getFont());
int width = fm.stringWidth(getTitle());
if (width > getWidth()) {
setSize(width, getHeight());
}
jTextInfo.setFont(fontDefault);
jTextInfo.setForeground(fg);
jTextInfo.setText("");
if (info != null) {
jTextInfo.setText(info);
}
setLocationRelativeTo(parent);
jTextInfo.setCaretPosition(0);
}
/**
* Overridable handle for a progress based task
*
* @param status
* @param jpb
*/
public void progressTask(int status, JProgressBar jpb) {
}
/**
* Create error dialog
*
* @param title
*/
public final void createError(String title) {
createError(title, null);
}
/**
* Create error dialog
*
* @param title
* @param info
*/
public final void createError(String title, String info) {
super.setTitle(strTitle + " " + title);
setModal(true);
setCancelVisible(false);
setContinueButtonText(strButtClose);
jProgressBar.setVisible(false);
FontMetrics fm = getFontMetrics(getFont());
int width = fm.stringWidth(getTitle());
if (width > getWidth()) {
setSize(width, getHeight());
}
jTextInfo.setFont(fontDefault);
jTextInfo.setForeground(fg);
jTextInfo.setText("");
if (info != null) {
jTextInfo.setText(info);
}
setLocationRelativeTo(parent);
jTextInfo.setCaretPosition(0);
}
public final void setTimeLock(final int secs) {
jButtonCancel.setEnabled(false);
jButtonContinue.setEnabled(false);
this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
final String buttontext = jButtonCancel.getText();
tmrButtonLock = new Timer(1000, new java.awt.event.ActionListener() {
int localsecs = secs;
@Override
public void actionPerformed(ActionEvent e) {
localsecs--;
if (localsecs == 0) {
tmrButtonLock.stop();
jButtonCancel.setText(buttontext);
jButtonCancel.setEnabled(true);
jButtonContinue.setEnabled(true);
} else {
jButtonCancel.setText(buttontext + " (" + localsecs + ")");
}
}
});
jButtonCancel.setText(buttontext + " (" + secs + ")");
tmrButtonLock.start();
}
public final void setCloseButtonText(String text) {
strButtClose = text;
}
public final void setCancelButtonText(String text) {
jButtonCancel.setText(text);
}
public final void setContinueButtonText(String text) {
jButtonContinue.setText(text);
}
public final void setCheckBoxText(String text) {
jCheckBoxOption.setText(text);
}
/**
* Enable/Disable Autoscrolling
*
* @param enabled
*/
public final void setAutoScrollEnabled(boolean enabled) {
jTextInfo.setAutoscrolls(enabled);
}
/**
* Append text to the information area, Scrolling should be enabled
*
* @param text
*/
public final void appendInfoText(String text) {
jTextInfo.append(text);
jTextInfo.setCaretPosition(jTextInfo.getText().length());
}
/**
* Set whether the forms checkbox is enabled
*
* @param enabled
*/
public final void setCheckBoxVisible(boolean enabled) {
jCheckBoxOption.setVisible(enabled);
}
/**
* Set check box selection status
*
* @param checked
*/
public final void setCheckBoxEnabled(boolean checked) {
jCheckBoxOption.setSelected(checked);
}
/**
* Test to see if checkbox is selected
*
* @return boolean True if selected
*/
public final boolean isCheckBoxSelected() {
return jCheckBoxOption.isSelected();
}
/**
* Set info font
*
* @param font
* @param sizeoffset
*/
public final void setFont(String font, int sizeoffset) {
jTextInfo.setFont(new Font(font, jTextInfo.getFont().getStyle(),
jTextInfo.getFont().getSize() + sizeoffset));
}
/**
* Set the form auto close period in milliseconds
*
* @param millis
*/
public final void setAutoClose(int millis) {
tmrAutoClose = new Timer(millis, new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tmrAutoClose.stop();
doClose(CANCEL_WINDOW);
}
});
tmrAutoClose.start();
}
public final JTextArea getTextArea() {
return jTextInfo;
}
/**
* @return the return status of this dialog - one of RET_OK or RET_CANCEL
*/
public final int getReturnStatus() {
return returnStatus;
}
/**
* Set dialog message body
*
* @param text
*/
public final void setInfoText(String text) {
jTextInfo.setText(text);
}
/**
* Set dialog message body, and font colour
*
* @param text
* @param fgcolor
*/
public final void setInfoText(String text, Color fgcolor) {
jTextInfo.setForeground(fgcolor);
jTextInfo.setText(text);
}
/**
* Set whether Cancel button is enabled
*
* @param enabled
*/
public final void setCancelEnabled(boolean enabled) {
jButtonCancel.setEnabled(enabled);
}
/**
* Set whether Cancel button is visible
*
* @param visible
*/
public final void setCancelVisible(boolean visible) {
jButtonCancel.setVisible(visible);
}
/**
* Set whether Ok button is enabled
*
* @param enabled
*/
public final void setAckEnabled(boolean enabled) {
jButtonContinue.setEnabled(enabled);
}
/**
* Set whether OK button is visible
*
* @param visible
*/
public final void setAckVisible(boolean visible) {
jButtonContinue.setVisible(visible);
}
public void setVisibleWithFocus(boolean visible) {
super.setVisible(visible);
this.requestFocus();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanelMain = new javax.swing.JPanel();
jButtonCancel = new javax.swing.JButton();
jCheckBoxOption = new javax.swing.JCheckBox();
jButtonContinue = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTextInfo = new javax.swing.JTextArea();
jProgressBar = new javax.swing.JProgressBar();
setMinimumSize(new java.awt.Dimension(410, 165));
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
closeDialog(evt);
}
});
jPanelMain.setFont(jPanelMain.getFont().deriveFont(jPanelMain.getFont().getStyle() | java.awt.Font.BOLD, jPanelMain.getFont().getSize()+2));
jPanelMain.setOpaque(false);
jButtonCancel.setText("Cancel");
jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonCancelActionPerformed(evt);
}
});
jCheckBoxOption.setText("Disable this notification.");
jButtonContinue.setText("Continue");
jButtonContinue.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonContinueActionPerformed(evt);
}
});
jTextInfo.setEditable(false);
jTextInfo.setColumns(20);
jTextInfo.setLineWrap(true);
jTextInfo.setRows(5);
jTextInfo.setWrapStyleWord(true);
jScrollPane2.setViewportView(jTextInfo);
jProgressBar.setString("");
jProgressBar.setStringPainted(true);
javax.swing.GroupLayout jPanelMainLayout = new javax.swing.GroupLayout(jPanelMain);
jPanelMain.setLayout(jPanelMainLayout);
jPanelMainLayout.setHorizontalGroup(
jPanelMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelMainLayout.createSequentialGroup()
.addComponent(jCheckBoxOption)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE)
.addComponent(jButtonCancel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonContinue))
.addComponent(jScrollPane2)
.addComponent(jProgressBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
jPanelMainLayout.setVerticalGroup(
jPanelMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelMainLayout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 304, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jProgressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanelMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jCheckBoxOption)
.addComponent(jButtonContinue)
.addComponent(jButtonCancel)))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanelMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanelMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelActionPerformed
doClose(CANCEL_BUTTON);
}//GEN-LAST:event_jButtonCancelActionPerformed
/**
* Closes the dialog
*/
private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
if (tmrButtonLock == null || !tmrButtonLock.isRunning()) {
doClose(CANCEL_WINDOW);
}
}//GEN-LAST:event_closeDialog
private void jButtonContinueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonContinueActionPerformed
doClose(OK);
}//GEN-LAST:event_jButtonContinueActionPerformed
private void doClose(int retStatus) {
if (jProgressBar.isVisible()) {
progressTask(retStatus, jProgressBar);
return;
}
if (tmrAutoClose != null) {
tmrAutoClose.stop();
tmrAutoClose = null;
}
if (tmrButtonLock != null) {
tmrButtonLock.stop();
tmrButtonLock = null;
}
returnStatus = retStatus;
setVisible(false);
dispose();
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButtonCancel;
private javax.swing.JButton jButtonContinue;
private javax.swing.JCheckBox jCheckBoxOption;
private javax.swing.JPanel jPanelMain;
private javax.swing.JProgressBar jProgressBar;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea jTextInfo;
// End of variables declaration//GEN-END:variables
private int returnStatus = CANCEL_BUTTON;
}