scijava / scijava-ui-swing

SciJava UI components for Java Swing.
BSD 2-Clause "Simplified" License
7 stars 11 forks source link

Provide a way to save results from swing table #37

Open imagejan opened 6 years ago

imagejan commented 6 years ago

When using script output, such as those in this script:

#@output a
#@output b

a = 2.17
b = "Foobar"

the outputs are displayed in a new table window without any menu. Let's add some possibility to save the table contents to file, similar to how it works for IJ1 ResultsTables.

ctrueden commented 6 years ago

This brings to light a substantial design limitation of ImageJ2: it is not really feasible for DisplayWindow instances to have custom menus. The original intent of the design was that all displays of all types would share the same application menu structure with ImageJ. It is (arguably) confusing for some windows such as the Script Editor to have their own menus, while others such as image windows share the same menu structure as the main application window.

Now is a good time to decide exactly how we want menus to behave in SciJava applications, since I want to work on scijava/scijava-common#157 soon. There might be an opportunity to enhance the menu system to accommodate this and other per-display menu customizations.

imagejan commented 6 years ago

It is (arguably) confusing for some windows such as the Script Editor to have their own menus

Script Editor is not the only (and not the first) component with an own menu. ImageJ1's text windows (Plugins > New > Text Window...) and ResultsTables have their own menus, too.

I'd think the possibility of panels/windows to provide their own, context-specific menu is essential. The alternative would be to gray out (disable) certain menu entries when they're not applicable to a given context, right? But I don't see how the menu structure can be substantially changed without giving up some of the backward compatibility (regarding UI) to ImageJ1.

image windows share the same menu structure as the main application window.

Ah, you mean the fact that images don't have their "own" menu, different from that of the main window, is what's confusing? One could argue that the main application menu wouldn't have to contain all the image-specific commands, but that's what you usually want, since most of the time you're working with images, not with tables, wouldn't you? (But this aspect might change in the future, when the menu might be different for different image types even, e.g. depending on their dimensionality...)

ctrueden commented 5 years ago

I'd think the possibility of panels/windows to provide their own, context-specific menu is essential.

I have mixed feelings. ImageJ2's Console window also has its own (very sparse) menu bar. But I personally think this is confusing. I guess there is no chance of reconciling the Script Editor's menu bar with the main ImageJ window though, so you are probably right: we need to support it.

In the short term, we could achieve what's needed in a couple of different ways:

  1. Add an Export button to the table UI outside the menu structure.
  2. Add a File > Export > Table... command to the main application menu structure.

@imagejan @tferr @hadim Does that sound good?

tferr commented 5 years ago

I think a contextual (righ-click or pop-up menu) would be better than both those options: It is out of the way (the button would make the table window bulkier). I don't like the command on the main application because if one has multiple tables open, one would have to ping pong between them and the application menu for each of them. Also, the context menu is already being used by other non-image displays (e.g, plots from the plot-service). That being said, if you guys think the context menu is a no-go than I would be fine with either.

ctrueden commented 5 years ago

I have historically avoided context menus in UIs for ImageJ2 because it seems like a sizable fraction of UX recommendations say not to use them that way. E.g., from the Apple Human Interface Guidelines:

Avoid providing access to features only in toolbars or contextual menus. Because toolbars and contextual menus may be hidden, the commands they contain should always be available in menu bar menus as well.

one would have to ping pong between them and the application menu for each of them

The current intent of the design is that when a table display window is active, the main application menu bar is also active. So no ping ponging should be needed.

Another advantage of making a menu entry like File > Export > Table... is that it will be automatically macro recordable etc.

Also, the context menu is already being used by other non-image displays (e.g, plots from the plot-service).

I wasn't aware of that. Are those functions only accessible via right click? Are they macro recordable?

if you guys think the context menu is a no-go than I would be fine with either.

The recommendations I've seen say that it's fine to have functions in a right-click menu, as long as they are also accessible via some other means.

However, I don't feel strongly. I just want to make sure that users can find the functionality. If you think most users would discover it within a right-click menu, then we can do it that way.

tferr commented 5 years ago

when a table display window is active, the main application menu bar is also active. So no ping ponging should be needed.

I was thinking of Windows OS and some Linux distributions where the main menu bar is on the main ImageJ frame.

Are those functions only accessible via right click?

I think so. Have a look at this example:

#@PlotService plotService
#@UIService uiService
plot = plotService.newXYPlot()
series = plot.addXYSeries()
series.setValues(0..3, 4..7)
uiService.show(plot)

The plot is displayed without any menu or buttons. Only by right-clicking on its canvas you can access export functions via contextual menu.

Are they macro recordable?

That is a good point. I don't think so. Then yes. we should have them as a proper menu command then.

I just want to make sure that users can find the functionality.

That is also a good point.

So this would be by suggestion:

adaerr commented 4 years ago

I just stumbled across this issue as the Pendent Drop plugin is affected by it since the migration of tables to sci-java, and a user just brought to my attention that there is no way to save the output table except through copy/pasting elsewhere.

So just to add my 2 cents:

imagesc-bot commented 3 years ago

This issue has been mentioned on Image.sc Forum. There might be relevant details there:

https://forum.image.sc/t/snt-sholl-analysis-how-to-store-data-from-multiple-sholl-analyses-in-the-same-image/51707/31

imagesc-bot commented 3 years ago

This issue has been mentioned on Image.sc Forum. There might be relevant details there:

https://forum.image.sc/t/snt-sholl-analysis-how-to-store-data-from-multiple-sholl-analyses-in-the-same-image/51707/33

imagesc-bot commented 1 year ago

This issue has been mentioned on Image.sc Forum. There might be relevant details there:

https://forum.image.sc/t/saving-defaultgenerictable-via-gui/85763/2

imagesc-bot commented 7 months ago

This issue has been mentioned on Image.sc Forum. There might be relevant details there:

https://forum.image.sc/t/saving-outputtable-after-macro-batch/94477/6