2929import javax .swing .JScrollPane ;
3030import javax .swing .JSplitPane ;
3131import javax .swing .SwingUtilities ;
32+ import javax .swing .UIManager ;
3233import javax .swing .event .TreeSelectionEvent ;
3334import javax .swing .event .TreeSelectionListener ;
3435
36+ import org .apache .commons .lang3 .SystemUtils ;
37+
3538import com .google .common .collect .Lists ;
3639import com .google .common .collect .Maps ;
3740import com .jvms .i18neditor .Resource .ResourceType ;
@@ -52,7 +55,7 @@ public class Editor extends JFrame {
5255
5356 public final static Path SETTINGS_PATH = Paths .get (System .getProperty ("user.home" ), ".i18n-editor" );
5457 public final static String TITLE = "i18n Editor" ;
55- public final static String VERSION = "0.5 .0" ;
58+ public final static String VERSION = "0.6 .0" ;
5659 public final static String COPYRIGHT_YEAR = "2016" ;
5760 public final static int DEFAULT_WIDTH = 1024 ;
5861 public final static int DEFAULT_HEIGHT = 768 ;
@@ -112,7 +115,7 @@ public void importResources(Path dir) {
112115 Map <String ,String > keys = Maps .newTreeMap ();
113116 resources .forEach (resource -> keys .putAll (resource .getTranslations ()));
114117 List <String > keyList = Lists .newArrayList (keys .keySet ());
115- translationTree .setModel (new TranslationTreeModel (MessageBundle . get ( "translations.model.name" ), keyList ));
118+ translationTree .setModel (new TranslationTreeModel (keyList ));
116119
117120 updateUI ();
118121 } catch (IOException e ) {
@@ -364,6 +367,41 @@ public boolean closeCurrentSession() {
364367 return true ;
365368 }
366369
370+ public void reset () {
371+ translationTree .clear ();
372+ resources .clear ();
373+ resourceFields .clear ();
374+ setDirty (false );
375+ updateUI ();
376+ }
377+
378+ public void updateUI () {
379+ TranslationTreeNode selectedNode = translationTree .getSelectedNode ();
380+
381+ resourcesPanel .removeAll ();
382+ resourceFields .stream ().sorted ().forEach (field -> {
383+ field .setEditable (selectedNode != null && selectedNode .isEditable ());
384+ resourcesPanel .add (Box .createVerticalStrut (5 ));
385+ resourcesPanel .add (new JLabel (field .getResource ().getLocale ().getDisplayName ()));
386+ resourcesPanel .add (Box .createVerticalStrut (5 ));
387+ resourcesPanel .add (field );
388+ resourcesPanel .add (Box .createVerticalStrut (5 ));
389+ });
390+ if (!resourceFields .isEmpty ()) {
391+ resourcesPanel .remove (0 );
392+ resourcesPanel .remove (resourcesPanel .getComponentCount ()-1 );
393+ }
394+
395+ editorMenu .setEnabled (resourcesDir != null );
396+ editorMenu .setEditable (!resources .isEmpty ());
397+ translationTree .setEditable (!resources .isEmpty ());
398+ translationField .setEditable (!resources .isEmpty ());
399+
400+ updateTitle ();
401+ validate ();
402+ repaint ();
403+ }
404+
367405 public void launch () {
368406 settings .load (SETTINGS_PATH );
369407
@@ -398,39 +436,18 @@ public void launch() {
398436 }
399437 }
400438
401- public void reset () {
402- translationTree .clear ();
403- resources .clear ();
404- resourceFields .clear ();
405- setDirty (false );
406- updateUI ();
407- }
408-
409- public void updateUI () {
410- TranslationTreeNode selectedNode = translationTree .getSelectedNode ();
411-
412- resourcesPanel .removeAll ();
413- resourceFields .stream ().sorted ().forEach (field -> {
414- field .setEditable (selectedNode != null && selectedNode .isEditable ());
415- resourcesPanel .add (Box .createVerticalStrut (5 ));
416- resourcesPanel .add (new JLabel (field .getResource ().getLocale ().getDisplayName ()));
417- resourcesPanel .add (Box .createVerticalStrut (5 ));
418- resourcesPanel .add (field );
419- resourcesPanel .add (Box .createVerticalStrut (5 ));
439+ public static void main (String [] args ) {
440+ SwingUtilities .invokeLater (() -> {
441+ try {
442+ // Only use native look an feel when not running Linux, Linux might cause visual issues
443+ if (!SystemUtils .IS_OS_LINUX ) {
444+ UIManager .setLookAndFeel (UIManager .getSystemLookAndFeelClassName ());
445+ }
446+ } catch (Exception e ) {
447+ //
448+ }
449+ new Editor ().launch ();
420450 });
421- if (!resourceFields .isEmpty ()) {
422- resourcesPanel .remove (0 );
423- resourcesPanel .remove (resourcesPanel .getComponentCount ()-1 );
424- }
425-
426- editorMenu .setEnabled (resourcesDir != null );
427- editorMenu .setEditable (!resources .isEmpty ());
428- translationTree .setEditable (!resources .isEmpty ());
429- translationField .setEditable (!resources .isEmpty ());
430-
431- updateTitle ();
432- validate ();
433- repaint ();
434451 }
435452
436453 private boolean loadResourcesFromHistory () {
@@ -479,7 +496,8 @@ private void setupUI() {
479496 translationsPanel = new JPanel (new BorderLayout ());
480497 translationTree = new TranslationTree (this );
481498 translationTree .addTreeSelectionListener (new TranslationTreeNodeSelectionListener ());
482- translationField = new TranslationField (this , translationTree );
499+ translationField = new TranslationField ();
500+ translationField .addKeyListener (new TranslationFieldKeyListener ());
483501 translationsPanel .add (new JScrollPane (translationTree ));
484502 translationsPanel .add (translationField , BorderLayout .SOUTH );
485503
@@ -571,11 +589,29 @@ private class ResourceFieldKeyListener extends KeyAdapter {
571589 public void keyReleased (KeyEvent e ) {
572590 ResourceField field = (ResourceField ) e .getSource ();
573591 String key = translationTree .getSelectedNode ().getKey ();
574- String value = field .getText (). trim ();
592+ String value = field .getValue ();
575593 field .getResource ().storeTranslation (key , value );
576594 }
577595 }
578596
597+ private class TranslationFieldKeyListener extends KeyAdapter {
598+ @ Override
599+ public void keyReleased (KeyEvent e ) {
600+ if (e .getKeyCode () == KeyEvent .VK_ENTER ) {
601+ TranslationField field = (TranslationField ) e .getSource ();
602+ String key = field .getValue ();
603+ if (TranslationKeys .isValid (key )) {
604+ TranslationTreeNode node = translationTree .getNodeByKey (key );
605+ if (node == null ) {
606+ addTranslationKey (key );
607+ } else {
608+ translationTree .setSelectedNode (node );
609+ }
610+ }
611+ }
612+ }
613+ }
614+
579615 private class EditorWindowListener extends WindowAdapter {
580616 @ Override
581617 public void windowClosing (WindowEvent e ) {
0 commit comments