1 /* emacs: -*- Mode: C; c-style: "bsd"; c-basic-offset: 4; c-recognize-knr-p: nil; -*- */
2 #include "texteditor.h"
5 #include <qstatusbar.h>
6 #include <qmessagebox.h>
8 #include <qapplication.h>
12 #include <qfiledialog.h>
14 #include <qpopupmenu.h>
16 #include <qtextedit.h>
18 #include <qtextstream.h>
19 #include <qpaintdevicemetrics.h>
20 #include <qsettings.h>
21 #include <qfontdialog.h>
22 #include <qmessagebox.h>
23 #include <qcolordialog.h>
25 #include <qlineedit.h>
26 #include <qsimplerichtext.h>
32 #include "icons/fileopen.xpm"
33 #include "icons/filesave.xpm"
34 #include "icons/fileprint.xpm"
35 #include "icons/editundo.xpm"
36 #include "icons/editredo.xpm"
37 #include "icons/editcopy.xpm"
38 #include "icons/editcut.xpm"
39 #include "icons/editpaste.xpm"
40 #include "icons/edittrash.xpm"
41 #include "icons/formatfixedfont.xpm"
42 #include "icons/formattextbold.xpm"
43 #include "icons/formattextitalic.xpm"
44 #include "icons/formattextunder.xpm"
45 #include "icons/formattextleft.xpm"
46 #include "icons/formattextcenter.xpm"
47 #include "icons/formattextright.xpm"
48 #include "icons/formattextjustify.xpm"
49 #include "icons/formattextsub.xpm"
50 #include "icons/formattextsuper.xpm"
52 extern QCanvas* actCanvas;
53 extern int statusbarTime;
54 extern QSettings settings;
56 extern QAction *actionViewToggleNoteEditor;
61 ///////////////////////////////////////////////////////////////////////
62 ///////////////////////////////////////////////////////////////////////
65 TextEditor::TextEditor()
67 printer = new QPrinter( QPrinter::HighResolution );
68 printer->setPrinterName (settings.readEntry("/vym/mainwindow/printerName",printer->printerName()));
70 // Editor (use MyTextEdit to wrap verticalAlignmentChanged to
71 // int argument. see header file)
72 e = new MyTextEdit( this, "editor" );
74 e->setTextFormat(RichText); // default
75 e->setTabStopWidth (20); // unit is pixel
77 connect (e, SIGNAL( textChanged() ), this, SLOT( editorChanged() ) );
78 setCentralWidget( e );
79 statusBar()->message( "Ready", statusbarTime);
80 setCaption("VYM - Note Editor");
86 setupSettingsActions();
89 emptyPaper = QBrush(gray);
90 filledPaper = QBrush(white);
91 inactivePaper= QBrush(black);
95 resize (settings.readNumEntry( "/vym/noteeditor/geometry/width", 450),
96 settings.readNumEntry( "/vym/noteeditor/geometry/height",600));
97 move (settings.readNumEntry( "/vym/noteeditor/geometry/posX", 150),
98 settings.readNumEntry( "/vym/noteeditor/geometry/posY", 50));
100 if (settings.readEntry( "/vym/noteeditor/showWithMain","yes") =="yes")
101 setShowWithMain(true);
103 setShowWithMain(false);
105 varFont.fromString( settings.readEntry
106 ("/vym/noteeditor/fonts/varFont",
107 "Nimbus Sans l,14,-1,5,48,0,0,0,0,0")
109 fixedFont.fromString (settings.readEntry (
110 "/vym/noteeditor/fonts/fixedFont",
111 "Courier,14,-1,5,48,0,0,0,1,0")
113 QString s=settings.readEntry ("/vym/noteeditor/fonts/fonthintDefault","variable");
116 actionSettingsFonthintDefault->setOn (true);
117 e->setCurrentFont (fixedFont);
120 actionSettingsFonthintDefault->setOn (false);
121 e->setCurrentFont (varFont);
125 // Save settings in vymrc
126 settings.writeEntry("/vym/mainwindow/printerName",printer->printerName());
130 TextEditor::~TextEditor()
132 if (printer) delete printer;
134 settings.writeEntry( "/vym/noteeditor/geometry/width", width() );
135 settings.writeEntry( "/vym/noteeditor/geometry/height", height() );
136 settings.writeEntry( "/vym/noteeditor/geometry/posX", pos().x() );
137 settings.writeEntry( "/vym/noteeditor/geometry/posY", pos().y() );
140 settings.writeEntry( "/vym/noteeditor/showWithMain","yes");
142 settings.writeEntry( "/vym/noteeditor/showWithMain","no");
145 if (actionSettingsFonthintDefault->isOn() )
149 settings.writeEntry( "/vym/noteeditor/fonts/fonthintDefault",s );
150 settings.writeEntry ("/vym/noteeditor/fonts/varFont",
151 varFont.toString() );
152 settings.writeEntry ("/vym/noteeditor/fonts/fixedFont",
153 fixedFont.toString() );
156 bool TextEditor::isEmpty()
158 if (e->text().length())
164 void TextEditor::setShowWithMain(bool v)
169 bool TextEditor::showWithMain()
174 void TextEditor::setFontHint (const QString &fh)
177 actionFormatUseFixedFont->setOn (true);
179 actionFormatUseFixedFont->setOn (false);
183 QString TextEditor::getFontHint()
185 if (actionFormatUseFixedFont->isOn())
191 QString TextEditor::getFontHintDefault()
193 if (actionSettingsFonthintDefault->isOn())
199 void TextEditor::setFilename(const QString &fn)
201 if (state==filledEditor)
205 statusBar()->message( "No filename available for this note.", statusbarTime );
210 statusBar()->message( QString( "Current filename is %1" ).arg( filename ), statusbarTime );
214 QString TextEditor::getFilename()
219 void TextEditor::setFilenameHint(const QString &fnh)
224 QString TextEditor::getFilenameHint()
229 bool TextEditor::findText(const QString &t, const bool &cs)
231 bool wo=false; // word matches
232 if (e->find (t, cs, wo, true, 0, 0 ))
238 void TextEditor::setupFileActions()
240 QToolBar *tb = new QToolBar( this );
241 tb->setLabel( "File Actions" );
242 QPopupMenu *menu = new QPopupMenu( this );
243 menuBar()->insertItem( tr( "&File" ), menu );
246 a = new QAction( tr( "Import" ), QPixmap( fileopen_xpm), tr( "&Import..." ), CTRL + Key_O, this, "fileImport" );
247 connect( a, SIGNAL( activated() ), this, SLOT( textLoad() ) );
248 a->setEnabled(false);
253 menu->insertSeparator();
254 a = new QAction( tr( "Export Note (HTML)" ), QPixmap( filesave_xpm ), tr( "&Export..." ), CTRL + Key_S, this, "fileSave" );
255 connect( a, SIGNAL( activated() ), this, SLOT( textSave() ) );
260 a = new QAction( tr( "Export Note As (HTML) " ), QPixmap(), tr( "Export &As... (HTML)" ), 0, this, "exportHTML" );
261 connect( a, SIGNAL( activated() ), this, SLOT( textSaveAs() ) );
265 a = new QAction( tr( "Export Note As (ASCII) " ), QPixmap(), tr( "Export &As...(ASCII)" ), ALT + Key_X, this, "exportASCII" );
266 connect( a, SIGNAL( activated() ), this, SLOT( textExportAsASCII() ) );
270 menu->insertSeparator();
271 a = new QAction( tr( "Print Note" ), QPixmap( fileprint_xpm ), tr( "&Print..." ), CTRL + Key_P, this, "filePrint" );
272 connect( a, SIGNAL( activated() ), this, SLOT( textPrint() ) );
278 void TextEditor::setupEditActions()
280 QToolBar *tb = new QToolBar( this );
281 tb->setLabel( "Edit Actions" );
282 QPopupMenu *menu = new QPopupMenu( this );
283 menuBar()->insertItem( tr( "&Edit" ), menu );
286 a = new QAction( tr( "Undo" ), QPixmap(editundo_xpm), tr( "&Undo" ), CTRL + Key_Z, this, "undoEvent" );
287 connect( a, SIGNAL( activated() ), e, SLOT( undo() ) );
292 a = new QAction( tr( "Redo" ), QPixmap( editredo_xpm ), tr( "&Redo" ), CTRL + Key_Y, this, "editRedo" );
293 connect( a, SIGNAL( activated() ), e, SLOT( redo() ) );
298 menu->insertSeparator();
299 a = new QAction( tr( "Select and copy all" ), QPixmap(), tr( "Select and copy &all" ), CTRL + Key_A, this, "editcopyall" );
300 connect( a, SIGNAL( activated() ), this, SLOT( editCopyAll() ) );
303 menu->insertSeparator();
304 a = new QAction( tr( "Copy" ), QPixmap( editcopy_xpm ), tr( "&Copy" ), CTRL + Key_C, this, "editCopy" );
305 connect( a, SIGNAL( activated() ), e, SLOT( copy() ) );
310 a = new QAction( tr( "Cut" ), QPixmap( editcut_xpm ), tr( "Cu&t" ), CTRL + Key_X, this, "editCut" );
311 connect( a, SIGNAL( activated() ), e, SLOT( cut() ) );
316 a = new QAction( tr( "Paste" ), QPixmap( editpaste_xpm ), tr( "&Paste" ), CTRL + Key_V, this, "editPaste" );
317 connect( a, SIGNAL( activated() ), e, SLOT( paste() ) );
322 a = new QAction( tr( "Delete all" ), QPixmap( edittrash_xpm ), tr( "&Delete All" ), 0, this, "editDeleteAll" );
323 connect( a, SIGNAL( activated() ), e, SLOT( clear() ) );
326 actionEditDeleteAll=a;
328 a = new QAction( tr( "Convert paragraphs to linebreaks" ), QPixmap(), tr( "&Convert Paragraphs" ), ALT + Key_P, this, "editConvertPar" );
329 connect( a, SIGNAL( activated() ), this, SLOT( textConvertPar() ) );
331 actionEditConvertPar=a;
333 a = new QAction( tr( "Join all lines of a paragraph" ), QPixmap(), tr( "&Join lines" ), ALT + Key_J, this, "editJoinLines" );
334 connect( a, SIGNAL( activated() ), this, SLOT( textJoinLines() ) );
336 actionEditJoinLines=a;
339 void TextEditor::setupFormatActions()
341 QToolBar *tb = new QToolBar( this );
342 tb->setLabel( "Format Actions" );
343 QPopupMenu *menu = new QPopupMenu( this );
344 menuBar()->insertItem( tr( "&Format" ), menu );
348 a = new QAction( tr( "Toggle font hint for the whole text" ), QPixmap(formatfixedfont_xpm), tr( "&Font hint" ), ALT + Key_I, this, "fontHint" );
349 a->setToggleAction (true);
350 a->setOn (settings.readBoolEntry ("/vym/noteeditor/fonts/useFixedByDefault",false) );
351 connect( a, SIGNAL( activated() ), this, SLOT( toggleFonthint() ) );
354 actionFormatUseFixedFont=a;
356 menu->insertSeparator();
358 comboFont = new QComboBox( true, tb );
360 comboFont->insertStringList( db.families() );
361 connect( comboFont, SIGNAL( activated( const QString & ) ),
362 this, SLOT( textFamily( const QString & ) ) );
363 comboFont->lineEdit()->setText( QApplication::font().family() );
365 comboSize = new QComboBox( true, tb );
366 QValueList<int> sizes = db.standardSizes();
367 QValueList<int>::Iterator it = sizes.begin();
368 for ( ; it != sizes.end(); ++it )
369 comboSize->insertItem( QString::number( *it ) );
370 connect( comboSize, SIGNAL( activated( const QString & ) ),
371 this, SLOT( textSize( const QString & ) ) );
372 comboSize->lineEdit()->setText( QString::number( QApplication::font().pointSize() ) );
374 menu->insertSeparator();
376 QPixmap pix( 16, 16 );
377 pix.fill( e->color());
378 actionTextColor = new QAction( pix, tr( "&Color..." ), 0, this, "textColor" );
379 connect( actionTextColor, SIGNAL( activated() ), this, SLOT( textColor() ) );
380 actionTextColor->addTo( tb );
381 actionTextColor->addTo( menu );
383 actionTextBold = new QAction( QPixmap (formattextbold_xpm), tr( "&Bold" ), CTRL + Key_B, this, "textBold" );
384 connect( actionTextBold, SIGNAL( activated() ), this, SLOT( textBold() ) );
385 actionTextBold->addTo( tb );
386 actionTextBold->addTo( menu );
387 actionTextBold->setToggleAction( true );
388 actionTextItalic = new QAction( QPixmap(formattextitalic_xpm ), tr( "&Italic" ), CTRL + Key_I, this, "textItalic" );
389 connect( actionTextItalic, SIGNAL( activated() ), this, SLOT( textItalic() ) );
390 actionTextItalic->addTo( tb );
391 actionTextItalic->addTo( menu );
392 actionTextItalic->setToggleAction( true );
393 actionTextUnderline = new QAction( QPixmap (formattextunder_xpm ), tr( "&Underline" ), CTRL + Key_U, this, "textUnderline" );
394 connect( actionTextUnderline, SIGNAL( activated() ), this, SLOT( textUnderline() ) );
395 actionTextUnderline->addTo( tb );
396 actionTextUnderline->addTo( menu );
397 actionTextUnderline->setToggleAction( true );
398 menu->insertSeparator();
400 QActionGroup *grp = new QActionGroup( this );
401 connect( grp, SIGNAL( selected( QAction* ) ), this, SLOT( textAlign( QAction* ) ) );
403 actionAlignLeft = new QAction( QPixmap (formattextleft_xpm ), tr( "&Left" ), CTRL + Key_L, grp, "textLeft" );
404 actionAlignLeft->setToggleAction( true );
405 actionAlignCenter = new QAction( QPixmap (formattextcenter_xpm ), tr( "C&enter" ), CTRL + Key_E, grp, "textCenter" );
406 actionAlignCenter->setToggleAction( true );
407 actionAlignRight = new QAction( QPixmap (formattextright_xpm ), tr( "&Right" ), CTRL + Key_R, grp, "textRight" );
408 actionAlignRight->setToggleAction( true );
409 actionAlignJustify = new QAction( QPixmap ( formattextjustify_xpm ), tr( "&Justify" ), CTRL + Key_J, grp, "textjustify" );
410 actionAlignJustify->setToggleAction( true );
415 QActionGroup *grp2 = new QActionGroup( this );
416 grp2->setExclusive(false);
417 actionAlignSubScript = new QAction( QPixmap (formattextsub_xpm ), tr( "Subs&cript" ), CTRL + SHIFT + Key_B, grp2, "textSubscript" );
419 actionAlignSubScript->setToggleAction( true );
420 connect(actionAlignSubScript, SIGNAL(activated()), this, SLOT(textVAlign()));
422 actionAlignSuperScript = new QAction( QPixmap (formattextsuper_xpm ), tr( "Su&perscript" ), CTRL + SHIFT + Key_P, grp2, "textSuperscript" );
424 actionAlignSuperScript->setToggleAction( true );
425 connect(actionAlignSuperScript, SIGNAL(activated()), this, SLOT(textVAlign()));
427 menu->insertSeparator();
432 connect( e, SIGNAL( currentFontChanged( const QFont & ) ),
433 this, SLOT( fontChanged( const QFont & ) ) );
434 connect( e, SIGNAL( currentColorChanged( const QColor & ) ),
435 this, SLOT( colorChanged( const QColor & ) ) );
436 connect( e, SIGNAL( currentAlignmentChanged( int ) ),
437 this, SLOT( alignmentChanged( int ) ) );
438 connect( e, SIGNAL( currentVerticalAlignmentChanged(int)),
439 this, SLOT( verticalAlignmentChanged(int)));
443 void TextEditor::setupSettingsActions()
445 QPopupMenu *menu = new QPopupMenu( this );
446 menuBar()->insertItem( tr( "&Settings" ), menu );
449 a = new QAction( tr( "Set fixed font" ), QPixmap(), tr( "Set &fixed font" ), 0, this, "setFixedFont" );
450 connect( a, SIGNAL( activated() ), this, SLOT( setFixedFont() ) );
452 actionSettingsFixedFont=a;
454 a = new QAction( tr( "Set variable font" ), QPixmap(), tr( "Set &variable font" ), 0, this, "setvariableFont" );
455 connect( a, SIGNAL( activated() ), this, SLOT( setVarFont() ) );
457 actionSettingsVarFont=a;
459 a = new QAction( tr( "Used fixed font by default" ), QPixmap(), tr( "&fixed font is default" ), 0, this, "fonthintDefault" );
460 a->setToggleAction (true);
461 // set state later in constructor...
463 actionSettingsFonthintDefault=a;
466 void TextEditor::textLoad()
468 if (state!=inactiveEditor)
472 QMessageBox mb( "VYM - Note Editor",
473 "Loading will overwrite the existing note",
474 QMessageBox::Warning,
475 QMessageBox::Yes | QMessageBox::Default,
478 mb.setButtonText( QMessageBox::Yes, "Load note" );
479 switch( mb.exec() ) {
480 case QMessageBox::Cancel:
486 QFileDialog *fd=new QFileDialog( this);
487 fd->addFilter ("ASCII texts (*.txt)");
488 fd->addFilter ("VYM notes (*.html)");
491 if ( fd->exec() == QDialog::Accepted )
492 fn = fd->selectedFile();
497 if ( !f.open( IO_ReadOnly ) )
500 QTextStream ts( &f );
501 setText( ts.read() );
507 void TextEditor::closeEvent( QCloseEvent* ce )
509 ce->accept(); // TextEditor can be reopened with show()
510 actionViewToggleNoteEditor->setOn (false);
515 QString TextEditor::getText()
520 void TextEditor::editorChanged()
522 // received, when QTextEdit::text() has changed
523 EditorState oldstate=state;
530 if (state==emptyEditor)
531 e->setPaper (emptyPaper);
533 e->setPaper (filledPaper);
534 // SLOT is LinkableMapObj, which will update systemFlag
535 emit (textHasChanged() );
539 void TextEditor::setText(QString t)
541 if ( !QStyleSheet::mightBeRichText( t ) )
542 t = QStyleSheet::convertFromPlainText( t, QStyleSheetItem::WhiteSpaceNormal );
543 e->setReadOnly(false);
545 // editorChanged(); //not called automagically FIXME or is it?
550 void TextEditor::setInactive()
552 state=inactiveEditor;
554 e->setPaper (inactivePaper);
555 e->setReadOnly (true);
560 void TextEditor::editCopyAll()
566 void TextEditor::textSaveAs()
568 QString fn = QFileDialog::getSaveFileName( QString::null, "VYM Note (HTML) (*.html);;All files (*)",
569 this,"export note dialog",tr("Export Note to single file") );
576 QMessageBox mb( "VYM",
577 tr("The file ") + fn +
578 tr(" exists already. "
579 "Do you want to overwrite it?"),
580 QMessageBox::Warning,
581 QMessageBox::Yes | QMessageBox::Default,
582 QMessageBox::Cancel | QMessageBox::Escape,
583 QMessageBox::NoButton );
584 mb.setButtonText( QMessageBox::Yes, tr("Overwrite") );
585 mb.setButtonText( QMessageBox::No, tr("Cancel"));
586 switch( mb.exec() ) {
587 case QMessageBox::Yes:
592 case QMessageBox::Cancel:
603 statusBar()->message(tr( "Couldn't export note ") + fn, statusbarTime );
607 void TextEditor::textSave()
609 if ( filename.isEmpty() )
615 QString text = e->text();
617 if ( !f.open( IO_WriteOnly ) )
619 statusBar()->message( QString("Could not write to %1").arg(filename),
628 e->setModified( FALSE );
630 statusBar()->message( QString( "Note exported as %1" ).arg( filename ), statusbarTime );
633 void TextEditor::textConvertPar()
635 // In X11 a copy&paste generates paragraphs,
636 // which is not always wanted
637 // This function replaces paragraphs by linebreaks.
638 int parFrom, parTo, indFrom, indTo;
639 e->getSelection (&parFrom,&indFrom,&parTo,&indTo);
649 t.replace ("</p>","<br />");
652 e->setCursorPosition (parFrom,indFrom);
654 // Tried to simply insert the changed text with
655 // e->insert (t,(uint)(QTextEdit::RemoveSelected));
656 // but then the html would be quoted. So I use the ugly
657 // way: insert a marker, replace it in whole text of QTextEdit
658 QString marker="R3PlAcEMeL4teR!";
660 e->setText (e->text().replace(marker,t));
665 void TextEditor::textJoinLines()
667 int parFrom, parTo, indFrom, indTo;
668 e->getSelection (&parFrom,&indFrom,&parTo,&indTo);
674 // In addition to textConvertPar it is sometimes
675 // useful to join all lines of a paragraph
676 QRegExp re("</p>\n+<p>(?!</p>)");
680 // Above we may have introduced new " " at beginning of a
681 // paragraph - remove it.
682 re.setPattern("<p> ");
683 t.replace (re,"<p>");
686 e->setCursorPosition (parFrom,indFrom);
688 // Tried to simply insert the changed text with
689 // e->insert (t,(uint)(QTextEdit::RemoveSelected));
690 // but then the html would be quoted. So I use the ugly
691 // way: insert a marker, replace it in whole text of QTextEdit
692 QString marker="R3PlAcEMeL4teR!";
694 e->setText (e->text().replace(marker,t));
699 QString textConvertToASCII(const QString &t)
703 // convert all "<br*>" to "\n"
704 QRegExp re("<br.*>");
708 // convert all "<p>" to "\n"
709 re.setPattern ("<p>");
712 // remove all remaining tags
713 re.setPattern ("<.*>");
716 // convert "&", "<" and ">"
717 re.setPattern (">");
719 re.setPattern ("<");
721 re.setPattern ("&");
723 re.setPattern (""");
728 void TextEditor::textExportAsASCII()
730 QString text = textConvertToASCII( e->text());
732 if (!filenameHint.isEmpty())
734 if (!filenameHint.contains (".txt"))
735 s=filenameHint+".txt";
740 fn = QFileDialog::getSaveFileName( s, "VYM Note (ASCII) (*.txt);;All files (*)", this,"export note dialog",tr("Export Note to single file (ASCII)") );
748 QMessageBox mb( "VYM",
749 tr("The file ") + fn +
750 tr(" exists already. "
751 "Do you want to overwrite it?"),
752 QMessageBox::Warning,
753 QMessageBox::Yes | QMessageBox::Default,
754 QMessageBox::Cancel | QMessageBox::Escape,
755 QMessageBox::NoButton );
756 mb.setButtonText( QMessageBox::Yes, tr("Overwrite") );
757 mb.setButtonText( QMessageBox::No, tr("Cancel"));
760 if (ret==QMessageBox::Cancel)
764 if ( !file.open( IO_WriteOnly ) )
765 statusBar()->message( QString("Could not write to %1").arg(filename),
769 QTextStream t( &file );
773 statusBar()->message( QString( "Note exported as %1" ).arg( fn ), statusbarTime );
779 void TextEditor::textPrint()
781 printer->setFullPage(TRUE);
782 if ( printer->setup( this ) )
784 QPainter p( printer );
785 // Check that there is a valid device to print to.
786 if ( !p.device() ) return;
787 QPaintDeviceMetrics metrics( p.device() );
788 int dpiy = metrics.logicalDpiY();
789 int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins
790 QRect body( margin, margin, metrics.width() - 2*margin, metrics.height() - 2*margin );
791 QFont font( e->currentFont() );
792 font.setPointSize( 10 ); // we define 10pt to be a nice base size for printing
794 QSimpleRichText richText( e->text(), font,
797 e->mimeSourceFactory(),
799 richText.setWidth( &p, body.width() );
804 richText.draw( &p, body.left(), body.top(), view, colorGroup() );
805 view.moveBy( 0, body.height() );
806 p.translate( 0 , -body.height() );
808 p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ),
809 view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) );
810 if ( view.top() >= richText.height() )
818 void TextEditor::textEditUndo()
822 void TextEditor::toggleFonthint()
824 setUpdatesEnabled (false);
826 if (!actionFormatUseFixedFont->isOn() )
827 e->setCurrentFont (varFont);
829 e->setCurrentFont (fixedFont);
830 e->selectAll (false);
831 setUpdatesEnabled (true);
835 void TextEditor::setFixedFont()
838 QFont font =QFontDialog::getFont(
839 &ok, fixedFont, this );
841 // font is set to the font the user selected
845 void TextEditor::setVarFont()
848 QFont font =QFontDialog::getFont(
849 &ok, varFont, this );
851 // font is set to the font the user selected
855 void TextEditor::textBold()
857 e->setBold( actionTextBold->isOn() );
860 void TextEditor::textUnderline()
862 e->setUnderline( actionTextUnderline->isOn() );
865 void TextEditor::textItalic()
867 e->setItalic( actionTextItalic->isOn() );
870 void TextEditor::textFamily( const QString &f )
875 void TextEditor::textSize( const QString &p )
877 e->setPointSize( p.toInt() );
881 void TextEditor::textColor()
883 QColor col = QColorDialog::getColor( e->color(), this );
884 if ( !col.isValid() )
887 QPixmap pix( 16, 16 );
889 actionTextColor->setIconSet( pix );
892 void TextEditor::textAlign( QAction *a )
894 if ( a == actionAlignLeft )
895 e->setAlignment( AlignLeft );
896 else if ( a == actionAlignCenter )
897 e->setAlignment( AlignHCenter );
898 else if ( a == actionAlignRight )
899 e->setAlignment( AlignRight );
900 else if ( a == actionAlignJustify )
901 e->setAlignment( AlignJustify );
904 void TextEditor::textVAlign()
906 if ( sender() == actionAlignSuperScript && actionAlignSuperScript->isOn()) {
907 e->setVerticalAlignment( QTextEdit::AlignSuperScript);
908 } else if (sender() == actionAlignSubScript && actionAlignSubScript->isOn()) {
909 e->setVerticalAlignment( QTextEdit::AlignSubScript);
911 e->setVerticalAlignment( QTextEdit::AlignNormal);
916 void TextEditor::fontChanged( const QFont &f )
918 comboFont->lineEdit()->setText( f.family() );
919 comboSize->lineEdit()->setText( QString::number( f.pointSize() ) );
920 actionTextBold->setOn( f.bold() );
921 actionTextItalic->setOn( f.italic() );
922 actionTextUnderline->setOn( f.underline() );
925 void TextEditor::colorChanged( const QColor &c )
927 QPixmap pix( 16, 16 );
929 actionTextColor->setIconSet( pix );
932 void TextEditor::alignmentChanged( int a )
934 if ( ( a == AlignAuto ) || ( a & AlignLeft ))
935 actionAlignLeft->setOn( true );
936 else if ( ( a & AlignHCenter ) )
937 actionAlignCenter->setOn( true );
938 else if ( ( a & AlignRight ) )
939 actionAlignRight->setOn( true );
940 else if ( ( a & AlignJustify ) )
941 actionAlignJustify->setOn( true );
944 void TextEditor::verticalAlignmentChanged(int a)
946 if (a == QTextEdit::AlignSuperScript ) {
947 actionAlignSuperScript->setOn(true);
948 actionAlignSubScript->setOn(false);
949 } else if (a == QTextEdit::AlignSubScript ) {
950 actionAlignSuperScript->setOn(false);
951 actionAlignSubScript->setOn(true);
953 actionAlignSuperScript->setOn(false);
954 actionAlignSubScript->setOn(false);
960 void TextEditor::enableActions()
962 actionFileLoad->setEnabled(true);
963 actionFileSave->setEnabled(true);
964 actionFileSaveAs->setEnabled(true);
965 actionFilePrint->setEnabled(true);
966 actionEditUndo->setEnabled(true);
967 actionEditRedo->setEnabled(true);
968 actionEditCopy->setEnabled(true);
969 actionEditCut->setEnabled(true);
970 actionEditPaste->setEnabled(true);
971 actionEditDeleteAll->setEnabled(true);
972 actionEditConvertPar->setEnabled(true);
973 actionEditJoinLines->setEnabled(true);
974 actionFormatUseFixedFont->setEnabled(true);
977 void TextEditor::disableActions()
979 actionFileLoad->setEnabled(false);
980 actionFileSave->setEnabled(false);
981 actionFileSaveAs->setEnabled(false);
982 actionFilePrint->setEnabled(false);
983 actionEditUndo->setEnabled(false);
984 actionEditRedo->setEnabled(false);
985 actionEditCopy->setEnabled(false);
986 actionEditCut->setEnabled(false);
987 actionEditPaste->setEnabled(false);
988 actionEditDeleteAll->setEnabled(false);
989 actionEditConvertPar->setEnabled(false);
990 actionEditJoinLines->setEnabled(false);
991 actionFormatUseFixedFont->setEnabled(false);