Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

Add editing buttons to definition pane

AuthorDaveJarvis <email>
Date2020-06-23 22:51:21 GMT-0700
Commitccd768da0a4ed718c0edc606816483a6d61f0ceb
Parent7d38d51
Delta79 lines added, 148 lines removed, 69-line decrease
src/main/resources/com/scrivenvar/preview/webview.css
=============================================================================*/
body {
+ /* Must be bundled in JAR file. */
font-family: "Vollkorn", serif;
font-size: 16px;
=============================================================================*/
dl {
- /** Horizontal scroll bar from appears if set to 100%. */
+ /** Horizontal scroll bar will appear if set to 100%. */
width: 99%;
overflow: hidden;
pre, code, tt {
font-size: 14px;
+ /* Must be bundled in JAR file. */
font-family: "Fira Code", monospace;
}
kbd {
background-color: #ccc;
- background-image: linear-gradient(#F1F1F1, #DDDDDD);
+ background-image: linear-gradient(#f8f8f8, #DDDDDD);
background-repeat: repeat-x;
border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
border-image: none;
border-radius: 2px;
border-style: solid;
border-width: 1px;
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
- line-height: 10px;
+ font-family: sans-serif;
+ line-height: 1.25;
padding: 1px 4px;
}
src/main/java/com/scrivenvar/controls/BrowseFileButton.java
package com.scrivenvar.controls;
-import java.io.File;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
+import com.scrivenvar.Messages;
+import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
+import de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
-import com.scrivenvar.Messages;
-import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
-import de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
/**
- * Button that opens a file chooser to select a local file for a URL in markdown.
+ * Button that opens a file chooser to select a local file for a URL in
+ * markdown.
*
* @author Karl Tauber
*/
-public class BrowseFileButton
- extends Button
-{
- private final List<ExtensionFilter> extensionFilters = new ArrayList<>();
+public class BrowseFileButton extends Button {
+ private final List<ExtensionFilter> extensionFilters = new ArrayList<>();
- public BrowseFileButton() {
- setGraphic(FontAwesomeIconFactory.get().createIcon(FontAwesomeIcon.FILE_ALT, "1.2em"));
- setTooltip(new Tooltip(Messages.get("BrowseFileButton.tooltip")));
- setOnAction(this::browse);
+ public BrowseFileButton() {
+ setGraphic(
+ FontAwesomeIconFactory.get().createIcon( FontAwesomeIcon.FILE_ALT )
+ );
+ setTooltip( new Tooltip( Messages.get( "BrowseFileButton.tooltip" ) ) );
+ setOnAction( this::browse );
- disableProperty().bind(basePath.isNull());
+ disableProperty().bind( basePath.isNull() );
- // workaround for a JavaFX bug:
- // avoid closing the dialog that contains this control when the user
- // closes the FileChooser or DirectoryChooser using the ESC key
- addEventHandler(KeyEvent.KEY_RELEASED, e-> {
- if (e.getCode() == KeyCode.ESCAPE)
- e.consume();
- });
- }
+ // workaround for a JavaFX bug:
+ // avoid closing the dialog that contains this control when the user
+ // closes the FileChooser or DirectoryChooser using the ESC key
+ addEventHandler( KeyEvent.KEY_RELEASED, e -> {
+ if( e.getCode() == KeyCode.ESCAPE ) {
+ e.consume();
+ }
+ } );
+ }
- public void addExtensionFilter(ExtensionFilter extensionFilter) {
- extensionFilters.add(extensionFilter);
- }
+ public void addExtensionFilter( ExtensionFilter extensionFilter ) {
+ extensionFilters.add( extensionFilter );
+ }
- // 'basePath' property
- private final ObjectProperty<Path> basePath = new SimpleObjectProperty<>();
- public Path getBasePath() { return basePath.get(); }
- public void setBasePath(Path basePath) { this.basePath.set(basePath); }
- public ObjectProperty<Path> basePathProperty() { return basePath; }
+ // 'basePath' property
+ private final ObjectProperty<Path> basePath = new SimpleObjectProperty<>();
- // 'url' property
- private final ObjectProperty<String> url = new SimpleObjectProperty<>();
- public String getUrl() { return url.get(); }
- public void setUrl(String url) { this.url.set(url); }
- public ObjectProperty<String> urlProperty() { return url; }
+ public Path getBasePath() {
+ return basePath.get();
+ }
- protected void browse(ActionEvent e) {
- FileChooser fileChooser = new FileChooser();
- fileChooser.setTitle(Messages.get("BrowseFileButton.chooser.title"));
- fileChooser.getExtensionFilters().addAll(extensionFilters);
- fileChooser.getExtensionFilters().add(new ExtensionFilter(Messages.get("BrowseFileButton.chooser.allFilesFilter"), "*.*"));
- fileChooser.setInitialDirectory(getInitialDirectory());
- File result = fileChooser.showOpenDialog(getScene().getWindow());
- if (result != null)
- updateUrl(result);
- }
+ public void setBasePath( Path basePath ) {
+ this.basePath.set( basePath );
+ }
- protected File getInitialDirectory() {
- //TODO build initial directory based on current value of 'url' property
- return getBasePath().toFile();
- }
+ // 'url' property
+ private final ObjectProperty<String> url = new SimpleObjectProperty<>();
- protected void updateUrl(File file) {
- String newUrl;
- try {
- newUrl = getBasePath().relativize(file.toPath()).toString();
- } catch (IllegalArgumentException ex) {
- newUrl = file.toString();
- }
- url.set(newUrl.replace('\\', '/'));
- }
+ public ObjectProperty<String> urlProperty() {
+ return url;
+ }
+
+ protected void browse( ActionEvent e ) {
+ FileChooser fileChooser = new FileChooser();
+ fileChooser.setTitle( Messages.get( "BrowseFileButton.chooser.title" ) );
+ fileChooser.getExtensionFilters().addAll( extensionFilters );
+ fileChooser.getExtensionFilters()
+ .add( new ExtensionFilter( Messages.get(
+ "BrowseFileButton.chooser.allFilesFilter" ), "*.*" ) );
+ fileChooser.setInitialDirectory( getInitialDirectory() );
+ File result = fileChooser.showOpenDialog( getScene().getWindow() );
+ if( result != null ) {
+ updateUrl( result );
+ }
+ }
+
+ protected File getInitialDirectory() {
+ //TODO build initial directory based on current value of 'url' property
+ return getBasePath().toFile();
+ }
+
+ protected void updateUrl( File file ) {
+ String newUrl;
+ try {
+ newUrl = getBasePath().relativize( file.toPath() ).toString();
+ } catch( IllegalArgumentException ex ) {
+ newUrl = file.toString();
+ }
+ url.set( newUrl.replace( '\\', '/' ) );
+ }
}
src/main/java/com/scrivenvar/controls/FlagCheckBox.java
-/*
- * Copyright (c) 2015 Karl Tauber <karl at jformdesigner dot com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * o Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * o Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.scrivenvar.controls;
-
-import javafx.beans.property.IntegerProperty;
-import javafx.beans.property.SimpleIntegerProperty;
-import javafx.scene.control.CheckBox;
-
-/**
- * CheckBox that toggles a bit in an integer.
- *
- * @author Karl Tauber
- */
-public class FlagCheckBox extends CheckBox {
-
- public FlagCheckBox() {
- setOnAction( e -> {
- if( isSelected() ) {
- setFlags( getFlags() | getFlag() );
- } else {
- setFlags( getFlags() & ~getFlag() );
- }
- } );
-
- flags.addListener( (obs, oldFlags, newFlags) -> {
- setSelected( (newFlags.intValue() & getFlag()) != 0 );
- } );
- }
-
- // 'flag' property
- private final IntegerProperty flag = new SimpleIntegerProperty();
-
- public int getFlag() {
- return flag.get();
- }
-
- public void setFlag( int flag ) {
- this.flag.set( flag );
- }
-
- public IntegerProperty flagProperty() {
- return flag;
- }
-
- // 'flags' property
- private final IntegerProperty flags = new SimpleIntegerProperty();
-
- public int getFlags() {
- return flags.get();
- }
-
- public void setFlags( int flags ) {
- this.flags.set( flags );
- }
-
- public IntegerProperty flagsProperty() {
- return flags;
- }
-}