Revision 44902 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultJExpressionBuilder.java

View differences:

DefaultJExpressionBuilder.java
44 44
import javax.swing.event.TreeModelListener;
45 45
import javax.swing.event.TreeSelectionEvent;
46 46
import javax.swing.event.TreeSelectionListener;
47
import javax.swing.text.JTextComponent;
47 48
import javax.swing.tree.DefaultTreeCellRenderer;
48 49
import javax.swing.tree.TreeModel;
49 50
import javax.swing.tree.TreePath;
......
85 86
 */
86 87
@SuppressWarnings("UseSpecificCatch")
87 88
public class DefaultJExpressionBuilder
88
        extends DefaultJExpressionBuilderView2
89
//        extends DefaultJExpressionBuilderView2
89 90
        implements JExpressionBuilder {
90 91

  
91 92
    private final ExpressionEvaluatorSwingManager manager;
......
101 102
    private AbstractAutomaticExpressionChecker automaticExpressionChecker;
102 103
    private HistoryController<Expression> historyController;
103 104
    private BookmarksController<Expression> bookmarksController;
105
    private final DefaultJExpressionBuilderView2 view;
106
  private boolean automaticExpressionCheckerEnabled;
104 107

  
105 108
    private static class InfoPanel implements Component {
106 109

  
......
277 280
            }
278 281
        }
279 282
    }
280
  
281
    @SuppressWarnings("OverridableMethodCallInConstructor")
