Skip to content

Commit ef38692

Browse files
committed
Merge remote-tracking branch 'upstream/master' into newEntryDialog
* upstream/master: Fix that sometimes a white background appeared in the groups panel (#4316) Minimal code improvements Fix drag and drop in entry editor (#4311)
2 parents 0435d8f + d1da461 commit ef38692

File tree

6 files changed

+66
-12
lines changed

6 files changed

+66
-12
lines changed

src/main/java/org/jabref/gui/BasePanel.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public BasePanel(JabRefFrame frame, BasePanelPreferences preferences, BibDatabas
220220

221221
this.getDatabase().registerListener(new UpdateTimestampListener(Globals.prefs));
222222

223-
this.entryEditor = new EntryEditor(this, preferences.getEntryEditorPreferences(), Globals.getFileUpdateMonitor(), dialogService);
223+
this.entryEditor = new EntryEditor(this, preferences.getEntryEditorPreferences(), Globals.getFileUpdateMonitor(), dialogService, externalFileTypes);
224224

225225
this.preview = new PreviewPanel(this, getBibDatabaseContext(), preferences.getKeyBindings(), preferences.getPreviewPreferences(), dialogService, externalFileTypes);
226226
frame().getGlobalSearchBar().getSearchQueryHighlightObservable().addSearchListener(preview);

src/main/java/org/jabref/gui/entryeditor/EntryEditor.java

+56-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.jabref.gui.entryeditor;
22

3+
import java.io.File;
4+
import java.nio.file.Path;
35
import java.util.ArrayList;
46
import java.util.LinkedList;
57
import java.util.List;
@@ -16,16 +18,21 @@
1618
import javafx.scene.control.MenuItem;
1719
import javafx.scene.control.Tab;
1820
import javafx.scene.control.TabPane;
21+
import javafx.scene.input.DataFormat;
1922
import javafx.scene.input.KeyEvent;
23+
import javafx.scene.input.TransferMode;
2024
import javafx.scene.layout.BorderPane;
2125

26+
import org.jabref.Globals;
2227
import org.jabref.gui.BasePanel;
2328
import org.jabref.gui.DialogService;
2429
import org.jabref.gui.GUIGlobals;
2530
import org.jabref.gui.actions.ActionFactory;
2631
import org.jabref.gui.actions.GenerateBibtexKeySingleAction;
2732
import org.jabref.gui.actions.StandardActions;
2833
import org.jabref.gui.entryeditor.fileannotationtab.FileAnnotationTab;
34+
import org.jabref.gui.externalfiles.NewDroppedFileHandler;
35+
import org.jabref.gui.externalfiletype.ExternalFileTypes;
2936
import org.jabref.gui.help.HelpAction;
3037
import org.jabref.gui.keyboard.KeyBinding;
3138
import org.jabref.gui.menus.ChangeEntryTypeMenu;
@@ -41,10 +48,13 @@
4148
import org.jabref.model.database.BibDatabaseContext;
4249
import org.jabref.model.entry.BibEntry;
4350
import org.jabref.model.util.FileUpdateMonitor;
51+
import org.jabref.preferences.JabRefPreferences;
4452

4553
import com.airhacks.afterburner.views.ViewLoader;
4654
import org.fxmisc.easybind.EasyBind;
4755
import org.fxmisc.easybind.Subscription;
56+
import org.slf4j.Logger;
57+
import org.slf4j.LoggerFactory;
4858

4959
/**
5060
* GUI component that allows editing of the fields of a BibEntry (i.e. the
@@ -58,6 +68,8 @@
5868
*/
5969
public class EntryEditor extends BorderPane {
6070

71+
private static final Logger LOGGER = LoggerFactory.getLogger(EntryEditor.class);
72+
6173
private final BibDatabaseContext databaseContext;
6274
private final CountingUndoManager undoManager;
6375
private final BasePanel panel;
@@ -79,15 +91,24 @@ public class EntryEditor extends BorderPane {
7991

8092
private final EntryEditorPreferences preferences;
8193
private final DialogService dialogService;
94+
private final NewDroppedFileHandler fileHandler;
8295

83-
public EntryEditor(BasePanel panel, EntryEditorPreferences preferences, FileUpdateMonitor fileMonitor, DialogService dialogService) {
96+
public EntryEditor(BasePanel panel, EntryEditorPreferences preferences, FileUpdateMonitor fileMonitor, DialogService dialogService, ExternalFileTypes externalFileTypes) {
8497
this.panel = panel;
8598
this.databaseContext = panel.getBibDatabaseContext();
8699
this.undoManager = panel.getUndoManager();
87100
this.preferences = Objects.requireNonNull(preferences);
88101
this.fileMonitor = fileMonitor;
89102
this.dialogService = dialogService;
90103

104+
fileHandler = new NewDroppedFileHandler(dialogService, databaseContext, externalFileTypes,
105+
Globals.prefs.getFileDirectoryPreferences(),
106+
Globals.prefs.getCleanupPreferences(Globals.journalAbbreviationLoader).getFileDirPattern(),
107+
Globals.prefs.getImportFormatPreferences(),
108+
Globals.prefs.getUpdateFieldPreferences(),
109+
Globals.getFileUpdateMonitor(),
110+
Globals.prefs.get(JabRefPreferences.IMPORT_FILENAMEPATTERN));
111+
91112
ViewLoader.view(this)
92113
.root(this)
93114
.load();
@@ -109,6 +130,40 @@ public EntryEditor(BasePanel panel, EntryEditorPreferences preferences, FileUpda
109130
setupKeyBindings();
110131

111132
tabs = createTabs();
133+
134+
this.setOnDragOver(event -> {
135+
if (event.getDragboard().hasFiles()) {
136+
event.acceptTransferModes(TransferMode.COPY, TransferMode.MOVE, TransferMode.LINK);
137+
}
138+
event.consume();
139+
});
140+
141+
this.setOnDragDropped(event -> {
142+
BibEntry entry = this.getEntry();
143+
boolean success = false;
144+
if (event.getDragboard().hasContent(DataFormat.FILES)) {
145+
List<Path> files = event.getDragboard().getFiles().stream().map(File::toPath).collect(Collectors.toList());
146+
147+
if (event.getTransferMode() == TransferMode.MOVE) {
148+
149+
LOGGER.debug("Mode MOVE"); //shift on win or no modifier
150+
fileHandler.addToEntryRenameAndMoveToFileDir(entry, files);
151+
}
152+
if (event.getTransferMode() == TransferMode.LINK) {
153+
LOGGER.debug("Node LINK"); //alt on win
154+
fileHandler.addToEntry(entry, files);
155+
156+
}
157+
if (event.getTransferMode() == TransferMode.COPY) {
158+
LOGGER.debug("Mode Copy"); //ctrl on win, no modifier on Xubuntu
159+
fileHandler.copyFilesToFileDirAndAddToEntry(entry, files);
160+
}
161+
}
162+
163+
event.setDropCompleted(success);
164+
event.consume();
165+
166+
});
112167
}
113168

114169
/**

src/main/java/org/jabref/gui/groups/GroupTree.css

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
#groupTree:focused,
2+
#groupTree:filled:selected {
3+
-fx-background-color: -jr-sidepane-background;
4+
}
5+
16
.tree-table-view, .tree-table-row-cell {
27
-fx-background-color: -jr-sidepane-background;
38
-fx-table-cell-border-color: transparent; /* hide grid lines */

src/main/java/org/jabref/gui/groups/GroupTree.fxml

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
<?import javafx.scene.layout.Region?>
1111
<?import org.jabref.gui.icon.JabRefIconView?>
1212
<?import org.controlsfx.control.textfield.CustomTextField?>
13-
<BorderPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="600.0" prefWidth="150.0" styleClass="groupsPane"
13+
<BorderPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="600.0" prefWidth="150.0"
1414
xmlns="http://javafx.com/javafx/8.0.112" fx:controller="org.jabref.gui.groups.GroupTreeView">
1515
<center>
16-
<TreeTableView fx:id="groupTree" layoutY="-7.0" prefHeight="600.0" prefWidth="250.0" styleClass="groupsPane">
16+
<TreeTableView fx:id="groupTree" layoutY="-7.0" prefHeight="600.0" prefWidth="250.0">
1717
<columns>
1818
<TreeTableColumn fx:id="mainColumn"/>
1919
<TreeTableColumn fx:id="numberColumn" minWidth="50.0" maxWidth="70.0" prefWidth="60.0"

src/main/java/org/jabref/gui/maintable/MainTable.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public MainTable(MainTableDataModel model, JabRefFrame frame,
104104
this.setItems(model.getEntriesFilteredAndSorted());
105105

106106
// Enable sorting
107-
model.bindComparator(this.comparatorProperty());
107+
model.getEntriesFilteredAndSorted().comparatorProperty().bind(this.comparatorProperty());
108108

109109
this.panel = panel;
110110

src/main/java/org/jabref/gui/maintable/MainTableDataModel.java

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package org.jabref.gui.maintable;
22

3-
import java.util.Comparator;
43
import java.util.List;
54
import java.util.Optional;
65

76
import javafx.beans.binding.Bindings;
8-
import javafx.beans.property.ReadOnlyObjectProperty;
97
import javafx.collections.ObservableList;
108
import javafx.collections.transformation.FilteredList;
119
import javafx.collections.transformation.SortedList;
@@ -68,11 +66,7 @@ private Optional<MatcherSet> createGroupMatcher(List<GroupTreeNode> selectedGrou
6866
return Optional.of(searchRules);
6967
}
7068

71-
public ObservableList<BibEntryTableViewModel> getEntriesFilteredAndSorted() {
69+
public SortedList<BibEntryTableViewModel> getEntriesFilteredAndSorted() {
7270
return entriesSorted;
7371
}
74-
75-
public void bindComparator(ReadOnlyObjectProperty<Comparator<BibEntryTableViewModel>> comparator) {
76-
entriesSorted.comparatorProperty().bind(comparator);
77-
}
7872
}

0 commit comments

Comments
 (0)