Package org.gudy.azureus2.ui.swt.views

Source Code of org.gudy.azureus2.ui.swt.views.ConfigShell

package org.gudy.azureus2.ui.swt.views;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;

import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.UIFunctionsSWT;

/**
* A shell containing the <code>ConfigView</code>
* This is used to pop-up the configs in a Shell as opposed to hosting it in the application
* This class is used to ensure that only one shell is opened at any time.
* @author khai
*
*/
public class ConfigShell
{

  private static ConfigShell instance;

  private Shell shell;

  private ConfigView configView;

  public static ConfigShell getInstance() {
    if (null == instance) {
      instance = new ConfigShell();
    }
    return instance;
  }

  private ConfigShell() {
  }

  /**
   * Opens the <code>ConfigView</code> inside a pop-up <code>Shell</code>.
   * If the Shell is opened already then just force it active
   * @param width
   * @param height
   */
  public void open(String section) {
    if (null != shell && false == shell.isDisposed()) {
      configView.selectSection(section);
      if (true == shell.getMinimized()) {
        shell.setMinimized(false);
      }
      shell.forceActive();
      shell.forceFocus();
    } else {
      shell = ShellFactory.createMainShell(SWT.SHELL_TRIM & ~SWT.MIN);
      shell.setLayout(new GridLayout());
      shell.setText(MessageText.getString(MessageText.resolveLocalizationKey("ConfigView.title.full")));
      Utils.setShellIcon(shell);
      configView = new ConfigView();
      configView.initialize(shell);
      configView.selectSection(section);

      /*
       * Set default size and centers the shell if it's configuration does not exist yet
       */
      if (null == COConfigurationManager.getStringParameter(
          "options.rectangle", null)) {
        Rectangle shellBounds = shell.getMonitor().getBounds();
        Point size = new Point(shellBounds.width * 10 / 11,
            shellBounds.height * 10 / 11);
        if (size.x > 1400) {
          size.x = 1400;
        }
        if (size.y > 700) {
          size.y = 700;
        }
        shell.setSize(size);
        Utils.centerWindowRelativeTo(shell, getMainShell());
      }

      Utils.linkShellMetricsToConfig(shell, "options");

      /*
       * Auto-save when the shell closes
       */
      shell.addListener(SWT.Close, new Listener() {
        public void handleEvent(Event event) {
          configView.save();
          event.doit = true;
        }
      });
     
      shell.addTraverseListener(new TraverseListener() {
        public void keyTraversed(TraverseEvent e) {
          if (e.detail == SWT.TRAVERSE_ESCAPE) {
            shell.dispose();
          }
        }
      });

      shell.addDisposeListener(
        new DisposeListener()
        {
          public void
          widgetDisposed(
            DisposeEvent arg0 )
          {
            close();
          }
        });
     
      shell.open();
    }
  }

  private void
  close()
  {
    // if (null != shell && false == shell.isDisposed()) {
    //  shell.close();
    // }
      // clear these down as view now dead
   
    configView.delete();
   
    shell    = null;
    configView  = null;
  }

  private Shell getMainShell() {
    UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
    if (null != uiFunctions) {
      return uiFunctions.getMainShell();
    }

    throw new IllegalStateException(
        "No instance of UIFunctionsSWT found; the UIFunctionsManager might not have been initialized properly");

  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.views.ConfigShell

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.