|
|
|
/***************************************************************************
|
|
|
|
* Copyright (C) 2005 by David Saxton *
|
|
|
|
* david@bluehaze.org *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef TEXTVIEW_H
|
|
|
|
#define TEXTVIEW_H
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "view.h"
|
|
|
|
|
|
|
|
#include <kate/view.h>
|
|
|
|
#include <tqguardedptr.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
|
|
|
|
class TQMouseEvent;
|
|
|
|
class RegisterInfo;
|
|
|
|
class TextDocument;
|
|
|
|
class TextView;
|
|
|
|
class VariableLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@author David Saxton
|
|
|
|
*/
|
|
|
|
class TextView : public View
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
TextView( TextDocument *textDocument, ViewContainer *viewContainer, uint viewAreaId, const char *name = 0 );
|
|
|
|
~TextView();
|
|
|
|
virtual bool closeView();
|
|
|
|
/**
|
|
|
|
* Brings up the goto line dialog.
|
|
|
|
*/
|
|
|
|
bool gotoLine( const int line ) { return m_view->setCursorPosition( line, 0/*m_view->cursorColumn()*/ ); }
|
|
|
|
/**
|
|
|
|
* Returns a pointer to the document as a text document
|
|
|
|
*/
|
|
|
|
TextDocument *textDocument() const;
|
|
|
|
void cut() { m_view->cut(); }
|
|
|
|
void copy() { m_view->copy(); }
|
|
|
|
void paste() { m_view->paste(); }
|
|
|
|
void saveCursorPosition();
|
|
|
|
void restoreCursorPosition();
|
|
|
|
/**
|
|
|
|
* Enable code actions depending on the type of code being edited
|
|
|
|
*/
|
|
|
|
void initCodeActions();
|
|
|
|
void setCursorPosition( uint line, uint col ) { m_view->setCursorPosition( line, col ); }
|
|
|
|
unsigned currentLine();
|
|
|
|
unsigned currentColumn();
|
|
|
|
void disableActions();
|
|
|
|
|
|
|
|
Kate::View * kateView() const { return m_view; }
|
|
|
|
|
|
|
|
Kate::View::saveResult save() { return m_view->save(); }
|
|
|
|
Kate::View::saveResult saveAs() { return m_view->saveAs(); }
|
|
|
|
|
|
|
|
virtual void setFocused();
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
/**
|
|
|
|
* Called when change line / toggle marks
|
|
|
|
*/
|
|
|
|
void slotUpdateMarksInfo();
|
|
|
|
void slotCursorPositionChanged();
|
|
|
|
void toggleBreakpoint();
|
|
|
|
/**
|
|
|
|
* Initialize the actions appropriate for when the debugger is running
|
|
|
|
* or stepping
|
|
|
|
*/
|
|
|
|
void slotInitDebugActions();
|
|
|
|
|
|
|
|
protected slots:
|
|
|
|
void slotWordHoveredOver( const TQString & word, int line, int col );
|
|
|
|
void slotWordUnhovered();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
Kate::View *m_view;
|
|
|
|
#ifndef NO_GPSIM
|
|
|
|
VariableLabel * m_pTextViewLabel; ///< Pops up when the user hovers his mouse over a word
|
|
|
|
#endif
|
|
|
|
|
|
|
|
private:
|
|
|
|
uint m_savedCursorLine;
|
|
|
|
uint m_savedCursorColumn;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
This class is an event filter to be installed in the kate view, and is used to
|
|
|
|
do stuff like poping up menus and telling TextView that a word is being hovered
|
|
|
|
over (used in the debugger).
|
|
|
|
|
|
|
|
@author David Saxton
|
|
|
|
*/
|
|
|
|
class TextViewEventFilter : public TQObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
TextViewEventFilter( TextView * textView );
|
|
|
|
|
|
|
|
bool eventFilter( TQObject * watched, TQEvent * e );
|
|
|
|
|
|
|
|
signals:
|
|
|
|
/**
|
|
|
|
* When the user hovers the mouse for more than 700 milliseconds over a
|
|
|
|
* word, "hover mode" is entered. When the user presses a key, clicks
|
|
|
|
* mouse, etc, this mode is left. During the mode, any word that is
|
|
|
|
* under the mouse cursor will be emitted as hoveredOver( word ).
|
|
|
|
*/
|
|
|
|
void wordHoveredOver( const TQString & word, int line, int col );
|
|
|
|
/**
|
|
|
|
* Emitted when focus is lost, the mouse moves to a different word, etc.
|
|
|
|
*/
|
|
|
|
void wordUnhovered();
|
|
|
|
|
|
|
|
protected slots:
|
|
|
|
void slotNeedTextHint( int line, int col, TQString & text );
|
|
|
|
/**
|
|
|
|
* Called when we are not in hover mode, but the user has had his mouse
|
|
|
|
* in the same position for some time.
|
|
|
|
*/
|
|
|
|
void hoverTimeout();
|
|
|
|
/**
|
|
|
|
* Called (from m_pSleepTimer) when we are in hover mode, but no word
|
|
|
|
* has been hovered over for some time.
|
|
|
|
*/
|
|
|
|
void gotoSleep();
|
|
|
|
/**
|
|
|
|
* @see m_pNoWordTimer
|
|
|
|
*/
|
|
|
|
void slotNoWordTimeout();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
enum HoverStatus
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* We are currently hovering - wordHoveredOver was emitted, and
|
|
|
|
* wordUnhovered hasn't been emitted yet.
|
|
|
|
*/
|
|
|
|
Active,
|
|
|
|
/**
|
|
|
|
* A word was unhovered recently. We will go straight to PoppedUp
|
|
|
|
* mode if a word is hovered over again.
|
|
|
|
*/
|
|
|
|
Hidden,
|
|
|
|
/**
|
|
|
|
* A word was not unhovered recentely. There will be a short display
|
|
|
|
* before going to PoppedUp mode if a word is hovered over.
|
|
|
|
*/
|
|
|
|
Sleeping,
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Starts / stops timers, emits signals, etc. See other functions for an
|
|
|
|
* idea of what this does.
|
|
|
|
*/
|
|
|
|
void updateHovering( const TQString & currentWord, int line, int col );
|
|
|
|
/**
|
|
|
|
* Started when the user moves his mouse over a word, and we are in
|
|
|
|
* Sleeping mode. Reset when the user moves his mouse, etc.
|
|
|
|
*/
|
|
|
|
TQTimer * m_pHoverTimer;
|
|
|
|
/**
|
|
|
|
* Started when a word is unhovered. When this timeouts, we will go to
|
|
|
|
* Sleeping mode.
|
|
|
|
*/
|
|
|
|
TQTimer * m_pSleepTimer;
|
|
|
|
/**
|
|
|
|
* Activated by the user moving the mouse. Reset by a call to
|
|
|
|
* slotNeedTextHint. This timer is needed as KateViewInternal doesn't
|
|
|
|
* bother updating us if the mouse cursor isn't over text.
|
|
|
|
*/
|
|
|
|
TQTimer * m_pNoWordTimer;
|
|
|
|
|
|
|
|
TextView * m_pTextView;
|
|
|
|
TQString m_lastWord;
|
|
|
|
int m_lastLine;
|
|
|
|
int m_lastCol;
|
|
|
|
HoverStatus m_hoverStatus;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|