/*
* 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);
}
}