From bc7b3d3556a6f7a30167a5018f3f09adbbf44c23 Mon Sep 17 00:00:00 2001 From: millmanorama Date: Thu, 6 Oct 2016 11:33:16 +0200 Subject: [PATCH] add pop up help to imagegallery sort controls --- .../autopsy/imagegallery/gui/Toolbar.fxml | 7 ++- .../autopsy/imagegallery/gui/Toolbar.java | 52 +++++++++++++++++- .../imagegallery/images/question-frame.png | Bin 0 -> 924 bytes 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 ImageGallery/src/org/sleuthkit/autopsy/imagegallery/images/question-frame.png diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.fxml b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.fxml index aba7982201..a8ced6deda 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.fxml +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.fxml @@ -12,7 +12,7 @@ - + @@ -25,6 +25,11 @@ + + + + + diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.java index 55be749d20..72f9622729 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/Toolbar.java @@ -28,12 +28,21 @@ import javafx.beans.Observable; import javafx.beans.property.DoubleProperty; import javafx.collections.FXCollections; import javafx.fxml.FXML; +import javafx.geometry.Insets; +import javafx.scene.Cursor; +import javafx.scene.Node; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.MenuItem; import javafx.scene.control.Slider; import javafx.scene.control.SplitMenuButton; import javafx.scene.control.ToolBar; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.Pane; +import javafx.scene.text.Text; +import org.controlsfx.control.PopOver; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.imagegallery.FXMLConstructor; @@ -56,6 +65,9 @@ public class Toolbar extends ToolBar { private static final int SIZE_SLIDER_DEFAULT = 100; + @FXML + private ImageView sortHelpImageView; + @FXML private ComboBox> groupByBox; @@ -104,7 +116,9 @@ public class Toolbar extends ToolBar { "Toolbar.descRadio=Descending", "Toolbar.tagImageViewLabel=Tag Group's Files:", "Toolbar.categoryImageViewLabel=Categorize Group's Files:", - "Toolbar.thumbnailSizeLabel=Thumbnail Size (px):"}) + "Toolbar.thumbnailSizeLabel=Thumbnail Size (px):", + "Toolbar.sortHelp=The sort direction (ascending/descending) affects the queue of unseen groups that Image Gallery maintains, but changes to this queue aren't apparent until the \"Next Unseen Group\" button is pressed.", + "Toolbar.sortHelpTitle=Group Sorting",}) void initialize() { assert catGroupMenuButton != null : "fx:id=\"catSelectedMenubutton\" was not injected: check your FXML file 'Toolbar.fxml'."; assert groupByBox != null : "fx:id=\"groupByBox\" was not injected: check your FXML file 'Toolbar.fxml'."; @@ -169,7 +183,43 @@ public class Toolbar extends ToolBar { sortChooser.sortOrderProperty().addListener(queryInvalidationListener); sortChooser.setComparator(GroupSortBy.PRIORITY); getItems().add(1, sortChooser); + sortHelpImageView.setCursor(Cursor.HAND); + sortHelpImageView.setOnMouseClicked(clicked -> { + Text text = new Text(Bundle.Toolbar_sortHelp()); + text.setWrappingWidth(480); //This is a hack to fix the layout. + showPopoverHelp(sortHelpImageView, + Bundle.Toolbar_sortHelpTitle(), + sortHelpImageView.getImage(), text); + }); + + } + + /** + * + * Static utility to to show a Popover with the given Node as owner. + * + * @param owner The owner of the Popover + * @param headerText A short String that will be shown in the top-left + * corner of the Popover. + * @param headerImage An Image that will be shown at the top-right corner of + * the Popover. + * @param content The main content of the Popover, shown in the + * bottom-center + * + */ + private static void showPopoverHelp(final Node owner, final String headerText, final Image headerImage, final Node content) { + Pane borderPane = new BorderPane(null, null, new ImageView(headerImage), + content, + new Label(headerText)); + borderPane.setPadding(new Insets(10)); + borderPane.setPrefWidth(500); + + PopOver popOver = new PopOver(borderPane); + popOver.setDetachable(false); + popOver.setArrowLocation(PopOver.ArrowLocation.TOP_CENTER); + + popOver.show(owner); } private void syncGroupControlsEnabledState(GroupViewState newViewState) { diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/images/question-frame.png b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/images/question-frame.png new file mode 100644 index 0000000000000000000000000000000000000000..be52814717ef790cd13d33c7ec1fc9c5d14b0eb2 GIT binary patch literal 924 zcmV;N17rM&P)Ac(Ahxg9jbBpr8bI-Z=ywCH#=RNOxHEnHe&}cN!YPIT2m`_*=z(g?M&yWbw znVFf-gfRjNg#y^j^IB4ejmi9ksQ!D`Z(#H+Y^$Fc=)_?(Xgig+j0CQ$Hcc z_PF}`dghgpceJ#$9B?|FX9vE(H$orueK(g;R$xO69qOGmaiyPq zY_V7xx}N?-X{iyTqjA+|-^(o0=_zcs$6+jqAP`8Pzkd>Dvk`*<1?%=yH!!Z29u>)C z3ZI5$C`tjjTprQbIDSN8sI8XKv9las!qd3_d@t8ckYkEE19u~<&tN>zimovT%_HT%Y(OlQzgBVc%V#K*Wy z;G@gsa&K>{#Ju7Zb}Ju>h*XIIf>-KyPo)eUImjn+nj&1XyGI931?h zrT)-fJlR@bUX(*RK8zvnJ4{A>ShX;VeUAA!cX%0GuFl?`o-Q|)^dpv2joofnJ4=$J z;#@Ab!)9C3eB#9UU5$-d0|Re^H*a2h7!3NK>h=1^27@7^cJM3#Dx5U(`MibR yn~1ZBFz+v)Ro4g+Jc1y67ex^yp#B1W3ormZ6_HVC$T@ug0000