Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sharelatex Integration #445

Draft
wants to merge 67 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
1b545e4
Sharelatex Integration
Siedlerchr Aug 12, 2017
db29578
For debug purposes, add system out println
Siedlerchr Aug 25, 2017
446d914
Merge branch 'master' into sharelatex
koppor Oct 19, 2017
867679d
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Oct 20, 2017
418aaad
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Oct 22, 2017
74ce5b9
Added classes for prefs
Siedlerchr Oct 22, 2017
0222168
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Oct 24, 2017
6e64369
set buttn txt to logging in
Siedlerchr Oct 24, 2017
0af05f0
Improve setting of enabled/diabled actions
Siedlerchr Oct 24, 2017
67f08a9
Fix checkstyle
Siedlerchr Oct 24, 2017
48dc385
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Oct 26, 2017
c360278
Improve preferences handling
Siedlerchr Oct 27, 2017
e45e206
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Oct 27, 2017
a9d1632
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Nov 3, 2017
fac2c3d
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Nov 10, 2017
74151de
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Dec 13, 2017
c91fe49
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Dec 28, 2017
06685dd
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 6, 2018
23bf919
fix build
Siedlerchr Feb 6, 2018
dfe262d
commit
Siedlerchr Feb 6, 2018
ada867a
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 7, 2018
a8855fa
Add method for getting entry from position
lenhard Feb 7, 2018
093140a
Merge branch 'sharelatex' of github.com:JabRef/jabref into sharelatex
Siedlerchr Feb 7, 2018
855cd54
get position from json update message
Siedlerchr Feb 7, 2018
49b2c41
only parse if > 0
Siedlerchr Feb 7, 2018
65f7bb2
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 7, 2018
b6d2984
Refactor ShareLatexPreferences
lenhard Feb 7, 2018
4920b9f
Merge branch 'sharelatex' of github.com:JabRef/jabref into sharelatex
lenhard Feb 7, 2018
10f1bad
improve parsing
Siedlerchr Feb 7, 2018
3eadbfb
Merge branch 'sharelatex' of github.com:JabRef/jabref into sharelatex
Siedlerchr Feb 7, 2018
0ae5f11
unncessary import
Siedlerchr Feb 7, 2018
172a03e
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 24, 2018
61177b2
Implement first version of entries merging
Siedlerchr Feb 24, 2018
99aaa1f
fix checkstyle
Siedlerchr Feb 24, 2018
954f3ab
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Aug 25, 2019
4223da5
add missing dependencies
Siedlerchr Aug 25, 2019
61a97a0
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Aug 25, 2019
23a49da
add missing diff match patch
Siedlerchr Aug 25, 2019
d473102
remove controller
Siedlerchr Aug 25, 2019
961a97d
fix action
Siedlerchr Aug 25, 2019
9e5e176
fix some more stuff
Siedlerchr Aug 25, 2019
cd82f04
fix compile errors
Siedlerchr Aug 25, 2019
8f214f1
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Aug 25, 2019
017f40e
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Aug 25, 2019
6a4d206
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Apr 6, 2020
5d1fd79
Update code
koppor Apr 6, 2020
aa9f58d
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Sep 5, 2020
ecb2690
Compilefix and working to show the dialog
koppor Sep 5, 2020
e320d9b
Refactor FXML and other gui elements to current architecture
Siedlerchr Sep 5, 2020
45d7fd1
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Sep 6, 2020
807efee
add logger
Siedlerchr Sep 6, 2020
c72c6cc
add missing tyrus grizzly container
Siedlerchr Sep 6, 2020
d08943d
fix import in test and checkstyle
Siedlerchr Sep 7, 2020
ba10c02
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Nov 11, 2020
be8b374
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Jan 26, 2021
850044e
fix build error
Siedlerchr Jan 26, 2021
46fa009
add menu item for sending wholecontent
Siedlerchr Jan 26, 2021
a1e5b9e
try with cookies
Siedlerchr Jan 26, 2021
43a802d
Fix minor issues
k3KAW8Pnf7mkmdSMPHz27 Jan 28, 2021
16bb727
Merge remote-tracking branch 'origin/main' into sharelatex
koppor Aug 4, 2021
93c3752
Fix class name (and checkstyle)
koppor Aug 4, 2021
677a9ee
Merge remote-tracking branch 'origin/sharelatex' into sharelatex
koppor Aug 4, 2021
76ecebc
Add some notes on overleaf testing
koppor Aug 4, 2021
f654e2d
Merge remote-tracking branch 'origin/main' into sharelatex
koppor Mar 17, 2023
a8c32d5
Merge remote-tracking branch 'origin/main' into sharelatex
koppor Mar 22, 2023
6e4cf32
Fix checkstyle - and switch from ACL to slf4j
koppor Mar 22, 2023
d1cea1c
Compile fix
koppor Mar 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,11 @@ dependencies {
implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.64.0'
implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.64.0'

implementation 'com.google.code.gson:gson:2.8.6'
implementation 'org.glassfish.tyrus:tyrus-client:1.17'
implementation 'org.glassfish.tyrus:tyrus-container-grizzly-client:1.17'
implementation 'org.glassfish.tyrus.ext:tyrus-extension-deflate:1.17'

implementation group: 'net.harawata', name: 'appdirs', version: '1.2.1'

testImplementation 'io.github.classgraph:classgraph:4.8.157'
Expand Down
20 changes: 20 additions & 0 deletions docs/code-howtos/overleaf.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Notes on the overleaf implementation

Local setup of overleaf:

1. Download <https://github.com/overleaf/overleaf/blob/master/docker-compose.yml>.
2. Adapt `volumes` (<https://github.com/overleaf/overleaf/blob/245fc120e6d50e8ee02d5900b8d6a8d6d8b9135c/docker-compose.yml#L20>).
3. Execute `docker compose up`.
4. Open <http://localhost/launchpad> to create the administrator user.
5. Create the test user <jabref@example.org>.
6. Copy the displayed password reset URL
7. Open your browser in a private session.
8. Go to the URL copied in step 6 and set the password `jabref`.
9. Create a latex project with the example.

After a successful setup, one can use <http://localhost> as "Server Address".

After a session execute `docker compose down`

More information on Overleaf is available at <https://github.com/overleaf/overleaf/wiki/Quick-Start-Guide>.

4 changes: 4 additions & 0 deletions src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,8 @@
requires org.eclipse.jgit;
uses org.eclipse.jgit.transport.SshSessionFactory;
uses org.eclipse.jgit.lib.GpgSigner;

requires tyrus.client;
requires tyrus.extension.deflate;
requires javax.websocket.api;
}
3 changes: 3 additions & 0 deletions src/main/java/org/jabref/gui/DefaultInjector.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.jabref.logic.importer.ImportFormatReader;
import org.jabref.logic.journals.JournalAbbreviationRepository;
import org.jabref.logic.protectedterms.ProtectedTermsLoader;
import org.jabref.logic.sharelatex.ShareLatexManager;
import org.jabref.model.entry.BibEntryTypesManager;
import org.jabref.model.util.FileUpdateMonitor;
import org.jabref.preferences.PreferencesService;
Expand Down Expand Up @@ -43,6 +44,8 @@ private static Object createDependency(Class<?> clazz) {
return Globals.stateManager;
} else if (clazz == ThemeManager.class) {
return Globals.getThemeManager();
} else if (clazz == ShareLatexManager.class) {
return Globals.shareLatexManager;
} else if (clazz == FileUpdateMonitor.class) {
return Globals.getFileUpdateMonitor();
} else if (clazz == ProtectedTermsLoader.class) {
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/org/jabref/gui/Globals.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.jabref.logic.protectedterms.ProtectedTermsLoader;
import org.jabref.logic.remote.RemotePreferences;
import org.jabref.logic.remote.server.RemoteListenerServerManager;
import org.jabref.logic.sharelatex.ShareLatexManager;
import org.jabref.logic.util.BuildInfo;
import org.jabref.model.entry.BibEntryTypesManager;
import org.jabref.model.strings.StringUtil;
Expand Down Expand Up @@ -70,6 +71,8 @@ public class Globals {
*/
public static ProtectedTermsLoader protectedTermsLoader;

public static ShareLatexManager shareLatexManager = new ShareLatexManager();

public static CountingUndoManager undoManager = new CountingUndoManager();
public static BibEntryTypesManager entryTypesManager = new BibEntryTypesManager();

Expand Down
7 changes: 6 additions & 1 deletion src/main/java/org/jabref/gui/JabRefFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,10 @@

import org.jabref.gui.actions.ActionFactory;
import org.jabref.gui.actions.ActionHelper;
import org.jabref.gui.actions.SendChangesToShareLatexAction;
import org.jabref.gui.actions.SimpleCommand;
import org.jabref.gui.actions.StandardActions;
import org.jabref.gui.actions.SynchronizeWithShareLatexAction;
import org.jabref.gui.auximport.NewSubLibraryAction;
import org.jabref.gui.bibtexextractor.ExtractBibtexAction;
import org.jabref.gui.citationkeypattern.GenerateCitationKeyAction;
Expand Down Expand Up @@ -793,7 +795,10 @@ private MenuBar createMenu() {

factory.createSubMenu(StandardActions.REMOTE_DB,
factory.createMenuItem(StandardActions.CONNECT_TO_SHARED_DB, new ConnectToSharedDatabaseCommand(this)),
factory.createMenuItem(StandardActions.PULL_CHANGES_FROM_SHARED_DB, new PullChangesFromSharedAction(stateManager))),
factory.createMenuItem(StandardActions.PULL_CHANGES_FROM_SHARED_DB, new PullChangesFromSharedAction(stateManager)),
factory.createMenuItem(StandardActions.SYNCHRONIZE_WITH_SHARELATEX, new SynchronizeWithShareLatexAction()),
factory.createMenuItem(StandardActions.SEND_TO_SHARELATEX, new SendChangesToShareLatexAction())
),

new SeparatorMenuItem(),

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.jabref.gui.actions;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;

import org.jabref.gui.Globals;

public class DisconnectFromSharelatexAction extends AbstractAction {

public DisconnectFromSharelatexAction() {
super();
putValue(Action.NAME, "Disconnect from ShareLaTeX");
}

@Override
public void actionPerformed(ActionEvent e) {
Globals.shareLatexManager.disconnectAndCloseConnection();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.jabref.gui.actions;

import org.jabref.gui.Globals;
import org.jabref.gui.StateManager;
import org.jabref.logic.sharelatex.ShareLatexManager;

public class SendChangesToShareLatexAction extends SimpleCommand {

@Override
public void execute() {
ShareLatexManager manager = Globals.shareLatexManager;
StateManager stateManager = Globals.stateManager;
manager.sendNewDatabaseContent(stateManager.getActiveDatabase().get());
}
}
5 changes: 3 additions & 2 deletions src/main/java/org/jabref/gui/actions/StandardActions.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public enum StandardActions implements Action {
EXPORT_SELECTED(Localization.lang("Export selected entries"), KeyBinding.EXPORT_SELECTED),
CONNECT_TO_SHARED_DB(Localization.lang("Connect to shared database"), IconTheme.JabRefIcons.CONNECT_DB),
PULL_CHANGES_FROM_SHARED_DB(Localization.lang("Pull changes from shared database"), KeyBinding.PULL_CHANGES_FROM_SHARED_DATABASE),
SYNCHRONIZE_WITH_SHARELATEX(Localization.lang("Connect to Overleaf"), IconTheme.JabRefIcons.CONNECT_DB),
CLOSE_LIBRARY(Localization.lang("Close"), Localization.lang("Close the current library"), IconTheme.JabRefIcons.CLOSE, KeyBinding.CLOSE_DATABASE),
CLOSE_OTHER_LIBRARIES(Localization.lang("Close others"), Localization.lang("Close other libraries"), IconTheme.JabRefIcons.CLOSE),
CLOSE_ALL_LIBRARIES(Localization.lang("Close all"), Localization.lang("Close all libraries"), IconTheme.JabRefIcons.CLOSE),
Expand Down Expand Up @@ -173,11 +174,11 @@ public enum StandardActions implements Action {
ERROR_CONSOLE(Localization.lang("View event log"), Localization.lang("Display all error messages")),
SEARCH_FOR_UPDATES(Localization.lang("Check for updates")),
ABOUT(Localization.lang("About JabRef"), Localization.lang("About JabRef")),

EDIT_LIST(Localization.lang("Edit"), IconTheme.JabRefIcons.EDIT),
VIEW_LIST(Localization.lang("View"), IconTheme.JabRefIcons.FILE),
REMOVE_LIST(Localization.lang("Remove"), IconTheme.JabRefIcons.REMOVE),
RELOAD_LIST(Localization.lang("Reload"), IconTheme.JabRefIcons.REFRESH);
RELOAD_LIST(Localization.lang("Reload"), IconTheme.JabRefIcons.REFRESH),
SEND_TO_SHARELATEX("Send content to Overleaf", "Send to overleaf");

private final String text;
private final String description;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.jabref.gui.actions;

import org.jabref.gui.sharelatex.ShareLatexLoginDialogView;

public class SynchronizeWithShareLatexAction extends SimpleCommand {

@Override
public void execute() {
new ShareLatexLoginDialogView().showAndWait();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.airhacks.afterburner.injection.Injector;

/**
* Opens a shared database.
* Opens a shared SQL database
*/
public class ConnectToSharedDatabaseCommand extends SimpleCommand {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.jabref.gui.shared;

import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.GeneralSecurityException;
Expand Down Expand Up @@ -204,7 +203,7 @@ private void setPreferences() {
if (rememberPassword.get()) {
try {
sharedDatabasePreferences.setPassword(new Password(password.getValue(), user.getValue()).encrypt());
} catch (GeneralSecurityException | UnsupportedEncodingException e) {
} catch (GeneralSecurityException e) {
LOGGER.error("Could not store the password due to encryption problems.", e);
}
} else {
Expand Down Expand Up @@ -247,7 +246,7 @@ private void applyPreferences() {
if (sharedDatabasePassword.isPresent() && sharedDatabaseUser.isPresent()) {
try {
password.setValue(new Password(sharedDatabasePassword.get().toCharArray(), sharedDatabaseUser.get()).decrypt());
} catch (GeneralSecurityException | UnsupportedEncodingException e) {
} catch (GeneralSecurityException e) {
LOGGER.error("Could not read the password due to decryption problems.", e);
}
}
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/org/jabref/gui/sharelatex/ShareLatexLoginDialog.fxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.ButtonType?>
<?import javafx.scene.control.DialogPane?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>

<DialogPane prefHeight="220.0" prefWidth="362.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.jabref.gui.sharelatex.ShareLatexLoginDialogView">
<content>
<BorderPane prefHeight="200.0" prefWidth="402.0">
<center>
<GridPane alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="140.0" prefWidth="270.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="1.7976931348623157E308" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="Server Address" />
<TextField id="tbAddress" fx:id="tbAddress" prefHeight="25.0" prefWidth="174.0" text="https://www.overleaf.com" GridPane.columnIndex="1" />
<TextField id="tbUsername" fx:id="tbUsername" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label alignment="CENTER_RIGHT" text="%Username" GridPane.rowIndex="1" />
<Label text="%Password" GridPane.rowIndex="2" />
<PasswordField id="tbPassword" fx:id="tbPassword" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children>
</GridPane>
</center>
</BorderPane>
</content>
<buttonTypes>
<ButtonType fx:constant="CLOSE"/>
<ButtonType fx:id="connectButton" buttonData="OK_DONE" text="%Connect"/>
</buttonTypes>
</DialogPane>
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package org.jabref.gui.sharelatex;

import javafx.fxml.FXML;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;

import org.jabref.gui.DialogService;
import org.jabref.gui.FXDialog;
import org.jabref.gui.Globals;
import org.jabref.gui.util.BaseDialog;
import org.jabref.gui.util.ControlHelper;
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.sharelatex.ShareLatexManager;
import org.jabref.logic.sharelatex.SharelatexConnectionProperties;

import com.airhacks.afterburner.views.ViewLoader;
import jakarta.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ShareLatexLoginDialogView extends BaseDialog<Void> {

private static final Logger LOGGER = LoggerFactory.getLogger(ShareLatexLoginDialogView.class);

@FXML private TextField tbAddress;
@FXML private TextField tbUsername;
@FXML private PasswordField tbPassword;
@FXML private ButtonType connectButton;

private final Button btnLogin;
@Inject private ShareLatexManager manager;
@Inject private DialogService dialogService;

private SharelatexConnectionProperties props;

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need to put this in the ctor:

ViewLoader.view(this)
.load()
.setAsDialogPane(this);

public ShareLatexLoginDialogView() {
ViewLoader.view(this)
.load()
.setAsDialogPane(this);

ControlHelper.setAction(connectButton, this.getDialogPane(), event -> signIn());
btnLogin = (Button) this.getDialogPane().lookupButton(connectButton);
}

@FXML
private void initialize() {
}

@FXML
private void signIn() {
btnLogin.setText(Localization.lang("Logging in..."));
try {
String result = manager.login(tbAddress.getText(), tbUsername.getText(), tbPassword.getText());
if (result.contains("incorrect")) {
FXDialog dlg = new FXDialog(AlertType.ERROR);
dlg.setContentText("Your email or password is incorrect. Please try again");
dlg.showAndWait();
} else {
// TODO: Replace with PreferencesService later

props = new SharelatexConnectionProperties(Globals.prefs.getShareLatexPreferences());

props.setUrl(tbAddress.getText());
props.setUser(tbUsername.getText());
props.setPassword(tbPassword.getText());

manager.setConnectionProperties(props);

ShareLatexProjectDialogView dlgprojects = new ShareLatexProjectDialogView();
dlgprojects.show();
this.close();
}
} catch (Exception e) {
LOGGER.error("Problems connectiong", e);
dialogService.showErrorDialogAndWait(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonType?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.DialogPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.BorderPane?>

<DialogPane prefHeight="494.0" prefWidth="397.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.jabref.gui.sharelatex.ShareLatexProjectDialogView">
<content>
<BorderPane>
<top>
<TableView fx:id="tblProjects" BorderPane.alignment="CENTER">
<columns>
<TableColumn fx:id="colActive" prefWidth="75.0" text="Active" />
<TableColumn fx:id="colTitle" prefWidth="75.0" text="Title" />
<TableColumn fx:id="colFirstName" prefWidth="75.0" text="First Name" />
<TableColumn fx:id="colLastName" prefWidth="75.0" text="Last Name" />
<TableColumn fx:id="colLastModified" prefWidth="75.0" text="Last modified" />
</columns>
</TableView>
</top>
</BorderPane>
</content>
<buttonTypes>
<ButtonType fx:constant="CLOSE"/>
<ButtonType fx:id="syncButton" buttonData="OK_DONE" text="%Synchronize Library"/>
</buttonTypes>
</DialogPane>
Loading