tmf.ui: Introduce TmfFileDialogFactory
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / internal / tmf / ui / symbols / BasicSymbolProviderPreferencePage.java
CommitLineData
d90ae2a5
RK
1/*******************************************************************************
2 * Copyright (c) 2016 Movidius Inc. and others
3 *
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
8 *
9 *******************************************************************************/
10
11package org.eclipse.tracecompass.internal.tmf.ui.symbols;
12
13import java.io.File;
14import java.text.MessageFormat;
15
16import org.eclipse.jdt.annotation.NonNull;
17import org.eclipse.swt.SWT;
18import org.eclipse.swt.events.SelectionAdapter;
19import org.eclipse.swt.events.SelectionEvent;
20import org.eclipse.swt.layout.GridData;
21import org.eclipse.swt.layout.GridLayout;
22import org.eclipse.swt.widgets.Button;
23import org.eclipse.swt.widgets.Composite;
24import org.eclipse.swt.widgets.Control;
25import org.eclipse.swt.widgets.FileDialog;
26import org.eclipse.swt.widgets.Text;
d90ae2a5 27import org.eclipse.tracecompass.internal.tmf.ui.symbols.BasicSymbolProvider.SourceKind;
674c702f 28import org.eclipse.tracecompass.tmf.ui.dialog.TmfFileDialogFactory;
d90ae2a5
RK
29import org.eclipse.tracecompass.tmf.ui.symbols.AbstractSymbolProviderPreferencePage;
30
31/**
32 * Preference page that allows the user to configure a
33 * {@link BasicSymbolProvider}
34 *
35 * @author Robert Kiss
36 *
37 */
38public class BasicSymbolProviderPreferencePage extends AbstractSymbolProviderPreferencePage {
39
40 private Button fRadioBinaryFile;
41 private Text fTextBinaryFile;
42 private Button fButtonBrowseBinary;
43 private Button fRadioMappingFile;
44 private Text fTextMappingFile;
45 private Button fButtonBrowseMapping;
46
47 /**
48 * Creates a new object for the given provider
49 *
50 * @param provider
51 * a non-null provider
52 */
53 public BasicSymbolProviderPreferencePage(@NonNull BasicSymbolProvider provider) {
54 super(provider);
55 setDescription(MessageFormat.format(Messages.BasicSymbolProviderPrefPage_description, provider.getTrace().getName()));
56 setValid(true);
57 }
58
59 @Override
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));
64
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() {
70 @Override
71 public void widgetSelected(SelectionEvent e) {
72 switchToSourceKind(SourceKind.BINARY, true);
73 }
74 });
75
76 fTextBinaryFile = new Text(composite, SWT.BORDER);
77 fTextBinaryFile.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
78 fTextBinaryFile.setEditable(false);
79
80 fButtonBrowseBinary = new Button(composite, SWT.NONE);
81 fButtonBrowseBinary.setText(Messages.BasicSymbolProviderPrefPage_btnBrowse);
82 fButtonBrowseBinary.addSelectionListener(new SelectionAdapter() {
83
84 @Override
85 public void widgetSelected(SelectionEvent e) {
86 browseForFile(fTextBinaryFile, Messages.BasicSymbolProviderPrefPage_ImportBinaryFileDialogTitle);
87 }
88 });
89
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() {
95 @Override
96 public void widgetSelected(SelectionEvent e) {
97 switchToSourceKind(SourceKind.MAPPING, true);
98 }
99 });
100
101 fTextMappingFile = new Text(composite, SWT.BORDER);
102 fTextMappingFile.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
103 fTextMappingFile.setEnabled(false);
104 fTextMappingFile.setEditable(false);
105
106 fButtonBrowseMapping = new Button(composite, SWT.NONE);
107 fButtonBrowseMapping.setText(Messages.BasicSymbolProviderPrefPage_btnBrowse);
108 fButtonBrowseMapping.setEnabled(false);
109 fButtonBrowseMapping.addSelectionListener(new SelectionAdapter() {
110
111 @Override
112 public void widgetSelected(SelectionEvent e) {
113 browseForFile(fTextMappingFile, Messages.BasicSymbolProviderPrefPage_ImportMappingDialogTitle);
114 }
115 });
116
117 loadProviderSettings();
118
119 return composite;
120 }
121
122 private void browseForFile(Text fileField, String dialogTitle) {
674c702f 123 FileDialog fileDialog = TmfFileDialogFactory.create(getShell(), SWT.OPEN);
d90ae2a5
RK
124 fileDialog.setText(dialogTitle);
125 String filePath = fileDialog.open();
126 if (filePath != null) {
127 fileField.setText(filePath);
128 broadcastChanges();
129 }
130
131 }
132
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);
140 } else {
141 fTextMappingFile.setText(source);
142 }
143 }
144
145 switchToSourceKind(sourceKind, false);
146 broadcastChanges();
147 }
148
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);
153
154 fRadioMappingFile.setSelection(kind == SourceKind.MAPPING);
155 fTextMappingFile.setEnabled(kind == SourceKind.MAPPING);
156 fButtonBrowseMapping.setEnabled(kind == SourceKind.MAPPING);
157 if (broadcastChanges) {
158 broadcastChanges();
159 }
160 }
161
162 @Override
163 public void saveConfiguration() {
164 BasicSymbolProvider provider = (BasicSymbolProvider) getSymbolProvider();
165 provider.setConfiguredSource(getCurrentSource(), getCurrentSourceKind());
166 }
167
168 private @NonNull SourceKind getCurrentSourceKind() {
169 if (fRadioBinaryFile.getSelection()) {
170 return SourceKind.BINARY;
171 }
172 return SourceKind.MAPPING;
173 }
174
175 private String getCurrentSource() {
176 if (fRadioBinaryFile.getSelection()) {
177 return fTextBinaryFile.getText();
178 }
179 return fTextMappingFile.getText();
180 }
181
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;
189 }
190 } else {
191 errorMessage = Messages.BasicSymbolProviderPrefPage_errorSpecifyFile;
192 }
193 setErrorMessage(errorMessage);
194 setValid(errorMessage == null);
195 }
196
197}
This page took 0.039296 seconds and 5 git commands to generate.