parent
3aeb1a3565
commit
dc12256bfb
2 changed files with 2327 additions and 0 deletions
@ -0,0 +1,520 @@ |
||||
/*
|
||||
$Id$ |
||||
|
||||
kedit, a simple text editor for the KDE project |
||||
|
||||
Copyright (C) 1996 Bernd Johannes Wuebben
|
||||
wuebben@math.cornell.edu |
||||
|
||||
Parts: Alexander Sanda <alex@darkstar.ping.at> |
||||
|
||||
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. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program; if not, write to the Free Software |
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||||
|
||||
*/ |
||||
|
||||
|
||||
#ifndef __KEDIT_H__ |
||||
#define __KEDIT_H__ |
||||
|
||||
#include <qpopmenu.h> |
||||
#include <qmenubar.h> |
||||
#include <qapp.h> |
||||
#include <qkeycode.h> |
||||
#include <qaccel.h> |
||||
#include <qobject.h> |
||||
#include <qmlined.h> |
||||
#include <qlined.h> |
||||
#include <qradiobt.h> |
||||
#include <qfiledlg.h> |
||||
#include <qchkbox.h> |
||||
#include <qmsgbox.h> |
||||
#include <qcombo.h> |
||||
#include <qpushbt.h> |
||||
#include <qgrpbox.h> |
||||
#include <qregexp.h> |
||||
#include <qtstream.h> |
||||
#include <qkeycode.h> |
||||
#include <qfileinf.h> |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
#include <unistd.h> |
||||
#include <errno.h> |
||||
|
||||
#include <sys/types.h> |
||||
#include <sys/stat.h> |
||||
#include <sys/mman.h> |
||||
#include <fcntl.h> |
||||
#include <ctype.h> |
||||
#include <pwd.h> |
||||
|
||||
#include <kapp.h> |
||||
#include <kfontdialog.h> |
||||
|
||||
///
|
||||
class KIntLineEdit : public QLineEdit |
||||
{ |
||||
Q_OBJECT; |
||||
|
||||
public: |
||||
KIntLineEdit( QWidget *parent = 0, const char *name = 0 )
|
||||
: QLineEdit( parent, name ) {}; |
||||
|
||||
int getValue() { return atoi( text() ); }; |
||||
|
||||
protected: |
||||
|
||||
void keyPressEvent( QKeyEvent *e ) { |
||||
char key = e->ascii(); |
||||
|
||||
if( isdigit( key )
|
||||
|| ( e->key() == Key_Return) || ( e->key() == Key_Enter ) |
||||
|| ( e->key() == Key_Delete) || ( e->key() == Key_Backspace) |
||||
|| ( e->key() == Key_Left ) || ( e->key() == Key_Right )){ |
||||
|
||||
QLineEdit::keyPressEvent( e ); |
||||
return; |
||||
} else { |
||||
e->ignore(); |
||||
return; |
||||
} |
||||
}; |
||||
}; |
||||
|
||||
///
|
||||
class KEdGotoLine : public QDialog |
||||
{ |
||||
Q_OBJECT; |
||||
|
||||
public: |
||||
|
||||
KEdGotoLine( QWidget *parent = 0, const char *name = 0 ); |
||||
|
||||
int getLineNumber(); |
||||
KIntLineEdit *lineNum; |
||||
|
||||
private: |
||||
QPushButton *ok, *cancel; |
||||
QGroupBox *frame; |
||||
void resizeEvent(QResizeEvent *); |
||||
void focusInEvent(QFocusEvent *); |
||||
|
||||
public slots: |
||||
|
||||
void selected( int ); |
||||
}; |
||||
|
||||
///
|
||||
class KEdSrch : public QDialog |
||||
{ |
||||
Q_OBJECT; |
||||
|
||||
public: |
||||
|
||||
KEdSrch ( QWidget *parent = 0, const char *name=0); |
||||
|
||||
QString getText(); |
||||
void setText(QString string); |
||||
bool case_sensitive(); |
||||
bool get_direction(); |
||||
|
||||
protected: |
||||
void focusInEvent( QFocusEvent *); |
||||
void resizeEvent(QResizeEvent *); |
||||
|
||||
private: |
||||
|
||||
QPushButton *ok, *cancel; |
||||
QCheckBox *sensitive; |
||||
QCheckBox *direction; |
||||
QGroupBox *frame1; |
||||
QLineEdit *value; |
||||
|
||||
signals: |
||||
|
||||
void search_signal(); |
||||
void search_done_signal(); |
||||
|
||||
public slots: |
||||
|
||||
void done_slot(); |
||||
void ok_slot(); |
||||
|
||||
}; |
||||
|
||||
///
|
||||
class KEdReplace : public QDialog |
||||
{ |
||||
Q_OBJECT; |
||||
|
||||
public: |
||||
|
||||
KEdReplace ( QWidget *parent = 0, const char *name=0); |
||||
|
||||
QString getText(); |
||||
QString getReplaceText(); |
||||
void setText(QString); |
||||
QLineEdit *value; |
||||
QLineEdit *replace_value; |
||||
QLabel *label; |
||||
bool case_sensitive(); |
||||
bool get_direction(); |
||||
|
||||
protected: |
||||
|
||||
void focusInEvent( QFocusEvent *); |
||||
void resizeEvent ( QResizeEvent *); |
||||
|
||||
private: |
||||
|
||||
QPushButton *ok, *cancel, *replace, *replace_all; |
||||
QCheckBox *sensitive; |
||||
QCheckBox *direction; |
||||
QGroupBox *frame1; |
||||
|
||||
|
||||
signals: |
||||
|
||||
void replace_signal(); |
||||
void find_signal(); |
||||
void replace_all_signal(); |
||||
void replace_done_signal(); |
||||
|
||||
public slots: |
||||
|
||||
void done_slot(); |
||||
void replace_slot(); |
||||
void replace_all_slot(); |
||||
void ok_slot(); |
||||
|
||||
}; |
||||
|
||||
|
||||
///
|
||||
class KEdit : public QMultiLineEdit |
||||
{ |
||||
Q_OBJECT; |
||||
|
||||
public: |
||||
|
||||
KEdit (KApplication *a=NULL,QWidget *parent=NULL, const char *name=NULL,
|
||||
const char *filename=NULL); |
||||
|
||||
~KEdit(); |
||||
|
||||
|
||||
enum { NONE,
|
||||
FORWARD,
|
||||
BACKWARD }; |
||||
|
||||
enum { KEDIT_OK = 0,
|
||||
KEDIT_OS_ERROR = 1,
|
||||
KEDIT_USER_CANCEL = 2 , |
||||
KEDIT_RETRY = 3, |
||||
KEDIT_NOPERMISSIONS = 4}; |
||||
|
||||
enum { OPEN_READWRITE = 1,
|
||||
OPEN_READONLY = 2,
|
||||
OPEN_INSERT = 4 }; |
||||
|
||||
|
||||
/// Opens a new untitled document in the text widget
|
||||
/** Opens a new untitled document in the text widget The user is given
|
||||
a chance to save the current document if the current document has |
||||
been modified. |
||||
*/ |
||||
int newFile(); |
||||
|
||||
/// Saves the file if necessary under the current file name
|
||||
/** Saves the file if necessary under the current file name. If the current file
|
||||
name is Untitled, as it is after a call to newFile(), this routing will |
||||
call saveAs(). |
||||
*/ |
||||
int doSave(); |
||||
|
||||
/// Saves the file as filename
|
||||
/** Saves the file as filename
|
||||
*/ |
||||
int doSave( const char *filename ); |
||||
|
||||
/// Allows the user to save the file under a new name
|
||||
/** Allows the user to save the file under a new name
|
||||
*/ |
||||
int saveAs(); |
||||
|
||||
/// Let the user open an new file
|
||||
/** This will present an open file dialog and open the file specified by the user,
|
||||
if possible. The return codes are KEDIT_OK, KEDIT_USER_CANCEL and |
||||
KEDIT_OS_ERROR. The user will be given a chance to save the current file if |
||||
it has been modified. mode is one of OPEN_READONLY, OPEN_READWRITE. |
||||
OPEN_READONLY means that the user will not be able to insert characters |
||||
into the document.
|
||||
*/ |
||||
int openFile( int mode ); |
||||
|
||||
/// Lets the user insert a file at the current cursor position
|
||||
/** Calling this method will let the user insert a file at the current cursor
|
||||
position. Return codes are KEDIT_OK, KEDIT_USER_CANCEL, KDEDIT_OS_ERROR. |
||||
*/ |
||||
int insertFile(); |
||||
|
||||
/// Loads the file filemane in the editor
|
||||
/** Loads the file filename into editor. The possible modes are
|
||||
OPEN_READONLY, OPEN_READWRITE, OPEN_INSERT. |
||||
OPEN_READONLY means that the user will not be able to insert characters |
||||
into the document. OPEN_INSERT means that the file will be inserted |
||||
into the current document at the current cursor position. |
||||
*/ |
||||
int loadFile( QString filename , int mode ); |
||||
|
||||
|
||||
/// Returns the filename of the current file.
|
||||
/** Returns the filename of the currnet file. You can use setName() to set the
|
||||
filename of the current file |
||||
*/ |
||||
QString getName(); |
||||
|
||||
/// Sets the filename of the current file.
|
||||
/** Sets the filename of the currnet file. You can use getName() to set the
|
||||
filename of the current file |
||||
*/ |
||||
void setName( const char *_name ); |
||||
|
||||
/// Returns the currently marked text.
|
||||
/** Returns the currently marked text.
|
||||
*/ |
||||
QString markedText(); |
||||
|
||||
/// Lets the user select a font and sets the font of the textwidget.
|
||||
/** Lets the user select a font and sets the font of the textwidget to that
|
||||
selected font. |
||||
*/ |
||||
void selectFont(); |
||||
|
||||
/// Presents a search dialog to the user
|
||||
/** Presents a search dialog to the user
|
||||
*/ |
||||
void Search(); |
||||
|
||||
/// Repeats the last search specified on the search dialog.
|
||||
/** Repeasts the last search specified on the search dialog. If the user
|
||||
hasn't searched for anything until now, this method will simply return |
||||
without doing anything. |
||||
*/ |
||||
int repeatSearch(); |
||||
|
||||
/// Presents a Search and Replace Dialog to the User.
|
||||
/** Presents a Search and Replace Dialog to the User.
|
||||
*/ |
||||
void Replace(); |
||||
|
||||
/// Presents a "Goto Line" dialog to the User
|
||||
/** Presents a "Goto Line" dialog to the User
|
||||
*/ |
||||
void doGotoLine(); |
||||
|
||||
/// Returns true if the document has been modified.
|
||||
/**Returns true if the document has been modified.
|
||||
*/ |
||||
bool isModified(); |
||||
|
||||
/// Toggles the modification status of the document
|
||||
/** Toggles the modification status of the document. TRUE = Modified,
|
||||
FALSE = UNMODIFIED. Methods such as doSave() rely on this to see whether |
||||
the document needs to be saved. |
||||
*/ |
||||
void toggleModified( bool ); |
||||
|
||||
/// Sets Indent Mode
|
||||
/** Sets the Indent Mode. TRUE = Indent mode on, FALSE = Indent mode off.
|
||||
*/ |
||||
void setAutoIndentMode( bool ); |
||||
|
||||
/// Returns the Indent Mode
|
||||
/** Returns the Indent Mode. TRUE = Indent mode on, FALSE = Indent mode off.
|
||||
*/ |
||||
bool AutoIndentMode(){ return autoIndentMode; }; |
||||
|
||||
/// Install a Popup Menue for KEdit.
|
||||
/** Install a Popup Menue for KEdit. The Popup Menu will be activated on
|
||||
a right mouse button press event. |
||||
*/ |
||||
void installRBPopup( QPopupMenu* ); |
||||
|
||||
/// Return the current Line number
|
||||
/** Returns the current line number, that is the line the cursor is on.
|
||||
*/ |
||||
int currentLine(); |
||||
|
||||
/// Returns the current Column number
|
||||
/** This returns the actual column number the cursor is on. This call differs
|
||||
from QMultiLineEdit::getCursorPosition in that it returns the actual cursor |
||||
position and not the character position. Use currentLine() and currentColumn() |
||||
if you want to display the current line or column in the status bar for
|
||||
example. |
||||
*/ |
||||
int currentColumn(); |
||||
|
||||
/// Returns TRUE if word wrap is on
|
||||
/** Returns TRUE if word wrap is on. You also need to specify the fill column
|
||||
with setFillColumnMode() otherwise wordwrap is not in effect. |
||||
*/ |
||||
bool WordWrap(); |
||||
|
||||
/// Turn word wrap mode on or off.
|
||||
/** You also need to specify the fill column
|
||||
with setFillColumnMode() otherwise wordwrap is not in effect. |
||||
*/ |
||||
void setWordWrap(bool ); |
||||
|
||||
/// Returns TRUE if fill column mode is on
|
||||
/** Returns TRUE if fill column mode is on, that is if the line will
|
||||
be broken automatically when if a character is to be inserted past |
||||
this position. |
||||
*/ |
||||
bool FillColumnMode(); |
||||
|
||||
/// Set the fill column to column col if line is strictly larger than 0.
|
||||
/** Set the fill column to column col, if col is strictly larger than 0.
|
||||
If col is 0, fill column mode is turned off. |
||||
In fill column mode, the line will |
||||
be broken automatically at column col, when a character is
|
||||
inserted past column col.. |
||||
*/ |
||||
void setFillColumnMode(int col ); |
||||
|
||||
/// save a backup copy
|
||||
/** If copy is TRUE KEdit will make a backup copy of the document that
|
||||
is being edited on opening it. The backup copy will receive the |
||||
suffix ~. The default is TRUE. |
||||
*/ |
||||
void saveBackupCopy(bool copy); |
||||
|
||||
signals: |
||||
|
||||
/// This signal is emitted when the document in the textwidget has changed
|
||||
/** This signal is emitted when the document in the textwidget has changed
|
||||
*/ |
||||
void fileChanged(); |
||||
|
||||
/// This signal is emitted whenever the cursor position changed.
|
||||
/** This signal is emitted whenever the cursor position changed.
|
||||
Use this in conjunction with currentLine(), currentColumn()
|
||||
if you need to know the cursor position. |
||||
*/ |
||||
void CursorPositionChanged(); |
||||
|
||||
/// This signal is emitted just before saving a file.
|
||||
/** This signal is emitted just before saving a file. Since KEdit calls
|
||||
kapp->processEvents(), you have a chance to let the user know what's
|
||||
going to happen. |
||||
*/ |
||||
void saving(); |
||||
|
||||
/// This signal is emitted just before loading a file.
|
||||
/** This signal is emitted just before loading a file. Since KEdit calls
|
||||
kapp->processEvents(), you have a chance to let the user know what's
|
||||
going to happen. |
||||
*/ |
||||
void loading(); |
||||
|
||||
/// This signal is emitted if the user toggles from overwrite to insert mode
|
||||
/** This signal is emitted if the user toggles from overwrite to insert mode.
|
||||
He can do so by pressing the "Insert" Button on a PC keyboard. |
||||
*/ |
||||
void toggle_overwrite_signal(); |
||||
|
||||
|
||||
public slots: |
||||
|
||||
void setModified(); |
||||
|
||||
void search_slot(); |
||||
|
||||
void searchdone_slot(); |
||||
|
||||
void replace_slot(); |
||||
|
||||
void replace_all_slot(); |
||||
|
||||
void replace_search_slot(); |
||||
|
||||
void replacedone_slot(); |
||||
|
||||
void computePosition(); |
||||
|
||||
|
||||
protected: |
||||
|
||||
int saveFile(); |
||||
|
||||
int doSearch(QString s_pattern, bool case_sensitive,
|
||||
bool regex, bool forward,int line, int col); |
||||
|
||||
int doReplace(QString s_pattern, bool case_sensitive,
|
||||
bool regex, bool forward,int line, int col,bool replace); |
||||
|
||||
|
||||
protected: |
||||
|
||||
bool eventFilter ( QObject *, QEvent * ); |
||||
void keyPressEvent ( QKeyEvent * ); |
||||
void mousePressEvent ( QMouseEvent* ); |
||||
void mouseReleaseEvent( QMouseEvent* ); |
||||
void mouseMoveEvent ( QMouseEvent* ); |
||||
|
||||
|
||||
private: |
||||
|
||||
void setContextSens(); |
||||
void mynewLine(); |
||||
QString prefixString(QString); |
||||
|
||||
|
||||
private: |
||||
|
||||
QWidget *p_parent; |
||||
QFileDialog *fbox; |
||||
KEdSrch *srchdialog; |
||||
KEdReplace *replace_dialog; |
||||
KEdGotoLine *gotodialog; |
||||
QPopupMenu *rb_popup; |
||||
KApplication* mykapp; |
||||
|
||||
QString filename; |
||||
QString pattern; |
||||
|
||||
bool modified; |
||||
bool autoIndentMode; |
||||
bool can_replace; |
||||
|
||||
int edit_mode; |
||||
int last_search; |
||||
int last_replace; |
||||
int replace_all_line; |
||||
int replace_all_col; |
||||
|
||||
int line_pos, col_pos; |
||||
bool fill_column_is_set; |
||||
bool word_wrap_is_set; |
||||
int fill_column_value; |
||||
bool make_backup_copies; |
||||
|
||||
}; |
||||
|
||||
|
||||
|
||||
#endif |
||||
Loading…
Reference in new issue