@@ -81,10 +81,7 @@ public class DataTreeDialog extends DialogComponentProvider
8181 private Component parent ;
8282
8383 private String searchString ;
84- private boolean comboModelInitialized ;
8584 private boolean cancelled = false ;
86- private String pendingNameText ;
87- private DomainFolder pendingDomainFolder ;
8885
8986 private ProjectDataExpandAction <DialogProjectTreeContext > expandAction ;
9087 private ProjectDataCollapseAction <DialogProjectTreeContext > collapseAction ;
@@ -134,23 +131,31 @@ public DataTreeDialog(Component parent, String title, int type, DomainFileFilter
134131 public DataTreeDialog (Component parent , String title , int type , DomainFileFilter filter ,
135132 Project project ) {
136133 super (title , true , true , true , false );
134+
135+ if (type < 0 || type > CREATE ) {
136+ throw new IllegalArgumentException ("Invalid type specified: " + type );
137+ }
138+
137139 this .project = project ;
138140 this .parent = parent ;
139- initDataTreeDialog ( type , filter ) ;
140- }
141+ this . type = type ;
142+ this . filter = filter ;
141143
142- private static DomainFileFilter getDefaultFilter (int type ) {
143- if (type == CHOOSE_FOLDER || type == OPEN ) {
144- // return filter which forces folder selection and allow navigation into linked-folders
145- return new DomainFileFilter () {
144+ addWorkPanel (buildMainPanel ());
145+ initializeButtons ();
146+ rootPanel .setPreferredSize (new Dimension (WIDTH , HEIGHT ));
146147
147- @ Override
148- public boolean accept (DomainFile df ) {
149- return true ; // show all files (legacy behavior)
150- }
151- };
148+ initializeFocusedComponent ();
149+
150+ createActions ();
151+ }
152+
153+ private void initializeFocusedComponent () {
154+ Component focusComponent = nameField ;
155+ if (!nameField .isEditable ()) {
156+ focusComponent = treePanel .getFilterField ();
152157 }
153- return null ;
158+ setFocusComponent ( focusComponent ) ;
154159 }
155160
156161 public void setTreeSelectionMode (int mode ) {
@@ -160,34 +165,20 @@ public void setTreeSelectionMode(int mode) {
160165 treeSelectionMode = mode ;
161166 }
162167
163- private void initDataTreeDialog (int newType , DomainFileFilter newFilter ) {
164-
165- if (newType < 0 || newType > CREATE ) {
166- throw new IllegalArgumentException ("Invalid type specified: " + newType );
167- }
168- this .type = newType ;
169- this .filter = newFilter ;
170-
171- okButton = new JButton ("OK" );
172- okButton .setMnemonic ('K' );
173- okButton .addActionListener (ev -> okCallback ());
174- addButton (okButton );
168+ private void initializeButtons () {
169+ addOKButton ();
175170 addCancelButton ();
176171
177- if (newType == SAVE ) {
172+ if (type == SAVE ) {
178173 okButton .setText ("Save" );
179174 okButton .setMnemonic ('S' );
180175 }
181- else if (newType == CREATE ) {
176+ else if (type == CREATE ) {
182177 okButton .setText ("Create" );
183178 okButton .setMnemonic ('C' );
184179 }
180+ setOkEnabled (false );
185181
186- rootPanel .setPreferredSize (new Dimension (WIDTH , HEIGHT ));
187-
188- setFocusComponent (nameField );
189-
190- createActions ();
191182 }
192183
193184 private void createActions () {
@@ -223,7 +214,6 @@ public ActionContext getActionContext(MouseEvent event) {
223214 }
224215
225216 public void show () {
226- doSetup ();
227217 DockingWindowManager .showDialog (parent , this );
228218 }
229219
@@ -235,79 +225,13 @@ public void showComponent() {
235225 show ();
236226 }
237227
238- @ Override
239- protected void dialogShown () {
240- if (!comboModelInitialized ) {
241- doSetup ();
242- }
243- }
244-
245- private void doSetup () {
246- addWorkPanel (buildMainPanel ());
247-
248- comboModelInitialized = true ;
249- // repopulate the tree
250- ProjectData pd = project .getProjectData ();
251- treePanel .setProjectData (project .getName (), pd );
252-
253- String nameFieldText = pendingNameText == null ? "" : pendingNameText ;
254- pendingNameText = null ;
255- initializeSelectedFolder ();
256-
257- setFocusComponent (nameField );
258- if (type == OPEN ) {
259- domainFolder = null ;
260- nameField .setText (nameFieldText );
261- nameField .selectAll ();
262- populateProjectModel ();
263-
264- // the name field is disabled; use the filter field
265- setFocusComponent (treePanel .getFilterField ());
266- }
267- else if (type == SAVE ) {
268- nameField .setText (nameFieldText );
269- nameField .selectAll ();
270- initializeSelectedFolder ();
271- }
272- else if (type == CREATE ) {
273- nameField .setText (nameFieldText );
274- nameField .selectAll ();
275- initializeSelectedFolder ();
276- }
277- else { // CHOOSE_FOLDER
278- setFocusComponent (treePanel .getFilterField ());
279- }
280-
281- setOkEnabled (!nameFieldText .isEmpty ());
282-
283- if (searchString != null ) {
284- findAndSelect (searchString );
285- }
286-
287- clearStatusText ();
288- }
289-
290- private void initializeSelectedFolder () {
291- if (pendingDomainFolder != null ) {
292- // set the explicitly requested folder to be selected
293- treePanel .selectDomainFolder (pendingDomainFolder );
294- pendingDomainFolder = null ;
295- }
296- else {
297- // default case--make sure we have a folder selected
298- domainFolder = treePanel .getSelectedDomainFolder ();
299- if (domainFolder == null ) {
300- treePanel .selectRootDataFolder ();
301- }
302- }
303- }
304-
305228 public String getNameText () {
306229 return nameField .getText ();
307230 }
308231
309232 public void setNameText (String name ) {
310- pendingNameText = name ;
233+ nameField .setText (name .trim ());
234+ nameField .selectAll ();
311235 }
312236
313237 /**
@@ -316,7 +240,9 @@ public void setNameText(String name) {
316240 * @param folder {@link DomainFolder} to select when showing the dialog
317241 */
318242 public void setSelectedFolder (DomainFolder folder ) {
319- pendingDomainFolder = folder ;
243+ if (folder != null ) {
244+ treePanel .selectDomainFolder (folder );
245+ }
320246 }
321247
322248 /**
@@ -474,27 +400,33 @@ public void close() {
474400 treePanel .dispose ();
475401 }
476402 treePanel = null ;
477- comboModelInitialized = false ;
478403 }
479404
480405 protected JPanel buildMainPanel () {
481406
482407 JPanel panel = new JPanel ();
483408 panel .setLayout (new BorderLayout ());
484409
410+ JPanel namePanel = createNamePanel ();
411+
485412 // data tree panel must be created before the combo box
486413 JPanel dataTreePanel = createDataTreePanel ();
414+ ProjectData pd = project .getProjectData ();
415+ treePanel .setProjectData (project .getName (), pd );
416+ treePanel .selectRootDataFolder ();
487417
488418 if (type == OPEN ) {
489419 JPanel comboPanel = createComboBoxPanel ();
490420
491421 panel .add (comboPanel , BorderLayout .NORTH );
422+ populateProjectModel ();
492423 }
493- panel .add (dataTreePanel , BorderLayout .CENTER );
494424
495- JPanel namePanel = createNamePanel ( );
425+ panel . add ( dataTreePanel , BorderLayout . CENTER );
496426 panel .add (namePanel , BorderLayout .SOUTH );
497427
428+ // can't add tree listeners until everything is built
429+ addTreeListeners ();
498430 return panel ;
499431 }
500432
@@ -537,7 +469,9 @@ private JPanel createDataTreePanel() {
537469 treePanel .addTreeSelectionListener (this );
538470 treePanel .setPreferredTreePanelSize (new Dimension (150 , 150 ));
539471
540- addTreeListeners ();
472+ // don't put the filter in the dialog when the user can/must type a name, as it's confusing
473+ boolean userChoosesName = (type == SAVE ) || (type == CREATE );
474+ treePanel .setTreeFilterEnabled (!userChoosesName );
541475
542476 panel .add (treePanel , BorderLayout .CENTER );
543477 return panel ;
@@ -633,9 +567,6 @@ public void changedUpdate(DocumentEvent e) {
633567 nameField .setEditable (userChoosesName );
634568 nameField .setEnabled (userChoosesName );
635569
636- // don't put the filter in the dialog when the user can/must type a name, as it's confusing
637- treePanel .setTreeFilterEnabled (!userChoosesName );
638-
639570 JPanel namePanel = new JPanel (new PairLayout (2 , 5 , 100 ));
640571
641572 if (!userChoosesName ) {
@@ -688,12 +619,24 @@ private void populateProjectModel() {
688619 map = null ;
689620 }
690621
691- public void findAndSelect (String s ) {
692- treePanel .findAndSelect (s );
622+ public void setSearchText (String s ) {
623+ if (searchString != null ) {
624+ treePanel .findAndSelect (s );
625+ }
693626 }
694627
695- public void setSearchText (String string ) {
696- searchString = string ;
628+ private static DomainFileFilter getDefaultFilter (int type ) {
629+ if (type == CHOOSE_FOLDER || type == OPEN ) {
630+ // return filter which forces folder selection and allow navigation into linked-folders
631+ return new DomainFileFilter () {
632+
633+ @ Override
634+ public boolean accept (DomainFile df ) {
635+ return true ; // show all files (legacy behavior)
636+ }
637+ };
638+ }
639+ return null ;
697640 }
698641
699642 private class FieldKeyListener extends KeyAdapter {
@@ -702,4 +645,5 @@ public void keyPressed(KeyEvent e) {
702645 clearStatusText ();
703646 }
704647 }
648+
705649}
0 commit comments