11package com .dengzii .plugin .template .ui ;
22
33import com .dengzii .plugin .template .model .FileTreeNode ;
4+ import com .dengzii .plugin .template .utils .PluginKit ;
5+ import com .intellij .ide .fileTemplates .FileTemplate ;
46
57import javax .swing .*;
68import java .awt .*;
79import java .awt .event .KeyAdapter ;
810import java .awt .event .KeyEvent ;
911
1012public class CreateFileDialog extends JDialog {
13+ private static final String NONE = "None" ;
14+
1115 private JPanel contentPane ;
12- private JComboBox comboBox1 ;
13- private JTextField textField1 ;
14- private JLabel label1 ;
15- private JLabel label2 ;
16+ private JComboBox cbTemplate ;
17+ private JTextField tfName ;
18+ private JLabel lbTemplate ;
19+ private JLabel lbName ;
20+ private JButton btConfirm ;
1621
1722 private CreateFileCallback createFileCallback ;
1823 private boolean isDir ;
1924 private FileTreeNode parent ;
2025 private FileTreeNode current ;
2126
22- public static void showForRename (FileTreeNode node , CreateFileCallback createFileCallback ) {
27+ public static void showForRefactor (FileTreeNode node , CreateFileCallback createFileCallback ) {
2328 CreateFileDialog createFileDialog = new CreateFileDialog ();
2429 createFileDialog .createFileCallback = createFileCallback ;
2530 createFileDialog .isDir = node .isDir ();
@@ -40,18 +45,52 @@ private CreateFileDialog() {
4045 setContentPane (contentPane );
4146 setModal (true );
4247 setDefaultCloseOperation (DISPOSE_ON_CLOSE );
48+ }
49+
50+ private void initFileTemplateList () {
51+ FileTemplate [] fileTemplates = PluginKit .Companion .getAllFileTemplate ();
52+ String [] items = new String [fileTemplates .length + 1 ];
53+ items [0 ] = NONE ;
54+ for (int i = 0 ; i < fileTemplates .length ; i ++) {
55+ items [i + 1 ] = fileTemplates [i ].getName ();
56+ }
57+ cbTemplate .setModel (new DefaultComboBoxModel <>(items ));
58+ if (isRefactor () && current .getTemplateFile () != null
59+ && PluginKit .Companion .getFileTemplate (current .getTemplateFile ()) != null ) {
60+ cbTemplate .setSelectedItem (current .getTemplateFile ());
61+ }
62+ }
63+
64+ private void onConfirm () {
65+ if (tfName .getText ().trim ().isEmpty ()) {
66+ return ;
67+ }
68+ if (isRefactor ()) {
69+ current .setName (tfName .getText ());
70+ // setup template
71+ if (!isDir && getSelectedTemplate () != null && !getSelectedTemplate ().equals (NONE )) {
72+ current .setTemplate (getSelectedTemplate ());
73+ }
74+ } else {
75+ current = new FileTreeNode (parent , tfName .getText (), isDir );
76+ }
77+
78+ if (!isRefactor () && parent != null && parent .hasChild (tfName .getText (), isDir )) {
79+ lbName .setText (lbName .getText () + " (already exist.)" );
80+ return ;
81+ }
4382
44- contentPane .registerKeyboardAction (e -> {
45- },
46- KeyStroke .getKeyStroke (KeyEvent .VK_ESCAPE , 0 ),
47- JComponent .WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
83+ createFileCallback .callback (current );
84+ dispose ();
4885 }
4986
5087 private void initDialog () {
5188
5289 if (isDir ) {
53- label1 .setVisible (false );
54- comboBox1 .setVisible (false );
90+ lbTemplate .setVisible (false );
91+ cbTemplate .setVisible (false );
92+ } else {
93+ initFileTemplateList ();
5594 }
5695 pack ();
5796
@@ -63,35 +102,32 @@ private void initDialog() {
63102 setLocation (x , y );
64103 setPreferredSize (new Dimension (w , h ));
65104
66- setTitle ((isRename () ? "Rename " : "New " ) + (isDir ? "Directory" : "File" ));
67- if (isRename ()) {
68- textField1 .setText (current .getRealName ());
105+ setTitle ((isRefactor () ? "Refactor " : "New " ) + (isDir ? "Directory" : "File" ));
106+ if (isRefactor ()) {
107+ tfName .setText (current .getRealName ());
69108 }
70- textField1 .addKeyListener (new KeyAdapter () {
109+ tfName .addKeyListener (new KeyAdapter () {
71110 @ Override
72111 public void keyReleased (KeyEvent e ) {
73112 super .keyReleased (e );
74113 if (e .getKeyCode () == KeyEvent .VK_ENTER ) {
75- if (parent != null && parent .hasChild (textField1 .getText (), isDir )) {
76- label2 .setText (label2 .getText () + " (already exist.)" );
77- return ;
78- }
79- if (isRename ()) {
80- current .setName (textField1 .getText ());
81- createFileCallback .callback (current );
82- } else {
83- createFileCallback .callback (new FileTreeNode (parent , textField1 .getText (), isDir ));
84- }
85-
86- dispose ();
114+ onConfirm ();
87115 }
88116 }
89117 });
118+ btConfirm .addActionListener (e -> onConfirm ());
90119 setVisible (true );
91- textField1 .requestFocus ();
120+ tfName .requestFocus ();
121+ }
122+
123+ private String getSelectedTemplate () {
124+ if (isDir ) {
125+ return null ;
126+ }
127+ return cbTemplate .getSelectedItem ().toString ();
92128 }
93129
94- private boolean isRename () {
130+ private boolean isRefactor () {
95131 return current != null ;
96132 }
97133
0 commit comments