Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

Commit c669306

Browse files
committed
Issue #188: Allow user to select project styles
1 parent 0d2b3ad commit c669306

File tree

8 files changed

+144
-43
lines changed

8 files changed

+144
-43
lines changed

dev/org.eclipse.codewind.core/src/org/eclipse/codewind/core/internal/constants/ProjectLanguage.java

+11
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,16 @@ public String getMetricsRoot() {
5656
return null;
5757
}
5858
}
59+
60+
public static String getDisplayName(String languageId) {
61+
if (languageId == null) {
62+
return ProjectLanguage.LANGUAGE_UNKNOWN.getDisplayName();
63+
}
64+
ProjectLanguage language = ProjectLanguage.getLanguage(languageId);
65+
if (language != null && language != ProjectLanguage.LANGUAGE_UNKNOWN) {
66+
return language.getDisplayName();
67+
}
68+
return languageId;
69+
}
5970

6071
};

dev/org.eclipse.codewind.core/src/org/eclipse/codewind/core/internal/constants/ProjectType.java

+12
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,16 @@ public static ProjectType getTypeFromLanguage(String language) {
6363
return null;
6464
}
6565
}
66+
67+
public static String getDisplayName(String typeId) {
68+
if (typeId == null) {
69+
return ProjectType.TYPE_UNKNOWN.getDisplayName();
70+
}
71+
ProjectType type = ProjectType.getType(typeId);
72+
if (type != null && type != ProjectType.TYPE_UNKNOWN) {
73+
return type.getDisplayName();
74+
}
75+
return typeId;
76+
}
77+
6678
}
Loading

