/*******************************************************************************
* Copyright (c) 2008, 2011 Thomas Holland (thomas@innot.de) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Thomas Holland - initial API and implementation
*******************************************************************************/
package de.innot.avreclipse.ui.editors.targets;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.SharedHeaderFormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import de.innot.avreclipse.core.targets.ITargetConfigChangeListener;
import de.innot.avreclipse.core.targets.ITargetConfigConstants;
import de.innot.avreclipse.core.targets.ITargetConfiguration;
import de.innot.avreclipse.core.targets.ITargetConfigurationWorkingCopy;
import de.innot.avreclipse.core.targets.ToolManager;
/**
*
* @author Thomas Holland
* @since 2.4
*
*/
public class PageGDBServerTool extends BasePage implements ITargetConfigChangeListener {
public final static String ID = "de.innot.avreclipse.ui.targets.gdbservertool";
private final static String TITLE = "GDB Server";
private ITCEditorPart fSectionPart;
private IManagedForm fManagedForm;
/**
* The target configuration this editor page works on. The target config is final and con not be
* changed after instantiation of the page. This is the 'model' for the managed form.
*/
final private ITargetConfigurationWorkingCopy fTCWC;
/**
* Create a new EditorPage.
* <p>
* The page has the id from the {@link #ID} identifier and the fixed title string {@link #TITLE}
* .
* </p>
*
* @param editor
* Parent FormEditor
*/
public PageGDBServerTool(SharedHeaderFormEditor editor) {
super(editor, ID, TITLE);
// Get the TargetConfiguration from the editor input.
IEditorInput ei = editor.getEditorInput();
fTCWC = (ITargetConfigurationWorkingCopy) ei
.getAdapter(ITargetConfigurationWorkingCopy.class);
fTCWC.addPropertyChangeListener(this);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.FormPage#dispose()
*/
@Override
public void dispose() {
if (fTCWC != null) {
fTCWC.removePropertyChangeListener(this);
}
// TODO Auto-generated method stub
super.dispose();
}
/*
* (non-Javadoc)
* @see
* org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
*/
@Override
protected void createFormContent(IManagedForm managedForm) {
fManagedForm = managedForm;
Composite body = managedForm.getForm().getBody();
body.setLayout(new TableWrapLayout());
SectionGDBServerTool gdbserverToolPart = new SectionGDBServerTool();
gdbserverToolPart.setMessageManager(getMessageManager());
managedForm.addPart(gdbserverToolPart);
registerPart(gdbserverToolPart);
gdbserverToolPart.getControl().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
createExtensibleContent();
// ... and give the 'model' to the managed form which will cause the dynamic parts of the
// form to be rendered.
managedForm.setInput(fTCWC);
}
private void createExtensibleContent() {
if (fSectionPart != null) {
// Remove the previous settings part
fManagedForm.removePart(fSectionPart);
unregisterPart(fSectionPart);
fSectionPart.dispose();
fSectionPart = null;
fManagedForm.reflow(true);
}
String toolid = fTCWC.getAttribute(ITargetConfigConstants.ATTR_GDBSERVER_ID);
ITCEditorPart part = SettingsExtensionManager.getDefault().getSettingsPartForTool(toolid);
if (part == null) {
// No extension with a GUI for the tool available
// Create a dummy part that contains just a label to inform the user that there are no
// settings for this tool.
part = createDummyPart(toolid);
}
part.setMessageManager(getMessageManager());
fManagedForm.addPart(part);
registerPart(part);
part.getControl().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
fSectionPart = part;
fManagedForm.reflow(true);
// Setting the part name does not change anything. Probably because the
// MulitPageEditorPart
// does not listen to Part Property change events.
// I leave this code in case the current behaviour gets changed in a future Eclipse
// version.
String toolname = ToolManager.getDefault().getToolName(toolid);
String partname = "GDBServer: " + toolname;
setPartName(partname);
}
/*
* (non-Javadoc)
* @see
* de.innot.avreclipse.core.targets.ITargetConfigChangeListener#attributeChange(de.innot.avreclipse
* .core.targets.ITargetConfiguration, java.lang.String, java.lang.String, java.lang.String)
*/
public void attributeChange(ITargetConfiguration config, String attribute, String oldvalue,
String newvalue) {
if (ITargetConfigConstants.ATTR_GDBSERVER_ID.equals(attribute)) {
// The gdbserver has been changed
createExtensibleContent();
}
}
private ITCEditorPart createDummyPart(String tool) {
return new AbstractTCSectionPart() {
@Override
protected void createSectionContent(Composite parent, FormToolkit toolkit) {
}
@Override
protected String[] getPartAttributes() {
return new String[] {};
}
@Override
protected String getTitle() {
return "Settings";
}
@Override
protected String getDescription() {
return "No Settings available";
}
@Override
protected int getSectionStyle() {
return Section.SHORT_TITLE_BAR | Section.EXPANDED | Section.CLIENT_INDENT;
}
@Override
protected void refreshSectionContent() {
// Do nothing
}
};
}
}