You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/kmail/kmedit.h

202 lines
5.7 KiB

/* -*- mode: C++; c-file-style: "gnu" -*-
* KMComposeWin Header File
* Author: Markus Wuebben <markus.wuebben@kde.org>
*/
#ifndef __KMAIL_KMEDIT_H__
#define __KMAIL_KMEDIT_H__
#include <tdeversion.h>
#include <keditcl.h>
#include <tdespell.h>
#include <ksyntaxhighlighter.h>
#include <tqmap.h>
#include <tqstringlist.h>
#include <tqclipboard.h>
class KMComposeWin;
class KSpellConfig;
class SpellingFilter;
class KTempFile;
class KDirWatch;
class TDEProcess;
class TQPopupMenu;
/**
* Reimplemented to make writePersonalDictionary() public, which we call everytime after
* adding a word to the dictionary (for safety's sake and because the highlighter needs to reload
* the personal word list, and for that, it needs to be written to disc)
*/
class KMSpell : public KSpell
{
public:
KMSpell( TQObject *receiver, const char *slot, KSpellConfig *spellConfig );
using KSpell::writePersonalDictionary;
};
/**
* Reimplemented to add support for ignored words
*/
class KMSyntaxHighter : public KDictSpellingHighlighter
{
public:
KMSyntaxHighter( TQTextEdit *textEdit,
bool spellCheckingActive = true,
bool autoEnable = true,
const TQColor& spellColor = red,
bool colorQuoting = false,
const TQColor& QuoteColor0 = black,
const TQColor& QuoteColor1 = TQColor( 0x00, 0x80, 0x00 ),
const TQColor& QuoteColor2 = TQColor( 0x00, 0x70, 0x00 ),
const TQColor& QuoteColor3 = TQColor( 0x00, 0x60, 0x00 ),
KSpellConfig *spellConfig = 0 );
/** Reimplemented */
virtual bool isMisspelled( const TQString &word );
void ignoreWord( const TQString &word );
TQStringList ignoredWords() const;
private:
TQStringList mIgnoredWords;
};
class KMEdit : public KEdit {
Q_OBJECT
public:
KMEdit(TQWidget *parent=0,KMComposeWin* composer=0,
KSpellConfig* spellConfig = 0,
const char *name=0);
~KMEdit();
/**
* Start the spell checker.
*/
void spellcheck();
/**
* Text with lines breaks inserted after every row
*/
TQString brokenText();
/**
* Toggle automatic spellchecking
*/
int autoSpellChecking( bool );
/**
* For the external editor
*/
void setUseExternalEditor( bool use ) { mUseExtEditor = use; }
void setExternalEditorPath( const TQString & path ) { mExtEditor = path; }
/**
* Check that the external editor has finished and output a warning
* if it hasn't.
* @return false if the user chose to cancel whatever operation
* called this method.
*/
bool checkExternalEditorFinished();
TQPopupMenu* createPopupMenu(const TQPoint&);
void setSpellCheckingActive(bool spellCheckingActive);
/** Drag and drop methods */
void contentsDragEnterEvent(TQDragEnterEvent *e);
void contentsDragMoveEvent(TQDragMoveEvent *e);
void contentsDropEvent(TQDropEvent *e);
void deleteAutoSpellChecking();
unsigned int lineBreakColumn() const;
/** set cursor to absolute position pos */
void setCursorPositionFromStart(unsigned int pos);
int indexOfCurrentLineStart( int paragraph, int index );
signals:
void spellcheck_done(int result);
void attachPNGImageData(const TQByteArray &image);
void pasteImage();
void focusUp();
void focusChanged( bool );
void selectionAvailable( bool );
void insertSnippet();
public slots:
void initializeAutoSpellChecking();
void slotSpellcheck2(KSpell*);
void slotSpellResult(const TQString&);
void slotSpellDone();
void slotExternalEditorDone(TDEProcess*);
void slotMisspelling(const TQString &, const TQStringList &, unsigned int);
void slotCorrected (const TQString &, const TQString &, unsigned int);
void addSuggestion(const TQString& text, const TQStringList& lst, unsigned int );
void cut();
void clear();
void del();
void paste();
protected:
/**
* Event filter that does Tab-key handling.
*/
bool eventFilter(TQObject*, TQEvent*);
void keyPressEvent( TQKeyEvent* );
void contentsMouseReleaseEvent( TQMouseEvent * e );
/// Reimplemented to select words under the cursor on double-clicks in our way,
/// not the broken TQt way (https://issues.kolab.org/issue4089)
virtual void contentsMouseDoubleClickEvent( TQMouseEvent *e );
private slots:
void slotExternalEditorTempFileChanged( const TQString & fileName );
void slotSelectionChanged() {
// use !text.isEmpty() here, as null-selections exist, but make no sense
emit selectionAvailable( !selectedText().isEmpty() );
}
/// Called when mSpeller is ready to rumble. Does nothing, but KSpell requires a slot as otherwise
/// it will show a dialog itself, which we want to avoid.
void spellerReady( KSpell *speller );
/// Called when mSpeller died for some reason.
void spellerDied();
/// Re-creates the spellers, called when the dictionary is changed
void createSpellers();
private:
void killExternalEditor();
private:
KMComposeWin* mComposer;
// This is the speller used for the spellcheck dialog. It is only active as long as the spellcheck
// dialog is shown
KSpell *mKSpellForDialog;
// This is the speller used when right-clicking a word and choosing "add to dictionary". It lives
// as long as the composer lives.
KMSpell *mSpeller;
KSpellConfig *mSpellConfig;
TQMap<TQString,TQStringList> mReplacements;
SpellingFilter* mSpellingFilter;
KTempFile *mExtEditorTempFile;
KDirWatch *mExtEditorTempFileWatcher;
TDEProcess *mExtEditorProcess;
bool mUseExtEditor;
TQString mExtEditor;
bool mWasModifiedBeforeSpellCheck;
KMSyntaxHighter *mHighlighter;
bool mSpellLineEdit;
TQClipboard::Mode mPasteMode;
};
#endif // __KMAIL_KMEDIT_H__