use of javafx.scene.control.Tooltip in project org.csstudio.display.builder by kasemir.
the class ImageToolbarHandler method addItem.
/**
* Add a custom tool bar item
* @param icon Icon {@link Image}
* @param tool_tip Tool tip text
* @return {@link ToolItem}
*/
public Button addItem(final Image icon, final String tool_tip) {
if (!have_custom_items) {
toolbar.getItems().add(new Separator());
have_custom_items = true;
}
final Button item = new Button();
item.setGraphic(new ImageView(icon));
item.setTooltip(new Tooltip(tool_tip));
toolbar.getItems().add(item);
return item;
}
use of javafx.scene.control.Tooltip in project org.csstudio.display.builder by kasemir.
the class RTImagePlot method showAxisLimitsField.
private void showAxisLimitsField(AxisPart<Double> axis, boolean isHigh, Rectangle area) {
axisLimitsField.setOnKeyPressed((KeyEvent event) -> {
if (event.getCode().equals(KeyCode.ENTER)) {
hideAxisLimitsField();
if (axisLimitsField.getText().isEmpty())
return;
try {
Double value = Double.parseDouble(axisLimitsField.getText());
changeAxisLimit(axis, isHigh, value);
} catch (NumberFormatException e) {
}
} else if (event.getCode().equals(KeyCode.ESCAPE)) {
hideAxisLimitsField();
}
});
String tip = isHigh ? axis.getValueRange().getHigh().toString() : axis.getValueRange().getLow().toString();
axisLimitsField.setText(tip);
axisLimitsField.setTooltip(new Tooltip(tip));
axisLimitsField.setVisible(true);
axisLimitsField.relocate(area.getX(), area.getY());
axisLimitsField.resize(area.getWidth(), area.getHeight());
axisLimitsField.requestFocus();
// force text to appear in field
axisLimitsField.layout();
}
use of javafx.scene.control.Tooltip in project org.csstudio.display.builder by kasemir.
the class RTTimePlot method setScrolling.
/**
* @param enabled <code>true</code> to enable scrolling
*/
public void setScrolling(final boolean enabled) {
// TODO: Fix graphics size to button size
final ScheduledFuture<?> was_scrolling;
if (enabled) {
// Show that scrolling is 'on', and tool tip explains that it can be turned off
scroll_img.imageProperty().set(scroll_on);
scroll.setTooltip(new Tooltip(Messages.Scroll_Off_TT));
// Scroll once so that end of axis == 'now',
// because otherwise one of the listeners might right away
// disable scrolling
scroll();
final long scroll_period = scroll_step.toMillis();
was_scrolling = scrolling.getAndSet(Activator.thread_pool.scheduleAtFixedRate(RTTimePlot.this::scroll, scroll_period, scroll_period, TimeUnit.MILLISECONDS));
} else {
// Other way around
scroll_img.imageProperty().set(scroll_off);
scroll.setTooltip(new Tooltip(Messages.Scroll_On_TT));
was_scrolling = scrolling.getAndSet(null);
}
if (was_scrolling != null)
was_scrolling.cancel(false);
}
use of javafx.scene.control.Tooltip in project FinalCrypt by ron-from-nl.
the class GUIFX method welcome.
private void welcome() {
targetFCPathList = new FCPathList();
updateDashboard(targetFCPathList);
configuration = new Configuration(ui);
version = new Version(ui);
version.checkCurrentlyInstalledVersion(this);
status("Welcome to " + Version.getProduct() + " " + version.getCurrentlyInstalledOverallVersionString() + "\r\n", false);
log("Welcome to " + Version.getProduct() + " " + version.getCurrentlyInstalledOverallVersionString() + "\r\n");
log("Copyright: " + Version.getCopyright() + " " + Version.getAuthor() + "\r\n");
log("Email: " + Version.getAuthorEmail() + "\r\n");
log("Logfiles: " + configuration.getLogDirPath().toString() + "\r\n");
log("\r\n");
log("Tip: FinalCrypt command line (DOS) usage:\r\n");
log("java -cp FinalCrypt.jar rdj/CLUI --help\r\n");
log("\r\n");
copyrightLabel.setText("Copyright: " + Version.getCopyright() + " " + Version.getAuthor());
// cpuIndicator
Rectangle rect = new Rectangle(0, 0, 100, 100);
Tooltip cpuIndicatorToolTip = new Tooltip("Process CPU Load");
Tooltip.install(rect, cpuIndicatorToolTip);
cpuIndicator.setTooltip(cpuIndicatorToolTip);
// for: ProcessCpuLoad()
// procCPULoadAttribute = "ProcessCpuLoad";
mbs = ManagementFactory.getPlatformMBeanServer();
try {
name = ObjectName.getInstance("java.lang:type=OperatingSystem");
} catch (MalformedObjectNameException | NullPointerException ex) {
status(ex.getMessage(), true);
}
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(200), ae -> cpuIndicator.setProgress(getProcessCpuLoad())));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
Platform.runLater(new Runnable() {
@Override
public void run() {
String title = "Welcome to " + Version.getProduct();
String header = "Brief Introduction:";
String infotext = "Step 1 Select items to en/decrypt on the left side.\r\n";
infotext += "Step 2 Select personal cipher file on the right side.\r\n";
infotext += "Step 3 Click [Encrypt] or [Decrypt] at the bottom left.\r\n";
infotext += "\r\n";
infotext += "That's it! Not hard right?\r\n";
infotext += "\r\n";
infotext += "Optional:\r\n";
infotext += "\r\n";
infotext += "Double click to open files.\r\n";
infotext += "Click [LOG] to see details.\r\n";
infotext += "Click [Check Update] sometimes.\r\n";
infotext += "Tip: Watch statusbar at bottom.\r\n";
infotext += "Tip: Make backups of your data.\r\n";
infotext += "\r\n";
infotext += "Live to love - Enjoy your privacy.\r\n\r\n";
/*
Linux: ${user.home}/.java/.userPrefs/_\!\(\)\!~\!\"q\!#4\!\[w\"_\!%k\!\[g\"\}\!#@\!\<\!\=\=/prefs.xml
For Windows systemRoot and userRoot are stored in HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs and HKEY_CURRENT_USER\Software\JavaSoft\Prefs respectively.
For Unix systemRoot and userRoot are stored in "/etc/.java" and "${user.home}/.java/.userPrefs", respectively.
Note that for Unix the locations can be changed by specifying "java.util.prefs.userRoot" and "java.util.prefs.systemRoot" properties
Mac OS X ~/Library/Preferences in multiple plist files.
Mac OS X uses the java.util.prefs.MacOSXPreferencesFactory class. See lists.apple.com/archives/java-dev/2010/Jul/msg00056.html
the java.util.prefs.MacOSXPreferencesFactory class should be in rt.jar in JDK 1.7 or later.
See hg.openjdk.java.net/macosx-port/macosx-port/jdk/file/… for the source code.
JDK 8 all the items in java.util.prefs:
*/
Preferences prefs = Preferences.userRoot().node(this.getClass().getName());
// if no val then "Unknown" prefs location registry: HKEY_CURRENT_USER\Software\JavaSoft\Prefs
String val = prefs.get("Hide Intro", "Unknown");
if (!val.equals("Yes")) {
Alert alert = introAlert(AlertType.INFORMATION, title, header, infotext, "Don't show again", param -> prefs.put("Hide Intro", param ? "Yes" : "No"), ButtonType.OK);
if (alert.showAndWait().filter(t -> t == ButtonType.OK).isPresent()) {
}
}
}
});
Alert alert = new Alert(AlertType.INFORMATION);
// Style the Alert
DialogPane dialogPane = alert.getDialogPane();
dialogPane.getStylesheets().add(getClass().getResource("myInfoAlerts.css").toExternalForm());
dialogPane.getStyleClass().add("myDialog");
// alert.setTitle("Info");
// alert.setHeaderText("Welcome");
// alert.setResizable(true);
// String infotext = new String();
// infotext = "Welcome.\r\n";
// alert.setContentText(infotext);
// alert.setOnShowing(new EventHandler<DialogEvent>()
// {
// @Override
// public void handle(DialogEvent event)
// {
// // JavaFX Delay Timer to prevent not on application thread error
// Timeline timeline = new Timeline(new KeyFrame( Duration.millis(1000), ae ->
// alert.close()
// )); timeline.play();
// }
// });
// alert.showAndWait();
}
use of javafx.scene.control.Tooltip in project org.csstudio.display.builder by kasemir.
the class PropertyPanelSection method bindSimplePropertyField.
/**
* Some 'simple' properties are handled
* in static method to allow use in the
* RulesDialog
* @param undo
* @param bindings
* @param property
* @param other
* @return
*/
public static Node bindSimplePropertyField(final UndoableActionManager undo, final List<WidgetPropertyBinding<?, ?>> bindings, final WidgetProperty<?> property, final List<Widget> other) {
final Widget widget = property.getWidget();
Node field = null;
if (property.isReadonly()) {
// If "Type", use a label with an icon.
if (property.getName().equals(CommonWidgetProperties.propType.getName())) {
final String type = widget.getType();
try {
final Image image = new Image(WidgetFactory.getInstance().getWidgetDescriptor(type).getIconStream());
final ImageView icon = new ImageView(image);
final String name = WidgetFactory.getInstance().getWidgetDescriptor(type).getName();
field = new Label(name, icon);
} catch (Exception ex) {
// Some widgets have no icon (e.g. DisplayModel).
field = new Label(String.valueOf(property.getValue()));
}
} else {
final TextField text = new TextField();
text.setText(String.valueOf(property.getValue()));
text.setDisable(true);
field = text;
}
} else if (property instanceof ColorWidgetProperty) {
final ColorWidgetProperty color_prop = (ColorWidgetProperty) property;
final WidgetColorPropertyField color_field = new WidgetColorPropertyField();
final WidgetColorPropertyBinding binding = new WidgetColorPropertyBinding(undo, color_field, color_prop, other);
bindings.add(binding);
binding.bind();
field = color_field;
} else if (property instanceof FontWidgetProperty) {
final FontWidgetProperty font_prop = (FontWidgetProperty) property;
final Button font_field = new Button();
font_field.setMaxWidth(Double.MAX_VALUE);
final WidgetFontPropertyBinding binding = new WidgetFontPropertyBinding(undo, font_field, font_prop, other);
bindings.add(binding);
binding.bind();
field = font_field;
} else if (property instanceof EnumWidgetProperty<?>) {
final EnumWidgetProperty<?> enum_prop = (EnumWidgetProperty<?>) property;
final ComboBox<String> combo = new ComboBox<>();
combo.setPromptText(property.getDefaultValue().toString());
combo.getItems().addAll(enum_prop.getLabels());
combo.setMaxWidth(Double.MAX_VALUE);
combo.setMaxHeight(Double.MAX_VALUE);
final ToggleButton macroButton = new ToggleButton("$");
try {
macroButton.setGraphic(new ImageView(new Image(ResourceUtil.openPlatformResource("platform:/plugin/org.csstudio.display.builder.editor/icons/macro-edit.png"))));
} catch (Exception ex) {
logger.log(Level.WARNING, "Cannot load macro edit image.", ex);
}
macroButton.getStyleClass().add("macro_button");
macroButton.setTooltip(new Tooltip(Messages.MacroEditButton));
BorderPane.setMargin(macroButton, new Insets(0, 0, 0, 3));
BorderPane.setAlignment(macroButton, Pos.CENTER);
final EnumWidgetPropertyBinding binding = new EnumWidgetPropertyBinding(undo, combo, enum_prop, other);
bindings.add(binding);
binding.bind();
final EventHandler<ActionEvent> macro_handler = event -> {
final boolean use_macro = macroButton.isSelected() || MacroHandler.containsMacros(enum_prop.getSpecification());
combo.setEditable(use_macro);
// now that the combo has become editable.
if (use_macro && combo.getEditor().getText().isEmpty())
binding.restore();
};
macroButton.setOnAction(macro_handler);
macroButton.setSelected(MacroHandler.containsMacros(enum_prop.getSpecification()));
macro_handler.handle(null);
field = new BorderPane(combo, null, macroButton, null, null);
// When used in RulesDialog, field can get focus.
// In that case, forward focus to combo
field.focusedProperty().addListener((ob, o, focused) -> {
if (focused) {
combo.requestFocus();
if (combo.isEditable())
combo.getEditor().selectAll();
}
});
} else if (property instanceof BooleanWidgetProperty) {
final BooleanWidgetProperty bool_prop = (BooleanWidgetProperty) property;
final ComboBox<String> combo = new ComboBox<>();
combo.setPromptText(property.getDefaultValue().toString());
combo.getItems().addAll("true", "false");
combo.setMaxWidth(Double.MAX_VALUE);
combo.setMaxHeight(Double.MAX_VALUE);
combo.setEditable(true);
// BooleanWidgetPropertyBinding makes either check or combo visible
// for plain boolean vs. macro-based value
final CheckBox check = new CheckBox();
StackPane.setAlignment(check, Pos.CENTER_LEFT);
final ToggleButton macroButton = new ToggleButton("$");
try {
macroButton.setGraphic(new ImageView(new Image(ResourceUtil.openPlatformResource("platform:/plugin/org.csstudio.display.builder.editor/icons/macro-edit.png"))));
} catch (Exception ex) {
logger.log(Level.WARNING, "Cannot load macro edit image.", ex);
}
macroButton.getStyleClass().add("macro_button");
macroButton.setTooltip(new Tooltip(Messages.MacroEditButton));
BorderPane.setMargin(macroButton, new Insets(0, 0, 0, 3));
BorderPane.setAlignment(macroButton, Pos.CENTER);
final BooleanWidgetPropertyBinding binding = new BooleanWidgetPropertyBinding(undo, check, combo, macroButton, bool_prop, other);
bindings.add(binding);
binding.bind();
field = new BorderPane(new StackPane(combo, check), null, macroButton, null, null);
// For RulesDialog, see above
field.focusedProperty().addListener((ob, o, focused) -> {
if (focused) {
if (combo.isVisible()) {
combo.requestFocus();
combo.getEditor().selectAll();
} else if (check.isVisible())
check.requestFocus();
}
});
} else if (property instanceof ColorMapWidgetProperty) {
final ColorMapWidgetProperty colormap_prop = (ColorMapWidgetProperty) property;
final Button map_button = new Button();
map_button.setMaxWidth(Double.MAX_VALUE);
final ColorMapPropertyBinding binding = new ColorMapPropertyBinding(undo, map_button, colormap_prop, other);
bindings.add(binding);
binding.bind();
field = map_button;
} else if (property instanceof WidgetClassProperty) {
final WidgetClassProperty widget_class_prop = (WidgetClassProperty) property;
final ComboBox<String> combo = new ComboBox<>();
combo.setPromptText(property.getDefaultValue().toString());
combo.setEditable(true);
// List classes of this widget
final String type = widget.getType();
final Collection<String> classes = WidgetClassesService.getWidgetClasses().getWidgetClasses(type);
combo.getItems().addAll(classes);
combo.setMaxWidth(Double.MAX_VALUE);
final WidgetClassBinding binding = new WidgetClassBinding(undo, combo, widget_class_prop, other);
bindings.add(binding);
binding.bind();
field = combo;
} else if (property instanceof FilenameWidgetProperty) {
final FilenameWidgetProperty file_prop = (FilenameWidgetProperty) property;
final TextField text = new TextField();
text.setPromptText(file_prop.getDefaultValue().toString());
text.setMaxWidth(Double.MAX_VALUE);
final Button select_file = new Button("...");
select_file.setOnAction(event -> {
try {
final String filename = FilenameSupport.promptForRelativePath(widget, file_prop.getValue());
if (filename != null)
undo.execute(new SetMacroizedWidgetPropertyAction(file_prop, filename));
} catch (Exception ex) {
logger.log(Level.WARNING, "Cannot prompt for " + file_prop, ex);
}
});
final MacroizedWidgetPropertyBinding binding = new MacroizedWidgetPropertyBinding(undo, text, file_prop, other);
bindings.add(binding);
binding.bind();
field = new HBox(text, select_file);
HBox.setHgrow(text, Priority.ALWAYS);
// For RulesDialog, see above
field.focusedProperty().addListener((ob, o, focused) -> {
if (focused)
text.requestFocus();
});
} else if (property instanceof PVNameWidgetProperty) {
final PVNameWidgetProperty pv_prop = (PVNameWidgetProperty) property;
final TextField text = new TextField();
text.setPromptText(pv_prop.getDefaultValue().toString());
final MacroizedWidgetPropertyBinding binding = new MacroizedWidgetPropertyBinding(undo, text, pv_prop, other) {
@Override
public void bind() {
super.bind();
autocomplete_menu.attachField(text);
}
@Override
public void unbind() {
super.unbind();
autocomplete_menu.removeField(text);
}
};
bindings.add(binding);
binding.bind();
// Allow editing long PV names, including loc://text("Log text with newlines"),
// in dialog
final Button open_editor = new Button("...");
open_editor.setOnAction(event -> {
final MultiLineInputDialog dialog = new MultiLineInputDialog(pv_prop.getSpecification());
DialogHelper.positionDialog(dialog, open_editor, -600, 0);
final Optional<String> result = dialog.showAndWait();
if (!result.isPresent())
return;
undo.execute(new SetMacroizedWidgetPropertyAction(pv_prop, result.get()));
for (Widget w : other) {
final MacroizedWidgetProperty<?> other_prop = (MacroizedWidgetProperty<?>) w.getProperty(pv_prop.getName());
undo.execute(new SetMacroizedWidgetPropertyAction(other_prop, result.get()));
}
});
field = new HBox(text, open_editor);
HBox.setHgrow(text, Priority.ALWAYS);
// For RulesDialog, see similar code elsewhere
field.focusedProperty().addListener((ob, o, focused) -> {
if (focused)
text.requestFocus();
});
} else if (property instanceof MacroizedWidgetProperty) {
// MacroizedWidgetProperty needs to be checked _after_ subclasses like PVNameWidgetProperty, FilenameWidgetProperty
final MacroizedWidgetProperty<?> macro_prop = (MacroizedWidgetProperty<?>) property;
final TextField text = new TextField();
text.setPromptText(macro_prop.getDefaultValue().toString());
final MacroizedWidgetPropertyBinding binding = new MacroizedWidgetPropertyBinding(undo, text, macro_prop, other);
bindings.add(binding);
binding.bind();
if (CommonWidgetProperties.propText.getName().equals(property.getName()) || CommonWidgetProperties.propTooltip.getName().equals(property.getName())) {
// Allow editing multi-line text in dialog
final Button open_editor = new Button("...");
open_editor.setOnAction(event -> {
final MultiLineInputDialog dialog = new MultiLineInputDialog(macro_prop.getSpecification());
DialogHelper.positionDialog(dialog, open_editor, -600, 0);
final Optional<String> result = dialog.showAndWait();
if (!result.isPresent())
return;
undo.execute(new SetMacroizedWidgetPropertyAction(macro_prop, result.get()));
for (Widget w : other) {
final MacroizedWidgetProperty<?> other_prop = (MacroizedWidgetProperty<?>) w.getProperty(macro_prop.getName());
undo.execute(new SetMacroizedWidgetPropertyAction(other_prop, result.get()));
}
});
field = new HBox(text, open_editor);
HBox.setHgrow(text, Priority.ALWAYS);
// For RulesDialog, see above
field.focusedProperty().addListener((ob, o, focused) -> {
if (focused)
text.requestFocus();
});
} else
field = text;
} else if (property instanceof PointsWidgetProperty) {
final PointsWidgetProperty points_prop = (PointsWidgetProperty) property;
final Button points_field = new Button();
points_field.setMaxWidth(Double.MAX_VALUE);
final PointsPropertyBinding binding = new PointsPropertyBinding(undo, points_field, points_prop, other);
bindings.add(binding);
binding.bind();
field = points_field;
}
return field;
}
Aggregations