summaryrefslogtreecommitdiffstats
path: root/src/noteedit.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/noteedit.h')
-rw-r--r--src/noteedit.h289
1 files changed, 289 insertions, 0 deletions
diff --git a/src/noteedit.h b/src/noteedit.h
new file mode 100644
index 0000000..1866034
--- /dev/null
+++ b/src/noteedit.h
@@ -0,0 +1,289 @@
+/***************************************************************************
+ * Copyright (C) 2003 by S�astien Laot *
+ * slaout@linux62.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. *
+ * *
+ * 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., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef NOTEEDIT_H
+#define NOTEEDIT_H
+
+#include <kdialogbase.h>
+#include <qtextedit.h>
+#include <qlineedit.h>
+
+class QWidget;
+//class QLineEdit;
+class QPushButton;
+class KIconButton;
+class KURLRequester;
+class KTextEdit;
+class KMainWindow;
+class KTooolBar;
+class KToggleAction;
+
+class FontSizeCombo;
+
+class Note;
+class RunCommandRequester;
+class FocusedFontCombo;
+class FocusedColorCombo;
+
+#include "notecontent.h"
+
+/** The base class for every note editors.
+ * Scenario:
+ * The Basket class calls NoteEditor::editNoteContent() with the NoteContent to edit.
+ * This method create the good child NoteEditor depending
+ * on the note content type and return it to the Basket.
+ * This custom NoteEditor have two choices regarding what to do in its constructor:
+ * - Display a dialog and then call cancel() if the user canceled the dialog;
+ * - Create an inline editor and call setInlineEditor() with that editor as parameter.
+ * When the user exit the edition, validate() is called by the Basket.
+ * You should then call setEmpty() is the user cleared the content.
+ * The custom editor SHOULD call the NoteEditor constructor.
+ * If the user cleared the content OR if the user canceled the dialog whereas he/she
+ * JUST ADDED the note, then the note will be deleted by the Basket.
+ */
+class NoteEditor : public QObject
+{
+ Q_OBJECT
+ public:
+ NoteEditor(NoteContent *noteContent);
+ bool isEmpty() { return m_isEmpty; }
+ bool canceled() { return m_canceled; }
+ bool isInline() { return m_widget != 0; }
+ QWidget* widget() { return m_widget; }
+ KTextEdit* textEdit() { return m_textEdit; }
+ QLineEdit* lineEdit() { return m_lineEdit; }
+
+ private:
+ bool m_isEmpty;
+ bool m_canceled;
+ QWidget *m_widget;
+ KTextEdit *m_textEdit;
+ QLineEdit *m_lineEdit;
+ NoteContent *m_noteContent;
+
+ public:
+ NoteContent* noteContent() { return m_noteContent; }
+ Note* note();
+ protected:
+ void setEmpty() { m_isEmpty = true; }
+ void cancel() { m_canceled = true; }
+ void setInlineEditor(QWidget *inlineEditor);
+ public:
+ virtual void validate() {}
+ virtual void autoSave(bool /*toFileToo*/) {} // Same as validate(), but does not precede editor close and is triggered either while the editor widget changed size or after 3 seconds of inactivity.
+
+ signals:
+ void askValidation();
+ void mouseEnteredEditorWidget();
+
+ public:
+ static NoteEditor* editNoteContent(NoteContent *noteContent, QWidget *parent);
+};
+
+class TextEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ TextEditor(TextContent *textContent, QWidget *parent);
+ ~TextEditor();
+ void validate();
+ void autoSave(bool toFileToo);
+ protected:
+ TextContent *m_textContent;
+};
+
+class HtmlEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ HtmlEditor(HtmlContent *htmlContent, QWidget *parent);
+ ~HtmlEditor();
+ void validate();
+ void autoSave(bool toFileToo);
+ protected:
+ HtmlContent *m_htmlContent;
+ public slots:
+ void cursorPositionChanged();
+ void textChanged();
+ void fontChanged(const QFont &font);
+ protected slots:
+// void slotVerticalAlignmentChanged(QTextEdit::VerticalAlignment align);
+ // void setBold();
+ // void setItalic();
+ // void setUnderline();
+ void setLeft();
+ void setCentered();
+ void setRight();
+ void setBlock();
+};
+
+class ImageEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ ImageEditor(ImageContent *imageContent, QWidget *parent);
+};
+
+class AnimationEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ AnimationEditor(AnimationContent *animationContent, QWidget *parent);
+};
+
+class FileEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ FileEditor(FileContent *fileContent, QWidget *parent);
+ ~FileEditor();
+ void validate();
+ void autoSave(bool toFileToo);
+ protected:
+ FileContent *m_fileContent;
+};
+
+class LinkEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ LinkEditor(LinkContent *linkContent, QWidget *parent);
+};
+
+class LauncherEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ LauncherEditor(LauncherContent *launcherContent, QWidget *parent);
+};
+
+class ColorEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ ColorEditor(ColorContent *colorContent, QWidget *parent);
+};
+
+class UnknownEditor : public NoteEditor
+{
+ Q_OBJECT
+ public:
+ UnknownEditor(UnknownContent *unknownContent, QWidget *parent);
+};
+
+/** QLineEdit behavior:
+ * Create a new QLineEdit with a text, then the user select a part of it and press ONE letter key.
+ * The signal textChanged() is not emitted!
+ * This class correct that!
+ */
+class DebuggedLineEdit : public QLineEdit
+{
+ Q_OBJECT
+ public:
+ DebuggedLineEdit(const QString &text, QWidget *parent = 0);
+ ~DebuggedLineEdit();
+ protected:
+ void keyPressEvent(QKeyEvent *event);
+};
+
+/** The dialog to edit Link Note content.
+ * @author S�astien Laot
+ */
+class LinkEditDialog : public KDialogBase
+{
+ Q_OBJECT
+ public:
+ LinkEditDialog(LinkContent *contentNote, QWidget *parent = 0);
+ ~LinkEditDialog();
+ void polish();
+ protected slots:
+ void slotOk();
+ void urlChanged(const QString&);
+ void doNotAutoTitle(const QString&);
+ void doNotAutoIcon(QString);
+ void guessTitle();
+ void guessIcon();
+ private:
+ LinkContent *m_noteContent;
+ bool m_isAutoModified;
+ KURLRequester *m_url;
+ QLineEdit *m_title;
+ KIconButton *m_icon;
+ QPushButton *m_autoTitle;
+ QPushButton *m_autoIcon;
+};
+
+
+/** The dialog to edit Launcher Note content.
+ * @author S�astien Laot
+ */
+class LauncherEditDialog : public KDialogBase
+{
+ Q_OBJECT
+ public:
+ LauncherEditDialog(LauncherContent *contentNote, QWidget *parent = 0);
+ ~LauncherEditDialog();
+ void polish();
+ protected slots:
+ void slotOk();
+ void guessIcon();
+ private:
+ LauncherContent *m_noteContent;
+ RunCommandRequester *m_command;
+ QLineEdit *m_name;
+ KIconButton *m_icon;
+};
+
+/** This class manage toolbars for the inline editors.
+ * The toolbars should be created once at the application startup,
+ * then KXMLGUI can manage them and save theire state and position...
+ * @author S�astien Laot
+ */
+class InlineEditors : public QObject
+{
+ Q_OBJECT
+ public:
+ InlineEditors();
+ ~InlineEditors();
+ void initToolBars(KActionCollection *actionCollection);
+ static InlineEditors* instance();
+
+ public:
+ // Rich Text ToolBar:
+ KToolBar* richTextToolBar();
+ void enableRichTextToolBar();
+ void disableRichTextToolBar();
+ FocusedFontCombo *richTextFont;
+ FontSizeCombo *richTextFontSize;
+ FocusedColorCombo *richTextColor;
+ KToggleAction *richTextBold;
+ KToggleAction *richTextItalic;
+ KToggleAction *richTextUnderline;
+// KToggleAction *richTextSuper;
+// KToggleAction *richTextSub;
+ KToggleAction *richTextLeft;
+ KToggleAction *richTextCenter;
+ KToggleAction *richTextRight;
+ KToggleAction *richTextJustified;
+ KAction *richTextUndo;
+ KAction *richTextRedo;
+};
+
+#endif // NOTEEDIT_H