1 /*******************************************************************************
2 * Copyright (c) 2016 Movidius Inc. and others
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
9 *******************************************************************************/
11 package org
.eclipse
.tracecompass
.internal
.tmf
.ui
.symbols
;
14 import java
.text
.MessageFormat
;
16 import org
.eclipse
.jdt
.annotation
.NonNull
;
17 import org
.eclipse
.swt
.SWT
;
18 import org
.eclipse
.swt
.events
.SelectionAdapter
;
19 import org
.eclipse
.swt
.events
.SelectionEvent
;
20 import org
.eclipse
.swt
.layout
.GridData
;
21 import org
.eclipse
.swt
.layout
.GridLayout
;
22 import org
.eclipse
.swt
.widgets
.Button
;
23 import org
.eclipse
.swt
.widgets
.Composite
;
24 import org
.eclipse
.swt
.widgets
.Control
;
25 import org
.eclipse
.swt
.widgets
.FileDialog
;
26 import org
.eclipse
.swt
.widgets
.Text
;
27 import org
.eclipse
.tracecompass
.internal
.tmf
.ui
.symbols
.BasicSymbolProvider
.SourceKind
;
28 import org
.eclipse
.tracecompass
.tmf
.ui
.symbols
.AbstractSymbolProviderPreferencePage
;
31 * Preference page that allows the user to configure a
32 * {@link BasicSymbolProvider}
37 public class BasicSymbolProviderPreferencePage
extends AbstractSymbolProviderPreferencePage
{
39 private Button fRadioBinaryFile
;
40 private Text fTextBinaryFile
;
41 private Button fButtonBrowseBinary
;
42 private Button fRadioMappingFile
;
43 private Text fTextMappingFile
;
44 private Button fButtonBrowseMapping
;
47 * Creates a new object for the given provider
52 public BasicSymbolProviderPreferencePage(@NonNull BasicSymbolProvider provider
) {
54 setDescription(MessageFormat
.format(Messages
.BasicSymbolProviderPrefPage_description
, provider
.getTrace().getName()));
59 protected Control
createContents(Composite parent
) {
60 Composite composite
= new Composite(parent
, SWT
.NONE
);
61 composite
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
62 composite
.setLayout(new GridLayout(3, false));
64 fRadioBinaryFile
= new Button(composite
, SWT
.RADIO
);
65 fRadioBinaryFile
.setText(Messages
.BasicSymbolProviderPrefPage_radioBinaryFile_text
);
66 fRadioBinaryFile
.setToolTipText(Messages
.BasicSymbolProviderPrefPage_radioBinaryFile_tooltip
);
67 fRadioBinaryFile
.setSelection(true);
68 fRadioBinaryFile
.addSelectionListener(new SelectionAdapter() {
70 public void widgetSelected(SelectionEvent e
) {
71 switchToSourceKind(SourceKind
.BINARY
, true);
75 fTextBinaryFile
= new Text(composite
, SWT
.BORDER
);
76 fTextBinaryFile
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
77 fTextBinaryFile
.setEditable(false);
79 fButtonBrowseBinary
= new Button(composite
, SWT
.NONE
);
80 fButtonBrowseBinary
.setText(Messages
.BasicSymbolProviderPrefPage_btnBrowse
);
81 fButtonBrowseBinary
.addSelectionListener(new SelectionAdapter() {
84 public void widgetSelected(SelectionEvent e
) {
85 browseForFile(fTextBinaryFile
, Messages
.BasicSymbolProviderPrefPage_ImportBinaryFileDialogTitle
);
89 fRadioMappingFile
= new Button(composite
, SWT
.RADIO
);
90 fRadioMappingFile
.setText(Messages
.BasicSymbolProviderPrefPage_radioMappingFile_text
);
91 fRadioMappingFile
.setToolTipText(Messages
.BasicSymbolProviderPrefPage_radioMappingFile_tooltip
);
92 fRadioMappingFile
.setSelection(false);
93 fRadioMappingFile
.addSelectionListener(new SelectionAdapter() {
95 public void widgetSelected(SelectionEvent e
) {
96 switchToSourceKind(SourceKind
.MAPPING
, true);
100 fTextMappingFile
= new Text(composite
, SWT
.BORDER
);
101 fTextMappingFile
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
102 fTextMappingFile
.setEnabled(false);
103 fTextMappingFile
.setEditable(false);
105 fButtonBrowseMapping
= new Button(composite
, SWT
.NONE
);
106 fButtonBrowseMapping
.setText(Messages
.BasicSymbolProviderPrefPage_btnBrowse
);
107 fButtonBrowseMapping
.setEnabled(false);
108 fButtonBrowseMapping
.addSelectionListener(new SelectionAdapter() {
111 public void widgetSelected(SelectionEvent e
) {
112 browseForFile(fTextMappingFile
, Messages
.BasicSymbolProviderPrefPage_ImportMappingDialogTitle
);
116 loadProviderSettings();
121 private void browseForFile(Text fileField
, String dialogTitle
) {
122 FileDialog fileDialog
= new FileDialog(getShell(), SWT
.OPEN
);
123 fileDialog
.setText(dialogTitle
);
124 String filePath
= fileDialog
.open();
125 if (filePath
!= null) {
126 fileField
.setText(filePath
);
132 private void loadProviderSettings() {
133 BasicSymbolProvider provider
= (BasicSymbolProvider
) getSymbolProvider();
134 String source
= provider
.getConfiguredSource();
135 SourceKind sourceKind
= provider
.getConfiguredSourceKind();
136 if (source
!= null) {
137 if (sourceKind
== SourceKind
.BINARY
) {
138 fTextBinaryFile
.setText(source
);
140 fTextMappingFile
.setText(source
);
144 switchToSourceKind(sourceKind
, false);
148 private void switchToSourceKind(@NonNull SourceKind kind
, boolean broadcastChanges
) {
149 fRadioBinaryFile
.setSelection(kind
== SourceKind
.BINARY
);
150 fTextBinaryFile
.setEnabled(kind
== SourceKind
.BINARY
);
151 fButtonBrowseBinary
.setEnabled(kind
== SourceKind
.BINARY
);
153 fRadioMappingFile
.setSelection(kind
== SourceKind
.MAPPING
);
154 fTextMappingFile
.setEnabled(kind
== SourceKind
.MAPPING
);
155 fButtonBrowseMapping
.setEnabled(kind
== SourceKind
.MAPPING
);
156 if (broadcastChanges
) {
162 public void saveConfiguration() {
163 BasicSymbolProvider provider
= (BasicSymbolProvider
) getSymbolProvider();
164 provider
.setConfiguredSource(getCurrentSource(), getCurrentSourceKind());
167 private @NonNull SourceKind
getCurrentSourceKind() {
168 if (fRadioBinaryFile
.getSelection()) {
169 return SourceKind
.BINARY
;
171 return SourceKind
.MAPPING
;
174 private String
getCurrentSource() {
175 if (fRadioBinaryFile
.getSelection()) {
176 return fTextBinaryFile
.getText();
178 return fTextMappingFile
.getText();
181 private void broadcastChanges() {
182 String filePath
= getCurrentSource();
183 String errorMessage
= null;
184 if (filePath
!= null && filePath
.length() > 0) {
185 File file
= new File(filePath
);
186 if (!file
.isFile()) {
187 errorMessage
= Messages
.BasicSymbolProviderPrefPage_errorFileDoesNotExists
;
190 errorMessage
= Messages
.BasicSymbolProviderPrefPage_errorSpecifyFile
;
192 setErrorMessage(errorMessage
);
193 setValid(errorMessage
== null);