/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.ui.properties; import net.rim.ejde.internal.core.ContextManager; import net.rim.ejde.internal.model.BlackBerryProject; import net.rim.ejde.internal.ui.editors.model.BlackBerryProjectFormEditor; import net.rim.ejde.internal.util.Messages; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jface.preference.IPreferencePageContainer; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Link; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PropertyPage; import org.eclipse.ui.part.FileEditorInput; /** * Allows an alternate switch to the Application Descriptor editor from the Project properties page. * * @author mcacenco * */ public class BlackBerryProjectPropertiesLinkPage extends PropertyPage { private Logger _log = Logger.getLogger( BlackBerryProjectPropertiesLinkPage.class ); @Override protected Control createContents( Composite parent ) { Link lnk = new Link( parent, SWT.NONE ); lnk.setText( Messages.BlackBerryProjectPropertiesLinkPage_Text ); // lnk.setFont(new Font(getShell().getDisplay(), // JFaceResources.getDefaultFontDescriptor().getFontData()[0].getName(), // 12, SWT.BOLD)); final IPreferencePageContainer ippc = this.getContainer(); lnk.addSelectionListener( new SelectionListener() { public void widgetDefaultSelected( SelectionEvent e ) { // Do Nothing } public void widgetSelected( SelectionEvent e ) { IResource resource = (IResource) getElement().getAdapter( IResource.class ); if( resource instanceof IProject ) { IJavaProject ijproj = JavaCore.create( (IProject) resource ); BlackBerryProject bbProject = new BlackBerryProject( ijproj ); // bbProject.addStore(); ContextManager.PLUGIN.setBBProperties( bbProject.getProject().getName(), bbProject.getProperties(), true ); final IFile mfh = bbProject.getMetaFileHandler(); if( null != mfh && mfh.exists() ) { final IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); final IEditorInput input = new FileEditorInput( mfh ); if( !activateCurrentEditor( workbenchWindow, input ) ) { Job openEditor = new Job( "Open Editor ..." ) { @Override protected IStatus run( IProgressMonitor monitor ) { Display.getDefault().asyncExec( new Runnable() { @Override public void run() { try { workbenchWindow.getActivePage().openEditor( input, BlackBerryProjectFormEditor.EDITOR_ID ); } catch( PartInitException e ) { _log.error( e ); } } } ); return Status.OK_STATUS; } }; openEditor.setUser( false ); openEditor.setSystem( true ); openEditor.schedule(); } if( ippc instanceof PreferenceDialog ) { ( (PreferenceDialog) ippc ).close(); // .okPressed(); } } else { _log.warn( "No file: " + mfh ); } } } } ); noDefaultAndApplyButton(); return parent; } private boolean activateCurrentEditor( IWorkbenchWindow iww, IEditorInput input ) { IWorkbenchPage[] pages = iww.getPages(); IEditorPart iedp = null; for( int i = 0; i < pages.length; i++ ) { IEditorReference[] iderefs = pages[ i ].findEditors( input, BlackBerryProjectFormEditor.EDITOR_ID, IWorkbenchPage.MATCH_INPUT ); if( iderefs != null && iderefs.length > 0 ) { iedp = iderefs[ 0 ].getEditor( true ); pages[ i ].activate( iedp ); return true; } } return false; } }