package org.xmind.ui.internal.dialogs; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorPart; import org.xmind.core.IRevision; import org.xmind.core.IRevisionManager; import org.xmind.core.ISheet; import org.xmind.core.IWorkbook; import org.xmind.ui.internal.editor.MindMapEditor; public class ReduceFileSizeDialog extends Dialog { private IEditorPart editor; private Button editingHistoryCheckbox; private Button previewImageCheckbox; public ReduceFileSizeDialog(IEditorPart editor) { super(editor.getSite().getShell()); this.editor = editor; } public void create() { super.create(); // getButton(IDialogConstants.OK_ID).setEnabled(false); } protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); Label title = new Label(composite, SWT.NONE); title.setText(DialogMessages.ReduceFileSize_text); FontData fontData = title.getFont().getFontData()[0]; Font font = new Font(Display.getDefault(), new FontData( fontData.getName(), fontData.getHeight() + 2, SWT.BOLD)); title.setFont(font); Label label = new Label(composite, SWT.WRAP); label.setText(DialogMessages.ReduceFileSize_Advise_text); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false); gridData.widthHint = 380; gridData.heightHint = SWT.DEFAULT; label.setLayoutData(gridData); editingHistoryCheckbox = new Button(composite, SWT.CHECK); editingHistoryCheckbox.setSelection(true); editingHistoryCheckbox .setText(DialogMessages.DeleteEditingHistory_text); GridData ehcGridData = new GridData(SWT.FILL, SWT.FILL, true, false); ehcGridData.widthHint = 380; ehcGridData.heightHint = SWT.DEFAULT; ehcGridData.horizontalIndent = 20; ehcGridData.verticalIndent = 10; editingHistoryCheckbox.setLayoutData(ehcGridData); previewImageCheckbox = new Button(composite, SWT.CHECK); previewImageCheckbox.setText(DialogMessages.DeletePreviewImage_text); GridData picGridData = new GridData(SWT.FILL, SWT.FILL, true, false); picGridData.widthHint = 380; picGridData.heightHint = SWT.DEFAULT; picGridData.horizontalIndent = 20; previewImageCheckbox.setLayoutData(picGridData); SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getButton(IDialogConstants.OK_ID) .setEnabled(editingHistoryCheckbox.getSelection() || previewImageCheckbox.getSelection()); } }; editingHistoryCheckbox.addSelectionListener(listener); previewImageCheckbox.addSelectionListener(listener); return composite; } @Override protected void okPressed() { boolean deleteEditingHistory = editingHistoryCheckbox.getSelection(); boolean deletePreviewImage = previewImageCheckbox.getSelection(); if (!deleteEditingHistory && !deletePreviewImage) return; IWorkbook workbook = (IWorkbook) editor.getAdapter(IWorkbook.class); if (deleteEditingHistory) { for (ISheet sheet : workbook.getSheets()) { IRevisionManager rm = workbook.getRevisionRepository() .getRevisionManager(sheet.getId(), IRevision.SHEET); List<IRevision> revisions = new ArrayList<IRevision>( rm.getRevisions()); for (IRevision r : revisions) { rm.removeRevision(r); } } } if (deletePreviewImage) { ((MindMapEditor) editor).skipNextPreviewImage(); } NullProgressMonitor progress = new NullProgressMonitor(); editor.doSave(progress); if (progress.isCanceled()) { getShell().setActive(); return; } super.okPressed(); } protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(DialogMessages.ReduceFileSize_text); } protected void createButtonsForButtonBar(Composite parent) { // create OK and Cancel buttons by default createButton(parent, IDialogConstants.OK_ID, DialogMessages.ReduceAndSave_text, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } }