1
1
package org .jabref .gui .metadata ;
2
2
3
+ import java .util .Optional ;
4
+
3
5
import javax .inject .Inject ;
4
6
5
- import javafx .event .ActionEvent ;
6
7
import javafx .fxml .FXML ;
7
8
import javafx .scene .control .Button ;
8
9
import javafx .scene .control .ButtonType ;
13
14
import javafx .util .converter .DefaultStringConverter ;
14
15
15
16
import org .jabref .gui .DialogService ;
16
- import org .jabref .gui .icon .IconTheme . JabRefIcons ;
17
+ import org .jabref .gui .icon .IconTheme ;
17
18
import org .jabref .gui .util .BaseDialog ;
18
- import org .jabref .gui .util .IconValidationDecorator ;
19
+ import org .jabref .gui .util .ValueTableCellFactory ;
19
20
import org .jabref .gui .util .ViewModelTextFieldTableCellVisualizationFactory ;
20
21
import org .jabref .logic .l10n .Localization ;
21
22
import org .jabref .model .database .BibDatabase ;
22
23
23
24
import com .airhacks .afterburner .views .ViewLoader ;
24
- import de .saxsys .mvvmfx .utils .validation .visualization .ControlsFxVisualizer ;
25
25
26
26
public class BibtexStringEditorDialogView extends BaseDialog <Void > {
27
27
28
- @ FXML private Button btnNewString ;
29
- @ FXML private Button btnRemove ;
30
- @ FXML private Button btnHelp ;
28
+ @ FXML private TableView <BibtexStringEditorItemModel > stringsList ;
29
+ @ FXML private TableColumn <BibtexStringEditorItemModel , String > labelColumn ;
30
+ @ FXML private TableColumn <BibtexStringEditorItemModel , String > contentColumn ;
31
+ @ FXML private TableColumn <BibtexStringEditorItemModel , String > actionsColumn ;
32
+ @ FXML private Button addStringButton ;
31
33
@ FXML private ButtonType saveButton ;
32
34
33
- @ FXML private TableView <BibtexStringViewModel > tblStrings ;
34
- @ FXML private TableColumn <BibtexStringViewModel , String > colLabel ;
35
- @ FXML private TableColumn <BibtexStringViewModel , String > colContent ;
36
-
37
- private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer ();
38
35
private final BibtexStringEditorDialogViewModel viewModel ;
39
36
40
37
@ Inject private DialogService dialogService ;
41
38
42
39
public BibtexStringEditorDialogView (BibDatabase database ) {
43
- viewModel = new BibtexStringEditorDialogViewModel (database );
40
+ this . viewModel = new BibtexStringEditorDialogViewModel (database );
44
41
45
42
ViewLoader .view (this )
46
43
.load ()
@@ -62,53 +59,67 @@ public BibtexStringEditorDialogView(BibDatabase database) {
62
59
63
60
@ FXML
64
61
private void initialize () {
65
- visualizer .setDecoration (new IconValidationDecorator ());
66
-
67
- btnHelp .setGraphic (JabRefIcons .HELP .getGraphicNode ());
68
- btnHelp .setTooltip (new Tooltip (Localization .lang ("Open Help page" )));
62
+ addStringButton .setTooltip (new Tooltip (Localization .lang ("New string" )));
69
63
70
- btnNewString . setTooltip ( new Tooltip ( Localization . lang ( "New string" )) );
71
- btnRemove . setTooltip ( new Tooltip ( Localization . lang ( "Remove selected strings" )) );
64
+ labelColumn . setSortable ( true );
65
+ labelColumn . setReorderable ( false );
72
66
73
- colLabel .setCellValueFactory (cellData -> cellData .getValue ().labelProperty ());
74
- new ViewModelTextFieldTableCellVisualizationFactory <BibtexStringViewModel , String >().withValidation (BibtexStringViewModel ::labelValidation , visualizer ).install (colLabel , new DefaultStringConverter ());
67
+ labelColumn .setCellValueFactory (cellData -> cellData .getValue ().labelProperty ());
68
+ new ViewModelTextFieldTableCellVisualizationFactory <BibtexStringEditorItemModel , String >()
69
+ .withValidation (BibtexStringEditorItemModel ::labelValidation )
70
+ .install (labelColumn , new DefaultStringConverter ());
71
+ labelColumn .setOnEditCommit ((CellEditEvent <BibtexStringEditorItemModel , String > cellEvent ) -> {
75
72
76
- colContent .setCellValueFactory (cellData -> cellData .getValue ().contentProperty ());
77
- new ViewModelTextFieldTableCellVisualizationFactory <BibtexStringViewModel , String >().withValidation (BibtexStringViewModel ::contentValidation , visualizer ).install (colContent , new DefaultStringConverter ());
73
+ BibtexStringEditorItemModel cellItem = cellEvent .getTableView ()
74
+ .getItems ()
75
+ .get (cellEvent .getTablePosition ().getRow ());
78
76
79
- colLabel . setOnEditCommit (( CellEditEvent < BibtexStringViewModel , String > cell ) -> {
77
+ Optional < BibtexStringEditorItemModel > existingItem = viewModel . labelAlreadyExists ( cellEvent . getNewValue ());
80
78
81
- String newLabelValue = cell .getNewValue ();
82
- if (cell .getTableView ().getItems ().stream ().anyMatch (strs -> strs .labelProperty ().get ().equals (newLabelValue ))) {
79
+ if (existingItem .isPresent () && !existingItem .get ().equals (cellItem )) {
80
+ dialogService .showErrorDialogAndWait (Localization .lang (
81
+ "A string with the label '%0' already exists." ,
82
+ cellEvent .getNewValue ()));
83
83
84
- dialogService .showErrorDialogAndWait (Localization .lang ("A string with the label '%0' already exists." , newLabelValue ));
85
- cell .getRowValue ().setLabel ("" );
84
+ cellItem .setLabel (cellEvent .getOldValue ());
86
85
} else {
87
- cell . getRowValue (). setLabel (cell .getNewValue ());
86
+ cellItem . setLabel (cellEvent .getNewValue ());
88
87
}
89
- });
90
- colContent .setOnEditCommit ((CellEditEvent <BibtexStringViewModel , String > cell ) -> {
91
- cell .getRowValue ().setContent (cell .getNewValue ());
92
- });
93
88
94
- tblStrings . itemsProperty ().bindBidirectional ( viewModel . allStringsProperty () );
95
- tblStrings . setEditable ( true );
89
+ cellEvent . getTableView ().refresh ( );
90
+ } );
96
91
97
- viewModel .seletedItemProperty ().bind (tblStrings .getSelectionModel ().selectedItemProperty ());
92
+ contentColumn .setSortable (true );
93
+ contentColumn .setReorderable (false );
94
+ contentColumn .setCellValueFactory (cellData -> cellData .getValue ().contentProperty ());
95
+ new ViewModelTextFieldTableCellVisualizationFactory <BibtexStringEditorItemModel , String >()
96
+ .withValidation (BibtexStringEditorItemModel ::contentValidation )
97
+ .install (contentColumn , new DefaultStringConverter ());
98
+ contentColumn .setOnEditCommit ((CellEditEvent <BibtexStringEditorItemModel , String > cell ) ->
99
+ cell .getRowValue ().setContent (cell .getNewValue ()));
100
+
101
+ actionsColumn .setSortable (false );
102
+ actionsColumn .setReorderable (false );
103
+ actionsColumn .setCellValueFactory (cellData -> cellData .getValue ().labelProperty ());
104
+ new ValueTableCellFactory <BibtexStringEditorItemModel , String >()
105
+ .withGraphic (label -> IconTheme .JabRefIcons .DELETE_ENTRY .getGraphicNode ())
106
+ .withTooltip (label -> Localization .lang ("Remove string %0" , label ))
107
+ .withOnMouseClickedEvent (item -> evt ->
108
+ viewModel .removeString (stringsList .getFocusModel ().getFocusedItem ()))
109
+ .install (actionsColumn );
110
+
111
+ stringsList .itemsProperty ().bindBidirectional (viewModel .stringsListProperty ());
112
+ stringsList .setEditable (true );
98
113
}
99
114
100
115
@ FXML
101
- private void addString (ActionEvent event ) {
116
+ private void addString () {
102
117
viewModel .addNewString ();
118
+ stringsList .edit (stringsList .getItems ().size () - 1 , labelColumn );
103
119
}
104
120
105
121
@ FXML
106
- private void openHelp (ActionEvent event ) {
122
+ private void openHelp () {
107
123
viewModel .openHelpPage ();
108
124
}
109
-
110
- @ FXML
111
- private void removeString (ActionEvent event ) {
112
- viewModel .removeString ();
113
- }
114
125
}
0 commit comments