Skip to content

Commit 178ee0f

Browse files
committed
Merge branch 'master' into SaveRestoreLogFix
2 parents dd67840 + 844fcf6 commit 178ee0f

File tree

4 files changed

+54
-38
lines changed

4 files changed

+54
-38
lines changed

app/logbook/olog/ui/src/main/java/org/phoebus/logbook/olog/ui/menu/SendToLogBookApp.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@ public AppInstance create() {
4545
if(selection.getSelections().isEmpty()){
4646
ologLog = new OlogLog();
4747
}
48-
else{
49-
ologLog = AdapterService.adapt(selection.getSelections().get(0), LogEntry.class).get();
48+
else {
49+
ologLog = AdapterService
50+
.adapt(selection.getSelections().get(0), LogEntry.class)
51+
.orElse(new OlogLog());
5052
}
5153
new LogEntryEditorStage(ologLog).show();
5254
return null;

core/framework/src/main/java/org/phoebus/framework/selection/SelectionService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,16 @@ public void setSelection(Object source, Selection selection) {
8585
for (SelectionChangeListener listener : listeners)
8686
listener.selectionChanged(source, oldValue, newValue);
8787
}
88+
89+
/**
90+
* Clear the selection
91+
*
92+
* @param source the source of the new selection
93+
*/
94+
public void clearSelection(Object source) {
95+
final Selection newValue = SelectionUtil.emptySelection();
96+
final Selection oldValue = SelectionService.selection.getAndSet(newValue);
97+
for (SelectionChangeListener listener : listeners)
98+
listener.selectionChanged(source, oldValue, newValue);
99+
}
88100
}

core/pv/src/main/java/org/phoebus/pv/pva/PVAStructureHelper.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -69,29 +69,28 @@ public static VType getVType(final PVAStructure struct, final PVNameHelper name_
6969
actual = (PVAStructure) field;
7070
else if (field instanceof PVANumber)
7171
return Decoders.decodeNumber(struct, (PVANumber) field);
72-
else if (field instanceof PVAArray)
73-
return Decoders.decodeArray(struct, (PVAArray) field);
74-
else if (field instanceof PVAString)
75-
return Decoders.decodeString(struct, (PVAString) field);
76-
}
77-
78-
// Handle element references in arrays
79-
if (elementIndex.isPresent())
80-
{
81-
final PVAData field = struct.get(name_helper.getField());
82-
if (field instanceof PVAStructureArray)
72+
else if (field instanceof PVAStructureArray)
8373
{
84-
actual = ((PVAStructureArray) field).get()[elementIndex.get()];
74+
if (elementIndex.isPresent())
75+
{
76+
actual = ((PVAStructureArray) field).get()[elementIndex.get()];
77+
}
8578
}
86-
else if(field instanceof PVAArray)
87-
{
88-
return decodeNTArray(actual, elementIndex.get());
89-
}
90-
else
79+
else if (field instanceof PVAArray)
9180
{
92-
throw new Exception("Expected struct array for field " + name_helper.getField() + ", got " + struct);
81+
if (elementIndex.isPresent())
82+
{
83+
return decodeNTArray(struct, elementIndex.get());
84+
}
85+
else
86+
{
87+
return Decoders.decodeArray(struct, (PVAArray) field);
88+
}
9389
}
90+
else if (field instanceof PVAString)
91+
return Decoders.decodeString(struct, (PVAString) field);
9492
}
93+
9594
// Handle normative types
9695
String type = actual.getStructureName();
9796
if (type.startsWith("epics:nt/"))

core/ui/src/main/java/org/phoebus/ui/dialog/SaveAsDialog.java

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class SaveAsDialog
3030
* @param title Title
3131
* @param file Suggested file, may be <code>null</code>
3232
* @param filters Filters, may be <code>null</code>
33-
* @return
33+
* @return
3434
*/
3535
public File promptForFile(final Window window, final String title, final File file, final ExtensionFilter[] filters)
3636
{
@@ -62,35 +62,38 @@ private File doPromptForFile(final Window window, final String title, File file,
6262
File initial_directory;
6363
final FileChooser dialog = new FileChooser();
6464
dialog.setTitle(title);
65-
65+
6666
if (!Preferences.default_save_path.isEmpty()){
6767
initial_directory = new File(Preferences.default_save_path);
6868
dialog.setInitialDirectory(initial_directory);
6969
}
70-
70+
7171
if (file != null)
7272
{
7373
// Dialog will fail if the directory does not exist
74-
if(file.exists())
75-
{
76-
77-
if(file.isDirectory())
78-
{
79-
dialog.setInitialDirectory(file);
80-
}
81-
else if (null != file.getParentFile() && file.getParentFile().exists())
82-
{
74+
if (file.exists())
75+
{
76+
if (file.isDirectory())
77+
{
78+
dialog.setInitialDirectory(file);
79+
}
80+
else if (null != file.getParentFile() && file.getParentFile().exists())
81+
{
8382
dialog.setInitialDirectory(file.getParentFile());
8483
dialog.setInitialFileName(file.getName());
85-
86-
}
87-
}
88-
84+
}
85+
}
86+
// Even if the file does not exist, you could still use the existing parent folder
87+
else if (null != file.getParentFile() && file.getParentFile().exists())
88+
{
89+
dialog.setInitialDirectory(file.getParentFile());
90+
}
91+
8992
}
90-
93+
9194
if (filters != null)
9295
dialog.getExtensionFilters().addAll(filters);
93-
96+
9497
return doExecuteDialog(window, dialog);
9598
}
9699

0 commit comments

Comments
 (0)