11package ladysnake .translatorhelper .controller ;
22
3- import java .io .File ;
4- import java .io .IOException ;
5- import java .text .NumberFormat ;
6- import java .text .ParseException ;
7- import java .util .*;
8- import java .util .concurrent .ExecutionException ;
9- import java .util .regex .Pattern ;
10- import java .util .stream .Collectors ;
11-
12- import javafx .beans .property .IntegerProperty ;
13- import javafx .beans .property .StringProperty ;
14- import javafx .beans .value .ObservableValue ;
3+ import javafx .collections .FXCollections ;
4+ import javafx .collections .ObservableList ;
155import javafx .concurrent .Task ;
166import javafx .event .ActionEvent ;
177import javafx .scene .control .*;
188import javafx .scene .control .Alert .AlertType ;
9+ import javafx .scene .control .Dialog ;
1910import javafx .scene .control .TableColumn .CellEditEvent ;
2011import javafx .scene .input .*;
2112import javafx .stage .DirectoryChooser ;
2516import ladysnake .translatorhelper .application .TranslationHelper ;
2617import ladysnake .translatorhelper .model .Data ;
2718
19+ import java .awt .*;
20+ import java .io .File ;
21+ import java .io .IOException ;
22+ import java .util .*;
23+ import java .util .List ;
24+ import java .util .concurrent .ExecutionException ;
25+ import java .util .regex .Pattern ;
26+ import java .util .stream .Collectors ;
27+
2828public class ControllerFx {
2929
3030 private TranslationHelper view ;
@@ -91,6 +91,7 @@ public void onExit(WindowEvent event) {
9191 * Handles key combinations
9292 */
9393 public void onKeyPressed (KeyEvent event ) {
94+ if (view .getTable () == null ) return ;
9495 if (KeyCodeCombination .keyCombination ("Ctrl+S" ).match (event ))
9596 data .save (langFolder );
9697 else if (KeyCodeCombination .keyCombination ("Ctrl+C" ).match (event )) {
@@ -107,12 +108,20 @@ else if(KeyCodeCombination.keyCombination("Ctrl+C").match(event)) {
107108 view .getTable ().getItems ().get (tablePosition .getRow ()).put (tablePosition .getTableColumn ().getText (), Clipboard .getSystemClipboard ().getString ());
108109 view .getTable ().refresh ();
109110 } else if (KeyCodeCombination .keyCombination ("Ctrl+R" ).match (event )) {
110- Dialog < FindReplaceDialog . FindReplaceParameters > findReplaceDialog ;
111- findReplaceDialog = new FindReplaceDialog (view .getTable ().getColumns ().stream ()
111+ FindReplaceDialog findReplaceDialog ;
112+ ObservableList < String > availableLanguages = FXCollections . observableList (view .getTable ().getColumns ().stream ()
112113 .map (TableColumnBase ::getText )
113114 .skip (1 ).collect (Collectors .toList ()));
115+ TableView .TableViewFocusModel focusModel = view .getTable ().getFocusModel ();
116+ findReplaceDialog = new FindReplaceDialog (availableLanguages );
117+ findReplaceDialog .setRegex ((String ) ((Map )focusModel .getFocusedItem ()).get ("en_us.lang" ));
118+ if (focusModel .getFocusedCell ().getTableColumn () != null ) {
119+ String selectedLang = focusModel .getFocusedCell ().getTableColumn ().getText ();
120+ findReplaceDialog .setToLang (selectedLang );
121+ findReplaceDialog .setReplace ((String ) ((Map ) focusModel .getFocusedItem ()).get (selectedLang ));
122+ }
114123 findReplaceDialog .showAndWait ().ifPresent (params ->
115- data .searchReplace (params .fromLang , params .toLang , params .regex , params .replace ));
124+ data .searchReplace (params .fromLang , params .toLang , params .regex , params .replace , params . replaceExistingTranslations ));
116125 view .getTable ().refresh ();
117126 } else if (KeyCodeCombination .keyCombination ("Ctrl+Z" ).match (event )) {
118127 data .undo ();
@@ -125,6 +134,27 @@ else if(KeyCodeCombination.keyCombination("Ctrl+C").match(event)) {
125134 data .removeTranslation (tablePosition .getRow (), tablePosition .getTableColumn ().getText ());
126135 view .getTable ().refresh ();
127136 }
137+ } else if (event .getCode ().isLetterKey ()) //noinspection unchecked
138+ view .getTable ().edit (view .getTable ().getFocusModel ().getFocusedCell ().getRow (),
139+ view .getTable ().getFocusModel ().getFocusedCell ().getTableColumn ());
140+ }
141+
142+ @ SuppressWarnings ("unchecked" )
143+ private void tryUseVimControls (KeyCode key ) {
144+ if (view .getTable ().editingCellProperty ().isNotNull ().get ()) return ;
145+ try {
146+ Robot r = new Robot ();
147+ switch (key ) {
148+ case H : r .keyPress (java .awt .event .KeyEvent .VK_LEFT ); break ;
149+ case J : r .keyPress (java .awt .event .KeyEvent .VK_DOWN ); break ;
150+ case K : r .keyPress (java .awt .event .KeyEvent .VK_UP ); break ;
151+ case L : r .keyPress (java .awt .event .KeyEvent .VK_RIGHT ); break ;
152+ case I : TablePosition pos = view .getTable ().getFocusModel ().getFocusedCell ();
153+ view .getTable ().edit (pos .getRow (), pos .getTableColumn ());
154+ break ;
155+ }
156+ } catch (AWTException e ) {
157+ e .printStackTrace ();
128158 }
129159 }
130160
@@ -183,8 +213,14 @@ protected void failed() {
183213 /**
184214 * Handles changes made through the table
185215 */
216+ @ SuppressWarnings ("unchecked" )
186217 public void onEditCommit (CellEditEvent <Map <String , String >, String > event ) {
187218 data .updateTranslation (event .getTablePosition ().getRow (), event .getNewValue (), event .getTableColumn ().getText ());
219+ TableView .TableViewFocusModel <Map <String , String >> focusModel = view .getTable ().getFocusModel ();
220+ //noinspection unchecked
221+ focusModel .focus (focusModel .getFocusedCell ().getRow ()+1 , focusModel .getFocusedCell ().getTableColumn ());
222+ view .getTable ().getSelectionModel ().clearAndSelect (focusModel .getFocusedCell ().getRow (), focusModel .getFocusedCell ().getTableColumn ());
223+ view .getTable ().requestFocus ();
188224 }
189225
190226 /**
0 commit comments