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.
basket/src/noteedit.h

304 lines
8.3 KiB

/***************************************************************************
* 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 <tqtextedit.h>
#include <tqlineedit.h>
class TQWidget;
//class TQLineEdit;
class TQPushButton;
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 TQObject
{
Q_OBJECT
TQ_OBJECT
public:
NoteEditor(NoteContent *noteContent);
bool isEmpty() { return m_isEmpty; }
bool canceled() { return m_canceled; }
bool isInline() { return m_widget != 0; }
TQWidget* widget() { return m_widget; }
KTextEdit* textEdit() { return m_textEdit; }
TQLineEdit* lineEdit() { return m_lineEdit; }
private:
bool m_isEmpty;
bool m_canceled;
TQWidget *m_widget;
KTextEdit *m_textEdit;
TQLineEdit *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(TQWidget *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, TQWidget *parent);
};
class TextEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
TextEditor(TextContent *textContent, TQWidget *parent);
~TextEditor();
void validate();
void autoSave(bool toFileToo);
protected:
TextContent *m_textContent;
};
class HtmlEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
HtmlEditor(HtmlContent *htmlContent, TQWidget *parent);
~HtmlEditor();
void validate();
void autoSave(bool toFileToo);
protected:
HtmlContent *m_htmlContent;
public slots:
void cursorPositionChanged();
void textChanged();
void fontChanged(const TQFont &font);
protected slots:
// void slotVerticalAlignmentChanged(TQTextEdit::VerticalAlignment align);
// void setBold();
// void setItalic();
// void setUnderline();
void setLeft();
void setCentered();
void setRight();
void setBlock();
};
class ImageEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
ImageEditor(ImageContent *imageContent, TQWidget *parent);
};
class AnimationEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
AnimationEditor(AnimationContent *animationContent, TQWidget *parent);
};
class FileEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
FileEditor(FileContent *fileContent, TQWidget *parent);
~FileEditor();
void validate();
void autoSave(bool toFileToo);
protected:
FileContent *m_fileContent;
};
class LinkEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
LinkEditor(LinkContent *linkContent, TQWidget *parent);
};
class LauncherEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
LauncherEditor(LauncherContent *launcherContent, TQWidget *parent);
};
class ColorEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
ColorEditor(ColorContent *colorContent, TQWidget *parent);
};
class UnknownEditor : public NoteEditor
{
Q_OBJECT
TQ_OBJECT
public:
UnknownEditor(UnknownContent *unknownContent, TQWidget *parent);
};
/** TQLineEdit behavior:
* Create a new TQLineEdit 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 TQLineEdit
{
Q_OBJECT
TQ_OBJECT
public:
DebuggedLineEdit(const TQString &text, TQWidget *parent = 0);
~DebuggedLineEdit();
protected:
void keyPressEvent(TQKeyEvent *event);
};
/** The dialog to edit Link Note content.
* @author S<>astien Laot
*/
class LinkEditDialog : public KDialogBase
{
Q_OBJECT
TQ_OBJECT
public:
LinkEditDialog(LinkContent *contentNote, TQWidget *parent = 0);
~LinkEditDialog();
void polish();
protected slots:
void slotOk();
void urlChanged(const TQString&);
void doNotAutoTitle(const TQString&);
void doNotAutoIcon(TQString);
void guessTitle();
void guessIcon();
private:
LinkContent *m_noteContent;
bool m_isAutoModified;
KURLRequester *m_url;
TQLineEdit *m_title;
KIconButton *m_icon;
TQPushButton *m_autoTitle;
TQPushButton *m_autoIcon;
};
/** The dialog to edit Launcher Note content.
* @author S<>astien Laot
*/
class LauncherEditDialog : public KDialogBase
{
Q_OBJECT
TQ_OBJECT
public:
LauncherEditDialog(LauncherContent *contentNote, TQWidget *parent = 0);
~LauncherEditDialog();
void polish();
protected slots:
void slotOk();
void guessIcon();
private:
LauncherContent *m_noteContent;
RunCommandRequester *m_command;
TQLineEdit *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 TQObject
{
Q_OBJECT
TQ_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