Package net.laubenberger.tyr.view.dialog

Source Code of net.laubenberger.tyr.view.dialog.DialogTask

/*
* 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.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Observable;
import java.util.Observer;
import java.util.concurrent.ConcurrentHashMap;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import net.laubenberger.bogatyr.helper.HelperImage;
import net.laubenberger.bogatyr.helper.HelperLog;
import net.laubenberger.bogatyr.helper.HelperString;
import net.laubenberger.bogatyr.misc.exception.RuntimeExceptionIsNull;
import net.laubenberger.bogatyr.service.localizer.Localizer;
import net.laubenberger.bogatyr.view.swing.Button;
import net.laubenberger.bogatyr.view.swing.Dialog;
import net.laubenberger.bogatyr.view.swing.Label;
import net.laubenberger.bogatyr.view.swing.Panel;
import net.laubenberger.bogatyr.view.swing.ProgressBar;
import net.laubenberger.bogatyr.view.swing.pane.PaneScroll;
import net.laubenberger.bogatyr.view.swing.worker.Worker;
import net.laubenberger.tyr.helper.HelperResource;
import net.laubenberger.tyr.misc.ScalableIcon;
import net.laubenberger.tyr.misc.Task;
import net.laubenberger.tyr.misc.TaskImpl;
import net.laubenberger.tyr.model.Icon;
import net.laubenberger.tyr.model.TyrData;
import net.laubenberger.tyr.view.ViewTyr;
import org.jdesktop.swingx.JXTaskPane;
import org.jdesktop.swingx.JXTaskPaneContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Dialog for the tasks.
*
* @author Stefan Laubenberger
* @version 0.7.5 (20110121)
* @since 0.3.0
*/
public class DialogTask extends Dialog implements Observer {
  private static final long serialVersionUID = 4362082035312204543L;

  private static final Logger log = LoggerFactory.getLogger(DialogTask.class);

  final ViewTyr view;
  final Localizer localizer;
  final Map<Worker, Task> workers = new ConcurrentHashMap<Worker, Task>();

  public DialogTask(final ViewTyr view) {
    super(view.getOwner());
    if (log.isTraceEnabled()) log.trace(HelperLog.constructor(view));

    this.view = view;
    localizer = view.getController().getModel().getLocalizer();
    view.getController().getData().addObserver(this);
  }

  {
    // setAlwaysOnTop(true);
    setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
  }

  public void addWorker(final Worker worker, final String title, final String text, final ScalableIcon icon) {
    if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(worker, title, text, icon));
    if (null == worker) {
      throw new RuntimeExceptionIsNull("worker"); //$NON-NLS-1$
    }

    workers.put(worker, new TaskImpl(worker, title, text, icon));

    createLayout();
    setVisible(true);

    if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
  }

  public void removeWorker(final Worker worker) {
    if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(worker));
    if (null == worker) {
      throw new RuntimeExceptionIsNull("worker"); //$NON-NLS-1$
    }

    workers.remove(worker);

    createLayout();

    if (workers.isEmpty()) {
      setVisible(false);
    }

    if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
  }

  /*
   * Private methods
   */

  private void createLayout() {
    getContentPane().removeAll();

    setTitle(view.getController().getModel().getName() + HelperString.COLON + HelperString.SPACE
        + localizer.getValue(HelperResource.RES_LABEL_TASK));

    final JXTaskPaneContainer containerTask = new JXTaskPaneContainer();

    for (final Entry<Worker, Task> pair : workers.entrySet()) {
      containerTask.add(createTaskPane(pair.getValue()));
    }

    getContentPane().add(new PaneScroll(containerTask));
    pack();
  }

  private JXTaskPane createTaskPane(final Task task) {
    final JPanel panel = new Panel(new BorderLayout());

    final JLabel label = new Label(task.getText());
    panel.add(label, BorderLayout.NORTH);

    final JProgressBar pb = new ProgressBar();
    pb.setIndeterminate(true);
    panel.add(pb, BorderLayout.CENTER);

    final JButton button = new Button(localizer.getValue(HelperResource.RES_LABEL_CANCEL_TASK), view.getController()
        .getScaledIcon(Icon.CANCEL), localizer.getTooltip(HelperResource.RES_LABEL_CANCEL_TASK));
    button.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(final ActionEvent e) {
        task.getWorker().cancel(true);
      }
    });
    panel.add(button, BorderLayout.EAST);

    final JXTaskPane tp = new JXTaskPane();
    tp.setFont(new Font("Arial", Font.PLAIN, 12)); //$NON-NLS-1$
    tp.setTitle(task.getTitle());
    tp.setIcon(new ImageIcon(HelperImage.getScaledImage(task.getIcon().getIcon(), new Dimension(16, 0))));
    tp.setFocusable(false);
    tp.add(panel);

    return tp;
  }

  /*
   * Overridden methods
   */

  @Override
  public void setVisible(final boolean isVisible) {
    if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(isVisible));

    if (isVisible) {
      view.getController().getData().addObserver(this);
    } else {
      view.getController().getData().deleteObserver(this);
    }

    super.setVisible(isVisible);

    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());
  }
}
TOP

Related Classes of net.laubenberger.tyr.view.dialog.DialogTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.