Skip to content

Commit 686b179

Browse files
committed
GUI: Improve interactions w/ workspace location/status
1 parent e2c0421 commit 686b179

10 files changed

Lines changed: 281 additions & 84 deletions

File tree

‎src/main/java/sc/fiji/snt/BookmarkManager.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,13 @@ private void recordComment(final String comment) {
272272

273273
private JPopupMenu importMenu() {
274274
final JPopupMenu menu = new JPopupMenu();
275-
JMenuItem jmi = new JMenuItem("From Workspace...");
275+
JMenuItem jmi = new JMenuItem("From Workspace...", IconFactory.menuIcon('\ue066', true));
276276
menu.add(jmi);
277277
jmi.addActionListener(e -> {
278+
final File workspaceDir = sntui.getOrPromptForWorkspace();
279+
if (workspaceDir == null) return;
278280
final String prefix = sntui.getImageFilenamePrefix();
279-
final File ref = new File(sntui.getPrefs().getWorkspaceDir(), prefix + "_bookmarks.csv");
281+
final File ref = new File(workspaceDir, prefix + "_bookmarks.csv");
280282
final File file = (ref.exists()) ? ref : sntui.guiUtils.getFile(ref, ".csv");
281283
if (file != null) loadBookmarksFromFile(file);
282284
});
@@ -325,9 +327,11 @@ private JPopupMenu importMenu() {
325327

326328
private JPopupMenu exportMenu() {
327329
final JPopupMenu menu = new JPopupMenu();
328-
JMenuItem jmi = new JMenuItem("To Workspace...");
330+
JMenuItem jmi = new JMenuItem("To Workspace...", IconFactory.menuIcon('\ue066', true));
329331
menu.add(jmi);
330332
jmi.addActionListener(e -> {
333+
final File workspaceDir = sntui.getOrPromptForWorkspace();
334+
if (workspaceDir == null) return;
331335
final String prefix = sntui.getImageFilenamePrefix();
332336
saveToUserChosenFile(new File(sntui.getPrefs().getWorkspaceDir(), prefix + "_bookmarks.csv"));
333337
});
@@ -472,7 +476,7 @@ private void loadBookmarksFromFile(final File file) {
472476
try {
473477
model.populateFromFile(file);
474478
} catch (final Exception ex) {
475-
sntui.guiUtils.error(ex.getMessage());
479+
sntui.guiUtils.error(ex.getMessage() + ".");
476480
SNTUtils.error("loadBookmarksFromFile() failure", ex);
477481
}
478482
}

‎src/main/java/sc/fiji/snt/NotesUI.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ private JComponent getToolBar() {
111111
save.setToolTipText("Save to workspace");
112112
save.addActionListener(e -> {
113113
if (noNotesError()) return;
114+
final File workspaceDir = sntui.getOrPromptForWorkspace();
115+
if (workspaceDir == null) return;
114116
final String prefix = sntui.getImageFilenamePrefix();
115117
exportNotes(new File(sntui.getPrefs().getWorkspaceDir(), prefix + "_notes.md"));
116118
});

‎src/main/java/sc/fiji/snt/SNTPrefs.java‎

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import ij.io.FileInfo;
3838
import ij3d.Content;
3939
import ij3d.ContentConstants;
40-
import sc.fiji.snt.gui.GuiUtils;
4140

4241
/**
4342
* Class handling SNT preferences.
@@ -512,7 +511,7 @@ public static String getDefaultLookAndFeel() {
512511
// If Fiji is using FlatLaf (default of v430 is light) used that as default, otherwise use System L&F
513512
final LookAndFeel currentLaf = GraphicsEnvironment.isHeadless() ? null : UIManager.getLookAndFeel();
514513
return (currentLaf instanceof FlatLaf && !((FlatLaf) currentLaf).isDark()) ? currentLaf.getName()
515-
: GuiUtils.LAF_DEFAULT;
514+
: sc.fiji.snt.gui.GuiUtils.LAF_DEFAULT;
516515
}
517516

518517
private static void clearLegacyPrefs() {
@@ -558,7 +557,7 @@ public File getWorkspaceDir() {
558557
workspaceDirectory = f;
559558
}
560559
if (workspaceDirectory == null) {
561-
setWorkspaceDir(null);
560+
setWorkspaceDir(null); // reset to default location
562561
}
563562
}
564563
return workspaceDirectory;
@@ -575,15 +574,44 @@ public void setWorkspaceDir(final File dir) {
575574
set(WORKSPACE_KEY, workspaceDirectory.getAbsolutePath());
576575
}
577576

578-
public File getQuickBackupDir() {
579-
if (!getWorkspaceDir().exists()) workspaceDirectory.mkdirs(); // Ensure it exists
577+
/**
578+
* Returns the backup directory, or null if workspace doesn't exist.
579+
* Does NOT create directories.
580+
*/
581+
public File getBackupDir() {
582+
if (!getWorkspaceDir().exists()) {
583+
return null;
584+
}
580585
final File result = new File(workspaceDirectory, "snt_backups");
581586
result.mkdirs();
582587
return result;
583588
}
584589

590+
/**
591+
* Creates workspace directory if it doesn't exist.
592+
* @return true if directory exists or was created successfully
593+
*/
594+
public boolean ensureWorkspaceExists() {
595+
if (workspaceDirectory.exists()) return true;
596+
return workspaceDirectory.mkdirs();
597+
}
598+
599+
/**
600+
* @return true if workspace directory exists and has write permissions.
601+
*/
602+
public boolean workspaceIsValid() {
603+
final File ws = getWorkspaceDir();
604+
return ws != null && ws.exists() && ws.canWrite();
605+
}
606+
607+
/**
608+
* Returns the sessions directory, or null if workspace doesn't exist.
609+
* Does NOT create directories.
610+
*/
585611
public File getSessionsDir() {
586-
if (!getWorkspaceDir().exists()) workspaceDirectory.mkdirs(); // Ensure it exists
612+
if (!getWorkspaceDir().exists()) {
613+
return null;
614+
}
587615
final File result = new File(workspaceDirectory, "sessions");
588616
result.mkdirs();
589617
return result;

0 commit comments

Comments
 (0)