Пример #1
0
 private void updateScrolling() {
   if (myScrollingEnabled) {
     myBoundedRangeModel.setRangeProperties(
         0,
         myTermSize.height,
         -myTerminalTextBuffer.getHistoryBuffer().getLineCount(),
         myTermSize.height,
         false);
   } else {
     myBoundedRangeModel.setRangeProperties(0, myTermSize.height, 0, myTermSize.height, false);
   }
 }
Пример #2
0
  private void clearBuffer() {
    if (!myTerminalTextBuffer.isUsingAlternateBuffer()) {
      myTerminalTextBuffer.clearHistory();

      if (myCoordsAccessor != null && myCoordsAccessor.getY() > 0) {
        TerminalLine line = myTerminalTextBuffer.getLine(myCoordsAccessor.getY() - 1);

        myTerminalTextBuffer.clearAll();

        myCoordsAccessor.setY(0);
        myCursor.setY(1);
        myTerminalTextBuffer.addLine(line);
      }

      updateScrolling();

      myClientScrollOrigin = myBoundedRangeModel.getValue();
    }
  }
Пример #3
0
 private void moveScrollBar(int k) {
   myBoundedRangeModel.setValue(myBoundedRangeModel.getValue() + k);
 }
Пример #4
0
 private void scrollToBottom() {
   myBoundedRangeModel.setValue(myTermSize.height);
 }
Пример #5
0
  public void init() {
    initFont();

    setUpClipboard();

    setPreferredSize(new Dimension(getPixelWidth(), getPixelHeight()));

    setFocusable(true);
    enableInputMethods(true);
    setDoubleBuffered(true);

    setFocusTraversalKeysEnabled(false);

    addMouseMotionListener(
        new MouseMotionAdapter() {
          @Override
          public void mouseDragged(final MouseEvent e) {
            if (!isLocalMouseAction(e)) {
              return;
            }

            final Point charCoords = panelToCharCoords(e.getPoint());

            if (mySelection == null) {
              // prevent unlikely case where drag started outside terminal panel
              if (mySelectionStartPoint == null) {
                mySelectionStartPoint = charCoords;
              }
              mySelection = new TerminalSelection(new Point(mySelectionStartPoint));
            }
            repaint();
            mySelection.updateEnd(charCoords);
            if (mySettingsProvider.copyOnSelect()) {
              handleCopy(false);
            }

            if (e.getPoint().y < 0) {
              moveScrollBar((int) ((e.getPoint().y) * SCROLL_SPEED));
            }
            if (e.getPoint().y > getPixelHeight()) {
              moveScrollBar((int) ((e.getPoint().y - getPixelHeight()) * SCROLL_SPEED));
            }
          }
        });

    addMouseWheelListener(
        new MouseWheelListener() {
          @Override
          public void mouseWheelMoved(MouseWheelEvent e) {
            if (isLocalMouseAction(e)) {
              int notches = e.getWheelRotation();
              moveScrollBar(notches);
            }
          }
        });

    addMouseListener(
        new MouseAdapter() {
          @Override
          public void mousePressed(final MouseEvent e) {
            if (e.getButton() == MouseEvent.BUTTON1) {
              if (e.getClickCount() == 1) {
                mySelectionStartPoint = panelToCharCoords(e.getPoint());
                mySelection = null;
                repaint();
              }
            }
          }

          @Override
          public void mouseReleased(final MouseEvent e) {
            requestFocusInWindow();
            repaint();
          }

          @Override
          public void mouseClicked(final MouseEvent e) {
            requestFocusInWindow();
            if (e.getButton() == MouseEvent.BUTTON1 && isLocalMouseAction(e)) {
              int count = e.getClickCount();
              if (count == 1) {
                // do nothing
              } else if (count == 2) {
                // select word
                final Point charCoords = panelToCharCoords(e.getPoint());
                Point start = SelectionUtil.getPreviousSeparator(charCoords, myTerminalTextBuffer);
                Point stop = SelectionUtil.getNextSeparator(charCoords, myTerminalTextBuffer);
                mySelection = new TerminalSelection(start);
                mySelection.updateEnd(stop);

                if (mySettingsProvider.copyOnSelect()) {
                  handleCopy(false);
                }
              } else if (count == 3) {
                // select line
                final Point charCoords = panelToCharCoords(e.getPoint());
                int startLine = charCoords.y;
                while (startLine > -getScrollBuffer().getLineCount()
                    && myTerminalTextBuffer.getLine(startLine - 1).isWrapped()) {
                  startLine--;
                }
                int endLine = charCoords.y;
                while (endLine < myTerminalTextBuffer.getHeight()
                    && myTerminalTextBuffer.getLine(endLine).isWrapped()) {
                  endLine++;
                }
                mySelection = new TerminalSelection(new Point(0, startLine));
                mySelection.updateEnd(new Point(myTermSize.width, endLine));

                if (mySettingsProvider.copyOnSelect()) {
                  handleCopy(false);
                }
              }
            } else if (e.getButton() == MouseEvent.BUTTON2
                && mySettingsProvider.pasteOnMiddleMouseClick()
                && isLocalMouseAction(e)) {
              handlePaste();
            } else if (e.getButton() == MouseEvent.BUTTON3) {
              JPopupMenu popup = createPopupMenu();
              popup.show(e.getComponent(), e.getX(), e.getY());
            }
            repaint();
          }
        });

    addComponentListener(
        new ComponentAdapter() {
          @Override
          public void componentResized(final ComponentEvent e) {
            sizeTerminalFromComponent();
          }
        });

    addFocusListener(
        new FocusAdapter() {
          @Override
          public void focusGained(FocusEvent e) {
            myCursor.cursorChanged();
          }

          @Override
          public void focusLost(FocusEvent e) {
            myCursor.cursorChanged();
          }
        });

    myBoundedRangeModel.addChangeListener(
        new ChangeListener() {
          public void stateChanged(final ChangeEvent e) {
            myClientScrollOrigin = myBoundedRangeModel.getValue();
            repaint();
          }
        });

    createRepaintTimer();
  }