diff -r 7a96bd401351 -r 98449ef9eccd texteditor.cpp --- a/texteditor.cpp Sun Jan 30 12:58:47 2005 +0000 +++ b/texteditor.cpp Thu Jul 30 07:40:05 2009 +0000 @@ -1,54 +1,19 @@ #include "texteditor.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include -#include +#include #include -#include "icons/fileopen.xpm" -#include "icons/filesave.xpm" -#include "icons/fileprint.xpm" -#include "icons/editundo.xpm" -#include "icons/editredo.xpm" -#include "icons/editcopy.xpm" -#include "icons/editcut.xpm" -#include "icons/editpaste.xpm" -#include "icons/edittrash.xpm" -#include "icons/formatfixedfont.xpm" -#include "icons/formattextbold.xpm" -#include "icons/formattextitalic.xpm" -#include "icons/formattextunder.xpm" -#include "icons/formattextleft.xpm" -#include "icons/formattextcenter.xpm" -#include "icons/formattextright.xpm" -#include "icons/formattextjustify.xpm" +#include "noteobj.h" +#include "settings.h" -extern QCanvas* actCanvas; extern int statusbarTime; -extern QSettings settings; +extern Settings settings; + +extern QAction *actionViewToggleNoteEditor; + +extern QString iconPath; +extern QString vymName; using namespace std; @@ -56,20 +21,28 @@ /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// + TextEditor::TextEditor() { printer = new QPrinter( QPrinter::HighResolution ); + printer->setPrinterName (settings.value("/mainwindow/printerName",printer->printerName()).toString()); - // Editor - e = new QTextEdit( this, "editor" ); + e = new QTextEdit( this); e->setFocus(); - e->setTextFormat(RichText); // default + e->setTextFormat(Qt::RichText); // default e->setTabStopWidth (20); // unit is pixel - e->setColor (black); + e->setColor (Qt::black); + e->setAutoFillBackground (true); connect (e, SIGNAL( textChanged() ), this, SLOT( editorChanged() ) ); setCentralWidget( e ); - statusBar()->message( "Ready", statusbarTime); - setCaption("VYM - Note Editor"); + statusBar()->message( tr("Ready","Statusbar message"), statusbarTime); + setCaption(vymName +" - " +tr ("Note Editor","Window caption")); + + + connect(e, SIGNAL(currentCharFormatChanged(const QTextCharFormat &)), + this, SLOT(formatChanged(const QTextCharFormat &))); + + // Toolbars setupFileActions(); @@ -78,31 +51,24 @@ setupSettingsActions(); // Various states - emptyPaper = QBrush(gray); - filledPaper = QBrush(white); - inactivePaper= QBrush(black); + blockChangedSignal=false; setInactive(); // Load Settings - resize (settings.readNumEntry( "/vym/noteeditor/geometry/width", 450), - settings.readNumEntry( "/vym/noteeditor/geometry/height",600)); - move (settings.readNumEntry( "/vym/noteeditor/geometry/posX", 150), - settings.readNumEntry( "/vym/noteeditor/geometry/posY", 50)); + resize (settings.value ( "/satellite/noteeditor/geometry/size", QSize(450,600)).toSize()); + move (settings.value ( "/satellite/noteeditor/geometry/pos", QPoint (250,50)).toPoint()); - if (settings.readEntry( "/vym/noteeditor/showWithMain","yes") =="yes") - setShowWithMain(true); - else - setShowWithMain(false); + setShowWithMain (settings.value ( "/satellite/noteeditor/showWithMain",true).toBool()); - varFont.fromString( settings.readEntry - ("/vym/noteeditor/fonts/varFont", - "Nimbus Sans l,14,-1,5,48,0,0,0,0,0") + varFont.fromString( settings.value + ("/satellite/noteeditor/fonts/varFont", + "Nimbus Sans l,14,-1,5,48,0,0,0,0,0").toString() ); - fixedFont.fromString (settings.readEntry ( - "/vym/noteeditor/fonts/fixedFont", - "Courier,14,-1,5,48,0,0,0,1,0") + fixedFont.fromString (settings.value( + "/satellite/noteeditor/fonts/fixedFont", + "Courier,14,-1,5,48,0,0,0,1,0").toString() ); - QString s=settings.readEntry ("/vym/noteeditor/fonts/fonthintDefault","variable"); + QString s=settings.value ("/satellite/noteeditor/fonts/fonthintDefault","variable").toString(); if (s == "fixed") { actionSettingsFonthintDefault->setOn (true); @@ -112,6 +78,13 @@ actionSettingsFonthintDefault->setOn (false); e->setCurrentFont (varFont); } + filenameHint=""; + + // Restore position of toolbars + restoreState (settings.value("/satellite/noteeditor/state",0).toByteArray()); + + // Save settings in vymrc + settings.setValue("/mainwindow/printerName",printer->printerName()); } @@ -119,31 +92,27 @@ { if (printer) delete printer; // Save Settings - settings.writeEntry( "/vym/noteeditor/geometry/width", width() ); - settings.writeEntry( "/vym/noteeditor/geometry/height", height() ); - settings.writeEntry( "/vym/noteeditor/geometry/posX", pos().x() ); - settings.writeEntry( "/vym/noteeditor/geometry/posY", pos().y() ); + settings.setValue( "/satellite/noteeditor/geometry/size", size() ); + settings.setValue( "/satellite/noteeditor/geometry/pos", pos() ); + settings.setValue ("/satellite/noteeditor/state",saveState(0)); - if (showWithMain()) - settings.writeEntry( "/vym/noteeditor/showWithMain","yes"); - else - settings.writeEntry( "/vym/noteeditor/showWithMain","no"); + settings.setValue( "/satellite/noteeditor/showWithMain",showwithmain); QString s; if (actionSettingsFonthintDefault->isOn() ) s="fixed"; else s="variable"; - settings.writeEntry( "/vym/noteeditor/fonts/fonthintDefault",s ); - settings.writeEntry ("/vym/noteeditor/fonts/varFont", - varFont.toString() ); - settings.writeEntry ("/vym/noteeditor/fonts/fixedFont", - fixedFont.toString() ); + settings.setValue( "/satellite/noteeditor/fonts/fonthintDefault",s ); + settings.setValue("/satellite/noteeditor/fonts/varFont", varFont.toString() ); + settings.setValue("/satellite/noteeditor/fonts/fixedFont", fixedFont.toString() ); + + } bool TextEditor::isEmpty() { - if (e->text().length()) + if (e->toPlainText().length()>0) return false; else return true; @@ -159,6 +128,7 @@ return showwithmain; } + void TextEditor::setFontHint (const QString &fh) { if (fh=="fixed") @@ -187,16 +157,18 @@ void TextEditor::setFilename(const QString &fn) { if (state==filledEditor) + { if (fn.isEmpty() ) { filename=""; - statusBar()->message( "No filename available for this note.", statusbarTime ); + statusBar()->message( tr("No filename available for this note.","Statusbar message"), statusbarTime ); } else { filename=fn; - statusBar()->message( QString( "Current filename is %1" ).arg( filename ), statusbarTime ); + statusBar()->message( tr(QString( "Current filename is %1" ).arg( filename ),"Statusbar message"), statusbarTime ); } + } } QString TextEditor::getFilename() @@ -204,10 +176,19 @@ return filename; } -bool TextEditor::findText(const QString &t, const bool &cs) +void TextEditor::setFilenameHint(const QString &fnh) { - bool wo=false; // word matches - if (e->find (t, cs, wo, true, 0, 0 )) + filenameHint=fnh; +} + +QString TextEditor::getFilenameHint() +{ + return filenameHint; +} + +bool TextEditor::findText(const QString &t, const QTextDocument::FindFlags &flags) +{ + if (e->find (t,flags)) return true; else return false; @@ -215,210 +196,257 @@ void TextEditor::setupFileActions() { - QToolBar *tb = new QToolBar( this ); - tb->setLabel( "File Actions" ); - QPopupMenu *menu = new QPopupMenu( this ); - menuBar()->insertItem( tr( "&File" ), menu ); + QToolBar *tb = addToolBar ( tr("Note Actions") ); + tb->setObjectName ("noteEditorFileActions"); + QMenu *fileMenu = menuBar()->addMenu( tr( "&Note","Menubar" )); QAction *a; - a = new QAction( tr( "Import" ), QPixmap( fileopen_xpm), tr( "&Import..." ), CTRL + Key_O, this, "fileImport" ); + a = new QAction( QPixmap( iconPath+"fileopen.png"), tr( "&Import..." ),this); + a->setStatusTip (tr( "Import","Status tip for Note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_O ); connect( a, SIGNAL( activated() ), this, SLOT( textLoad() ) ); - a->setEnabled(false); - a->addTo( tb ); - a->addTo( menu ); + tb->addAction (a); + fileMenu->addAction (a); actionFileLoad=a; - menu->insertSeparator(); - a = new QAction( tr( "Export Note (HTML)" ), QPixmap( filesave_xpm ), tr( "&Export..." ), CTRL + Key_S, this, "fileSave" ); + fileMenu->addSeparator(); + a = new QAction( QPixmap(iconPath+"filesave.png" ), tr( "&Export..." ),this); + a->setStatusTip (tr( "Export Note (HTML)","Status tip for Note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_S ); connect( a, SIGNAL( activated() ), this, SLOT( textSave() ) ); - a->addTo( tb ); - a->addTo( menu ); + tb->addAction (a); + fileMenu->addAction (a); actionFileSave=a; - a = new QAction( tr( "Export Note As (HTML) " ), QPixmap(), tr( "Export &As... (HTML)" ), 0, this, "exportHTML" ); + a = new QAction( QPixmap(), tr( "Export &As... (HTML)" ), this); + a->setStatusTip (tr( "Export Note As (HTML) ","Status tip for Note Menu" )); connect( a, SIGNAL( activated() ), this, SLOT( textSaveAs() ) ); - a->addTo( menu ); + fileMenu->addAction (a); actionFileSaveAs=a; - a = new QAction( tr( "Export Note As (ASCII) " ), QPixmap(), tr( "Export &As...(ASCII)" ), ALT + Key_X, this, "exportASCII" ); + a = new QAction(QPixmap(), tr( "Export &As...(ASCII)" ), this); + a->setStatusTip ( tr( "Export Note As (ASCII) ","Status tip for note menu" ) ); + a->setShortcut(Qt::ALT + Qt::Key_X ); connect( a, SIGNAL( activated() ), this, SLOT( textExportAsASCII() ) ); - a->addTo( menu ); + fileMenu->addAction (a); actionFileSaveAs=a; - menu->insertSeparator(); - a = new QAction( tr( "Print Note" ), QPixmap( fileprint_xpm ), tr( "&Print..." ), CTRL + Key_P, this, "filePrint" ); + fileMenu->addSeparator(); + a = new QAction( QPixmap(iconPath+"fileprint.png" ), tr( "&Print..." ),this); + a->setStatusTip (tr( "Print Note","Status tip for note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_P ); connect( a, SIGNAL( activated() ), this, SLOT( textPrint() ) ); - a->addTo( tb ); - a->addTo( menu ); + tb->addAction (a); + fileMenu->addAction (a); actionFilePrint=a; } void TextEditor::setupEditActions() { - QToolBar *tb = new QToolBar( this ); - tb->setLabel( "Edit Actions" ); - QPopupMenu *menu = new QPopupMenu( this ); - menuBar()->insertItem( tr( "&Edit" ), menu ); + QToolBar *tb = addToolBar ( tr( "Edit Actions" )); + tb->setObjectName ("noteEditorEditActions"); + QMenu *editMenu = menuBar()->addMenu ( tr( "&Edit" )); QAction *a; - a = new QAction( tr( "Undo" ), QPixmap(editundo_xpm), tr( "&Undo" ), CTRL + Key_Z, this, "undoEvent" ); + a = new QAction(QPixmap(iconPath+"undo.png"), tr( "&Undo" ), this ); + a->setStatusTip ( tr( "Undo","Status tip for note menu" ) ); + a->setShortcut(Qt::CTRL + Qt::Key_Z ); connect( a, SIGNAL( activated() ), e, SLOT( undo() ) ); - a->addTo( menu ); - a->addTo( tb); + editMenu->addAction (a); + tb->addAction (a); actionEditUndo=a; - a = new QAction( tr( "Redo" ), QPixmap( editredo_xpm ), tr( "&Redo" ), CTRL + Key_Y, this, "editRedo" ); + a = new QAction(QPixmap(iconPath+"redo.png" ), tr( "&Redo" ),this); + a->setStatusTip ( tr( "Redo","Status tip for note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_Y ); connect( a, SIGNAL( activated() ), e, SLOT( redo() ) ); - a->addTo( tb ); - a->addTo( menu ); + editMenu->addAction (a); + tb->addAction (a); actionEditRedo=a; - menu->insertSeparator(); - a = new QAction( tr( "Select and copy all" ), QPixmap(), tr( "Select and copy &all" ), CTRL + Key_A, this, "editcopyall" ); + editMenu->addSeparator(); + a = new QAction(QPixmap(), tr( "Select and copy &all" ),this); + a->setStatusTip ( tr( "Select and copy all","Status tip for note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_A ); connect( a, SIGNAL( activated() ), this, SLOT( editCopyAll() ) ); - a->addTo( menu ); + editMenu->addAction (a); - menu->insertSeparator(); - a = new QAction( tr( "Copy" ), QPixmap( editcopy_xpm ), tr( "&Copy" ), CTRL + Key_C, this, "editCopy" ); + editMenu->addSeparator(); + a = new QAction(QPixmap(iconPath+"editcopy.png" ), tr( "&Copy" ),this); + a->setStatusTip ( tr( "Copy","Status tip for note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_C ); connect( a, SIGNAL( activated() ), e, SLOT( copy() ) ); - a->addTo( tb ); - a->addTo( menu ); + editMenu->addAction (a); + tb->addAction (a); actionEditCopy=a; - a = new QAction( tr( "Cut" ), QPixmap( editcut_xpm ), tr( "Cu&t" ), CTRL + Key_X, this, "editCut" ); + a = new QAction(QPixmap(iconPath+"editcut.png" ), tr( "Cu&t" ),this); + a->setStatusTip ( tr( "Cut","Status tip for note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_X ); connect( a, SIGNAL( activated() ), e, SLOT( cut() ) ); - a->addTo( tb ); - a->addTo( menu ); + editMenu->addAction (a); + tb->addAction (a); actionEditCut=a; - a = new QAction( tr( "Paste" ), QPixmap( editpaste_xpm ), tr( "&Paste" ), CTRL + Key_V, this, "editPaste" ); + a = new QAction(QPixmap(iconPath+"editpaste.png" ), tr( "&Paste" ),this); + a->setStatusTip ( tr( "Paste","Status tip for note menu" ) ); + a->setShortcut( Qt::CTRL + Qt::Key_V ); connect( a, SIGNAL( activated() ), e, SLOT( paste() ) ); - a->addTo( tb ); - a->addTo( menu ); + editMenu->addAction (a); + tb->addAction (a); actionEditPaste=a; - a = new QAction( tr( "Delete all" ), QPixmap( edittrash_xpm ), tr( "&Delete All" ), 0, this, "editDeleteAll" ); + a = new QAction( QPixmap( iconPath+"edittrash.png"), tr( "&Delete All" ), this); + a->setStatusTip (tr( "Delete all","Status tip for note menu" ) ); connect( a, SIGNAL( activated() ), e, SLOT( clear() ) ); - a->addTo( tb ); - a->addTo( menu ); + editMenu->addAction (a); + tb->addAction (a); actionEditDeleteAll=a; - a = new QAction( tr( "Convert paragraphs to linebreaks" ), QPixmap(), tr( "&Convert Paragraphs" ), ALT + Key_P, this, "editConvertPar" ); - connect( a, SIGNAL( activated() ), this, SLOT( textConvertPar() ) ); - a->addTo( menu ); - actionEditConvertPar=a; - - a = new QAction( tr( "Join all lines of a paragraph" ), QPixmap(), tr( "&Join lines" ), ALT + Key_J, this, "editJoinLines" ); - connect( a, SIGNAL( activated() ), this, SLOT( textJoinLines() ) ); - a->addTo( menu ); - actionEditJoinLines=a; } void TextEditor::setupFormatActions() { - QToolBar *tb = new QToolBar( this ); - tb->setLabel( "Format Actions" ); - QPopupMenu *menu = new QPopupMenu( this ); - menuBar()->insertItem( tr( "&Format" ), menu ); + QToolBar *tb = addToolBar ( tr("Format Actions" )); + tb->setObjectName ("noteEditorFormatActions"); + QMenu *formatMenu = menuBar()->addMenu ( tr( "F&ormat" )); QAction *a; - a = new QAction( tr( "Toggle font hint for the whole text" ), QPixmap(formatfixedfont_xpm), tr( "&Font hint" ), ALT + Key_I, this, "fontHint" ); + a = new QAction( QPixmap(iconPath+"formatfixedfont.png"), tr( "&Font hint" ), Qt::ALT + Qt::Key_I, this, "fontHint" ); + a->setStatusTip (tr( "Toggle font hint for the whole text","Status tip for note menu" ) ); a->setToggleAction (true); - a->setOn (settings.readBoolEntry ("/vym/noteeditor/fonts/useFixedByDefault",false) ); + a->setOn (settings.value("/noteeditor/fonts/useFixedByDefault",false).toBool() ); connect( a, SIGNAL( activated() ), this, SLOT( toggleFonthint() ) ); - a->addTo( menu ); - a->addTo( tb ); + formatMenu->addAction (a); + tb->addAction (a); actionFormatUseFixedFont=a; - menu->insertSeparator(); - - comboFont = new QComboBox( true, tb ); - QFontDatabase db; - comboFont->insertStringList( db.families() ); + comboFont = new QComboBox; + tb->addWidget (comboFont); + QFontDatabase fontDB; + comboFont->insertStringList( fontDB.families() ); connect( comboFont, SIGNAL( activated( const QString & ) ), this, SLOT( textFamily( const QString & ) ) ); - comboFont->lineEdit()->setText( QApplication::font().family() ); - - comboSize = new QComboBox( true, tb ); - QValueList sizes = db.standardSizes(); - QValueList::Iterator it = sizes.begin(); - for ( ; it != sizes.end(); ++it ) - comboSize->insertItem( QString::number( *it ) ); + comboFont->addItem( QApplication::font().family() ); + comboSize = new QComboBox; + tb->addWidget (comboSize); + QList sizes=fontDB.standardSizes(); + QList::iterator i = sizes.begin(); + while (i != sizes.end()) + { + ++i; // increment i before using it + comboSize->insertItem ( QString::number(*i)); + } connect( comboSize, SIGNAL( activated( const QString & ) ), this, SLOT( textSize( const QString & ) ) ); - comboSize->lineEdit()->setText( QString::number( QApplication::font().pointSize() ) ); + comboSize->addItem ( QString::number( QApplication::font().pointSize() ) ); - menu->insertSeparator(); + formatMenu->addSeparator(); QPixmap pix( 16, 16 ); pix.fill( e->color()); - actionTextColor = new QAction( pix, tr( "&Color..." ), 0, this, "textColor" ); - connect( actionTextColor, SIGNAL( activated() ), this, SLOT( textColor() ) ); - actionTextColor->addTo( tb ); - actionTextColor->addTo( menu ); + a = new QAction( pix, tr( "&Color..." ), this); + formatMenu->addAction (a); + tb->addAction (a); + connect( a, SIGNAL( activated() ), this, SLOT( textColor() ) ); + actionTextColor=a; - actionTextBold = new QAction( QPixmap (formattextbold_xpm), tr( "&Bold" ), CTRL + Key_B, this, "textBold" ); - connect( actionTextBold, SIGNAL( activated() ), this, SLOT( textBold() ) ); - actionTextBold->addTo( tb ); - actionTextBold->addTo( menu ); - actionTextBold->setToggleAction( true ); - actionTextItalic = new QAction( QPixmap(formattextitalic_xpm ), tr( "&Italic" ), CTRL + Key_I, this, "textItalic" ); - connect( actionTextItalic, SIGNAL( activated() ), this, SLOT( textItalic() ) ); - actionTextItalic->addTo( tb ); - actionTextItalic->addTo( menu ); - actionTextItalic->setToggleAction( true ); - actionTextUnderline = new QAction( QPixmap (formattextunder_xpm ), tr( "&Underline" ), CTRL + Key_U, this, "textUnderline" ); - connect( actionTextUnderline, SIGNAL( activated() ), this, SLOT( textUnderline() ) ); - actionTextUnderline->addTo( tb ); - actionTextUnderline->addTo( menu ); - actionTextUnderline->setToggleAction( true ); - menu->insertSeparator(); + a = new QAction( QPixmap (iconPath+"text_bold.png"), tr( "&Bold" ), this); + a->setShortcut(Qt::CTRL + Qt::Key_B ); + connect( a, SIGNAL( activated() ), this, SLOT( textBold() ) ); + tb->addAction (a); + formatMenu->addAction (a); + a->setToggleAction( true ); + actionTextBold=a; + + a = new QAction( QPixmap(iconPath+"text_italic.png"), tr( "&Italic" ), this); + a->setShortcut(Qt::CTRL + Qt::Key_I); + connect( a, SIGNAL( activated() ), this, SLOT( textItalic() ) ); + tb->addAction (a); + formatMenu->addAction (a); + a->setToggleAction( true ); + actionTextItalic=a; + + a = new QAction( QPixmap (iconPath+"text_under.png"), tr( "&Underline" ), this); + a->setShortcut(Qt::CTRL + Qt::Key_U ); + connect( a, SIGNAL( activated() ), this, SLOT( textUnderline() ) ); + tb->addAction (a); + formatMenu->addAction (a); + a->setToggleAction( true ); + actionTextUnderline=a; + formatMenu->addSeparator(); + QActionGroup *grp2 = new QActionGroup( this ); + grp2->setExclusive(true); + a = new QAction( QPixmap (iconPath+"text_sub.png"), tr( "Subs&cript" ),grp2 ); + a->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_B ); + a->setToggleAction( true ); + tb->addAction (a); + formatMenu->addAction (a); + connect(a, SIGNAL(activated()), this, SLOT(textVAlign())); + actionAlignSubScript=a; + + a = new QAction( QPixmap (iconPath+"text_super.png"), tr( "Su&perscript" ),grp2 ); + a->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_P ); + a->setToggleAction( true ); + tb->addAction (a); + formatMenu->addAction (a); + connect(a, SIGNAL(activated()), this, SLOT(textVAlign())); + actionAlignSuperScript=a; QActionGroup *grp = new QActionGroup( this ); connect( grp, SIGNAL( selected( QAction* ) ), this, SLOT( textAlign( QAction* ) ) ); - actionAlignLeft = new QAction( QPixmap (formattextleft_xpm ), tr( "&Left" ), CTRL + Key_L, grp, "textLeft" ); - actionAlignLeft->setToggleAction( true ); - actionAlignCenter = new QAction( QPixmap (formattextcenter_xpm ), tr( "C&enter" ), CTRL + Key_E, grp, "textCenter" ); - actionAlignCenter->setToggleAction( true ); - actionAlignRight = new QAction( QPixmap (formattextright_xpm ), tr( "&Right" ), CTRL + Key_R, grp, "textRight" ); - actionAlignRight->setToggleAction( true ); - actionAlignJustify = new QAction( QPixmap ( formattextjustify_xpm ), tr( "&Justify" ), CTRL + Key_J, grp, "textjustify" ); - actionAlignJustify->setToggleAction( true ); + formatMenu->addSeparator(); - grp->addTo( tb ); - grp->addTo( menu ); - - connect( e, SIGNAL( currentFontChanged( const QFont & ) ), - this, SLOT( fontChanged( const QFont & ) ) ); - connect( e, SIGNAL( currentColorChanged( const QColor & ) ), - this, SLOT( colorChanged( const QColor & ) ) ); - connect( e, SIGNAL( currentAlignmentChanged( int ) ), - this, SLOT( alignmentChanged( int ) ) ); - + a = new QAction( QPixmap (iconPath+"text_left.png"), tr( "&Left" ),grp ); + a->setShortcut( Qt::CTRL+Qt::Key_L ); + a->setToggleAction( true ); + tb->addAction (a); + formatMenu->addAction (a); + actionAlignLeft=a; + a = new QAction( QPixmap (iconPath+"text_center.png"), tr( "C&enter" ),grp); + a->setShortcut( Qt::CTRL + Qt::Key_E); + a->setToggleAction( true ); + tb->addAction (a); + formatMenu->addAction (a); + actionAlignCenter=a; + a = new QAction( QPixmap (iconPath+"text_right.png" ), tr( "&Right" ), grp); + a->setShortcut(Qt::CTRL + Qt::Key_R ); + a->setToggleAction( true ); + tb->addAction (a); + formatMenu->addAction (a); + actionAlignRight=a; + a = new QAction( QPixmap ( iconPath+"text_block.png"), tr( "&Justify" ), grp ); + a->setShortcut(Qt::CTRL + Qt::Key_J ); + a->setToggleAction( true ); + tb->addAction (a); + formatMenu->addAction (a); + actionAlignJustify=a; } void TextEditor::setupSettingsActions() { - QPopupMenu *menu = new QPopupMenu( this ); - menuBar()->insertItem( tr( "&Settings" ), menu ); + QMenu *settingsMenu = menuBar()->addMenu ( tr( "&Settings" )); QAction *a; - a = new QAction( tr( "Set fixed font" ), QPixmap(), tr( "Set &fixed font" ), 0, this, "setFixedFont" ); + a = new QAction(tr( "Set &fixed font" ), this); + a->setStatusTip ( tr( "Set fixed font","Status tip for note menu" )); connect( a, SIGNAL( activated() ), this, SLOT( setFixedFont() ) ); - a->addTo( menu ); + settingsMenu->addAction (a); actionSettingsFixedFont=a; - a = new QAction( tr( "Set variable font" ), QPixmap(), tr( "Set &variable font" ), 0, this, "setvariableFont" ); + a = new QAction(tr( "Set &variable font" ), this); + a->setStatusTip ( tr( "Set variable font","Status tip for note menu" ) ); connect( a, SIGNAL( activated() ), this, SLOT( setVarFont() ) ); - a->addTo( menu ); + settingsMenu->addAction (a); actionSettingsVarFont=a; - a = new QAction( tr( "Used fixed font by default" ), QPixmap(), tr( "&fixed font is default" ), 0, this, "fonthintDefault" ); + a = new QAction(tr( "&fixed font is default" ), this); + a->setStatusTip (tr( "Used fixed font by default","Status tip for note menu" ) ); a->setToggleAction (true); // set state later in constructor... - a->addTo( menu ); + settingsMenu->addAction (a); actionSettingsFonthintDefault=a; } @@ -426,9 +454,9 @@ { if (state!=inactiveEditor) { - if (e->length()) + if (!isEmpty()) { - QMessageBox mb( "VYM - Note Editor", + QMessageBox mb( vymName + " - " +tr("Note Editor"), "Loading will overwrite the existing note", QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, @@ -443,8 +471,12 @@ } // Load note QFileDialog *fd=new QFileDialog( this); - fd->addFilter ("ASCII texts (*.txt)"); - fd->addFilter ("VYM notes (*.html)"); + QStringList types; + types<< "VYM notes (*.html)" << + "ASCII texts (*.txt)" << + "All filed (*)"; + fd->setFilters (types); + fd->setDirectory (QDir().current()); fd->show(); QString fn; if ( fd->exec() == QDialog::Accepted ) @@ -453,7 +485,7 @@ if ( !fn.isEmpty() ) { QFile f( fn ); - if ( !f.open( IO_ReadOnly ) ) + if ( !f.open( QIODevice::ReadOnly ) ) return; QTextStream ts( &f ); @@ -465,56 +497,51 @@ void TextEditor::closeEvent( QCloseEvent* ce ) { - if ( !e->isModified() ) - { - ce->accept(); // TextEditor can be reopened with show() - return; - } + ce->accept(); // TextEditor can be reopened with show() + showwithmain=false; + hide(); + emit (windowClosed() ); + return; } QString TextEditor::getText() { - return e->text(); + if (e->toPlainText().isEmpty()) + return ""; + else + return e->text(); } void TextEditor::editorChanged() { - // received, when QTextEdit::text() has changed - EditorState oldstate=state; - if (isEmpty()) state=emptyEditor; else state=filledEditor; - if (state != oldstate) - { if (state==emptyEditor) - e->setPaper (emptyPaper); + setState (emptyEditor); else - e->setPaper (filledPaper); - } + setState (filledEditor); // SLOT is LinkableMapObj, which will update systemFlag - emit (textHasChanged() ); + if (!blockChangedSignal) emit (textHasChanged() ); } void TextEditor::setText(QString t) { - if ( !QStyleSheet::mightBeRichText( t ) ) - t = QStyleSheet::convertFromPlainText( t, QStyleSheetItem::WhiteSpaceNormal ); + blockChangedSignal=true; e->setReadOnly(false); e->setText(t); - editorChanged(); //not called automagically - enableActions(); + blockChangedSignal=false; } void TextEditor::setInactive() { + state=inactiveEditor; setText(""); - state=inactiveEditor; - e->setPaper (inactivePaper); + setState (inactiveEditor); e->setReadOnly (true); disableActions(); @@ -536,14 +563,12 @@ QFile file (fn); if (file.exists()) { - QMessageBox mb( "VYM", - tr("The file ") + fn + - tr(" exists already. " - "Do you want to overwrite it?"), + QMessageBox mb( vymName, + tr("The file %1\nexists already.\nDo you want to overwrite it?","dialog 'save note as'").arg(fn), QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::Cancel | QMessageBox::Escape, - QMessageBox::NoButton ); + Qt::NoButton ); mb.setButtonText( QMessageBox::Yes, tr("Overwrite") ); mb.setButtonText( QMessageBox::No, tr("Cancel")); switch( mb.exec() ) { @@ -563,7 +588,7 @@ return; } } - statusBar()->message(tr( "Couldn't export note ") + fn, statusbarTime ); + statusBar()->message(tr( "Couldn't export note ","dialog 'save note as'") + fn, statusbarTime ); } @@ -577,7 +602,7 @@ QString text = e->text(); QFile f( filename ); - if ( !f.open( IO_WriteOnly ) ) + if ( !f.open( QIODevice::WriteOnly ) ) { statusBar()->message( QString("Could not write to %1").arg(filename), statusbarTime ); @@ -593,104 +618,19 @@ statusBar()->message( QString( "Note exported as %1" ).arg( filename ), statusbarTime ); } -void TextEditor::textConvertPar() -{ - // In X11 a copy&paste generates paragraphs, - // which is not always wanted - // This function replaces paragraphs by linebreaks. - int parFrom, parTo, indFrom, indTo; - e->getSelection (&parFrom,&indFrom,&parTo,&indTo); - QString t; - if (parFrom>-1) - t=e->selectedText(); - else - t=e->text(); - - QRegExp re(""); - re.setMinimal(true); - t.replace (re,""); - t.replace ("

