001: /*******************************************************************************
002: * Copyright (c) 2006, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.ui.editor.cheatsheet.comp;
011:
012: import org.eclipse.jface.viewers.ISelection;
013: import org.eclipse.pde.core.IModelChangedEvent;
014: import org.eclipse.pde.core.IModelChangedListener;
015: import org.eclipse.pde.internal.core.AbstractModel;
016: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCS;
017: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSConstants;
018: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSModel;
019: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSObject;
020: import org.eclipse.pde.internal.core.util.PDETextHelper;
021: import org.eclipse.pde.internal.ui.IHelpContextIds;
022: import org.eclipse.pde.internal.ui.IPDEUIConstants;
023: import org.eclipse.pde.internal.ui.PDEPlugin;
024: import org.eclipse.pde.internal.ui.PDEPluginImages;
025: import org.eclipse.pde.internal.ui.PDEUIMessages;
026: import org.eclipse.pde.internal.ui.editor.PDEFormPage;
027: import org.eclipse.pde.internal.ui.editor.PDEMasterDetailsBlock;
028: import org.eclipse.ui.PlatformUI;
029: import org.eclipse.ui.forms.IManagedForm;
030: import org.eclipse.ui.forms.editor.FormEditor;
031: import org.eclipse.ui.forms.widgets.ScrolledForm;
032:
033: /**
034: * CompCSPage
035: *
036: */
037: public class CompCSPage extends PDEFormPage implements
038: IModelChangedListener {
039:
040: public static final String PAGE_ID = "compCSPage"; //$NON-NLS-1$
041:
042: private CompCSBlock fBlock;
043:
044: /**
045: * @param editor
046: */
047: public CompCSPage(FormEditor editor) {
048: super (editor, PAGE_ID, PDEUIMessages.SimpleCSPage_0);
049:
050: fBlock = new CompCSBlock(this );
051: }
052:
053: /* (non-Javadoc)
054: * @see org.eclipse.pde.internal.ui.editor.PDEFormPage#getHelpResource()
055: */
056: protected String getHelpResource() {
057: return IPDEUIConstants.PLUGIN_DOC_ROOT
058: + "guide/tools/editors/composite_cs_editor/editor.htm"; //$NON-NLS-1$
059: }
060:
061: // TODO: MP: LOW: CompCS: Clean-up and reuse externalized strings
062:
063: /* (non-Javadoc)
064: * @see org.eclipse.pde.internal.ui.editor.PDEFormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
065: */
066: protected void createFormContent(IManagedForm managedForm) {
067: // Bug: Two veritical scrollbars appear when resizing the editor
068: // vertically
069: // Note: Scrolled form #1 created here
070: ScrolledForm form = managedForm.getForm();
071: // Set page title
072: ICompCSModel model = (ICompCSModel) getModel();
073: // Ensure the model was loaded properly
074: if ((model == null) || (model.isLoaded() == false)) {
075: Exception e = null;
076: if (model instanceof AbstractModel) {
077: e = ((AbstractModel) model).getException();
078: }
079: // Create a formatted error page
080: createFormErrorContent(
081: managedForm,
082: PDEUIMessages.SimpleCSPage_msgCheatSheetLoadFailure,
083: PDEUIMessages.SimpleCSPage_msgCheatSheetParsingFailure,
084: e);
085: return;
086: }
087: // Create the rest of the actions in the form title area
088: super .createFormContent(managedForm);
089: // Form image
090: form.setImage(PDEPlugin.getDefault().getLabelProvider().get(
091: PDEPluginImages.DESC_CHEATSHEET_OBJ));
092: // Form title
093: String title = PDETextHelper.translateReadText(model
094: .getCompCS().getFieldName());
095: if (title.length() > 0) {
096: form.setText(title);
097: } else {
098: form.setText(PDEUIMessages.SimpleCSPage_0);
099: }
100: // Create the masters details block
101: // Note: Scrolled form #2 created here
102: fBlock.createContent(managedForm);
103: // Force the selection in the masters tree section to load the
104: // proper details section
105: fBlock.getMastersSection().fireSelection();
106: // Register this page to be informed of model change events
107: model.addModelChangedListener(this );
108: // Set context-sensitive help
109: PlatformUI.getWorkbench().getHelpSystem().setHelp(
110: form.getBody(), IHelpContextIds.COMPOSITE_CS_EDITOR);
111: }
112:
113: /* (non-Javadoc)
114: * @see org.eclipse.pde.internal.ui.editor.PDEFormPage#dispose()
115: */
116: public void dispose() {
117:
118: ICompCSModel compCSModel = (ICompCSModel) getModel();
119: if (compCSModel != null) {
120: compCSModel.removeModelChangedListener(this );
121: }
122: super .dispose();
123: }
124:
125: /* (non-Javadoc)
126: * @see org.eclipse.pde.core.IModelChangedListener#modelChanged(org.eclipse.pde.core.IModelChangedEvent)
127: */
128: public void modelChanged(IModelChangedEvent event) {
129:
130: if (event.getChangeType() == IModelChangedEvent.CHANGE) {
131: Object[] objects = event.getChangedObjects();
132: ICompCSObject object = (ICompCSObject) objects[0];
133: if (object == null) {
134: // Ignore
135: } else if (object.getType() == ICompCSConstants.TYPE_COMPOSITE_CHEATSHEET) {
136: String changeProperty = event.getChangedProperty();
137: if ((changeProperty != null)
138: && changeProperty
139: .equals(ICompCSConstants.ATTRIBUTE_NAME)) {
140: // Has to be a String if the property is a title
141: // Update the form page title
142: getManagedForm().getForm().setText(
143: PDETextHelper
144: .translateReadText((String) event
145: .getNewValue()));
146: }
147: }
148: } else if (event.getChangeType() == IModelChangedEvent.WORLD_CHANGED) {
149: handleModelEventWorldChanged(event);
150: }
151: // Inform the block
152: fBlock.modelChanged(event);
153: }
154:
155: /**
156: * @return
157: */
158: public ISelection getSelection() {
159: return fBlock.getSelection();
160: }
161:
162: /**
163: * @param event
164: */
165: private void handleModelEventWorldChanged(IModelChangedEvent event) {
166:
167: Object[] objects = event.getChangedObjects();
168: ICompCSObject object = (ICompCSObject) objects[0];
169: if (object == null) {
170: // Ignore
171: return;
172: } else if (object.getType() == ICompCSConstants.TYPE_COMPOSITE_CHEATSHEET) {
173: String newValue = ((ICompCS) object).getFieldName();
174: // Update page title
175: getManagedForm().getForm().setText(
176: PDETextHelper.translateReadText(newValue));
177: }
178: }
179:
180: /**
181: * @return
182: */
183: public PDEMasterDetailsBlock getBlock() {
184: return fBlock;
185: }
186:
187: }
|