org.eclipse.cdt.llvm.dsf.lldb.ui.internal.LLDBDebugPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.cdt.llvm.dsf.lldb.ui.internal.LLDBDebugPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2016 Ericsson 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
 *******************************************************************************/
package org.eclipse.cdt.llvm.dsf.lldb.ui.internal;

import java.io.File;

import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBDebugPreferenceConstants;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.dialogs.PreferencesUtil;

/**
 * A preference page for settings that are currently supported in LLDB. Based on
 * the GDB equivalent.
 */
public class LLDBDebugPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    private StringFieldEditor fStringFieldEditorCommand;
    @SuppressWarnings("restriction")
    private org.eclipse.cdt.dsf.debug.internal.ui.preferences.StringWithBooleanFieldEditor fEnableStopAtMain;

    /**
     * Constructs the preference page.
     */
    public LLDBDebugPreferencePage() {
        super(FLAT);
        IPreferenceStore store = LLDBUIPlugin.getDefault().getCorePreferenceStore();
        // Note that if we don't set it here, it actually never gets flushed. If
        // this page was to use two preference stores, make sure that both are
        // flushed.
        setPreferenceStore(store);
        setDescription(Messages.LLDBDebugPreferencePage_description);
    }

    @Override
    public void init(IWorkbench workbench) {
    }

    @Override
    protected void createFieldEditors() {
        final Composite parent = getFieldEditorParent();
        final GridLayout layout = new GridLayout();
        layout.marginWidth = 0;
        parent.setLayout(layout);

        final Group group1 = new Group(parent, SWT.NONE);
        group1.setText(Messages.LLDBDebugPreferencePage_defaults_label);
        GridLayout groupLayout = new GridLayout(3, false);
        group1.setLayout(groupLayout);
        group1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        fStringFieldEditorCommand = new StringFieldEditor(ILLDBDebugPreferenceConstants.PREF_DEFAULT_LLDB_COMMAND,
                Messages.LLDBCDebuggerPage_debugger_command, group1);

        fStringFieldEditorCommand.fillIntoGrid(group1, 2);
        GridData stringFieldLayoutData = (GridData) fStringFieldEditorCommand.getTextControl(group1)
                .getLayoutData();
        stringFieldLayoutData.widthHint = 300;

        addField(fStringFieldEditorCommand);
        Button browsebutton = new Button(group1, SWT.PUSH);
        browsebutton.setText(Messages.LLDBCDebuggerPage_browse);
        browsebutton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                handleBrowseButtonSelected(Messages.LLDBCDebuggerPage_browse_dialog_title,
                        fStringFieldEditorCommand);
            }
        });
        setButtonLayoutData(browsebutton);

        fEnableStopAtMain = createStopAtMainEditor(group1);
        fEnableStopAtMain.fillIntoGrid(group1, 3);
        addField(fEnableStopAtMain);

        group1.setLayout(groupLayout);

        createLinkToGdb(parent);
    }

    /*
     * Using full qualified name for return value here so that we don't have to
     * suppress warning on the whole class.
     */
    @SuppressWarnings("restriction")
    private static org.eclipse.cdt.dsf.debug.internal.ui.preferences.StringWithBooleanFieldEditor createStopAtMainEditor(
            final Group group1) {
        return new org.eclipse.cdt.dsf.debug.internal.ui.preferences.StringWithBooleanFieldEditor(
                ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN,
                ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN_SYMBOL,
                Messages.LLDBDebugPreferencePage_Stop_on_startup_at, group1);
    }

    private Control createLinkToGdb(Composite parent) {
        String text = Messages.LLDBDebugPreferencePage_see_gdb_preferences;
        Link link = new Link(parent, SWT.NONE);
        link.setText(text);
        link.addListener(SWT.Selection, new Listener() {
            @Override
            public void handleEvent(Event event) {
                PreferencesUtil.createPreferenceDialogOn(getShell(), event.text, null, null);
            }
        });

        GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
        gridData.widthHint = 150;
        link.setLayoutData(gridData);
        return link;
    }

    private void handleBrowseButtonSelected(final String dialogTitle, final StringFieldEditor stringFieldEditor) {
        FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
        dialog.setText(dialogTitle);
        String lldbCommand = stringFieldEditor.getStringValue().trim();
        int lastSeparatorIndex = lldbCommand.lastIndexOf(File.separator);
        if (lastSeparatorIndex != -1) {
            dialog.setFilterPath(lldbCommand.substring(0, lastSeparatorIndex));
        }
        String res = dialog.open();
        if (res == null) {
            return;
        }
        stringFieldEditor.setStringValue(res);
    }

    @Override
    protected void adjustGridLayout() {
        // Do nothing, already handled during creation of controls.
    }
}