","
"); - if (parFrom>-1) - { - e->setCursorPosition (parFrom,indFrom); - e->cut(); - // Tried to simply insert the changed text with - // e->insert (t,(uint)(QTextEdit::RemoveSelected)); - // but then the html would be quoted. So I use the ugly - // way: insert a marker, replace it in whole text of QTextEdit - QString marker="R3PlAcEMeL4teR!"; - e->insert (marker); - e->setText (e->text().replace(marker,t)); - } else - e->setText(t); -} - -void TextEditor::textJoinLines() -{ - int parFrom, parTo, indFrom, indTo; - e->getSelection (&parFrom,&indFrom,&parTo,&indTo); - QString t; - if (parFrom>-1) - t=e->selectedText(); - else - t=e->text(); - // In addition to textConvertPar it is sometimes - // useful to join all lines of a paragraph - QRegExp re("

\n+

(?!

)"); - re.setMinimal(true); - t.replace (re," "); - - // Above we may have introduced new " " at beginning of a - // paragraph - remove it. - re.setPattern("

"); - t.replace (re,"

"); - if (parFrom>-1) - { - e->setCursorPosition (parFrom,indFrom); - e->cut(); - // Tried to simply insert the changed text with - // e->insert (t,(uint)(QTextEdit::RemoveSelected)); - // but then the html would be quoted. So I use the ugly - // way: insert a marker, replace it in whole text of QTextEdit - QString marker="R3PlAcEMeL4teR!"; - e->insert (marker); - e->setText (e->text().replace(marker,t)); - } else - e->setText(t); -} - -QString TextEditor::textConvertToASCII(const QString &t) -{ - QString r=t; - - // convert all "" to "\n" - QRegExp re(""); - re.setMinimal(true); - r.replace (re,"\n"); - - // convert all "

