Exemplo n.º 1
0
  private void adjustSize() {
    int newHeight = mTextArea.getPreferredSize().height;
    int maxHeight = mChatView.getHeight() / 3;

    mScrollPane.setPreferredSize(
        new Dimension(
            mScrollPane.getWidth(),
            newHeight < maxHeight
                ?
                // grow
                newHeight + 1
                : // +1 for border
                // fixed height
                maxHeight));

    // swing does not figure this out itself
    mChatView.revalidate();
  }
Exemplo n.º 2
0
  ComposingArea(ChatView chatView) {
    mChatView = chatView;

    mTextArea = new WebTextArea();
    mTextArea.setMargin(View.MARGIN_SMALL);
    mTextArea.setBorder(null);
    mTextArea.setLineWrap(true);
    mTextArea.setWrapStyleWord(true);
    mTextArea.setFontSize(View.FONT_SIZE_NORMAL);
    mTextArea.setInputPrompt(Tr.tr("Type to compose"));
    mTextArea.setInputPromptHorizontalPosition(SwingConstants.LEFT);
    mTextArea.setComponentPopupMenu(Utils.createCopyMenu(true));
    mTextArea
        .getDocument()
        .addDocumentListener(
            new DocumentChangeListener() {
              @Override
              public void documentChanged(DocumentEvent e) {
                mChatView.onKeyTypeEvent(e.getDocument().getLength() == 0);
              }
            });

    mScrollPane = new ComponentUtils.ScrollPane(mTextArea, false);
    mScrollPane.setBorder(null);

    // text area overlay
    mOverlayLabel = new WebLabel().setBoldFont();

    mOverlay =
        new WebOverlay(mScrollPane, mOverlayLabel, SwingConstants.CENTER, SwingConstants.CENTER);
    mOverlay.setUndecorated(false).setMargin(View.MARGIN_SMALL).setWebColoredBackground(false);

    // old transfer handler of text area is fallback for bottom panel
    mDropHandler = new FileDropHandler(mTextArea.getTransferHandler());
    mTextArea.setTransferHandler(mDropHandler);

    // when text changed...
    mTextArea
        .getDocument()
        .addDocumentListener(
            new DocumentChangeListener() {
              @Override
              public void documentChanged(DocumentEvent e) {
                // these are strange times
                SwingUtilities.invokeLater(
                    new Runnable() {
                      public void run() {
                        ComposingArea.this.adjustSize();
                      }
                    });
              }
            });
    ((AbstractDocument) mTextArea.getDocument())
        .setDocumentFilter(
            new DocumentFilter() {
              @Override
              public void replace(
                  FilterBypass fb, int offset, int length, String string, AttributeSet attr)
                  throws BadLocationException {
                // input implementation of the "/me" command, XEP-0245
                if (length == 0 && offset == 0 && string.equals("/")) {
                  fb.insertString(0, View.THE_ME_COMMAND, attr);
                  return;
                }
                super.replace(fb, offset, length, string, attr);
              }
            });

    // ...or window is resized
    mChatView.addComponentListener(
        new ComponentAdapter() {
          @Override
          public void componentResized(ComponentEvent e) {
            ComposingArea.this.adjustSize();
          }
        });
  }