dev/org.eclipse.codewind.ui/src/org/eclipse/codewind/ui/CodewindUIPlugin.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ public class CodewindUIPlugin extends AbstractUIPlugin {
5858
PYTHON_ICON = "obj16/python.png",
5959
SPRING_ICON = "obj16/spring.png",
6060
SWIFT_ICON = "obj16/swift.png",
61-
PROJECTS_ICON = "obj16/projects.png";
61+
PROJECTS_ICON = "obj16/projects.png",
62+
MENU_DOWN_ICON = "obj16/menuDown.gif";
6263

6364
// The shared instance
6465
private static CodewindUIPlugin plugin;
@@ -138,6 +139,7 @@ protected ImageRegistry createImageRegistry() {
138139
registerImage(registry, SPRING_ICON, ICON_BASE_URL + SPRING_ICON);
139140
registerImage(registry, SWIFT_ICON, ICON_BASE_URL + SWIFT_ICON);
140141
registerImage(registry, PROJECTS_ICON, ICON_BASE_URL + PROJECTS_ICON);
142+
registerImage(registry, MENU_DOWN_ICON, ICON_BASE_URL + MENU_DOWN_ICON);
141143

142144
return registry;
143145
}

dev/org.eclipse.codewind.ui/src/org/eclipse/codewind/ui/internal/messages/Messages.java

+1
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ public class Messages extends NLS {
225225
public static String NewProjectPage_TemplateGroupLabel;
226226
public static String NewProjectPage_ProjectTypeGroup;
227227
public static String NewProjectPage_FilterMessage;
228+
public static String NewProjectPage_TemplateColumn;
228229
public static String NewProjectPage_TypeColumn;
229230
public static String NewProjectPage_LanguageColumn;
230231
public static String NewProjectPage_DescriptionLabel;

dev/org.eclipse.codewind.ui/src/org/eclipse/codewind/ui/internal/messages/messages.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ NewProjectPage_WizardTitle=Create a new Codewind project
218218
NewProjectPage_TemplateGroupLabel=Select the template you want to use:
219219
NewProjectPage_ProjectTypeGroup=Project Template
220220
NewProjectPage_FilterMessage=Type filter text
221-
NewProjectPage_TypeColumn=Template
221+
NewProjectPage_TemplateColumn=Template
222+
NewProjectPage_TypeColumn=Type
222223
NewProjectPage_LanguageColumn=Language
223224
NewProjectPage_DescriptionLabel=Description: {0}
224225
NewProjectPage_DescriptionNone=<none>

dev/org.eclipse.codewind.ui/src/org/eclipse/codewind/ui/internal/wizards/NewCodewindProjectPage.java

+110-20
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import java.io.IOException;
1515
import java.lang.reflect.InvocationTargetException;
16+
import java.util.ArrayList;
1617
import java.util.Comparator;
1718
import java.util.List;
1819
import java.util.concurrent.TimeoutException;
@@ -25,6 +26,9 @@
2526
import org.eclipse.codewind.core.internal.ProcessHelper.ProcessResult;
2627
import org.eclipse.codewind.core.internal.connection.CodewindConnection;
2728
import org.eclipse.codewind.core.internal.console.ProjectTemplateInfo;
29+
import org.eclipse.codewind.core.internal.constants.ProjectLanguage;
30+
import org.eclipse.codewind.core.internal.constants.ProjectType;
31+
import org.eclipse.codewind.ui.CodewindUIPlugin;
2832
import org.eclipse.codewind.ui.internal.messages.Messages;
2933
import org.eclipse.codewind.ui.internal.views.ViewHelper;
3034
import org.eclipse.core.resources.IProject;
@@ -41,13 +45,20 @@
4145
import org.eclipse.swt.events.ModifyListener;
4246
import org.eclipse.swt.events.SelectionAdapter;
4347
import org.eclipse.swt.events.SelectionEvent;
48+
import org.eclipse.swt.graphics.Point;
4449
import org.eclipse.swt.layout.GridData;
4550
import org.eclipse.swt.layout.GridLayout;
51+
import org.eclipse.swt.widgets.Button;
4652
import org.eclipse.swt.widgets.Composite;
53+
import org.eclipse.swt.widgets.Control;
54+
import org.eclipse.swt.widgets.Display;
4755
import org.eclipse.swt.widgets.Event;
4856
import org.eclipse.swt.widgets.Group;
4957
import org.eclipse.swt.widgets.Label;
5058
import org.eclipse.swt.widgets.Listener;
59+
import org.eclipse.swt.widgets.Menu;
60+
import org.eclipse.swt.widgets.MenuItem;
61+
import org.eclipse.swt.widgets.Shell;
5162
import org.eclipse.swt.widgets.Table;
5263
import org.eclipse.swt.widgets.TableColumn;
5364
import org.eclipse.swt.widgets.TableItem;
@@ -65,6 +76,7 @@ public class NewCodewindProjectPage extends WizardPage {
6576
private Table selectionTable;
6677
private Text descriptionLabel;
6778
private Text projectNameText;
79+
private List<Integer> styleList = new ArrayList<Integer>();
6880

6981
protected NewCodewindProjectPage(CodewindConnection connection, List<ProjectTemplateInfo> templateList) {
7082
super(Messages.NewProjectPage_ShellTitle);
@@ -137,12 +149,20 @@ private void createContents(Composite parent) {
137149
layout.marginWidth = 8;
138150
layout.horizontalSpacing = 7;
139151
layout.verticalSpacing = 7;
152+
layout.numColumns = 2;
140153
templateGroup.setLayout(layout);
141154
templateGroup.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1));
142155

156+
// Style selection button
157+
final Button styleButton = new Button(templateGroup, SWT.PUSH | SWT.RIGHT_TO_LEFT);
158+
styleButton.setText("Select Styles");
159+
styleButton.setToolTipText("Select the styles to work with");
160+
styleButton.setImage(CodewindUIPlugin.getImage(CodewindUIPlugin.MENU_DOWN_ICON));
161+
styleButton.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false));
162+
143163
// Filter text
144164
filterText = new Text(templateGroup, SWT.BORDER);
145-
filterText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
165+
filterText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
146166
filterText.setMessage(Messages.NewProjectPage_FilterMessage);
147167

148168
// Table
@@ -152,29 +172,38 @@ private void createContents(Composite parent) {
152172
selectionTable.setLayoutData(data);
153173

154174
// Columns
155-
final TableColumn featureColumn = new TableColumn(selectionTable, SWT.NONE);
156-
featureColumn.setText(Messages.NewProjectPage_TypeColumn);
157-
featureColumn.setResizable(true);
158-
featureColumn.addSelectionListener(new SelectionAdapter() {
175+
final TableColumn templateColumn = new TableColumn(selectionTable, SWT.NONE);
176+
templateColumn.setText(Messages.NewProjectPage_TemplateColumn);
177+
templateColumn.setResizable(true);
178+
templateColumn.addSelectionListener(new SelectionAdapter() {
179+
@Override
180+
public void widgetSelected(SelectionEvent event) {
181+
sortTable(selectionTable, templateColumn);
182+
}
183+
});
184+
final TableColumn typeColumn = new TableColumn(selectionTable, SWT.NONE);
185+
typeColumn.setText(Messages.NewProjectPage_TypeColumn);
186+
typeColumn.setResizable(true);
187+
typeColumn.addSelectionListener(new SelectionAdapter() {
159188
@Override
160189
public void widgetSelected(SelectionEvent event) {
161-
sortTable(selectionTable, featureColumn);
190+
sortTable(selectionTable, typeColumn);
162191
}
163192
});
164-
final TableColumn nameColumn = new TableColumn(selectionTable, SWT.NONE);
165-
nameColumn.setText(Messages.NewProjectPage_LanguageColumn);
166-
nameColumn.setResizable(true);
167-
nameColumn.addSelectionListener(new SelectionAdapter() {
193+
final TableColumn languageColumn = new TableColumn(selectionTable, SWT.NONE);
194+
languageColumn.setText(Messages.NewProjectPage_LanguageColumn);
195+
languageColumn.setResizable(true);
196+
languageColumn.addSelectionListener(new SelectionAdapter() {
168197
@Override
169198
public void widgetSelected(SelectionEvent event) {
170-
sortTable(selectionTable, nameColumn);
199+
sortTable(selectionTable, languageColumn);
171200
}
172201
});
173202

174203
selectionTable.setHeaderVisible(true);
175204
selectionTable.setLinesVisible(false);
176205
selectionTable.setSortDirection(SWT.DOWN);
177-
selectionTable.setSortColumn(featureColumn);
206+
selectionTable.setSortColumn(templateColumn);
178207

179208
createItems(selectionTable, "");
180209

@@ -188,7 +217,7 @@ public void widgetSelected(SelectionEvent event) {
188217
descriptionLabel.setForeground(templateGroup.getForeground());
189218
descriptionScroll.setContent(descriptionLabel);
190219

191-
data = new GridData(GridData.FILL, GridData.FILL, true, false);
220+
data = new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1);
192221
int lineHeight = filterText.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
193222
data.heightHint = lineHeight * 2;
194223
data.horizontalSpan = 2;
@@ -199,6 +228,17 @@ public void widgetSelected(SelectionEvent event) {
199228
descriptionScroll.setForeground(templateGroup.getForeground());
200229

201230
// Listeners
231+
final Shell shell = getShell();
232+
styleButton.addSelectionListener(new SelectionAdapter() {
233+
@Override
234+
public void widgetSelected(SelectionEvent e) {
235+
final Menu menu = new Menu(shell, SWT.POP_UP);
236+
fillFilterMenu(menu);
237+
displayDropdownMenu(styleButton, menu, true);
238+
menu.dispose();
239+
}
240+
});
241+
202242
filterText.addModifyListener(new ModifyListener() {
203243
@Override
204244
public void modifyText(ModifyEvent event) {
@@ -303,18 +343,20 @@ private void createItems(Table table, String filter) {
303343
// Create the items for the table.
304344
table.removeAll();
305345
pattern.setPattern("*" + filter + "*");
306-
for (ProjectTemplateInfo template : templateList) {
307-
String type = template.getLabel();
308-
String language = template.getLanguage();
309-
if (pattern.matches(type) || (language != null && pattern.matches(language))) {
346+
for (ProjectTemplateInfo templateInfo : templateList) {
347+
String template = templateInfo.getLabel();
348+
String type = ProjectType.getDisplayName(templateInfo.getProjectType());
349+
String language = ProjectLanguage.getDisplayName(templateInfo.getLanguage());
350+
if (pattern.matches(template) || (type != null && pattern.matches(type)) || (language != null && pattern.matches(language))) {
310351
TableItem item = new TableItem(table, SWT.NONE);
311352
item.setForeground(table.getForeground());
312353
item.setBackground(table.getBackground());
313-
item.setText(0, type);
354+
item.setText(0, template);
355+
item.setText(1, type);
314356
if (language != null) {
315-
item.setText(1, language);
357+
item.setText(2, language);
316358
}
317-
item.setData(template);
359+
item.setData(templateInfo);
318360
}
319361
}
320362
}
@@ -476,4 +518,52 @@ private void getTemplates() {
476518
Logger.logError("An error occurred trying to get the list of templates", e); //$NON-NLS-1$
477519
}
478520
}
521+
522+
protected void fillFilterMenu(final Menu menu) {
523+
final SelectionAdapter listener = new SelectionAdapter() {
524+
@Override
525+
public void widgetSelected(SelectionEvent event) {
526+
MenuItem item = (MenuItem) event.getSource();
527+
if (item.getSelection()) {
528+
if (item.getData() == null) {
529+
styleList.clear();
530+
} else {
531+
styleList.add((Integer)item.getData());
532+
}
533+
} else {
534+
if (item.getData() != null) {
535+
styleList.remove(item.getData());
536+
}
537+
}
538+
// Update template list
539+
}
540+
};
541+
542+
MenuItem item;
543+
item = new MenuItem(menu, SWT.CHECK);
544+
item.setText("All Styles");
545+
item.setSelection(styleList.isEmpty());
546+
item.addSelectionListener(listener);
547+
for (int i = 1; i < 5; i++) {
548+
item = new MenuItem(menu, SWT.CHECK);
549+
item.setText("Style" + i);
550+
item.setData(new Integer(i));
551+
item.setSelection(styleList.contains(item.getData()));
552+
item.addSelectionListener(listener);
553+
}
554+
}
555+
556+
protected void displayDropdownMenu(Control anchor, Menu menu, boolean subtractWidth) {
557+
Point size = anchor.getSize();
558+
Point point = anchor.toDisplay(0, size.y);
559+
menu.setLocation(point.x - (subtractWidth ? size.x : 0), point.y);
560+
menu.setVisible(true);
561+
562+
while (!menu.isDisposed() && menu.isVisible()) {
563+
Display display = menu.getShell().getDisplay();
564+
if (!display.readAndDispatch()) {
565+
display.sleep();
566+
}
567+
}
568+
}
479569
}

dev/org.eclipse.codewind.ui/src/org/eclipse/codewind/ui/internal/wizards/ProjectTypeSelectionPage.java

+5-21
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ private String[] getProjectTypeArray() {
165165
Arrays.sort(types, new Comparator<String>() {
166166
@Override
167167
public int compare(String t1, String t2) {
168-
return getTypeDisplayName(t1).compareToIgnoreCase(getTypeDisplayName(t2));
168+
return ProjectType.getDisplayName(t1).compareToIgnoreCase(ProjectType.getDisplayName(t2));
169169
}
170170
});
171171
return types;
@@ -180,7 +180,7 @@ private String[] getLanguageArray(String type) {
180180
Arrays.sort(languages, new Comparator<String>() {
181181
@Override
182182
public int compare(String l1, String l2) {
183-
return getLanguageDisplayName(l1).compareToIgnoreCase(getLanguageDisplayName(l2));
183+
return ProjectLanguage.getDisplayName(l1).compareToIgnoreCase(ProjectLanguage.getDisplayName(l2));
184184
}
185185
});
186186
return languages;
@@ -195,19 +195,11 @@ public Image getImage(Object element) {
195195

196196
@Override
197197
public String getText(Object element) {
198-
return getTypeDisplayName((String)element);
198+
return ProjectType.getDisplayName((String)element);
199199
}
200200

201201
}
202202

203-
private String getTypeDisplayName(String typeId) {
204-
ProjectType type = ProjectType.getType(typeId);
205-
if (type != null && type != ProjectType.TYPE_UNKNOWN) {
206-
return type.getDisplayName();
207-
}
208-
return typeId;
209-
}
210-
211203
private class LanguageLabelProvider extends LabelProvider {
212204

213205
@Override
@@ -217,18 +209,10 @@ public Image getImage(Object element) {
217209

218210
@Override
219211
public String getText(Object element) {
220-
return getLanguageDisplayName((String)element);
221-
}
222-
}
223-
224-
private String getLanguageDisplayName(String languageId) {
225-
ProjectLanguage language = ProjectLanguage.getLanguage(languageId);
226-
if (language != null && language != ProjectLanguage.LANGUAGE_UNKNOWN) {
227-
return language.getDisplayName();
212+
return ProjectLanguage.getDisplayName((String)element);
228213
}
229-
return languageId;
230214
}
231-
215+
232216
public void setProject(IProject project) {
233217
this.project = project;
234218
updateTables();

0 commit comments

Comments
 (0)