All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.smallmind.swing.dialog.ProgressOptionPanel Maven / Gradle / Ivy

There is a newer version: 6.2.0
Show newest version
/*
 * Copyright (c) 2007 through 2024 David Berkman
 *
 * This file is part of the SmallMind Code Project.
 *
 * The SmallMind Code Project is free software, you can redistribute
 * it and/or modify it under either, at your discretion...
 *
 * 1) The terms of GNU Affero General Public License as published by the
 * Free Software Foundation, either version 3 of the License, or (at
 * your option) any later version.
 *
 * ...or...
 *
 * 2) The terms of the Apache License, Version 2.0.
 *
 * The SmallMind Code Project 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 or Apache License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * and the Apache License along with the SmallMind Code Project. If not, see
 *  or .
 *
 * Additional permission under the GNU Affero GPL version 3 section 7
 * ------------------------------------------------------------------
 * If you modify this Program, or any covered work, by linking or
 * combining it with other code, such other code is not for that reason
 * alone subject to any of the requirements of the GNU Affero GPL
 * version 3.
 */
package org.smallmind.swing.dialog;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import org.smallmind.swing.ComponentUtility;
import org.smallmind.swing.panel.OptionPanel;

public class ProgressOptionPanel extends OptionPanel implements ProgressOperator, DialogListener {

  private final JProgressBar progressBar;
  private final ProgressRunnable progressRunnable;
  private final boolean withLabel;
  private final boolean closeOnComplete;
  private JLabel processLabel;

  public ProgressOptionPanel (ProgressRunnable progressRunnable, int orientation, int min, int max, boolean withLabel, boolean closeOnComplete) {

    super(new GridBagLayout());

    GridBagConstraints constraint;

    this.progressRunnable = progressRunnable;
    this.withLabel = withLabel;
    this.closeOnComplete = closeOnComplete;

    if (withLabel) {
      processLabel = new JLabel("X");
      ComponentUtility.setPreferredHeight(processLabel, processLabel.getPreferredSize().height);
      processLabel.setText("");
    }

    progressBar = new JProgressBar(orientation, min, max);
    progressBar.setStringPainted(true);
    progressBar.setBorderPainted(true);

    constraint = new GridBagConstraints();

    if (withLabel) {
      constraint.anchor = GridBagConstraints.WEST;
      constraint.fill = GridBagConstraints.HORIZONTAL;
      constraint.insets = new Insets(0, 0, 0, 0);
      constraint.gridx = 0;
      constraint.gridy = 0;
      constraint.weightx = 1;
      constraint.weighty = 0;
      add(processLabel, constraint);
    }

    constraint.anchor = GridBagConstraints.WEST;
    constraint.fill = GridBagConstraints.HORIZONTAL;
    constraint.insets = new Insets((!withLabel) ? 0 : 3, 0, 0, 0);
    constraint.gridx = 0;
    constraint.gridy = (!withLabel) ? 0 : 1;
    constraint.weightx = 1;
    constraint.weighty = 0;
    add(progressBar, constraint);
  }

  public void initialize (OptionDialog optionDialog) {

    Thread progressThread;

    super.initialize(optionDialog);

    progressRunnable.initalize(this);
    progressThread = new Thread(progressRunnable);
    progressThread.start();

    optionDialog.addDialogListener(this);
  }

  public String validateOption (DialogState dialogState) {

    return null;
  }

  public synchronized void setProcessLabel (String name) {

    if (!withLabel) {
      throw new IllegalStateException("Progress bar has been requested without a label");
    }

    processLabel.setText(name);
  }

  public synchronized void setMinimum (int min) {

    progressBar.setMinimum(min);
  }

  public synchronized void setMaximum (int max) {

    progressBar.setMaximum(max);
  }

  public synchronized void setValue (int value) {

    progressBar.setValue(value);
    if (value == progressBar.getMaximum()) {
      if (closeOnComplete) {
        setDialogSate(DialogState.COMPLETE);
        closeParent();
      } else {
        getOptionDialog().replaceButtons(new OptionButton[] {new OptionButton("Continue", DialogState.CONTINUE)});
      }
    }
  }

  public synchronized void dialogHandler (DialogEvent dialogEvent) {

    if (!getDialogState().equals(DialogState.COMPLETE)) {
      progressRunnable.terminate();
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy