summaryrefslogtreecommitdiffstats
path: root/knode/kncomposer.h
diff options
context:
space:
mode:
Diffstat (limited to 'knode/kncomposer.h')
-rw-r--r--knode/kncomposer.h384
1 files changed, 384 insertions, 0 deletions
diff --git a/knode/kncomposer.h b/knode/kncomposer.h
new file mode 100644
index 000000000..12c2150f8
--- /dev/null
+++ b/knode/kncomposer.h
@@ -0,0 +1,384 @@
+/*
+ KNode, the KDE newsreader
+ Copyright (c) 1999-2005 the KNode authors.
+ See file AUTHORS for details
+
+ 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.
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
+*/
+
+#ifndef KNCOMPOSER_H
+#define KNCOMPOSER_H
+
+#include <klistview.h>
+
+#include <kmainwindow.h>
+#include <kdialogbase.h>
+#include <keditcl.h>
+#include <qlineedit.h>
+#include <qregexp.h>
+
+#include <kdeversion.h>
+#include <keditcl.h>
+
+#include <kabc/addresslineedit.h>
+#include <knodecomposeriface.h>
+
+class QGroupBox;
+
+class KProcess;
+class KSpell;
+class KDictSpellingHighlighter;
+class KSelectAction;
+class KToggleAction;
+
+class KNLocalArticle;
+class KNAttachment;
+class SpellingFilter;
+
+class KNComposer : public KMainWindow , virtual public KNodeComposerIface {
+
+ Q_OBJECT
+
+ public:
+ enum composerResult { CRsendNow, CRsendLater, CRdelAsk,
+ CRdel, CRsave, CRcancel };
+ enum MessageMode { news=0, mail=1, news_mail=2 };
+
+ // unwraped == original, not rewraped text
+ // firstEdit==true: place the cursor at the end of the article
+ KNComposer(KNLocalArticle *a, const QString &text=QString::null, const QString &sig=QString::null, const QString &unwraped=QString::null, bool firstEdit=false, bool dislikesCopies=false, bool createCopy=false);
+ ~KNComposer();
+ void setConfig(bool onlyFonts);
+ void setMessageMode(MessageMode mode);
+
+ //get result
+ bool hasValidData();
+ composerResult result() const { return r_esult; }
+ KNLocalArticle* article()const { return a_rticle; }
+ bool applyChanges();
+
+ void closeEvent(QCloseEvent *e);
+
+ //set data from the given article
+ void initData(const QString &text);
+
+ // inserts at cursor position if clear is false, replaces content otherwise
+ // puts the file content into a box if box==true
+ // "file" is already open for reading
+ void insertFile(QFile *file, bool clear=false, bool box=false, QString boxTitle=QString::null);
+
+ // ask for a filename, handle network urls
+ void insertFile(bool clear=false, bool box=false);
+
+ QPopupMenu * popupMenu( const QString& name );
+ int listOfResultOfCheckWord( const QStringList & lst , const QString & selectWord);
+
+//internal classes
+ class ComposerView;
+ class Editor;
+ class AttachmentView;
+ class AttachmentViewItem;
+ class AttachmentPropertiesDlg;
+
+ //GUI
+ ComposerView *v_iew;
+ QPopupMenu *a_ttPopup;
+
+ //Data
+ composerResult r_esult;
+ KNLocalArticle *a_rticle;
+ QString s_ignature, u_nwraped;
+ QCString c_harset;
+ MessageMode m_ode;
+ bool n_eeds8Bit, // false: fall back to us-ascii
+ v_alidated, // hasValidData was run and found no problems, n_eeds8Bit is valid
+ a_uthorDislikesMailCopies;
+
+ //edit
+ bool e_xternalEdited;
+ KProcess *e_xternalEditor;
+ KTempFile *e_ditorTempfile;
+ KSpell *s_pellChecker;
+ SpellingFilter* mSpellingFilter;
+
+ //Attachments
+ QValueList<KNAttachment*> mDeletedAttachments;
+ QPtrList<KAction> m_listAction;
+ bool a_ttChanged;
+
+ //------------------------------ <Actions> -----------------------------
+
+ KAccel *a_ccel;
+ KAction *a_ctExternalEditor,
+ *a_ctSpellCheck,
+ *a_ctRemoveAttachment,
+ *a_ctAttachmentProperties,
+ *a_ctSetCharsetKeyb;
+ KToggleAction *a_ctPGPsign,
+ *a_ctDoPost, *a_ctDoMail, *a_ctWordWrap;
+ KSelectAction *a_ctSetCharset;
+ bool spellLineEdit;
+ protected slots:
+ void slotSendNow();
+ void slotSendLater();
+ void slotSaveAsDraft();
+ void slotArtDelete();
+ void slotAppendSig();
+ void slotInsertFile();
+ void slotInsertFileBoxed();
+ void slotAttachFile();
+ void slotRemoveAttachment();
+ void slotAttachmentProperties();
+ void slotToggleDoPost();
+ void slotToggleDoMail();
+ void slotSetCharset(const QString &s);
+ void slotSetCharsetKeyboard();
+ void slotToggleWordWrap();
+ void slotUndoRewrap();
+ void slotExternalEditor();
+ void slotSpellcheck();
+
+ void slotUpdateStatusBar();
+ void slotUpdateCursorPos();
+ void slotConfKeys();
+ void slotConfToolbar();
+ void slotNewToolbarConfig();
+
+ //------------------------------ </Actions> ----------------------------
+
+ // GUI
+ void slotSubjectChanged(const QString &t);
+ void slotGroupsChanged(const QString &t);
+ void slotToBtnClicked();
+ void slotGroupsBtnClicked();
+
+ // external editor
+ void slotEditorFinished(KProcess *);
+ void slotCancelEditor();
+
+ // attachment list
+ void slotAttachmentPopup(KListView*, QListViewItem *it, const QPoint &p);
+ void slotAttachmentSelected(QListViewItem *it);
+ void slotAttachmentEdit(QListViewItem *it);
+ void slotAttachmentRemove(QListViewItem *it);
+
+ // spellcheck operation
+ void slotSpellStarted(KSpell *);
+ void slotSpellDone(const QString&);
+ void slotSpellFinished();
+
+ // DND handling
+ virtual void slotDragEnterEvent(QDragEnterEvent *);
+ virtual void slotDropEvent(QDropEvent *);
+
+ void slotUndo();
+ void slotRedo();
+ void slotCut();
+ void slotCopy();
+ void slotPaste();
+ void slotSelectAll();
+ void slotMisspelling(const QString &text, const QStringList &lst, unsigned int pos);
+ void slotCorrected (const QString &oldWord, const QString &newWord, unsigned int pos);
+ void addRecentAddress();
+
+ protected:
+
+ // DND handling
+ virtual void dragEnterEvent(QDragEnterEvent *);
+ virtual void dropEvent(QDropEvent *);
+
+ signals:
+ void composerDone(KNComposer*);
+
+ private:
+ bool mFirstEdit;
+
+};
+
+
+
+class KNLineEditSpell;
+class KNLineEdit;
+
+class KNComposer::ComposerView : public QSplitter {
+
+ public:
+ ComposerView(KNComposer *_composer, const char *n=0);
+ ~ComposerView();
+ void focusNextPrevEdit(const QWidget* aCur, bool aNext);
+ void setMessageMode(KNComposer::MessageMode mode);
+ void showAttachmentView();
+ void hideAttachmentView();
+ void showExternalNotification();
+ void hideExternalNotification();
+ void restartBackgroundSpellCheck();
+ QValueList<QWidget*> mEdtList;
+
+ QLabel *l_to,
+ *l_groups,
+ *l_fup2;
+ KNLineEditSpell *s_ubject;
+
+ KNLineEdit *g_roups;
+ KNLineEdit *t_o;
+
+ KComboBox *f_up2;
+ QPushButton *g_roupsBtn,
+ *t_oBtn;
+
+ Editor *e_dit;
+ QGroupBox *n_otification;
+ QPushButton *c_ancelEditorBtn;
+
+ QWidget *a_ttWidget;
+ AttachmentView *a_ttView;
+ QPushButton *a_ttAddBtn,
+ *a_ttRemoveBtn,
+ *a_ttEditBtn;
+ KDictSpellingHighlighter *mSpellChecker;
+
+ bool v_iewOpen;
+};
+
+
+//internal class : handle Tabs... (expanding them in textLine(), etc.)
+class KNComposer::Editor : public KEdit {
+
+ Q_OBJECT
+
+ public:
+ Editor(KNComposer::ComposerView *_composerView, KNComposer *_composer, QWidget *parent=0, char *name=0);
+ ~Editor();
+ QStringList processedText();
+
+ public slots:
+ void slotPasteAsQuotation();
+ void slotFind();
+ void slotSearchAgain();
+ void slotReplace();
+ void slotAddQuotes();
+ void slotRemoveQuotes();
+ void slotAddBox();
+ void slotRemoveBox();
+ void slotRot13();
+ void slotCorrectWord();
+
+protected slots:
+ void slotSpellStarted( KSpell *);
+ void slotSpellDone(const QString &);
+ void slotSpellFinished();
+ void slotMisspelling (const QString &, const QStringList &lst, unsigned int);
+ virtual void cut();
+ virtual void clear();
+ virtual void del();
+ void slotAddSuggestion( const QString &, const QStringList &lst, unsigned int );
+ signals:
+ void sigDragEnterEvent(QDragEnterEvent *);
+ void sigDropEvent(QDropEvent *);
+
+ protected:
+
+ // DND handling
+ virtual void contentsDragEnterEvent(QDragEnterEvent *);
+ virtual void contentsDropEvent(QDropEvent *);
+ virtual void contentsContextMenuEvent( QContextMenuEvent *e );
+ virtual void keyPressEvent ( QKeyEvent *e);
+
+ virtual bool eventFilter(QObject*, QEvent*);
+private:
+ KNComposer *m_composer;
+ KNComposer::ComposerView *m_composerView;
+ KSpell *spell;
+ QMap<QString,QStringList> m_replacements;
+ QRegExp m_bound;
+};
+
+
+class KNComposer::AttachmentView : public KListView {
+
+ Q_OBJECT
+
+ public:
+ AttachmentView(QWidget *parent, char *name=0);
+ ~AttachmentView();
+
+ protected:
+ void keyPressEvent( QKeyEvent *e );
+
+ signals:
+ void delPressed ( QListViewItem * ); // the user used Key_Delete on a list view item
+};
+
+
+class KNComposer::AttachmentViewItem : public KListViewItem {
+
+ public:
+ AttachmentViewItem(KListView *v, KNAttachment *a);
+ ~AttachmentViewItem();
+
+ KNAttachment *attachment;
+
+};
+
+
+class KNComposer::AttachmentPropertiesDlg : public KDialogBase {
+
+ Q_OBJECT
+
+ public:
+ AttachmentPropertiesDlg( KNAttachment *a, QWidget *p=0, const char *n=0);
+ ~AttachmentPropertiesDlg();
+
+ void apply();
+
+ protected:
+ KLineEdit *m_imeType,
+ *d_escription;
+ QComboBox *e_ncoding;
+
+ KNAttachment *a_ttachment;
+ bool n_onTextAsText;
+
+ protected slots:
+ void accept();
+ void slotMimeTypeTextChanged(const QString &text);
+};
+
+//-----------------------------------------------------------------------------
+class KNLineEdit : public KABC::AddressLineEdit
+{
+ Q_OBJECT
+ typedef KABC::AddressLineEdit KNLineEditInherited;
+public:
+
+ KNLineEdit(KNComposer::ComposerView *_composerView, bool useCompletion, QWidget *parent = 0,
+ const char *name = 0);
+protected:
+ // Inherited. Always called by the parent when this widget is created.
+ virtual void loadAddresses();
+ void keyPressEvent(QKeyEvent *e);
+ virtual QPopupMenu *createPopupMenu();
+private slots:
+ void editRecentAddresses();
+private:
+ KNComposer::ComposerView *composerView;
+};
+
+class KNLineEditSpell : public KNLineEdit
+{
+ Q_OBJECT
+public:
+ KNLineEditSpell(KNComposer::ComposerView *_composerView, bool useCompletion,QWidget * parent, const char * name = 0);
+ void highLightWord( unsigned int length, unsigned int pos );
+ void spellCheckDone( const QString &s );
+ void spellCheckerMisspelling( const QString &text, const QStringList &, unsigned int pos);
+ void spellCheckerCorrected( const QString &old, const QString &corr, unsigned int pos);
+};
+
+#endif