282
    public DefaultJExpressionBuilder(ExpressionEvaluatorSwingManager manager, ExpressionBuilderConfig config) {
283
    
284
    public DefaultJExpressionBuilder(
285
            ExpressionEvaluatorSwingManager manager, 
286
            ExpressionBuilderConfig config,
287
            DefaultJExpressionBuilderView2 view
288
      ) {
283 289
        this.manager = manager;
284 290
        if( config == null ) {
285 291
            this.builderConfig = new DefaultExpressionBuilderConfig(manager);
286 292
        } else {
287 293
            this.builderConfig = config;
288 294
        }
295
        this.view = view;
289 296
        this.initComponents();
290 297
    }
291 298
    
292
    @Override
293
    public ImageIcon loadImage(String imageName) {
294
        String name = FilenameUtils.getBaseName(imageName);
295
        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
296
        if (theme.exists(name)) {
297
            return theme.get(name);
298
        }
299
        URL url = this.getClass().getResource(name + ".png");
300
        if (url == null) {
301
            return null;
302
        }
303
        return new ImageIcon(url);
304
    }
305

  
306 299
    @SuppressWarnings("Convert2Lambda")
307 300
    private void initComponents() {
308 301
        ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
309 302
        JComponent c = cfgActionsManager.getConfigurableActionsComponent(CONFIGURABLE_PANEL_ID, this);
310
        pnlCfgActions.setLayout(new BorderLayout(0,0));
311
        pnlCfgActions.add(c, BorderLayout.LINE_END);
303
        this.view.pnlCfgActions.setLayout(new BorderLayout(0,0));
304
        this.view.pnlCfgActions.add(c, BorderLayout.LINE_END);
312 305
        
313 306
        final ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
314 307
        final IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
315 308
        final I18nManager i18n = ToolsLocator.getI18nManager();
316 309
        
317
        this.automaticExpressionChecker = new AbstractAutomaticExpressionChecker(
318
                builderConfig, txtExpression
319
            ) {
320
            @Override
321
            protected Expression getExpression() {
322
                return DefaultJExpressionBuilder.this.getExpressionWithOutHistory();
323
            }
324

  
325
            @Override
326
            protected void setMessage(int mode, String text) {
327
                super.setMessage(mode, text); 
328
                message(text);
329
            }
330

  
331
            @Override
332
            protected void setPreview(Object value) {
333
                super.setPreview(value);
334
                message(this.getPreview());
335
            }
336

  
337
            @Override
338
            protected void setTip(String theTip) {
339
                super.setTip(theTip); 
340
                btnTip.setToolTipText(toHTML(this.getTip()));
341
                btnTip.setVisible(this.isTipEnabled());
342
            }
343

  
344
            @Override
345
            protected String getSuggestion() {
346
              return builderConfig.getSuggestion(this.getExpression());
347
            }
348
            
349
        };
350
        this.infoPanel = new InfoPanel(this.pnlDescription, load_description_from_resource());
310
        this.infoPanel = new InfoPanel(this.view.pnlDescription, load_description_from_resource());
351 311
        
352
        this.btnTip.setVisible(false);
353
        this.btnTip.addActionListener(new ActionListener() {
312
        this.view.btnTip.setVisible(false);
313
        this.view.btnTip.addActionListener(new ActionListener() {
354 314
            @Override
355 315
            public void actionPerformed(ActionEvent e) {
356 316
                ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
357 317
                dialogs.messageDialog(
358
                        btnTip.getToolTipText(), 
318
                        view.btnTip.getToolTipText(), 
359 319
                        "Tip", 
360 320
                        JOptionPane.INFORMATION_MESSAGE
361 321
                );
......
366 326
        this.defaultIconElement = theme.get("expressionbuilder-element");
367 327
        
368 328
//        toolsSwingManager.translate(this.tabExpressionBuilder);
369
        toolsSwingManager.setDefaultPopupMenu(this.txtGroupElement);
370
        toolsSwingManager.setDefaultPopupMenu(this.txtSimpleElementFilter);
371
        toolsSwingManager.addClearButton(this.txtSimpleElementFilter, new ActionListener() {
329
        toolsSwingManager.setDefaultPopupMenu(this.view.txtGroupElement);
330
        toolsSwingManager.setDefaultPopupMenu(this.view.txtSimpleElementFilter);
331
        toolsSwingManager.addClearButton(this.view.txtSimpleElementFilter, new ActionListener() {
372 332
            @Override
373 333
            public void actionPerformed(ActionEvent e) {
374
                txtSimpleElementFilter.setText("");
334
                view.txtSimpleElementFilter.setText("");
375 335
                doFilter();
376 336
            }
377 337
        });
......
379 339
        msgMenuTextEditor.addActionListener(new ActionListener() {
380 340
            @Override
381 341
            public void actionPerformed(ActionEvent e) {
382
                automaticExpressionChecker.showMessageDialog();
342
                if( automaticExpressionChecker!=null ) {
343
                  automaticExpressionChecker.showMessageDialog();
344
                }
383 345
            }
384 346
        });
385 347
        JMenuItem msgMenuCopy = new JMenuItem(i18n.getTranslation("copy"));
386 348
        msgMenuTextEditor.addActionListener(new ActionListener() {
387 349
            @Override
388 350
            public void actionPerformed(ActionEvent e) {
389
                StringSelection selection = new StringSelection(automaticExpressionChecker.getMessage());
390
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
391
                clipboard.setContents(selection, selection);                
351
                if( automaticExpressionChecker!=null ) {
352
                  StringSelection selection = new StringSelection(automaticExpressionChecker.getMessage());
353
                  Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
354
                  clipboard.setContents(selection, selection);                
355
                }
392 356
            }
393 357
        });
394 358
        
......
396 360
        msgMenu.add(msgMenuTextEditor);
397 361
        msgMenu.addSeparator();
398 362
        msgMenu.add(msgMenuCopy);
399
        this.lblMsg.setComponentPopupMenu(msgMenu);
363
        this.view.lblMsg.setComponentPopupMenu(msgMenu);
400 364

  
401
        this.pnlDescription.setLayout(new BorderLayout());
402
        this.txtExpression.addCaretListener(new CaretListener() {
365
        this.view.pnlDescription.setLayout(new BorderLayout());
366
        this.view.getExpressionComponent().addCaretListener(new CaretListener() {
403 367
            @Override
404 368
            public void caretUpdate(CaretEvent e) {
405
                lblColumn.setText(Integer.toString(e.getDot()));
369
                view.lblColumn.setText(Integer.toString(e.getDot()));
406 370
            }
407 371
        });
408
        this.treeElements.setRowHeight(0);
409
        this.treeElements.setCellRenderer(new DefaultTreeCellRenderer() {
372
        this.view.treeElements.setRowHeight(0);
373
        this.view.treeElements.setCellRenderer(new DefaultTreeCellRenderer() {
410 374
            @Override
411 375
            public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
412 376
                JLabel component = (JLabel) super.getTreeCellRendererComponent(tree,value, selected, expanded, leaf, row, hasFocus);
......
434 398
            }
435 399
        });
436 400
        
437
        this.treeElements.addTreeSelectionListener(new TreeSelectionListener() {
401
        this.view.treeElements.addTreeSelectionListener(new TreeSelectionListener() {
438 402
            @Override
439 403
            public void valueChanged(TreeSelectionEvent e) {
440 404
                TreePath path = e.getPath();
......
443 407
                updateSimpleElementsList(element);
444 408
            }
445 409
        });
446
        this.treeElements.addMouseListener(new MouseAdapter() {
410
        this.view.treeElements.addMouseListener(new MouseAdapter() {
447 411
            @Override
448 412
            public void mouseClicked(MouseEvent e) {
449 413
                if( e.getButton()==MouseEvent.BUTTON1 && e.getClickCount()==2 ) {
450
                    TreePath path = treeElements.getSelectionPath();
414
                    TreePath path = view.treeElements.getSelectionPath();
451 415
                    if( path!=null ) {
452 416
                        Element element = (Element) path.getLastPathComponent();
453 417
                        if( element instanceof SimpleElement ) {
......
457 421
                }
458 422
            }
459 423
        });
460
        this.btnGroupElementInsert.addActionListener(new ActionListener() {
424
        this.view.btnGroupElementInsert.addActionListener(new ActionListener() {
461 425
            @Override
462 426
            public void actionPerformed(ActionEvent e) {
463 427
                if( currentElement!=null ) {
464 428
                    doInsert(currentElement.getRenderedValue());
465 429
                } else {
466
                    doInsert(txtGroupElement.getText());
430
                    doInsert(view.txtGroupElement.getText());
467 431
                }
468 432
            }
469 433
        });
470
        this.btnSimpleElementInsert.addActionListener(new ActionListener() {
434
        this.view.btnSimpleElementInsert.addActionListener(new ActionListener() {
471 435
            @Override
472 436
            public void actionPerformed(ActionEvent e) {
473
                Element element = (Element) lstSimpleElement.getSelectedValue();
437
                Element element = (Element) view.lstSimpleElement.getSelectedValue();
474 438
                if (element != null) {
475 439
                    doInsert(element);
476 440
                }
477 441
            }
478 442
        });
479
        this.btnSimpleElementFilter.addActionListener(new ActionListener() {
443
        this.view.btnSimpleElementFilter.addActionListener(new ActionListener() {
480 444
            @Override
481 445
            public void actionPerformed(ActionEvent e) {
482 446
                doFilter();
483 447
            }
484 448
        });
485 449
        
486
        this.lstSimpleElement.setModel(new FilteredListModel());
487
        this.lstSimpleElement.setCellRenderer(new DefaultListCellRenderer() {
450
        this.view.lstSimpleElement.setModel(new FilteredListModel());
451
        this.view.lstSimpleElement.setCellRenderer(new DefaultListCellRenderer() {
488 452
            @Override
489 453
            public java.awt.Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
490 454
                JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
......
508 472
                return label;
509 473
            }
510 474
        });
511
        this.lstSimpleElement.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
475
        this.view.lstSimpleElement.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
512 476
            @Override
513 477
            public void valueChanged(ListSelectionEvent e) {
514
                Element element = (Element) lstSimpleElement.getSelectedValue();
478
                Element element = (Element) view.lstSimpleElement.getSelectedValue();
515 479
                if (element != null) {
516 480
                    doSelectElement(element);
517 481
                }
518 482
            }
519 483
        });
520
        this.lstSimpleElement.addMouseListener(new MouseAdapter() {
484
        this.view.lstSimpleElement.addMouseListener(new MouseAdapter() {
521 485
            @Override
522 486
            public void mouseClicked(MouseEvent e) {
523 487
                if( e.getButton()==MouseEvent.BUTTON1 && e.getClickCount()==2 ) {
524
                    Element element = (Element) lstSimpleElement.getSelectedValue();
488
                    Element element = (Element) view.lstSimpleElement.getSelectedValue();
525 489
                    if (element != null) {
526 490
                        doSelectElement(element);
527 491
                        doInsert(element);
......
529 493
                }
530 494
            }
531 495
        });
532
        this.lstSimpleElement.addKeyListener(new KeyAdapter() {
496
        this.view.lstSimpleElement.addKeyListener(new KeyAdapter() {
533 497
            @Override
534 498
            public void keyReleased(KeyEvent e) {
535 499
                if( e.getKeyCode()==KeyEvent.VK_ENTER ) {
536
                    Element element = (Element) lstSimpleElement.getSelectedValue();
500
                    Element element = (Element) view.lstSimpleElement.getSelectedValue();
537 501
                    if (element != null) {
538 502
                        doSelectElement(element);
539 503
                        doInsert(element);
......
542 506
            }
543 507
        });
544 508

  
545
        this.btnSimpleElementTimeLimit.addActionListener(new ActionListener() {
509
        this.view.btnSimpleElementTimeLimit.addActionListener(new ActionListener() {
546 510
            @Override
547 511
            public void actionPerformed(ActionEvent e) {
548 512
                doSetTimeLimit();
549 513
            }
550 514
        });
551
        this.btnSimpleElementSortDown.addActionListener(new ActionListener() {
515
        this.view.btnSimpleElementSortDown.addActionListener(new ActionListener() {
552 516
            @Override
553 517
            public void actionPerformed(ActionEvent e) {
554
                FilteredListModel model = (FilteredListModel) lstSimpleElement.getModel();
518
                FilteredListModel model = (FilteredListModel) view.lstSimpleElement.getModel();
555 519
                model.sort(false);
556 520
            }
557 521
        });
558
        this.btnSimpleElementSortUp.addActionListener(new ActionListener() {
522
        this.view.btnSimpleElementSortUp.addActionListener(new ActionListener() {
559 523
            @Override
560 524
            public void actionPerformed(ActionEvent e) {
561
                FilteredListModel model = (FilteredListModel) lstSimpleElement.getModel();
525
                FilteredListModel model = (FilteredListModel) view.lstSimpleElement.getModel();
562 526
                model.sort(true);
563 527
            }
564 528
        });
565
        this.txtSimpleElementFilter.addKeyListener(new KeyAdapter() {
529
        this.view.txtSimpleElementFilter.addKeyListener(new KeyAdapter() {
566 530
            @Override
567 531
            public void keyTyped(KeyEvent e) {
568 532
                if (e.getKeyChar() == '\n') {
......
570 534
                }
571 535
            }
572 536
        });
573
        this.btnAdd.addActionListener(new ActionListener() {
537
        this.view.btnAdd.addActionListener(new ActionListener() {
574 538
            @Override
575 539
            public void actionPerformed(ActionEvent e) {
576 540
                doInsert(" + ");
577 541
            }
578 542
        });
579
        this.btnDiv.addActionListener(new ActionListener() {
543
        this.view.btnDiv.addActionListener(new ActionListener() {
580 544
            @Override
581 545
            public void actionPerformed(ActionEvent e) {
582 546
                doInsert(" / ");
583 547
            }
584 548
        });
585
        this.btnEq.addActionListener(new ActionListener() {
549
        this.view.btnEq.addActionListener(new ActionListener() {
586 550
            @Override
587 551
            public void actionPerformed(ActionEvent e) {
588 552
                doInsert(" = ");
589 553
            }
590 554
        });
591
        this.btnMult.addActionListener(new ActionListener() {
555
        this.view.btnMult.addActionListener(new ActionListener() {
592 556
            @Override
593 557
            public void actionPerformed(ActionEvent e) {
594 558
                doInsert(" * ");
595 559
            }
596 560
        });
597
        this.btnNeq.addActionListener(new ActionListener() {
561
        this.view.btnNeq.addActionListener(new ActionListener() {
598 562
            @Override
599 563
            public void actionPerformed(ActionEvent e) {
600 564
                doInsert(" <> ");
601 565
            }
602 566
        });
603
        this.btnParentClose.addActionListener(new ActionListener() {
567
        this.view.btnParentClose.addActionListener(new ActionListener() {
604 568
            @Override
605 569
            public void actionPerformed(ActionEvent e) {
606 570
                doInsert(" ) ");
607 571
            }
608 572
        });
609
        this.btnParentOpen.addActionListener(new ActionListener() {
573
        this.view.btnParentOpen.addActionListener(new ActionListener() {
610 574
            @Override
611 575
            public void actionPerformed(ActionEvent e) {
612 576
                doInsert(" ( ");
613 577
            }
614 578
        });
615
        this.btnSubst.addActionListener(new ActionListener() {
579
        this.view.btnSubst.addActionListener(new ActionListener() {
616 580
            @Override
617 581
            public void actionPerformed(ActionEvent e) {
618 582
                doInsert(" - ");
......
646 610
        };
647 611
        this.historyController = toolsSwingManager.createHistoryController(
648 612
                ExpressionEvaluatorLocator.getManager().getHistory(), 
649
                btnHistory
613
                view.btnHistory
650 614
        );
651 615
        this.historyController.addActionListener(historyAndBookmarkListener);
652 616
        
653 617
        this.bookmarksController = toolsSwingManager.createBookmarksController(
654 618
                ExpressionEvaluatorLocator.getManager().getBookmarks(), 
655
                btnBookmarks
619
                view.btnBookmarks
656 620
        );
657 621
        this.bookmarksController.addActionListener(historyAndBookmarkListener);        
658 622
        
659 623
        this.infoPanel.repaint();
660 624
        
661
        this.setPreferredSize(new Dimension(750, 450));
625
        this.view.setPreferredSize(new Dimension(750, 450));
662 626
        
663 627

  
664
        Dimension dim = this.getPreferredSize();
665
        this.spnlExpression.setDividerLocation(dim.height/5);
666
        this.spnlBottom.setDividerLocation(dim.width/3);
667
        this.spnlItem.setDividerLocation(dim.width/3);
628
        Dimension dim = this.view.getPreferredSize();
629
        this.view.spnlExpression.setDividerLocation(dim.height/5);
630
        this.view.spnlBottom.setDividerLocation(dim.width/3);
631
        this.view.spnlItem.setDividerLocation(dim.width/3);
668 632
    }
669 633

  
670 634
    private void message(String text) {
671 635
      if( StringUtils.isBlank(text) ) {
672
        lblMsg.setText("");
636
        view.lblMsg.setText("");
673 637
        return;
674 638
      }
675 639
      String msg = text;
......
681 645
          msg = ss[0];
682 646
        }
683 647
      }
684
      lblMsg.setText(toHTML(StringUtils.abbreviate(msg,70)+tail));      
648
      view.lblMsg.setText(toHTML(StringUtils.abbreviate(msg,70)+tail));      
685 649
    }
686 650

  
687 651
    private String toHTML(String s) {
......
708 672

  
709 673
    @Override
710 674
    public String getText() {
711
        return this.txtExpression.getText();
675
        return this.view.getExpressionComponent().getText();
712 676
    }
713 677
    
714 678
    @Override
715 679
    public void setText(String text) {
716
        this.txtExpression.setText(text);
680
        this.view.getExpressionComponent().setText(text);
717 681
    }
718 682
    
719 683
    private void doInsert(String s) {
720
        this.txtExpression.replaceSelection(s);
721
        String ss = this.txtExpression.getText();
722
        int start = ss.indexOf("{{");
723
        int end = ss.indexOf("}}");
684
        int start = s.indexOf("{{");
685
        int end = s.indexOf("}}");
724 686
        if (start > 0 && end > 0) {
725
            this.txtExpression.replaceRange("", end, end + 2);
726
            this.txtExpression.replaceRange("", start, start + 2);
727
            this.txtExpression.setSelectionStart(start);
728
            this.txtExpression.setSelectionEnd(end - 2);
687
          s = s.replace("{{", "");
688
          s = s.replace("}}", "");
729 689
        }
730
        this.txtExpression.requestFocusInWindow();
690
        JTextComponent jtext = this.view.getExpressionComponent();
691
        int selstart = this.view.getExpressionComponent().getSelectionStart();
692
        jtext.replaceSelection(s);
693
        if (start > 0 && end > 0) {
694
            jtext.setSelectionStart(selstart+start);
695
            jtext.setSelectionEnd(selstart+end - 2);
696
        }
697
        jtext.requestFocusInWindow();
731 698
    }
732 699

  
733 700
    private void doInsert(Element element) {
......
736 703
    }
737 704

  
738 705
    private void doFilter() {
739
        FilteredListModel model = (FilteredListModel) this.lstSimpleElement.getModel();
740
        model.setFilter(this.txtSimpleElementFilter.getText());
706
        FilteredListModel model = (FilteredListModel) this.view.lstSimpleElement.getModel();
707
        model.setFilter(this.view.txtSimpleElementFilter.getText());
741 708
    }
742 709

  
743 710
    private void doSelectElement(Element element) {
......
754 721
        FilteredListModel model = new FilteredListModel();
755 722
        model.addElement("Loading...");
756 723
        this.currentElement = element;
757
        this.txtGroupElement.setText(element.getName());
758
        this.txtSimpleElementFilter.setText("");
724
        this.view.txtGroupElement.setText(element.getName());
725
        this.view.txtSimpleElementFilter.setText("");
759 726
//        this.infoPanel.clean();
760 727
//        this.infoPanel.repaint();
761 728
        if (element instanceof SimpleElement) {
762
            this.btnGroupElementInsert.setEnabled(true);
729
            this.view.btnGroupElementInsert.setEnabled(true);
763 730
        } else {
764
            this.btnGroupElementInsert.setEnabled(false);
731
            this.view.btnGroupElementInsert.setEnabled(false);
765 732
        }
766
        this.lstSimpleElement.setEnabled(false);
767
        this.lstSimpleElement.setModel(model);
733
        this.view.lstSimpleElement.setEnabled(false);
734
        this.view.lstSimpleElement.setModel(model);
768 735

  
769 736
        Thread th = new Thread(new Runnable() {
770 737
            @Override
......
796 763
                    return;
797 764
                }
798 765
                if( element.hasMoreValues()) {
799
                    lblSimpleElementsMsg.setText("More elements...");
766
                    view.lblSimpleElementsMsg.setText("More elements...");
800 767
                } else {
801
                    lblSimpleElementsMsg.setText("");
768
                    view.lblSimpleElementsMsg.setText("");
802 769
                }
803
                lstSimpleElement.setEnabled(true);
804
                lstSimpleElement.setModel(model);
770
                view.lstSimpleElement.setEnabled(true);
771
                view.lstSimpleElement.setModel(model);
805 772
            }
806 773
        });
807 774

  
......
817 784
    
818 785
    @Override
819 786
    public Expression getExpressionWithOutHistory() {
820
        String phrase = this.txtExpression.getText();
787
        String phrase = this.view.getExpressionComponent().getText();
821 788
        if (StringUtils.isEmpty(phrase)) {
822 789
            return null;
823 790
        }
......
834 801
    @Override
835 802
    public void setExpression(Expression expression) {
836 803
        if( expression==null ) {
837
            this.txtExpression.setText("");
804
            this.view.getExpressionComponent().setText("");
838 805
        } else {
839
            this.txtExpression.setText(expression.getPhrase());
806
            this.view.getExpressionComponent().setText(expression.getPhrase());
840 807
        }
841 808
//            try { this.scriptEditor.set(null); } catch(Exception ex) {}
842 809
//            this.scriptPicker.set(null);
......
901 868
        this.builderConfig.setPreviewSymbolTable(symbolTable);
902 869
    }
903 870
    
871
    public void setAutomaticExpressionCheckerEnabled(boolean enabled) {
872
      if( this.automaticExpressionChecker==null ) {
873
        this.automaticExpressionCheckerEnabled = enabled;
874
      }
875
    }
876
    
877
    public boolean isAutomaticExpressionCheckerEnabled() {
878
      return this.automaticExpressionCheckerEnabled;
879
    }
880
    
904 881
    @Override
905 882
    public JComponent asJComponent() {
906
        this.initializeTree();
907
        SwingUtilities.invokeLater(new Runnable() {
908
            @Override
909
            public void run() {
910
               txtExpression.requestFocusInWindow();
911
            }
912
        });
913
        return this;
883
      if (this.automaticExpressionChecker == null && this.automaticExpressionCheckerEnabled ) {
884
        this.automaticExpressionChecker = new AbstractAutomaticExpressionChecker(
885
                builderConfig, this.view.getExpressionComponent()
886
        ) {
887
          @Override
888
          protected Expression getExpression() {
889
            return DefaultJExpressionBuilder.this.getExpressionWithOutHistory();
890
          }
891

  
892
          @Override
893
          protected void setMessage(int mode, String text) {
894
            super.setMessage(mode, text);
895
            message(text);
896
          }
897

  
898
          @Override
899
          protected void setPreview(Object value) {
900
            super.setPreview(value);
901
            message(this.getPreview());
902
          }
903

  
904
          @Override
905
          protected void setTip(String theTip) {
906
            super.setTip(theTip);
907
            view.btnTip.setToolTipText(toHTML(this.getTip()));
908
            view.btnTip.setVisible(this.isTipEnabled());
909
          }
910

  
911
          @Override
912
          protected String getSuggestion() {
913
            return builderConfig.getSuggestion(this.getExpression());
914
          }
915

  
916
        };
917

  
918
      }
919
      this.initializeTree();
920
      SwingUtilities.invokeLater(() -> {
921
        view.getExpressionComponent().requestFocusInWindow();
922
      });
923
      return this.view;
914 924
    }
915
    
925

  
916 926
    private void initializeTree() {
917 927
        if( this.treeModel == null ) {
918 928
            I18nManager i18n = ToolsLocator.getI18nManager();
......
921 931
                            i18n.getTranslation("_Elements"),
922 932
                            this.getElements()
923 933
                    ).setConfig(this));
924
            this.treeElements.setModel(this.treeModel);
925
            for (int i = 0; i < this.treeElements.getRowCount(); i++) {
926
                TreePath pathRow = this.treeElements.getPathForRow(i);
934
            this.view.treeElements.setModel(this.treeModel);
935
            for (int i = 0; i < this.view.treeElements.getRowCount(); i++) {
936
                TreePath pathRow = this.view.treeElements.getPathForRow(i);
927 937
                Element element = (Element) pathRow.getLastPathComponent();
928 938
                if (i18n.getTranslation("_Functions").equals(element.getName())) {
929
                    this.treeElements.setSelectionPath(pathRow);
939
                    this.view.treeElements.setSelectionPath(pathRow);
930 940
                    doSelectElement(element);
931 941
                    updateSimpleElementsList(element);
932 942
                    break;
......
983 993
    @Override
984 994
    public void expandElement(Element element) {
985 995
        this.initializeTree();
986
        for (int i = 0; i < this.treeElements.getRowCount(); i++) {
987
            TreePath path = this.treeElements.getPathForRow(i);
996
        for (int i = 0; i < this.view.treeElements.getRowCount(); i++) {
997
            TreePath path = this.view.treeElements.getPathForRow(i);
988 998
            if( path.getLastPathComponent()==element ) {
989 999
                // FIXME: habria que expandir los padres hasta llegar a este.
990
                this.treeElements.expandPath(path);
1000
                this.view.treeElements.expandPath(path);
991 1001
                return;
992 1002
            }
993 1003
        }
......
999 1009
          return;
1000 1010
        }
1001 1011
        this.initializeTree();
1002
        for (int i = 0; i < this.treeElements.getRowCount(); i++) {
1003
            TreePath path = this.treeElements.getPathForRow(i);
1012
        for (int i = 0; i < this.view.treeElements.getRowCount(); i++) {
1013
            TreePath path = this.view.treeElements.getPathForRow(i);
1004 1014
            if( condition.test((Element) path.getLastPathComponent()) ) {
1005 1015
                // FIXME: habria que expandir los padres hasta llegar a este.
1006
                this.treeElements.expandPath(path);
1016
                this.view.treeElements.expandPath(path);
1007 1017
                return;
1008 1018
            }
1009 1019
        }

Also available in: Unified diff