blob: 93e029be7ac05dbbe57086b177b351ff00985dc9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.views.memory.renderings;
import org.eclipse.debug.internal.ui.DebugUIMessages;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.SWTUtil;
import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.PlatformUI;
public class TableRenderingPreferencePage extends PreferencePage implements
IPropertyChangeListener, SelectionListener{
private Button fAuto;
private Button fManual;
private IntegerFieldEditor fPreBufferSize;
private IntegerFieldEditor fPostBufferSize;
private IntegerFieldEditor fPageSize;
private Group fGroup;
private Composite fComposite;
public TableRenderingPreferencePage(String title) {
super(title);
}
protected Control createContents(Composite parent) {
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IDebugUIConstants.PLUGIN_ID + ".table_renderings_preference_page_context"); //$NON-NLS-1$
fComposite = new Composite(parent, SWT.NONE);
fComposite.setLayout(new GridLayout());
GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
fComposite.setLayoutData(data);
GridData hspanData = new GridData(SWT.FILL, SWT.FILL, true, false);
hspanData.horizontalSpan = 2;
SWTUtil.createWrapLabel(fComposite, DebugUIMessages.TableRenderingPreferencePage_10, 2, 300);
fAuto = new Button(fComposite, SWT.RADIO);
fAuto.setText(DebugUIMessages.TableRenderingPreferencePage_0);
fAuto.setLayoutData(hspanData);
fGroup = new Group(fComposite, SWT.NONE);
fGroup.setText(DebugUIMessages.TableRenderingPreferencePage_5);
GridData groupData = new GridData(SWT.FILL, SWT.FILL, true, false);
groupData.horizontalSpan = 2;
fGroup.setLayoutData(groupData);
fPreBufferSize = new IntegerFieldEditor(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PRE_BUFFER_SIZE, DebugUIMessages.TableRenderingPreferencePage_6, fGroup);
fPreBufferSize.setPreferenceStore(getPreferenceStore());
fPreBufferSize.load();
fPostBufferSize = new IntegerFieldEditor(IDebugPreferenceConstants.PREF_TABLE_RENDERING_POST_BUFFER_SIZE, DebugUIMessages.TableRenderingPreferencePage_7, fGroup);
fPostBufferSize.setPreferenceStore(getPreferenceStore());
fPostBufferSize.load();
fManual = new Button(fComposite, SWT.RADIO);
fManual.setText(DebugUIMessages.TableRenderingPreferencePage_8);
fManual.setLayoutData(hspanData);
fPageSize = new IntegerFieldEditor(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE, DebugUIMessages.TableRenderingPreferencePage_2, fComposite);
fPageSize.setPreferenceStore(getPreferenceStore());
fPageSize.load();
fPreBufferSize.setPropertyChangeListener(this);
fPostBufferSize.setPropertyChangeListener(this);
fPageSize.setPropertyChangeListener(this);
fAuto.addSelectionListener(this);
fManual.addSelectionListener(this);
loadLoadingModeFromPreference();
updateTextEditorsEnablement();
return fComposite;
}
/**
*
*/
private void loadLoadingModeFromPreference() {
boolean isAuto = getPreferenceStore().getBoolean(IDebugPreferenceConstants.PREF_DYNAMIC_LOAD_MEM);
fAuto.setSelection(isAuto);
fManual.setSelection(!isAuto);
}
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(FieldEditor.VALUE))
{
if (event.getSource().equals(fPageSize) ||
event.getSource().equals(fPostBufferSize) ||
event.getSource().equals(fPreBufferSize))
{
validatePageSize();
}
}
}
private void validatePageSize() {
boolean autoLoad = fAuto.getSelection();
try {
int bufferSize = fPageSize.getIntValue();
int preBuffer = fPreBufferSize.getIntValue();
int postBuffer = fPostBufferSize.getIntValue();
if (!autoLoad && bufferSize < 1)
{
setValid(false);
setErrorMessage(DebugUIMessages.TableRenderingPreferencePage_3);
}
else if (autoLoad)
{
// For auto load mode, we must have have > 1 buffer size
// otherwise, the rendering cannot be loaded dynamically
if (preBuffer < 1 || postBuffer < 1)
{
setValid(false);
setErrorMessage(DebugUIMessages.TableRenderingPreferencePage_9);
}
else
{
setValid(true);
setErrorMessage(null);
}
}
else
{
setValid(true);
setErrorMessage(null);
}
} catch (NumberFormatException e) {
setValid(false);
setErrorMessage(DebugUIMessages.TableRenderingPreferencePage_4);
}
}
protected IPreferenceStore doGetPreferenceStore() {
return DebugUIPlugin.getDefault().getPreferenceStore();
}
public void dispose() {
fAuto.removeSelectionListener(this);
fManual.removeSelectionListener(this);
fPageSize.setPropertyChangeListener(null);
fPreBufferSize.setPropertyChangeListener(null);
fPostBufferSize.setPropertyChangeListener(null);
super.dispose();
}
public void widgetDefaultSelected(SelectionEvent e) {
// do nothing
}
public void widgetSelected(SelectionEvent e) {
updateTextEditorsEnablement();
}
public boolean performOk() {
boolean auto = fAuto.getSelection();
boolean currentValue = getPreferenceStore().getBoolean(IDebugPreferenceConstants.PREF_DYNAMIC_LOAD_MEM);
if (auto != currentValue)
getPreferenceStore().setValue(IDebugPreferenceConstants.PREF_DYNAMIC_LOAD_MEM, auto);
fPageSize.store();
fPreBufferSize.store();
fPostBufferSize.store();
return super.performOk();
}
protected void performDefaults() {
boolean auto = getPreferenceStore().getDefaultBoolean(IDebugPreferenceConstants.PREF_DYNAMIC_LOAD_MEM);
fAuto.setSelection(auto);
fManual.setSelection(!auto);
updateTextEditorsEnablement();
fPageSize.loadDefault();
fPreBufferSize.loadDefault();
fPostBufferSize.loadDefault();
super.performDefaults();
}
/**
*
*/
private void updateTextEditorsEnablement() {
boolean auto = fAuto.getSelection();
fPreBufferSize.setEnabled(auto, fGroup);
fPostBufferSize.setEnabled(auto, fGroup);
fPageSize.setEnabled(!auto, fComposite);
}
}