001: /*******************************************************************************
002: * Copyright (c) 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.toc.details;
011:
012: import org.eclipse.core.resources.IFile;
013: import org.eclipse.jface.viewers.ISelection;
014: import org.eclipse.jface.window.Window;
015: import org.eclipse.pde.internal.core.text.toc.TocObject;
016: import org.eclipse.pde.internal.core.text.toc.TocTopic;
017: import org.eclipse.pde.internal.ui.PDEPlugin;
018: import org.eclipse.pde.internal.ui.PDEUIMessages;
019: import org.eclipse.pde.internal.ui.editor.FormEntryAdapter;
020: import org.eclipse.pde.internal.ui.editor.toc.TocInputContext;
021: import org.eclipse.pde.internal.ui.editor.toc.TocTreeSection;
022: import org.eclipse.pde.internal.ui.parts.FormEntry;
023: import org.eclipse.pde.internal.ui.util.FileValidator;
024: import org.eclipse.swt.SWT;
025: import org.eclipse.swt.widgets.Composite;
026: import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
027: import org.eclipse.ui.forms.IFormPart;
028: import org.eclipse.ui.forms.events.HyperlinkEvent;
029: import org.eclipse.ui.model.WorkbenchContentProvider;
030: import org.eclipse.ui.model.WorkbenchLabelProvider;
031:
032: public class TocTopicDetails extends TocAbstractDetails {
033:
034: private TocTopic fDataTOCTopic;
035:
036: private FormEntry fNameEntry;
037: private FormEntry fPageEntry;
038:
039: /**
040: * @param masterSection
041: */
042: public TocTopicDetails(TocTreeSection masterSection) {
043: super (masterSection, TocInputContext.CONTEXT_ID);
044: fDataTOCTopic = null;
045:
046: fNameEntry = null;
047: fPageEntry = null;
048: }
049:
050: /**
051: * @param object
052: */
053: public void setData(TocTopic object) {
054: // Set data
055: fDataTOCTopic = object;
056: }
057:
058: protected TocObject getDataObject() {
059: return fDataTOCTopic;
060: }
061:
062: protected FormEntry getPathEntryField() {
063: return fPageEntry;
064: }
065:
066: /* (non-Javadoc)
067: * @see org.eclipse.pde.internal.ui.editor.toc.TocAbstractDetails#createDetails(org.eclipse.swt.widgets.Composite)
068: */
069: public void createFields(Composite parent) {
070: createNameWidget(parent);
071: createSpace(parent);
072: createPageWidget(parent);
073: }
074:
075: /**
076: * @param parent
077: */
078: private void createNameWidget(Composite parent) {
079: createLabel(parent, getManagedForm().getToolkit(),
080: PDEUIMessages.TocTopicDetails_name_desc);
081:
082: fNameEntry = new FormEntry(parent, getManagedForm()
083: .getToolkit(), PDEUIMessages.TocDetails_name, SWT.NONE);
084: }
085:
086: /**
087: * @param parent
088: */
089: private void createPageWidget(Composite parent) {
090: createLabel(parent, getManagedForm().getToolkit(),
091: PDEUIMessages.TocTopicDetails_page_desc);
092:
093: fPageEntry = new FormEntry(parent, getManagedForm()
094: .getToolkit(), PDEUIMessages.TocDetails_topic,
095: PDEUIMessages.GeneralInfoSection_browse, isEditable());
096: }
097:
098: protected String getDetailsTitle() {
099: return PDEUIMessages.TocTopicDetails_title;
100: }
101:
102: protected String getDetailsDescription() {
103: return null;
104: }
105:
106: /* (non-Javadoc)
107: * @see org.eclipse.pde.internal.ui.editor.toc.TocAbstractDetails#hookListeners()
108: */
109: public void hookListeners() {
110: createNameEntryListeners();
111: createPageEntryListeners();
112: }
113:
114: /**
115: *
116: */
117: private void createNameEntryListeners() {
118: fNameEntry.setFormEntryListener(new FormEntryAdapter(this ) {
119: public void textValueChanged(FormEntry entry) {
120: // Ensure data object is defined
121: if (fDataTOCTopic != null) {
122: {
123: fDataTOCTopic.setFieldLabel(fNameEntry
124: .getValue());
125: }
126: }
127: }
128: });
129: }
130:
131: /**
132: *
133: */
134: private void createPageEntryListeners() {
135: fPageEntry.setFormEntryListener(new FormEntryAdapter(this ) {
136: public void textValueChanged(FormEntry entry) { // Ensure data object is defined
137: if (fDataTOCTopic != null) {
138: fDataTOCTopic.setFieldRef(fPageEntry.getValue());
139: }
140: }
141:
142: public void browseButtonSelected(FormEntry entry) {
143: handleBrowse();
144: }
145:
146: public void linkActivated(HyperlinkEvent e) {
147: handleOpen();
148: }
149: });
150: }
151:
152: private void handleBrowse() {
153: ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
154: getPage().getSite().getShell(),
155: new WorkbenchLabelProvider(),
156: new WorkbenchContentProvider());
157:
158: dialog.setValidator(new FileValidator());
159: dialog.setAllowMultiple(false);
160: dialog.setTitle(PDEUIMessages.TocDetails_browseSelection);
161: dialog.setMessage(PDEUIMessages.TocDetails_browseMessage);
162: dialog.addFilter(new TocPageFilter());
163:
164: dialog.setInput(PDEPlugin.getWorkspace().getRoot());
165:
166: if (dialog.open() == Window.OK) {
167: IFile file = (IFile) dialog.getFirstResult();
168: setPathEntry(file);
169: }
170: }
171:
172: /* (non-Javadoc)
173: * @see org.eclipse.pde.internal.ui.editor.toc.TocAbstractDetails#updateFields()
174: */
175: public void updateFields() {
176: // Ensure data object is defined
177: if (fDataTOCTopic != null) { // Update name entry
178: updateNameEntry(isEditableElement());
179: updatePageEntry(isEditableElement());
180: }
181: }
182:
183: /**
184: * @param editable
185: */
186: private void updateNameEntry(boolean editable) {
187: fNameEntry.setValue(fDataTOCTopic.getFieldLabel(), true);
188: fNameEntry.setEditable(editable);
189: }
190:
191: /**
192: * @param editable
193: */
194: private void updatePageEntry(boolean editable) {
195: fPageEntry.setValue(fDataTOCTopic.getFieldRef(), true);
196: fPageEntry.setEditable(editable);
197: }
198:
199: /* (non-Javadoc)
200: * @see org.eclipse.ui.forms.AbstractFormPart#commit(boolean)
201: */
202: public void commit(boolean onSave) {
203: super .commit(onSave);
204: // Only required for form entries
205: fNameEntry.commit();
206: fPageEntry.commit();
207:
208: }
209:
210: /* (non-Javadoc)
211: * @see org.eclipse.ui.forms.IPartSelectionListener#selectionChanged(org.eclipse.ui.forms.IFormPart, org.eclipse.jface.viewers.ISelection)
212: */
213: public void selectionChanged(IFormPart part, ISelection selection) {
214: // Get the first selected object
215: Object object = getFirstSelectedObject(selection);
216: // Ensure we have the right type
217: if (object != null && object instanceof TocTopic) {
218: // Set data
219: setData((TocTopic) object);
220: // Update the UI given the new data
221: updateFields();
222: }
223: }
224:
225: }
|