Package net.sphene.goim.rcp

Source Code of net.sphene.goim.rcp.ApplicationWorkbenchWindowAdvisor

/*
* Gamer's Own Instant Messenger
* Copyright (C) 2005-2006 Herbert Poul (kahless@sphene.net)
* http://goim.sphene.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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
*/
package net.sphene.goim.rcp;

import java.util.logging.Logger;

import net.sphene.goim.rcp.extensionpoints.IContactListView;
import net.sphene.goim.rcp.preferences.PreferenceConstants;
import net.sphene.goim.rcp.ui.dialogs.GOIMWindowCloseDialog;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.part.WorkbenchPart;

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
  private Logger logger = Logger.getLogger(ApplicationWorkbenchWindowAdvisor.class.getName());

  private IPreferenceStore store;
  private IPropertyChangeListener propertyChangeListener;

  public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
    super(configurer);
  }

  public ActionBarAdvisor createActionBarAdvisor(
      IActionBarConfigurer configurer) {
    return new ApplicationActionBarAdvisor(configurer);
  }

  @Override
  protected IWorkbenchWindowConfigurer getWindowConfigurer() {
    return super.getWindowConfigurer();
  }

  public void preWindowOpen() {
    IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
    store = GOIMPlugin.getDefault().getPreferenceStore();
    if(PlatformUI.getWorkbench().getWorkbenchWindowCount() < 1) {
      // I guess this is the main window .. so .. let's set an appropriate size for contact lists
      configurer.setInitialSize(new Point(300, 500));

      String style = store.getString(PreferenceConstants.P_MAIN_WINDOW_STYLE);
      if(style.equals(PreferenceConstants.P_MAIN_WINDOW_STYLE_VALUE_OSDEFAULT)) {
       
      } else if(style.equals(PreferenceConstants.P_MAIN_WINDOW_STYLE_VALUE_TOOL)) {
        configurer.setShellStyle(configurer.getShellStyle() | SWT.TOOL);
      } else if(style.equals(PreferenceConstants.P_MAIN_WINDOW_STYLE_VALUE_NOBORDER)) {
        configurer.setShellStyle(SWT.TOOL | SWT.RESIZE);
      }
      configurer.setData("isMainWindow",true);
    } else {
      // This is a secondary window which may be used for chat windows.. so .. make it wider ...
      configurer.setInitialSize(new Point(500,400));
    }
    configurer.setShowMenuBar(store.getBoolean(PreferenceConstants.P_MAIN_WINDOW_DISPLAY_MENUBAR));
    configurer.setShowCoolBar(false);
    configurer.setShowStatusLine(false);
    configurer.setShowPerspectiveBar(true);
    configurer.setTitle("Gamers Own Instant Messenger");
    logger.finest("WorkbenchWindow.preWindowOpen");
   
  }

  @Override
  public void postWindowOpen() {
    super.postWindowOpen();
    logger.finest("WorkbenchWindow.postWindowOpen");
   
    getWindowConfigurer().getWindow().getShell().setMinimumSize(150,200);
    if(getWindowConfigurer().getData("isMainWindow") != null) {
      getWindowConfigurer().getWindow().getShell().addListener(SWT.Iconify,new Listener() {
        public void handleEvent(Event event) {
          if(GOIMPlugin.getDefault().getTrayItem() != null)
            getWindowConfigurer().getWindow().getShell().setVisible(false);
        } });
    }
    for(final IWorkbenchPage page : getWindowConfigurer().getWindow().getPages()) {
      if(page.getViewReferences().length < 1)
        getWindowConfigurer().setShowMenuBar(true);
      page.addPartListener(new IPartListener() {
        public void partActivated(IWorkbenchPart part) {
        }
        public void partBroughtToTop(IWorkbenchPart part) {
        }
        public void partClosed(IWorkbenchPart part) {
          if(page.getViewReferences().length < 1)
            getWindowConfigurer().setShowMenuBar(true);
        }
        public void partDeactivated(IWorkbenchPart part) {
        }

        public void partOpened(IWorkbenchPart part) {
          if(part instanceof WorkbenchPart)
            getWindowConfigurer().setShowMenuBar(store.getBoolean(PreferenceConstants.P_MAIN_WINDOW_DISPLAY_MENUBAR));
        } });
    }
  }

  @Override
  public boolean preWindowShellClose() {
    if(GOIMPlugin.getDefault().getTrayItem() == null) return true;
    IWorkbenchWindow window = super.getWindowConfigurer().getWindow();
    for(IWorkbenchPage windowPage : window.getPages()) {
      for(IViewReference viewRef : windowPage.getViewReferences()) {
        if(viewRef.getView(false) != null && viewRef.getView(false) instanceof IContactListView) {

          String [ ] buttonTitle = { "OK" };
          if(!store.getBoolean(PreferenceConstants.P_MAIN_WINDOW_CLOSING_STATUS)){
            new GOIMWindowCloseDialog( window.getShell(), "GOIM minimized to System tray",
                null, null, 0, buttonTitle, 0,
                "Do not show again", true ).open();
          }
          window.getShell().setVisible(false);
          return false;
        }
      }
    }
    logger.finest("WorkbenchWindow.preWindowShellClose");
    return super.preWindowShellClose();
  }

  @Override
  public IStatus saveState(IMemento memento) {
    logger.finest("WorkbenchWindow.saveState");
    return super.saveState(memento);
  }

  @Override
  public Control createEmptyWindowContents(Composite parent) {
    getWindowConfigurer().setShowMenuBar(true);
    return super.createEmptyWindowContents(parent);
  }

  @Override
  public void createWindowContents(Shell shell) {
    logger.finest("createWindowContents");
    store.addPropertyChangeListener(propertyChangeListener = new IPropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent event) {
        if(event.getProperty().equals(PreferenceConstants.P_MAIN_WINDOW_DISPLAY_MENUBAR))
          getWindowConfigurer().setShowMenuBar(store.getBoolean(PreferenceConstants.P_MAIN_WINDOW_DISPLAY_MENUBAR));
      }
    });
    getWindowConfigurer().getWindow().getShell().addListener(SWT.Dispose, new Listener() {
      public void handleEvent(Event event) {
        store.removePropertyChangeListener(propertyChangeListener);
        propertyChangeListener = null;
      }
    });
    super.createWindowContents(shell);
  }
}
TOP

Related Classes of net.sphene.goim.rcp.ApplicationWorkbenchWindowAdvisor

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.