/****************************************************************************** * Copyright (C) 2013 Fabio Zadrozny * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Fabio Zadrozny <fabiofz@gmail.com> - initial API and implementation ******************************************************************************/ package org.python.pydev.shared_ui.editor; import org.eclipse.jface.text.ITextSelection; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.python.pydev.shared_core.log.Log; /** * Class to notify clients that the cursor position changed. */ class BaseEditorCursorListener implements MouseListener, KeyListener { /** * */ private final BaseEditor editor; BaseEditorCursorListener(BaseEditor editor) { this.editor = editor; } private int lastOffset = -1; @Override public void mouseDoubleClick(MouseEvent e) { } @Override public void mouseDown(MouseEvent e) { } /** * notify when the user makes a click */ @Override public void mouseUp(MouseEvent e) { lastOffset = getOffset(); editor.notifyCursorPositionChanged(); } @Override public void keyPressed(KeyEvent e) { } private int getOffset() { return ((ITextSelection) this.editor.getSelectionProvider().getSelection()).getOffset(); } /** * Notify when the user makes an arrow movement which actually changes the cursor position (because * while doing code-completion it could make that notification when the cursor was changed in the * dialog -- even if it didn't affect the cursor position). */ @Override public void keyReleased(KeyEvent e) { if (e.character != '.' && e.character != ',') { // Ignoring . or , because on Ctrl+. and Ctrl+, we are navigating occurrences. try { //Note: don't check for keys (who knows which combination in Eclipse makes it change the cursor or not). int offset = getOffset(); if (offset != lastOffset) { editor.notifyCursorPositionChanged(); lastOffset = offset; } } catch (Exception ex) { Log.log(ex); } } } }