< prev index next >

src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java

Print this page




 355         }
 356     }
 357 
 358     /**
 359      * Called when the component containing the caret loses
 360      * focus.  This is implemented to set the caret to visibility
 361      * to false.
 362      *
 363      * @param e the focus event
 364      * @see FocusListener#focusLost
 365      */
 366     public void focusLost(FocusEvent e) {
 367         setVisible(false);
 368         setSelectionVisible(ownsSelection || e.isTemporary());
 369     }
 370 
 371 
 372     /**
 373      * Selects word based on the MouseEvent
 374      */

 375     private void selectWord(MouseEvent e) {
 376         if (selectedWordEvent != null
 377             && selectedWordEvent.getX() == e.getX()
 378             && selectedWordEvent.getY() == e.getY()) {
 379             //we already done selection for this
 380             return;
 381         }
 382                     Action a = null;
 383                     ActionMap map = getComponent().getActionMap();
 384                     if (map != null) {
 385                         a = map.get(DefaultEditorKit.selectWordAction);
 386                     }
 387                     if (a == null) {
 388                         if (selectWord == null) {
 389                             selectWord = new DefaultEditorKit.SelectWordAction();
 390                         }
 391                         a = selectWord;
 392                     }
 393                     a.actionPerformed(new ActionEvent(getComponent(),
 394                                                       ActionEvent.ACTION_PERFORMED, null, e.getWhen(), e.getModifiers()));
 395         selectedWordEvent = e;
 396     }
 397 
 398     // --- MouseListener methods -----------------------------------
 399 
 400     /**
 401      * Called when the mouse is clicked.  If the click was generated
 402      * from button1, a double click selects a word,
 403      * and a triple click the current line.
 404      *
 405      * @param e the mouse event
 406      * @see MouseListener#mouseClicked
 407      */

 408     public void mouseClicked(MouseEvent e) {
 409         if (getComponent() == null) {
 410             return;
 411         }
 412 
 413         int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
 414 
 415         if (! e.isConsumed()) {
 416             if (SwingUtilities.isLeftMouseButton(e)) {
 417                 // mouse 1 behavior
 418                 if(nclicks == 1) {
 419                     selectedWordEvent = null;
 420                 } else if(nclicks == 2
 421                           && SwingUtilities2.canEventAccessSystemClipboard(e)) {
 422                     selectWord(e);
 423                     selectedWordEvent = null;
 424                 } else if(nclicks == 3
 425                           && SwingUtilities2.canEventAccessSystemClipboard(e)) {
 426                     Action a = null;
 427                     ActionMap map = getComponent().getActionMap();


 496                 shouldHandleRelease = true;
 497             } else {
 498                 shouldHandleRelease = false;
 499                 adjustCaretAndFocus(e);
 500                 if (nclicks == 2
 501                     && SwingUtilities2.canEventAccessSystemClipboard(e)) {
 502                     selectWord(e);
 503                 }
 504             }
 505         }
 506     }
 507 
 508     void adjustCaretAndFocus(MouseEvent e) {
 509         adjustCaret(e);
 510         adjustFocus(false);
 511     }
 512 
 513     /**
 514      * Adjusts the caret location based on the MouseEvent.
 515      */

 516     private void adjustCaret(MouseEvent e) {
 517         if ((e.getModifiers() & ActionEvent.SHIFT_MASK) != 0 &&
 518             getDot() != -1) {
 519             moveCaret(e);
 520         } else if (!e.isPopupTrigger()) {
 521             positionCaret(e);
 522         }
 523     }
 524 
 525     /**
 526      * Adjusts the focus, if necessary.
 527      *
 528      * @param inWindow if true indicates requestFocusInWindow should be used
 529      */
 530     private void adjustFocus(boolean inWindow) {
 531         if ((component != null) && component.isEnabled() &&
 532                                    component.isRequestFocusEnabled()) {
 533             if (inWindow) {
 534                 component.requestFocusInWindow();
 535             }




 355         }
 356     }
 357 
 358     /**
 359      * Called when the component containing the caret loses
 360      * focus.  This is implemented to set the caret to visibility
 361      * to false.
 362      *
 363      * @param e the focus event
 364      * @see FocusListener#focusLost
 365      */
 366     public void focusLost(FocusEvent e) {
 367         setVisible(false);
 368         setSelectionVisible(ownsSelection || e.isTemporary());
 369     }
 370 
 371 
 372     /**
 373      * Selects word based on the MouseEvent
 374      */
 375     @SuppressWarnings("deprecation")
 376     private void selectWord(MouseEvent e) {
 377         if (selectedWordEvent != null
 378             && selectedWordEvent.getX() == e.getX()
 379             && selectedWordEvent.getY() == e.getY()) {
 380             //we already done selection for this
 381             return;
 382         }
 383                     Action a = null;
 384                     ActionMap map = getComponent().getActionMap();
 385                     if (map != null) {
 386                         a = map.get(DefaultEditorKit.selectWordAction);
 387                     }
 388                     if (a == null) {
 389                         if (selectWord == null) {
 390                             selectWord = new DefaultEditorKit.SelectWordAction();
 391                         }
 392                         a = selectWord;
 393                     }
 394                     a.actionPerformed(new ActionEvent(getComponent(),
 395                                                       ActionEvent.ACTION_PERFORMED, null, e.getWhen(), e.getModifiers()));
 396         selectedWordEvent = e;
 397     }
 398 
 399     // --- MouseListener methods -----------------------------------
 400 
 401     /**
 402      * Called when the mouse is clicked.  If the click was generated
 403      * from button1, a double click selects a word,
 404      * and a triple click the current line.
 405      *
 406      * @param e the mouse event
 407      * @see MouseListener#mouseClicked
 408      */
 409     @SuppressWarnings("deprecation")
 410     public void mouseClicked(MouseEvent e) {
 411         if (getComponent() == null) {
 412             return;
 413         }
 414 
 415         int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
 416 
 417         if (! e.isConsumed()) {
 418             if (SwingUtilities.isLeftMouseButton(e)) {
 419                 // mouse 1 behavior
 420                 if(nclicks == 1) {
 421                     selectedWordEvent = null;
 422                 } else if(nclicks == 2
 423                           && SwingUtilities2.canEventAccessSystemClipboard(e)) {
 424                     selectWord(e);
 425                     selectedWordEvent = null;
 426                 } else if(nclicks == 3
 427                           && SwingUtilities2.canEventAccessSystemClipboard(e)) {
 428                     Action a = null;
 429                     ActionMap map = getComponent().getActionMap();


 498                 shouldHandleRelease = true;
 499             } else {
 500                 shouldHandleRelease = false;
 501                 adjustCaretAndFocus(e);
 502                 if (nclicks == 2
 503                     && SwingUtilities2.canEventAccessSystemClipboard(e)) {
 504                     selectWord(e);
 505                 }
 506             }
 507         }
 508     }
 509 
 510     void adjustCaretAndFocus(MouseEvent e) {
 511         adjustCaret(e);
 512         adjustFocus(false);
 513     }
 514 
 515     /**
 516      * Adjusts the caret location based on the MouseEvent.
 517      */
 518     @SuppressWarnings("deprecation")
 519     private void adjustCaret(MouseEvent e) {
 520         if ((e.getModifiers() & ActionEvent.SHIFT_MASK) != 0 &&
 521             getDot() != -1) {
 522             moveCaret(e);
 523         } else if (!e.isPopupTrigger()) {
 524             positionCaret(e);
 525         }
 526     }
 527 
 528     /**
 529      * Adjusts the focus, if necessary.
 530      *
 531      * @param inWindow if true indicates requestFocusInWindow should be used
 532      */
 533     private void adjustFocus(boolean inWindow) {
 534         if ((component != null) && component.isEnabled() &&
 535                                    component.isRequestFocusEnabled()) {
 536             if (inWindow) {
 537                 component.requestFocusInWindow();
 538             }


< prev index next >