/***************************************************************************
* Copyright ( C ) 2003 by S <EFBFBD> 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 TDEMainWindow ;
class KTooolBar ;
class TDEToggleAction ;
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
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
public :
TextEditor ( TextContent * textContent , TQWidget * parent ) ;
~ TextEditor ( ) ;
void validate ( ) ;
void autoSave ( bool toFileToo ) ;
protected :
TextContent * m_textContent ;
} ;
class HtmlEditor : public NoteEditor
{
Q_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
public :
ImageEditor ( ImageContent * imageContent , TQWidget * parent ) ;
} ;
class AnimationEditor : public NoteEditor
{
Q_OBJECT
public :
AnimationEditor ( AnimationContent * animationContent , TQWidget * parent ) ;
} ;
class FileEditor : public NoteEditor
{
Q_OBJECT
public :
FileEditor ( FileContent * fileContent , TQWidget * parent ) ;
~ FileEditor ( ) ;
void validate ( ) ;
void autoSave ( bool toFileToo ) ;
protected :
FileContent * m_fileContent ;
} ;
class LinkEditor : public NoteEditor
{
Q_OBJECT
public :
LinkEditor ( LinkContent * linkContent , TQWidget * parent ) ;
} ;
class LauncherEditor : public NoteEditor
{
Q_OBJECT
public :
LauncherEditor ( LauncherContent * launcherContent , TQWidget * parent ) ;
} ;
class ColorEditor : public NoteEditor
{
Q_OBJECT
public :
ColorEditor ( ColorContent * colorContent , TQWidget * parent ) ;
} ;
class UnknownEditor : public NoteEditor
{
Q_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
public :
DebuggedLineEdit ( const TQString & text , TQWidget * parent = 0 ) ;
~ DebuggedLineEdit ( ) ;
protected :
void keyPressEvent ( TQKeyEvent * event ) ;
} ;
/** The dialog to edit Link Note content.
* @ author S <EFBFBD> astien Laot
*/
class LinkEditDialog : public KDialogBase
{
Q_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 <EFBFBD> astien Laot
*/
class LauncherEditDialog : public KDialogBase
{
Q_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 <EFBFBD> astien Laot
*/
class InlineEditors : public TQObject
{
Q_OBJECT
public :
InlineEditors ( ) ;
~ InlineEditors ( ) ;
void initToolBars ( TDEActionCollection * actionCollection ) ;
static InlineEditors * instance ( ) ;
public :
// Rich Text ToolBar:
TDEToolBar * richTextToolBar ( ) ;
void enableRichTextToolBar ( ) ;
void disableRichTextToolBar ( ) ;
FocusedFontCombo * richTextFont ;
FontSizeCombo * richTextFontSize ;
FocusedColorCombo * richTextColor ;
TDEToggleAction * richTextBold ;
TDEToggleAction * richTextItalic ;
TDEToggleAction * richTextUnderline ;
// TDEToggleAction *richTextSuper;
// TDEToggleAction *richTextSub;
TDEToggleAction * richTextLeft ;
TDEToggleAction * richTextCenter ;
TDEToggleAction * richTextRight ;
TDEToggleAction * richTextJustified ;
TDEAction * richTextUndo ;
TDEAction * richTextRedo ;
} ;
# endif // NOTEEDIT_H