Exemple #1
0
 private void evaluateInternal() {
   String text = editorTextArea.getSelectedText();
   if (text == null || text.length() == 0) {
     text = editorTextArea.getText();
   }
   evaluateInternal(text);
 }
Exemple #2
0
 public void evaluate(final String sql) {
   int caretPosition = editorTextArea.getSelectionStart();
   if (caretPosition == editorTextArea.getSelectionEnd()) {
     String text = editorTextArea.getText();
     if ((caretPosition == 0 || text.charAt(caretPosition - 1) == '\n')
         && (text.length() <= caretPosition || text.charAt(caretPosition) == '\n')) {
       editorTextArea.insert(sql + '\n', caretPosition);
     }
   }
   evaluateInternal(sql);
 }
Exemple #3
0
 private int getWordStart() {
   int caretPosition = editorTextArea.getCaretPosition();
   int wordStart = caretPosition;
   while (wordStart > 0) {
     try {
       char c = editorTextArea.getText(wordStart - 1, 1).charAt(0);
       if (!Character.isLetterOrDigit(c) && c != '_') {
         break;
       }
     } catch (BadLocationException e) {
       e.printStackTrace();
     }
     wordStart--;
   }
   return wordStart;
 }
Exemple #4
0
  private void showCompletion() {
    try {
      int caretPosition = editorTextArea.getCaretPosition();
      int wordStart = getWordStart();
      CompletionCandidate[] words =
          getFilteredWords(wordStart, editorTextArea.getText(wordStart, caretPosition - wordStart));
      if (words.length == 0) {
        return;
      }
      final JPopupMenu w = new JPopupMenu();
      final JList jList = new JList(words);
      jList.setCellRenderer(
          new DefaultListCellRenderer() {
            private ImageIcon tableIcon =
                new ImageIcon(
                    getClass().getResource("/org/jooq/debug/console/resources/Table16.png"));
            private ImageIcon tableColumnIcon =
                new ImageIcon(
                    getClass().getResource("/org/jooq/debug/console/resources/TableColumn16.png"));
            private ImageIcon sqlIcon =
                new ImageIcon(
                    getClass().getResource("/org/jooq/debug/console/resources/SQL16.png"));

            @Override
            public Component getListCellRendererComponent(
                JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
              Component c =
                  super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
              if (c instanceof JLabel) {
                Icon icon;
                switch (((CompletionCandidate) value).getKeyWordType()) {
                  case TABLE:
                    icon = tableIcon;
                    break;
                  case TABLE_COlUMN:
                    icon = tableColumnIcon;
                    break;
                  default:
                    icon = sqlIcon;
                    break;
                }
                ((JLabel) c).setIcon(icon);
              }
              return c;
            }
          });
      jList.setSelectedIndex(0);
      jList.addKeyListener(
          new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
              switch (e.getKeyCode()) {
                case KeyEvent.VK_PAGE_UP:
                case KeyEvent.VK_PAGE_DOWN:
                case KeyEvent.VK_UP:
                case KeyEvent.VK_DOWN:
                case KeyEvent.VK_HOME:
                case KeyEvent.VK_END:
                  return;
                case KeyEvent.VK_ESCAPE:
                  w.setVisible(false);
                  return;
                case KeyEvent.VK_ENTER:
                  editorTextArea.replaceRange(
                      ((CompletionCandidate) jList.getSelectedValue()).toString(),
                      getWordStart(),
                      editorTextArea.getCaretPosition());
                  w.setVisible(false);
                  return;
              }
              editorTextArea.dispatchEvent(
                  new KeyEvent(
                      editorTextArea,
                      e.getID(),
                      e.getWhen(),
                      e.getModifiers(),
                      e.getKeyCode(),
                      e.getKeyChar(),
                      e.getKeyLocation()));
              if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED
                  || e.getKeyCode() == KeyEvent.VK_LEFT
                  || e.getKeyCode() == KeyEvent.VK_RIGHT) {
                adjustListContent();
              }
            }

            @Override
            public void keyReleased(KeyEvent e) {
              switch (e.getKeyCode()) {
                case KeyEvent.VK_PAGE_UP:
                case KeyEvent.VK_PAGE_DOWN:
                case KeyEvent.VK_UP:
                case KeyEvent.VK_DOWN:
                case KeyEvent.VK_HOME:
                case KeyEvent.VK_END:
                case KeyEvent.VK_ESCAPE:
                case KeyEvent.VK_ENTER:
                  return;
              }
              editorTextArea.dispatchEvent(
                  new KeyEvent(
                      editorTextArea,
                      e.getID(),
                      e.getWhen(),
                      e.getModifiers(),
                      e.getKeyCode(),
                      e.getKeyChar(),
                      e.getKeyLocation()));
              if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED
                  || e.getKeyCode() == KeyEvent.VK_LEFT
                  || e.getKeyCode() == KeyEvent.VK_RIGHT) {
                adjustListContent();
              }
            }

            @Override
            public void keyTyped(KeyEvent e) {
              switch (e.getKeyCode()) {
                case KeyEvent.VK_PAGE_UP:
                case KeyEvent.VK_PAGE_DOWN:
                case KeyEvent.VK_UP:
                case KeyEvent.VK_DOWN:
                case KeyEvent.VK_HOME:
                case KeyEvent.VK_END:
                case KeyEvent.VK_ESCAPE:
                case KeyEvent.VK_ENTER:
                  return;
              }
              editorTextArea.dispatchEvent(
                  new KeyEvent(
                      editorTextArea,
                      e.getID(),
                      e.getWhen(),
                      e.getModifiers(),
                      e.getKeyCode(),
                      e.getKeyChar(),
                      e.getKeyLocation()));
              if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED
                  || e.getKeyCode() == KeyEvent.VK_LEFT
                  || e.getKeyCode() == KeyEvent.VK_RIGHT) {
                adjustListContent();
              }
            }

            private void adjustListContent() {
              try {
                int wordStart = getWordStart();
                CompletionCandidate[] words =
                    getFilteredWords(
                        wordStart,
                        editorTextArea.getText(
                            wordStart, editorTextArea.getCaretPosition() - wordStart));
                if (words.length == 0) {
                  w.setVisible(false);
                  return;
                }
                jList.setListData(words);
                jList.setSelectedIndex(0);
              } catch (BadLocationException e) {
                e.printStackTrace();
              }
            }
          });
      jList.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
              if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
                editorTextArea.replaceRange(
                    ((CompletionCandidate) jList.getSelectedValue()).toString(),
                    getWordStart(),
                    editorTextArea.getCaretPosition());
                w.setVisible(false);
              }
            }
          });
      w.add(new JScrollPane(jList), BorderLayout.CENTER);
      w.setPreferredSize(new Dimension(200, 200));
      Rectangle position = editorTextArea.modelToView(caretPosition);
      w.show(editorTextArea, position.x + position.width, position.y + position.height);
      jList.requestFocus();
    } catch (BadLocationException e) {
      e.printStackTrace();
    }
  }