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
.dialog
.TmfFileDialogFactory
;
29 import org
.eclipse
.tracecompass
.tmf
.ui
.symbols
.AbstractSymbolProviderPreferencePage
;
32 * Preference page that allows the user to configure a
33 * {@link BasicSymbolProvider}
38 public class BasicSymbolProviderPreferencePage
extends AbstractSymbolProviderPreferencePage
{
40 private Button fRadioBinaryFile
;
41 private Text fTextBinaryFile
;
42 private Button fButtonBrowseBinary
;
43 private Button fRadioMappingFile
;
44 private Text fTextMappingFile
;
45 private Button fButtonBrowseMapping
;
48 * Creates a new object for the given provider
53 public BasicSymbolProviderPreferencePage(@NonNull BasicSymbolProvider provider
) {
55 setDescription(MessageFormat
.format(Messages
.BasicSymbolProviderPrefPage_description
, provider
.getTrace().getName()));
60 protected Control
createContents(Composite parent
) {
61 Composite composite
= new Composite(parent
, SWT
.NONE
);
62 composite
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
63 composite
.setLayout(new GridLayout(3, false));
65 fRadioBinaryFile
= new Button(composite
, SWT
.RADIO
);
66 fRadioBinaryFile
.setText(Messages
.BasicSymbolProviderPrefPage_radioBinaryFile_text
);
67 fRadioBinaryFile
.setToolTipText(Messages
.BasicSymbolProviderPrefPage_radioBinaryFile_tooltip
);
68 fRadioBinaryFile
.setSelection(true);
69 fRadioBinaryFile
.addSelectionListener(new SelectionAdapter() {
71 public void widgetSelected(SelectionEvent e
) {
72 switchToSourceKind(SourceKind
.BINARY
, true);
76 fTextBinaryFile
= new Text(composite
, SWT
.BORDER
);
77 fTextBinaryFile
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
78 fTextBinaryFile
.setEditable(false);
80 fButtonBrowseBinary
= new Button(composite
, SWT
.NONE
);
81 fButtonBrowseBinary
.setText(Messages
.BasicSymbolProviderPrefPage_btnBrowse
);
82 fButtonBrowseBinary
.addSelectionListener(new SelectionAdapter() {
85 public void widgetSelected(SelectionEvent e
) {
86 browseForFile(fTextBinaryFile
, Messages
.BasicSymbolProviderPrefPage_ImportBinaryFileDialogTitle
);
90 fRadioMappingFile
= new Button(composite
, SWT
.RADIO
);
91 fRadioMappingFile
.setText(Messages
.BasicSymbolProviderPrefPage_radioMappingFile_text
);
92 fRadioMappingFile
.setToolTipText(Messages
.BasicSymbolProviderPrefPage_radioMappingFile_tooltip
);
93 fRadioMappingFile
.setSelection(false);
94 fRadioMappingFile
.addSelectionListener(new SelectionAdapter() {
96 public void widgetSelected(SelectionEvent e
) {
97 switchToSourceKind(SourceKind
.MAPPING
, true);
101 fTextMappingFile
= new Text(composite
, SWT
.BORDER
);
102 fTextMappingFile
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
103 fTextMappingFile
.setEnabled(false);
104 fTextMappingFile
.setEditable(false);
106 fButtonBrowseMapping
= new Button(composite
, SWT
.NONE
);
107 fButtonBrowseMapping
.setText(Messages
.BasicSymbolProviderPrefPage_btnBrowse
);
108 fButtonBrowseMapping
.setEnabled(false);
109 fButtonBrowseMapping
.addSelectionListener(new SelectionAdapter() {
112 public void widgetSelected(SelectionEvent e
) {
113 browseForFile(fTextMappingFile
, Messages
.BasicSymbolProviderPrefPage_ImportMappingDialogTitle
);
117 loadProviderSettings();
122 private void browseForFile(Text fileField
, String dialogTitle
) {
123 FileDialog fileDialog
= TmfFileDialogFactory
.create(getShell(), SWT
.OPEN
);
124 fileDialog
.setText(dialogTitle
);
125 String filePath
= fileDialog
.open();
126 if (filePath
!= null) {
127 fileField
.setText(filePath
);
133 private void loadProviderSettings() {
134 BasicSymbolProvider provider
= (BasicSymbolProvider
) getSymbolProvider();
135 String source
= provider
.getConfiguredSource();
136 SourceKind sourceKind
= provider
.getConfiguredSourceKind();
137 if (source
!= null) {
138 if (sourceKind
== SourceKind
.BINARY
) {
139 fTextBinaryFile
.setText(source
);
141 fTextMappingFile
.setText(source
);
145 switchToSourceKind(sourceKind
, false);
149 private void switchToSourceKind(@NonNull SourceKind kind
, boolean broadcastChanges
) {
150 fRadioBinaryFile
.setSelection(kind
== SourceKind
.BINARY
);
151 fTextBinaryFile
.setEnabled(kind
== SourceKind
.BINARY
);
152 fButtonBrowseBinary
.setEnabled(kind
== SourceKind
.BINARY
);
154 fRadioMappingFile
.setSelection(kind
== SourceKind
.MAPPING
);
155 fTextMappingFile
.setEnabled(kind
== SourceKind
.MAPPING
);
156 fButtonBrowseMapping
.setEnabled(kind
== SourceKind
.MAPPING
);
157 if (broadcastChanges
) {
163 public void saveConfiguration() {
164 BasicSymbolProvider provider
= (BasicSymbolProvider
) getSymbolProvider();
165 provider
.setConfiguredSource(getCurrentSource(), getCurrentSourceKind());
168 private @NonNull SourceKind
getCurrentSourceKind() {
169 if (fRadioBinaryFile
.getSelection()) {
170 return SourceKind
.BINARY
;
172 return SourceKind
.MAPPING
;
175 private String
getCurrentSource() {
176 if (fRadioBinaryFile
.getSelection()) {
177 return fTextBinaryFile
.getText();
179 return fTextMappingFile
.getText();
182 private void broadcastChanges() {
183 String filePath
= getCurrentSource();
184 String errorMessage
= null;
185 if (filePath
!= null && filePath
.length() > 0) {
186 File file
= new File(filePath
);
187 if (!file
.isFile()) {
188 errorMessage
= Messages
.BasicSymbolProviderPrefPage_errorFileDoesNotExists
;
191 errorMessage
= Messages
.BasicSymbolProviderPrefPage_errorSpecifyFile
;
193 setErrorMessage(errorMessage
);
194 setValid(errorMessage
== null);