" to "\n" - re.setPattern ("/p"); - r.replace (re,"\n"); - - // remove all remaining tags - re.setPattern ("<.*>"); - r.replace (re,""); - - // convert "&", "<" and ">" - re.setPattern (">"); - r.replace (re,">"); - re.setPattern ("<"); - r.replace (re,"<"); - re.setPattern ("&"); - r.replace (re,"&"); - return r; -} - void TextEditor::textExportAsASCII() { - QString text = textConvertToASCII( e->text()); - QString fn = QFileDialog::getSaveFileName( QString::null, "VYM Note (ASCII) (*.txt);;All files (*)", - this,"export note dialog",tr("Export Note to single file (ASCII)") ); + QString text = NoteObj (e->text()).getNoteASCII(); + QString fn,s; + if (!filenameHint.isEmpty()) + { + if (!filenameHint.contains (".txt")) + s=filenameHint+".txt"; + else + s=filenameHint; + } else + s=QString::null; + fn = QFileDialog::getSaveFileName( s, "VYM Note (ASCII) (*.txt);;All files (*)", this,"export note dialog",tr("Export Note to single file (ASCII)") ); int ret=-1; if ( !fn.isEmpty() ) @@ -698,14 +638,12 @@ QFile file (fn); if (file.exists()) { - QMessageBox mb( "VYM", - tr("The file ") + fn + - tr(" exists already. " - "Do you want to overwrite it?"), + QMessageBox mb( vymName, + tr("The file %1\nexists already.\nDo you want to overwrite it?","dialog 'save note as'").arg(fn), QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::Cancel | QMessageBox::Escape, - QMessageBox::NoButton ); + Qt::NoButton ); mb.setButtonText( QMessageBox::Yes, tr("Overwrite") ); mb.setButtonText( QMessageBox::No, tr("Cancel")); ret=mb.exec(); @@ -714,7 +652,7 @@ return; // save - if ( !file.open( IO_WriteOnly ) ) + if ( !file.open( QIODevice::WriteOnly ) ) statusBar()->message( QString("Could not write to %1").arg(filename), statusbarTime ); else @@ -731,41 +669,16 @@ void TextEditor::textPrint() { - printer->setFullPage(TRUE); - if ( printer->setup( this ) ) - { - QPainter p( printer ); - // Check that there is a valid device to print to. - if ( !p.device() ) return; - QPaintDeviceMetrics metrics( p.device() ); - int dpiy = metrics.logicalDpiY(); - int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins - QRect body( margin, margin, metrics.width() - 2*margin, metrics.height() - 2*margin ); - QFont font( e->currentFont() ); - font.setPointSize( 10 ); // we define 10pt to be a nice base size for printing - QSimpleRichText richText( e->text(), font, - e->context(), - e->styleSheet(), - e->mimeSourceFactory(), - body.height() ); - richText.setWidth( &p, body.width() ); - QRect view( body ); - int page = 1; - do - { - richText.draw( &p, body.left(), body.top(), view, colorGroup() ); - view.moveBy( 0, body.height() ); - p.translate( 0 , -body.height() ); - p.setFont( font ); - p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ), - view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) ); - if ( view.top() >= richText.height() ) - break; - printer->newPage(); - page++; - } while (TRUE); - } + QTextDocument *document = e->document(); + QPrinter printer; + + QPrintDialog *dialog = new QPrintDialog(&printer, this); + dialog->setWindowTitle(tr("Print Note")); + if (dialog->exec() != QDialog::Accepted) + return; + + document->print(&printer); } void TextEditor::textEditUndo() @@ -775,12 +688,12 @@ void TextEditor::toggleFonthint() { setUpdatesEnabled (false); - e->selectAll (true); + e->selectAll (); if (!actionFormatUseFixedFont->isOn() ) e->setCurrentFont (varFont); else e->setCurrentFont (fixedFont); - e->selectAll (false); + e->selectAll (); setUpdatesEnabled (true); repaint(); } @@ -834,30 +747,46 @@ void TextEditor::textColor() { QColor col = QColorDialog::getColor( e->color(), this ); - if ( !col.isValid() ) - return; + if ( !col.isValid() ) return; e->setColor( col ); QPixmap pix( 16, 16 ); - pix.fill( black ); + pix.fill( Qt::black ); actionTextColor->setIconSet( pix ); } void TextEditor::textAlign( QAction *a ) { if ( a == actionAlignLeft ) - e->setAlignment( AlignLeft ); + e->setAlignment( Qt::AlignLeft ); else if ( a == actionAlignCenter ) - e->setAlignment( AlignHCenter ); + e->setAlignment( Qt::AlignHCenter ); else if ( a == actionAlignRight ) - e->setAlignment( AlignRight ); + e->setAlignment( Qt::AlignRight ); else if ( a == actionAlignJustify ) - e->setAlignment( AlignJustify ); + e->setAlignment( Qt::AlignJustify ); } +void TextEditor::textVAlign() +{ + QTextCharFormat format; + + if ( sender() == actionAlignSuperScript && actionAlignSuperScript->isOn()) { + format.setVerticalAlignment(QTextCharFormat::AlignSuperScript); + } else if (sender() == actionAlignSubScript && actionAlignSubScript->isOn()) { + format.setVerticalAlignment(QTextCharFormat::AlignSubScript); + } else { + format.setVerticalAlignment(QTextCharFormat::AlignNormal); + } + e->mergeCurrentCharFormat(format); +} + + void TextEditor::fontChanged( const QFont &f ) { - comboFont->lineEdit()->setText( f.family() ); - comboSize->lineEdit()->setText( QString::number( f.pointSize() ) ); + int i=comboFont->findText(f.family()); + if (i>=0) comboFont->setCurrentIndex (i); + i=comboSize->findText(QString::number(f.pointSize())); + if (i>=0) comboSize->setCurrentIndex(i); actionTextBold->setOn( f.bold() ); actionTextItalic->setOn( f.italic() ); actionTextUnderline->setOn( f.underline() ); @@ -870,16 +799,40 @@ actionTextColor->setIconSet( pix ); } +void TextEditor::formatChanged( const QTextCharFormat &f ) +{ + fontChanged(f.font()); + colorChanged(f.foreground().color()); + alignmentChanged(e->alignment()); + verticalAlignmentChanged (f.verticalAlignment()); +} + void TextEditor::alignmentChanged( int a ) { - if ( ( a == AlignAuto ) || ( a & AlignLeft )) - actionAlignLeft->setOn( true ); - else if ( ( a & AlignHCenter ) ) - actionAlignCenter->setOn( true ); - else if ( ( a & AlignRight ) ) - actionAlignRight->setOn( true ); - else if ( ( a & AlignJustify ) ) - actionAlignJustify->setOn( true ); + if ( ( a == Qt::AlignLeft ) || ( a & Qt::AlignLeft )) + actionAlignLeft->setOn( true ); + else if ( ( a & Qt::AlignHCenter ) ) + actionAlignCenter->setOn( true ); + else if ( ( a & Qt::AlignRight ) ) + actionAlignRight->setOn( true ); + else if ( ( a & Qt::AlignJustify ) ) + actionAlignJustify->setOn( true ); +} + +void TextEditor::verticalAlignmentChanged(QTextCharFormat::VerticalAlignment a) +{ + actionAlignSubScript->setOn (false); + actionAlignSuperScript->setOn (false); + switch (a) + { + case QTextCharFormat::AlignSuperScript: + actionAlignSuperScript->setOn (true); + break; + case QTextCharFormat::AlignSubScript: + actionAlignSubScript->setOn (true); + break; + default: ; + } } @@ -896,8 +849,6 @@ actionEditCut->setEnabled(true); actionEditPaste->setEnabled(true); actionEditDeleteAll->setEnabled(true); - actionEditConvertPar->setEnabled(true); - actionEditJoinLines->setEnabled(true); actionFormatUseFixedFont->setEnabled(true); } @@ -913,9 +864,23 @@ actionEditCut->setEnabled(false); actionEditPaste->setEnabled(false); actionEditDeleteAll->setEnabled(false); - actionEditConvertPar->setEnabled(false); - actionEditJoinLines->setEnabled(false); actionFormatUseFixedFont->setEnabled(false); } +void TextEditor::setState (EditorState s) +{ + + QPalette p=palette(); + QColor c; + switch (s) + { + case emptyEditor: c=QColor (150,150,150); break; + case filledEditor: c=QColor (255,255,255); break; + case inactiveEditor: c=QColor (0,0,0); + } + p.setColor(QPalette::Active, static_cast(9), c); + p.setColor(QPalette::Inactive, static_cast(9), c); + e->setPalette(p); +} +