diff --git a/qelectrotech.pro b/qelectrotech.pro index dfe368aff..fb8082c74 100644 --- a/qelectrotech.pro +++ b/qelectrotech.pro @@ -63,11 +63,11 @@ DEPENDPATH += . INCLUDEPATH += sources sources/editor sources/titleblock # Fichiers sources -HEADERS += sources/*.h sources/editor/*.h sources/titleblock/*.h -SOURCES += sources/*.cpp sources/editor/*.cpp sources/titleblock/*.cpp +HEADERS += sources/*.h sources/ui/*.h sources/editor/*.h sources/titleblock/*.h sources/htmleditor/*.h +SOURCES += sources/*.cpp sources/editor/*.cpp sources/titleblock/*.cpp sources/htmleditor/*.cpp # Liste des fichiers qui seront incorpores au binaire en tant que ressources Qt -RESOURCES += qelectrotech.qrc +RESOURCES += qelectrotech.qrc sources/htmleditor/htmleditor.qrc # Liste des ressources Windows RC_FILE = ico/windows_icon/qelectrotech.rc @@ -76,7 +76,12 @@ RC_FILE = ico/windows_icon/qelectrotech.rc TRANSLATIONS += lang/qet_en.ts lang/qet_es.ts lang/qet_fr.ts lang/qet_ru.ts lang/qet_pt.ts lang/qet_cs.ts lang/qet_pl.ts lang/qet_de.ts lang/qet_ro.ts lang/qet_it.ts # Modules Qt utilises par l'application -QT += xml svg network sql +QT += xml svg network sql webkit + +# UI DESIGNER FILES AND GENERATION SOURCES FILES +FORMS = sources/htmleditor/htmleditor.ui sources/htmleditor/inserthtmldialog.ui +UI_SOURCES_DIR = sources/ui/ +UI_HEADERS_DIR = sources/ui/ # Configuration de la compilation CONFIG += debug_and_release warn_on diff --git a/sources/diagramtextitem.cpp b/sources/diagramtextitem.cpp index bce824339..2c1cf042f 100644 --- a/sources/diagramtextitem.cpp +++ b/sources/diagramtextitem.cpp @@ -1,5 +1,5 @@ /* - Copyright 2006-2012 Xavier Guerrin + Copyright 2006-2013 QElectroTech Team This file is part of QElectroTech. QElectroTech is free software: you can redistribute it and/or modify @@ -20,6 +20,7 @@ #include "qet.h" #include "qetapp.h" +#include "htmleditor/htmleditor.h" /** Constructeur @param parent Le QGraphicsItem parent du champ de texte @@ -297,3 +298,29 @@ QPointF DiagramTextItem::pos() const { void DiagramTextItem::setNonFocusable() { setFlag(QGraphicsTextItem::ItemIsFocusable, false); } + + +/** + * @brief DiagramTextItem::setHtmlText + * @param txt + */ +void DiagramTextItem::setHtmlText(const QString &txt) { + setHtml( txt ); +} + +/** + * @brief Edit the text with HtmlEditor + */ +void DiagramTextItem::edit() { + //Open the HtmlEditor + HtmlEditor *editor = new HtmlEditor(); + // connect the in/out + connect(editor, SIGNAL(applyEditText(const QString &)), this, SLOT(setHtmlText(const QString &))); + // load the Html txt + editor->loadHtml( toHtml() ); + // set the minimum controls + editor->setSimpleDisplay(true); + // show + editor->show(); +} + diff --git a/sources/diagramtextitem.h b/sources/diagramtextitem.h index e25c3b661..d85dbeaa5 100644 --- a/sources/diagramtextitem.h +++ b/sources/diagramtextitem.h @@ -53,6 +53,7 @@ class DiagramTextItem : public QGraphicsTextItem { qreal rotationAngle() const; void setRotationAngle(const qreal &); void rotateBy(const qreal &); + void edit(); QPointF mapMovementToScene(const QPointF &) const; QPointF mapMovementFromScene(const QPointF &) const; QPointF mapMovementToParent(const QPointF &) const; @@ -73,6 +74,7 @@ class DiagramTextItem : public QGraphicsTextItem { public slots: void setNonFocusable(); + void setHtmlText(const QString &); private: /// Previous text value diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 15a6d76a3..bc316eb51 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -38,6 +38,8 @@ #include "qetmessagebox.h" #include "qtextorientationspinboxwidget.h" +#include "htmleditor/htmleditor.h" + /** Constructeur @param diagram Schema a afficher ; si diagram vaut 0, un nouveau Diagram est utilise @@ -1133,6 +1135,29 @@ void DiagramView::addText() { is_adding_text = true; } + +/** + To edit the text through the htmlEditor +*/ +void DiagramView::editText() { + if (scene -> isReadOnly()) return; + // Get text to edit + QList texts_to_edit; + foreach (QGraphicsItem *item, scene -> selectedItems()) { + if (ConductorTextItem *cti = qgraphicsitem_cast(item)) { + texts_to_edit << cti; + } else if (IndependentTextItem *iti = qgraphicsitem_cast(item)) { + texts_to_edit << iti; + } else if (ElementTextItem *eti = qgraphicsitem_cast(item)) { + // here... + texts_to_edit << eti; + } + } + // Test if any text existe.. + if (texts_to_edit.isEmpty()) return; + else texts_to_edit.at(0)->edit(); +} + /** Cree un nouveau champ de texte et le place a la position pos en gerant l'annulation ; enfin, le signal textAdded est emis. diff --git a/sources/diagramview.h b/sources/diagramview.h index c05763967..da18124c4 100644 --- a/sources/diagramview.h +++ b/sources/diagramview.h @@ -68,6 +68,7 @@ class DiagramView : public QGraphicsView { bool hasCopiableItems(); bool hasDeletableItems(); void addText(); + void editText(); IndependentTextItem *addDiagramTextAtPos(const QPointF &); protected: diff --git a/sources/htmleditor/highlighter.cpp b/sources/htmleditor/highlighter.cpp new file mode 100644 index 000000000..6d1062941 --- /dev/null +++ b/sources/htmleditor/highlighter.cpp @@ -0,0 +1,269 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Graphics Dojo project on Qt Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 or 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include "highlighter.h" + +#include + +Highlighter::Highlighter(QTextDocument *document) + : QSyntaxHighlighter(document) +{ + m_colors[DocType] = QColor(192, 192, 192); + m_colors[Entity] = QColor(128, 128, 128); + m_colors[Tag] = QColor(136, 18, 128); + m_colors[Comment] = QColor( 35, 110, 37); + m_colors[AttributeName] = QColor(153, 69, 0); + m_colors[AttributeValue] = QColor( 36, 36, 170); +} + +void Highlighter::highlightBlock(const QString &text) +{ + int state = previousBlockState(); + int len = text.length(); + int start = 0; + int pos = 0; + + while (pos < len) { + + switch (state) { + + case State_Text: + default: + + while (pos < len) { + QChar ch = text.at(pos); + if (ch == '<') { + if (text.mid(pos, 4) == "") { + pos += 3; + state = State_Text; + break; + } else { + ++pos; + } + } + setFormat(start, pos - start, m_colors[Comment]); + break; + + case State_DocType: + start = pos; + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + if (ch == '>') { + state = State_Text; + break; + } + } + setFormat(start, pos - start, m_colors[DocType]); + break; + + // at '<' in e.g. "foo" + case State_TagStart: + start = pos + 1; + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + if (ch == '>') { + state = State_Text; + break; + } + if (!ch.isSpace()) { + --pos; + state = State_TagName; + break; + } + } + break; + + // at 'b' in e.g "
foo
" + case State_TagName: + start = pos; + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + if (ch.isSpace()) { + --pos; + state = State_InsideTag; + break; + } + if (ch == '>') { + state = State_Text; + break; + } + } + setFormat(start, pos - start, m_colors[Tag]); + break; + + // anywhere after tag name and before tag closing ('>') + case State_InsideTag: + start = pos; + + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + + if (ch == '/') + continue; + + if (ch == '>') { + state = State_Text; + break; + } + + if (!ch.isSpace()) { + --pos; + state = State_AttributeName; + break; + } + + } + + break; + + // at 's' in e.g. + case State_AttributeName: + start = pos; + + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + + if (ch == '=') { + state = State_AttributeValue; + break; + } + + if (ch == '>' || ch == '/') { + state = State_InsideTag; + break; + } + } + + setFormat(start, pos - start, m_colors[AttributeName]); + break; + + // after '=' in e.g. + case State_AttributeValue: + start = pos; + + // find first non-space character + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + + // handle opening single quote + if (ch == '\'') { + state = State_SingleQuote; + break; + } + + // handle opening double quote + if (ch == '"') { + state = State_DoubleQuote; + break; + } + + if (!ch.isSpace()) + break; + } + + if (state == State_AttributeValue) { + // attribute value without quote + // just stop at non-space or tag delimiter + start = pos; + while (pos < len) { + QChar ch = text.at(pos); + if (ch.isSpace()) + break; + if (ch == '>' || ch == '/') + break; + ++pos; + } + state = State_InsideTag; + setFormat(start, pos - start, m_colors[AttributeValue]); + } + + break; + + // after the opening single quote in an attribute value + case State_SingleQuote: + start = pos; + + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + if (ch == '\'') + break; + } + + state = State_InsideTag; + + setFormat(start, pos - start, m_colors[AttributeValue]); + break; + + // after the opening double quote in an attribute value + case State_DoubleQuote: + start = pos; + + while (pos < len) { + QChar ch = text.at(pos); + ++pos; + if (ch == '"') + break; + } + + state = State_InsideTag; + + setFormat(start, pos - start, m_colors[AttributeValue]); + break; + + } + } + + setCurrentBlockState(state); +} diff --git a/sources/htmleditor/highlighter.h b/sources/htmleditor/highlighter.h new file mode 100644 index 000000000..603433efe --- /dev/null +++ b/sources/htmleditor/highlighter.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Graphics Dojo project on Qt Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 or 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#ifndef HIGHLIGHTER_H +#define HIGHLIGHTER_H + +#include +#include + +// based on http://doc.trolltech.com/qq/qq21-syntaxhighlighter.html + +class Highlighter : public QSyntaxHighlighter +{ + Q_OBJECT + +public: + + Highlighter(QTextDocument *document); + + enum Construct { + DocType, + Entity, + Tag, + Comment, + AttributeName, + AttributeValue + }; + +protected: + enum State { + State_Text = -1, + State_DocType, + State_Comment, + State_TagStart, + State_TagName, + State_InsideTag, + State_AttributeName, + State_SingleQuote, + State_DoubleQuote, + State_AttributeValue, + }; + + void highlightBlock(const QString &text); + +private: + QHash m_colors; +}; + + +#endif // HIGHLIGHTER_H diff --git a/sources/htmleditor/htmleditor.cpp b/sources/htmleditor/htmleditor.cpp new file mode 100644 index 000000000..57e48c26a --- /dev/null +++ b/sources/htmleditor/htmleditor.cpp @@ -0,0 +1,645 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Graphics Dojo project on Qt Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 or 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +/** + Integration : QElectroTech Team + Changelog: + - 26/03/2013 : Start integration...Compilation and object creation are successful +*/ + +#include "htmleditor.h" +#include "highlighter.h" + +#include "../ui/ui_htmleditor.h" +#include "../ui/ui_inserthtmldialog.h" + +#include +#include + +#define FORWARD_ACTION(action1, action2) \ + connect(action1, SIGNAL(triggered()), \ + ui->webView->pageAction(action2), SLOT(trigger())); \ + connect(ui->webView->pageAction(action2), \ + SIGNAL(changed()), SLOT(adjustActions())); + + +HtmlEditor::HtmlEditor(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui_MainWindow) + , sourceDirty(true) + , highlighter(0) + , ui_dialog(0) + , insertHtmlDialog(0) +{ + ui->setupUi(this); + ui->tabWidget->setTabText(0, "Normal View"); + ui->tabWidget->setTabText(1, "HTML Source"); + connect(ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(changeTab(int))); + resize(600, 600); + + highlighter = new Highlighter(ui->plainTextEdit->document()); + + QWidget *spacer = new QWidget(this); + spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + ui->standardToolBar->insertWidget(ui->actionZoomOut, spacer); + + zoomLabel = new QLabel; + ui->standardToolBar->insertWidget(ui->actionZoomOut, zoomLabel); + + zoomSlider = new QSlider(this); + zoomSlider->setOrientation(Qt::Horizontal); + zoomSlider->setMaximumWidth(150); + zoomSlider->setRange(25, 400); + zoomSlider->setSingleStep(25); + zoomSlider->setPageStep(100); + connect(zoomSlider, SIGNAL(valueChanged(int)), SLOT(changeZoom(int))); + ui->standardToolBar->insertWidget(ui->actionZoomIn, zoomSlider); + + connect(ui->actionFileNew, SIGNAL(triggered()), SLOT(fileNew())); + connect(ui->actionFileOpen, SIGNAL(triggered()), SLOT(fileOpen())); + connect(ui->actionFileSave, SIGNAL(triggered()), SLOT(fileSave())); + connect(ui->actionFileSaveAs, SIGNAL(triggered()), SLOT(fileSaveAs())); + connect(ui->actionExit, SIGNAL(triggered()), SLOT(close())); + connect(ui->actionInsertImage, SIGNAL(triggered()), SLOT(insertImage())); + connect(ui->actionCreateLink, SIGNAL(triggered()), SLOT(createLink())); + connect(ui->actionInsertHtml, SIGNAL(triggered()), SLOT(insertHtml())); + connect(ui->actionZoomOut, SIGNAL(triggered()), SLOT(zoomOut())); + connect(ui->actionZoomIn, SIGNAL(triggered()), SLOT(zoomIn())); + + // these are forward to internal QWebView + FORWARD_ACTION(ui->actionEditUndo, QWebPage::Undo); + FORWARD_ACTION(ui->actionEditRedo, QWebPage::Redo); + FORWARD_ACTION(ui->actionEditCut, QWebPage::Cut); + FORWARD_ACTION(ui->actionEditCopy, QWebPage::Copy); + FORWARD_ACTION(ui->actionEditPaste, QWebPage::Paste); + FORWARD_ACTION(ui->actionFormatBold, QWebPage::ToggleBold); + FORWARD_ACTION(ui->actionFormatItalic, QWebPage::ToggleItalic); + FORWARD_ACTION(ui->actionFormatUnderline, QWebPage::ToggleUnderline); + + // Qt 4.5.0 has a bug: always returns 0 for QWebPage::SelectAll + connect(ui->actionEditSelectAll, SIGNAL(triggered()), SLOT(editSelectAll())); + + connect(ui->actionStyleParagraph, SIGNAL(triggered()), SLOT(styleParagraph())); + connect(ui->actionStyleHeading1, SIGNAL(triggered()), SLOT(styleHeading1())); + connect(ui->actionStyleHeading2, SIGNAL(triggered()), SLOT(styleHeading2())); + connect(ui->actionStyleHeading3, SIGNAL(triggered()), SLOT(styleHeading3())); + connect(ui->actionStyleHeading4, SIGNAL(triggered()), SLOT(styleHeading4())); + connect(ui->actionStyleHeading5, SIGNAL(triggered()), SLOT(styleHeading5())); + connect(ui->actionStyleHeading6, SIGNAL(triggered()), SLOT(styleHeading6())); + connect(ui->actionStylePreformatted, SIGNAL(triggered()), SLOT(stylePreformatted())); + connect(ui->actionStyleAddress, SIGNAL(triggered()), SLOT(styleAddress())); + connect(ui->actionFormatFontName, SIGNAL(triggered()), SLOT(formatFontName())); + connect(ui->actionFormatFontSize, SIGNAL(triggered()), SLOT(formatFontSize())); + connect(ui->actionFormatTextColor, SIGNAL(triggered()), SLOT(formatTextColor())); + connect(ui->actionFormatBackgroundColor, SIGNAL(triggered()), SLOT(formatBackgroundColor())); + + // no page action exists yet for these, so use execCommand trick + connect(ui->actionFormatStrikethrough, SIGNAL(triggered()), SLOT(formatStrikeThrough())); + connect(ui->actionFormatAlignLeft, SIGNAL(triggered()), SLOT(formatAlignLeft())); + connect(ui->actionFormatAlignCenter, SIGNAL(triggered()), SLOT(formatAlignCenter())); + connect(ui->actionFormatAlignRight, SIGNAL(triggered()), SLOT(formatAlignRight())); + connect(ui->actionFormatAlignJustify, SIGNAL(triggered()), SLOT(formatAlignJustify())); + connect(ui->actionFormatDecreaseIndent, SIGNAL(triggered()), SLOT(formatDecreaseIndent())); + connect(ui->actionFormatIncreaseIndent, SIGNAL(triggered()), SLOT(formatIncreaseIndent())); + connect(ui->actionFormatNumberedList, SIGNAL(triggered()), SLOT(formatNumberedList())); + connect(ui->actionFormatBulletedList, SIGNAL(triggered()), SLOT(formatBulletedList())); + + + // necessary to sync our actions + connect(ui->webView->page(), SIGNAL(selectionChanged()), SLOT(adjustActions())); + + connect(ui->webView->page(), SIGNAL(contentsChanged()), SLOT(adjustSource())); + ui->webView->setFocus(); + + setCurrentFileName(QString()); + + QString initialFile = ":/example.html"; + const QStringList args = QCoreApplication::arguments(); + if (args.count() == 2) + initialFile = args.at(1); + + if (!load(initialFile)) + fileNew(); + + adjustActions(); + adjustSource(); + setWindowModified(false); + changeZoom(100); +} + +HtmlEditor::~HtmlEditor() +{ + delete ui; + delete ui_dialog; +} + +bool HtmlEditor::maybeSave() +{ + if (!isWindowModified()) + return true; + + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("HTML Editor"), + tr("The document has been modified.\n" + "Do you want to save your changes?"), + QMessageBox::Save | QMessageBox::Discard + | QMessageBox::Cancel); + if (ret == QMessageBox::Save) + return fileSave(); + else if (ret == QMessageBox::Cancel) + return false; + return true; +} + +void HtmlEditor::fileNew() +{ + if (maybeSave()) { + ui->webView->setHtml("

"); + ui->webView->setFocus(); + ui->webView->page()->setContentEditable(true); + setCurrentFileName(QString()); + setWindowModified(false); + + // quirk in QWebView: need an initial mouse click to show the cursor + int mx = ui->webView->width() / 2; + int my = ui->webView->height() / 2; + QPoint center = QPoint(mx, my); + QMouseEvent *e1 = new QMouseEvent(QEvent::MouseButtonPress, center, + Qt::LeftButton, Qt::LeftButton, + Qt::NoModifier); + QMouseEvent *e2 = new QMouseEvent(QEvent::MouseButtonRelease, center, + Qt::LeftButton, Qt::LeftButton, + Qt::NoModifier); + QApplication::postEvent(ui->webView, e1); + QApplication::postEvent(ui->webView, e2); + } +} + +void HtmlEditor::fileOpen() +{ + QString fn = QFileDialog::getOpenFileName(this, tr("Open File..."), + QString(), tr("HTML-Files (*.htm *.html);;All Files (*)")); + if (!fn.isEmpty()) + load(fn); +} + +bool HtmlEditor::fileSave() +{ + if (fileName.isEmpty() || fileName.startsWith(QLatin1String(":/"))) + return fileSaveAs(); + + QFile file(fileName); + bool success = file.open(QIODevice::WriteOnly); + if (success) { + // FIXME: here we always use UTF-8 encoding + QString content = ui->webView->page()->mainFrame()->toHtml(); + QByteArray data = content.toUtf8(); + qint64 c = file.write(data); + success = (c >= data.length()); + } + + setWindowModified(false); + return success; +} + +bool HtmlEditor::fileSaveAs() +{ + QString fn = QFileDialog::getSaveFileName(this, tr("Save as..."), + QString(), tr("HTML-Files (*.htm *.html);;All Files (*)")); + if (fn.isEmpty()) + return false; + if (!(fn.endsWith(".htm", Qt::CaseInsensitive) || fn.endsWith(".html", Qt::CaseInsensitive))) + fn += ".htm"; // default + setCurrentFileName(fn); + return fileSave(); +} + +void HtmlEditor::insertImage() +{ + QString filters; + filters += tr("Common Graphics (*.png *.jpg *.jpeg *.gif);;"); + filters += tr("Portable Network Graphics (PNG) (*.png);;"); + filters += tr("JPEG (*.jpg *.jpeg);;"); + filters += tr("Graphics Interchange Format (*.gif);;"); + filters += tr("All Files (*)"); + + QString fn = QFileDialog::getOpenFileName(this, tr("Open image..."), + QString(), filters); + if (fn.isEmpty()) + return; + if (!QFile::exists(fn)) + return; + + QUrl url = QUrl::fromLocalFile(fn); + execCommand("insertImage", url.toString()); +} + +// shamelessly copied from Qt Demo Browser +static QUrl guessUrlFromString(const QString &string) +{ + QString urlStr = string.trimmed(); + QRegExp test(QLatin1String("^[a-zA-Z]+\\:.*")); + + // Check if it looks like a qualified URL. Try parsing it and see. + bool hasSchema = test.exactMatch(urlStr); + if (hasSchema) { + QUrl url(urlStr, QUrl::TolerantMode); + if (url.isValid()) + return url; + } + + // Might be a file. + if (QFile::exists(urlStr)) + return QUrl::fromLocalFile(urlStr); + + // Might be a shorturl - try to detect the schema. + if (!hasSchema) { + int dotIndex = urlStr.indexOf(QLatin1Char('.')); + if (dotIndex != -1) { + QString prefix = urlStr.left(dotIndex).toLower(); + QString schema = (prefix == QLatin1String("ftp")) ? prefix : QLatin1String("http"); + QUrl url(schema + QLatin1String("://") + urlStr, QUrl::TolerantMode); + if (url.isValid()) + return url; + } + } + + // Fall back to QUrl's own tolerant parser. + return QUrl(string, QUrl::TolerantMode); +} + +void HtmlEditor::createLink() +{ + QString link = QInputDialog::getText(this, tr("Create link"), + "Enter URL"); + if (!link.isEmpty()) { + QUrl url = guessUrlFromString(link); + if (url.isValid()) + execCommand("createLink", url.toString()); + } +} + +void HtmlEditor::insertHtml() +{ + if (!insertHtmlDialog) { + insertHtmlDialog = new QDialog(this); + if (!ui_dialog) + ui_dialog = new Ui_Dialog; + ui_dialog->setupUi(insertHtmlDialog); + connect(ui_dialog->buttonBox, SIGNAL(accepted()), + insertHtmlDialog, SLOT(accept())); + connect(ui_dialog->buttonBox, SIGNAL(rejected()), + insertHtmlDialog, SLOT(reject())); + } + + ui_dialog->plainTextEdit->clear(); + ui_dialog->plainTextEdit->setFocus(); + Highlighter *hilite = new Highlighter(ui_dialog->plainTextEdit->document()); + + if (insertHtmlDialog->exec() == QDialog::Accepted) + execCommand("insertHTML", ui_dialog->plainTextEdit->toPlainText()); + + delete hilite; +} + +void HtmlEditor::zoomOut() +{ + int percent = static_cast(ui->webView->zoomFactor() * 100); + if (percent > 25) { + percent -= 25; + percent = 25 * (int((percent + 25 - 1) / 25)); + qreal factor = static_cast(percent) / 100; + ui->webView->setZoomFactor(factor); + ui->actionZoomOut->setEnabled(percent > 25); + ui->actionZoomIn->setEnabled(true); + zoomSlider->setValue(percent); + } +} + +void HtmlEditor::zoomIn() +{ + int percent = static_cast(ui->webView->zoomFactor() * 100); + if (percent < 400) { + percent += 25; + percent = 25 * (int(percent / 25)); + qreal factor = static_cast(percent) / 100; + ui->webView->setZoomFactor(factor); + ui->actionZoomIn->setEnabled(percent < 400); + ui->actionZoomOut->setEnabled(true); + zoomSlider->setValue(percent); + } +} + +void HtmlEditor::editSelectAll() +{ + ui->webView->triggerPageAction(QWebPage::SelectAll); +} + +void HtmlEditor::execCommand(const QString &cmd) +{ + QWebFrame *frame = ui->webView->page()->mainFrame(); + QString js = QString("document.execCommand(\"%1\", false, null)").arg(cmd); + frame->evaluateJavaScript(js); +} + +void HtmlEditor::execCommand(const QString &cmd, const QString &arg) +{ + QWebFrame *frame = ui->webView->page()->mainFrame(); + QString js = QString("document.execCommand(\"%1\", false, \"%2\")").arg(cmd).arg(arg); + frame->evaluateJavaScript(js); +} + +bool HtmlEditor::queryCommandState(const QString &cmd) +{ + QWebFrame *frame = ui->webView->page()->mainFrame(); + QString js = QString("document.queryCommandState(\"%1\", false, null)").arg(cmd); + QVariant result = frame->evaluateJavaScript(js); + return result.toString().simplified().toLower() == "true"; +} + +void HtmlEditor::styleParagraph() +{ + execCommand("formatBlock", "p"); +} + +void HtmlEditor::styleHeading1() +{ + execCommand("formatBlock", "h1"); +} + +void HtmlEditor::styleHeading2() +{ + execCommand("formatBlock", "h2"); +} + +void HtmlEditor::styleHeading3() +{ + execCommand("formatBlock", "h3"); +} + +void HtmlEditor::styleHeading4() +{ + execCommand("formatBlock", "h4"); +} + +void HtmlEditor::styleHeading5() +{ + execCommand("formatBlock", "h5"); +} + +void HtmlEditor::styleHeading6() +{ + execCommand("formatBlock", "h6"); +} + +void HtmlEditor::stylePreformatted() +{ + execCommand("formatBlock", "pre"); +} + +void HtmlEditor::styleAddress() +{ + execCommand("formatBlock", "address"); +} + +void HtmlEditor::formatStrikeThrough() +{ + execCommand("strikeThrough"); +} + +void HtmlEditor::formatAlignLeft() +{ + execCommand("justifyLeft"); +} + +void HtmlEditor::formatAlignCenter() +{ + execCommand("justifyCenter"); +} + +void HtmlEditor::formatAlignRight() +{ + execCommand("justifyRight"); +} + +void HtmlEditor::formatAlignJustify() +{ + execCommand("justifyFull"); +} + +void HtmlEditor::formatIncreaseIndent() +{ + execCommand("indent"); +} + +void HtmlEditor::formatDecreaseIndent() +{ + execCommand("outdent"); +} + +void HtmlEditor::formatNumberedList() +{ + execCommand("insertOrderedList"); +} + +void HtmlEditor::formatBulletedList() +{ + execCommand("insertUnorderedList"); +} + +void HtmlEditor::formatFontName() +{ + QStringList families = QFontDatabase().families(); + bool ok = false; + QString family = QInputDialog::getItem(this, tr("Font"), tr("Select font:"), + families, 0, false, &ok); + + if (ok) + execCommand("fontName", family); +} + +void HtmlEditor::formatFontSize() +{ + QStringList sizes; + sizes << "xx-small"; + sizes << "x-small"; + sizes << "small"; + sizes << "medium"; + sizes << "large"; + sizes << "x-large"; + sizes << "xx-large"; + + bool ok = false; + QString size = QInputDialog::getItem(this, tr("Font Size"), tr("Select font size:"), + sizes, sizes.indexOf("medium"), false, &ok); + + if (ok) + execCommand("fontSize", QString::number(sizes.indexOf(size))); +} + +void HtmlEditor::formatTextColor() +{ + QColor color = QColorDialog::getColor(Qt::black, this); + if (color.isValid()) + execCommand("foreColor", color.name()); +} + +void HtmlEditor::formatBackgroundColor() +{ + QColor color = QColorDialog::getColor(Qt::white, this); + if (color.isValid()) + execCommand("hiliteColor", color.name()); +} + +#define FOLLOW_ENABLE(a1, a2) a1->setEnabled(ui->webView->pageAction(a2)->isEnabled()) +#define FOLLOW_CHECK(a1, a2) a1->setChecked(ui->webView->pageAction(a2)->isChecked()) + +void HtmlEditor::adjustActions() +{ + FOLLOW_ENABLE(ui->actionEditUndo, QWebPage::Undo); + FOLLOW_ENABLE(ui->actionEditRedo, QWebPage::Redo); + FOLLOW_ENABLE(ui->actionEditCut, QWebPage::Cut); + FOLLOW_ENABLE(ui->actionEditCopy, QWebPage::Copy); + FOLLOW_ENABLE(ui->actionEditPaste, QWebPage::Paste); + FOLLOW_CHECK(ui->actionFormatBold, QWebPage::ToggleBold); + FOLLOW_CHECK(ui->actionFormatItalic, QWebPage::ToggleItalic); + FOLLOW_CHECK(ui->actionFormatUnderline, QWebPage::ToggleUnderline); + + ui->actionFormatStrikethrough->setChecked(queryCommandState("strikeThrough")); + ui->actionFormatNumberedList->setChecked(queryCommandState("insertOrderedList")); + ui->actionFormatBulletedList->setChecked(queryCommandState("insertUnorderedList")); +} + +void HtmlEditor::adjustSource() +{ + setWindowModified(true); + sourceDirty = true; + + if (ui->tabWidget->currentIndex() == 1) + changeTab(1); +} + +void HtmlEditor::changeTab(int index) +{ + if (sourceDirty && (index == 1)) { + QString content = ui->webView->page()->mainFrame()->toHtml(); + ui->plainTextEdit->setPlainText(content); + sourceDirty = false; + } +} + +void HtmlEditor::openLink(const QUrl &url) +{ + QString msg = QString(tr("Open %1 ?")).arg(url.toString()); + if (QMessageBox::question(this, tr("Open link"), msg, + QMessageBox::Open | QMessageBox::Cancel) == + QMessageBox::Open) + QDesktopServices::openUrl(url); +} + +void HtmlEditor::changeZoom(int percent) +{ + ui->actionZoomOut->setEnabled(percent > 25); + ui->actionZoomIn->setEnabled(percent < 400); + qreal factor = static_cast(percent) / 100; + ui->webView->setZoomFactor(factor); + + zoomLabel->setText(tr(" Zoom: %1% ").arg(percent)); + zoomSlider->setValue(percent); +} + +/** + * @brief HtmlEditor::closeEvent and send a applyEditText signal! + * @param e + */ +void HtmlEditor::closeEvent(QCloseEvent *e) +{ + /*if (maybeSave()) + e->accept(); + else + e->ignore();*/ + + //start applyEdit + emit applyEditText( ui->webView->page()->mainFrame()->toHtml() ); +} + +/** + * @brief HtmlEditor::loadHtml to the editor + * @param f + */ +void HtmlEditor::loadHtml(const QString &f) { + ui->webView->setContent(f.toAscii(), "text/html"); + ui->webView->page()->setContentEditable(true); + ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + connect(ui->webView, SIGNAL(linkClicked(QUrl)), SLOT(openLink(QUrl))); + +} + +/** + * @brief HtmlEditor::setSimpleDisplay + * @param state + */ +void HtmlEditor::setSimpleDisplay(bool state) { + ui->standardToolBar->setVisible(!state); + ui->menubar->setVisible(!state); +} + +bool HtmlEditor::load(const QString &f) +{ + if (!QFile::exists(f)) + return false; + QFile file(f); + if (!file.open(QFile::ReadOnly)) + return false; + + QByteArray data = file.readAll(); + ui->webView->setContent(data, "text/html"); + ui->webView->page()->setContentEditable(true); + ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + connect(ui->webView, SIGNAL(linkClicked(QUrl)), SLOT(openLink(QUrl))); + + setCurrentFileName(f); + return true; +} + +void HtmlEditor::setCurrentFileName(const QString &fileName) +{ + this->fileName = fileName; + // setWindowModified(false); + + QString shownName; + if (fileName.isEmpty()) + shownName = "untitled"; + else + shownName = QFileInfo(fileName).fileName(); + + setWindowTitle(tr("%1[*] - %2").arg("QET").arg(tr("HTML Editor"))); + setWindowModified(false); + + bool allowSave = true; + if (fileName.isEmpty() || fileName.startsWith(QLatin1String(":/"))) + allowSave = false; + ui->actionFileSave->setEnabled(allowSave); +} + + diff --git a/sources/htmleditor/htmleditor.h b/sources/htmleditor/htmleditor.h new file mode 100644 index 000000000..613626009 --- /dev/null +++ b/sources/htmleditor/htmleditor.h @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Graphics Dojo project on Qt Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 or 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + + +#ifndef HTML_EDITOR_H +#define HTML_EDITOR_H + +#include +#include "highlighter.h" + +#if QT_VERSION < 0x040500 +#error You must use Qt >= 4.5.0! +#endif + +class Ui_MainWindow; +class Ui_Dialog; + +class QLabel; +class QSlider; +class QUrl; + +class HtmlEditor : public QMainWindow +{ + Q_OBJECT + +public: + HtmlEditor(QWidget *parent = 0); + ~HtmlEditor(); + + void loadHtml(const QString &f); + void setSimpleDisplay(bool state); + +protected: + virtual void closeEvent(QCloseEvent *e); + +private: + void setupActions(); + void setupToolBar(); + void setupMenu(); + bool load(const QString &f); + bool maybeSave(); + void setCurrentFileName(const QString &fileName); + void execCommand(const QString&); + void execCommand(const QString &cmd, const QString &arg); + bool queryCommandState(const QString&); + +private slots: + void fileNew(); + void fileOpen(); + bool fileSave(); + bool fileSaveAs(); + void editSelectAll(); + void styleParagraph(); + void styleHeading1(); + void styleHeading2(); + void styleHeading3(); + void styleHeading4(); + void styleHeading5(); + void styleHeading6(); + void stylePreformatted(); + void styleAddress(); + void formatStrikeThrough(); + void formatAlignLeft(); + void formatAlignCenter(); + void formatAlignRight(); + void formatAlignJustify(); + void formatIncreaseIndent(); + void formatDecreaseIndent(); + void formatNumberedList(); + void formatBulletedList(); + void formatFontName(); + void formatFontSize(); + void formatTextColor(); + void formatBackgroundColor(); + void insertImage(); + void createLink(); + void insertHtml(); + void zoomOut(); + void zoomIn(); + void adjustActions(); + void adjustSource(); + void changeTab(int); + void openLink(const QUrl&); + void changeZoom(int); + +signals: + void applyEditText(const QString &); + +private: + Ui_MainWindow *ui; + QString fileName; + bool sourceDirty; + QLabel *zoomLabel; + QSlider *zoomSlider; + Highlighter *highlighter; + Ui_Dialog *ui_dialog; + QDialog *insertHtmlDialog; + + +}; + +#endif // HTML_EDITOR_H diff --git a/sources/htmleditor/htmleditor.qrc b/sources/htmleditor/htmleditor.qrc new file mode 100644 index 000000000..5207a22fa --- /dev/null +++ b/sources/htmleditor/htmleditor.qrc @@ -0,0 +1,33 @@ + + + images/document-new.png + images/document-open.png + images/document-save.png + images/edit-copy.png + images/edit-cut.png + images/edit-paste.png + images/edit-redo.png + images/edit-select-all.png + images/edit-undo.png + images/format-indent-less.png + images/format-indent-more.png + images/format-justify-center.png + images/format-justify-fill.png + images/format-justify-left.png + images/format-justify-right.png + images/format-text-bold.png + images/format-text-italic.png + images/format-text-underline.png + images/format-text-strikethrough.png + images/bulleted-list.png + images/numbered-list.png + images/image-x-generic.png + qtlogo.png + images/text-html.png + images/list-remove.png + images/list-add.png + images/insert-html.png + images/text.png + images/text_color.png + + diff --git a/sources/htmleditor/htmleditor.ui b/sources/htmleditor/htmleditor.ui new file mode 100644 index 000000000..c02d37862 --- /dev/null +++ b/sources/htmleditor/htmleditor.ui @@ -0,0 +1,629 @@ + + + MainWindow + + + + 0 + 0 + 659 + 398 + + + + HTML Editor + + + + + 0 + + + + + QTabWidget::South + + + QTabWidget::Rounded + + + 0 + + + true + + + + Tab 1 + + + + 0 + + + + + + about:blank + + + + + + + + + Tab 2 + + + + 0 + + + + + QFrame::NoFrame + + + true + + + + + + + + + + + + + 0 + 0 + 659 + 31 + + + + + &File + + + + + + + + + + + &Edit + + + + + + + + + + + + + + + + + F&ormat + + + + St&yle + + + + + + + + + + + + + + &Align + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + Standard + + + + 24 + 24 + + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + Formatting + + + + 24 + 24 + + + + TopToolBarArea + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + :/images/document-new.png:/images/document-new.png + + + &New + + + Ctrl+N + + + + + + :/images/document-open.png:/images/document-open.png + + + &Open... + + + Ctrl+O + + + + + + :/images/document-save.png:/images/document-save.png + + + &Save + + + Ctrl+S + + + + + Save &As... + + + + + + :/images/edit-undo.png:/images/edit-undo.png + + + &Undo + + + Ctrl+Z + + + + + + :/images/edit-redo.png:/images/edit-redo.png + + + &Redo + + + Ctrl+Y + + + + + + :/images/edit-cut.png:/images/edit-cut.png + + + Cu&t + + + Ctrl+X + + + + + + :/images/edit-copy.png:/images/edit-copy.png + + + &Copy + + + Ctrl+C + + + + + + :/images/edit-paste.png:/images/edit-paste.png + + + &Paste + + + Ctrl+V + + + + + + :/images/edit-select-all.png:/images/edit-select-all.png + + + Select A&ll + + + Ctrl+A + + + + + true + + + + :/images/format-text-bold.png:/images/format-text-bold.png + + + &Bold + + + Ctrl+B + + + + + true + + + + :/images/format-text-italic.png:/images/format-text-italic.png + + + &Italic + + + Ctrl+I + + + + + true + + + + :/images/format-text-underline.png:/images/format-text-underline.png + + + &Underline + + + Ctrl+U + + + + + true + + + + :/images/format-text-strikethrough.png:/images/format-text-strikethrough.png + + + &Strikethrough + + + + + + :/images/format-justify-left.png:/images/format-justify-left.png + + + Align &Left + + + + + + :/images/format-justify-center.png:/images/format-justify-center.png + + + Align &Center + + + + + + :/images/format-justify-right.png:/images/format-justify-right.png + + + Align &Right + + + + + + :/images/format-justify-fill.png:/images/format-justify-fill.png + + + Align &Justify + + + + + + :/images/format-indent-more.png:/images/format-indent-more.png + + + I&ncrease Indent + + + + + + :/images/format-indent-less.png:/images/format-indent-less.png + + + &Decrease Indent + + + + + true + + + + :/images/bulleted-list.png:/images/bulleted-list.png + + + Bulle&ted List + + + + + true + + + + :/images/numbered-list.png:/images/numbered-list.png + + + &Numbered List + + + + + + :/images/image-x-generic.png:/images/image-x-generic.png + + + Insert &Image... + + + false + + + + + + :/images/text-html.png:/images/text-html.png + + + Create Link... + + + + + + :/images/list-remove.png:/images/list-remove.png + + + Zoom Out + + + + + + :/images/list-add.png:/images/list-add.png + + + Zoom In + + + + + E&xit + + + Ctrl+Q + + + + + &Paragraph + + + + + Heading &1 + + + + + Heading &2 + + + + + Heading &3 + + + + + Heading &4 + + + + + Heading &5 + + + + + Heading &6 + + + + + Pre&formatted + + + + + &Address + + + + + &Font Name... + + + + + + :/images/text_color.png:/images/text_color.png + + + Text &Color... + + + + + Bac&kground Color... + + + + + + :/images/text.png:/images/text.png + + + Font Si&ze... + + + + + + :/images/insert-html.png:/images/insert-html.png + + + Insert HTML... + + + Insert HTML + + + + + + QWebView + QWidget +
QtWebKit/QWebView
+
+
+ + + + +
diff --git a/sources/htmleditor/images/bulleted-list.png b/sources/htmleditor/images/bulleted-list.png new file mode 100644 index 000000000..69708f1c4 Binary files /dev/null and b/sources/htmleditor/images/bulleted-list.png differ diff --git a/sources/htmleditor/images/document-new.png b/sources/htmleditor/images/document-new.png new file mode 100644 index 000000000..e3808a108 Binary files /dev/null and b/sources/htmleditor/images/document-new.png differ diff --git a/sources/htmleditor/images/document-open.png b/sources/htmleditor/images/document-open.png new file mode 100644 index 000000000..254a6b814 Binary files /dev/null and b/sources/htmleditor/images/document-open.png differ diff --git a/sources/htmleditor/images/document-save-as.png b/sources/htmleditor/images/document-save-as.png new file mode 100644 index 000000000..340a87eec Binary files /dev/null and b/sources/htmleditor/images/document-save-as.png differ diff --git a/sources/htmleditor/images/document-save.png b/sources/htmleditor/images/document-save.png new file mode 100644 index 000000000..a94e0eab9 Binary files /dev/null and b/sources/htmleditor/images/document-save.png differ diff --git a/sources/htmleditor/images/edit-copy.png b/sources/htmleditor/images/edit-copy.png new file mode 100644 index 000000000..345b2f1d7 Binary files /dev/null and b/sources/htmleditor/images/edit-copy.png differ diff --git a/sources/htmleditor/images/edit-cut.png b/sources/htmleditor/images/edit-cut.png new file mode 100644 index 000000000..7017d1b3c Binary files /dev/null and b/sources/htmleditor/images/edit-cut.png differ diff --git a/sources/htmleditor/images/edit-paste.png b/sources/htmleditor/images/edit-paste.png new file mode 100644 index 000000000..f6a625ce0 Binary files /dev/null and b/sources/htmleditor/images/edit-paste.png differ diff --git a/sources/htmleditor/images/edit-redo.png b/sources/htmleditor/images/edit-redo.png new file mode 100644 index 000000000..576cfc76c Binary files /dev/null and b/sources/htmleditor/images/edit-redo.png differ diff --git a/sources/htmleditor/images/edit-select-all.png b/sources/htmleditor/images/edit-select-all.png new file mode 100644 index 000000000..e6331c6e9 Binary files /dev/null and b/sources/htmleditor/images/edit-select-all.png differ diff --git a/sources/htmleditor/images/edit-undo.png b/sources/htmleditor/images/edit-undo.png new file mode 100644 index 000000000..f37c6963d Binary files /dev/null and b/sources/htmleditor/images/edit-undo.png differ diff --git a/sources/htmleditor/images/format-indent-less.png b/sources/htmleditor/images/format-indent-less.png new file mode 100644 index 000000000..52920122f Binary files /dev/null and b/sources/htmleditor/images/format-indent-less.png differ diff --git a/sources/htmleditor/images/format-indent-more.png b/sources/htmleditor/images/format-indent-more.png new file mode 100644 index 000000000..ad2b527db Binary files /dev/null and b/sources/htmleditor/images/format-indent-more.png differ diff --git a/sources/htmleditor/images/format-justify-center.png b/sources/htmleditor/images/format-justify-center.png new file mode 100644 index 000000000..0777a9adf Binary files /dev/null and b/sources/htmleditor/images/format-justify-center.png differ diff --git a/sources/htmleditor/images/format-justify-fill.png b/sources/htmleditor/images/format-justify-fill.png new file mode 100644 index 000000000..0ce401357 Binary files /dev/null and b/sources/htmleditor/images/format-justify-fill.png differ diff --git a/sources/htmleditor/images/format-justify-left.png b/sources/htmleditor/images/format-justify-left.png new file mode 100644 index 000000000..a8e1ca886 Binary files /dev/null and b/sources/htmleditor/images/format-justify-left.png differ diff --git a/sources/htmleditor/images/format-justify-right.png b/sources/htmleditor/images/format-justify-right.png new file mode 100644 index 000000000..8228d81d8 Binary files /dev/null and b/sources/htmleditor/images/format-justify-right.png differ diff --git a/sources/htmleditor/images/format-text-bold.png b/sources/htmleditor/images/format-text-bold.png new file mode 100644 index 000000000..7166e3d74 Binary files /dev/null and b/sources/htmleditor/images/format-text-bold.png differ diff --git a/sources/htmleditor/images/format-text-italic.png b/sources/htmleditor/images/format-text-italic.png new file mode 100644 index 000000000..ef68fb340 Binary files /dev/null and b/sources/htmleditor/images/format-text-italic.png differ diff --git a/sources/htmleditor/images/format-text-strikethrough.png b/sources/htmleditor/images/format-text-strikethrough.png new file mode 100644 index 000000000..e4ca57332 Binary files /dev/null and b/sources/htmleditor/images/format-text-strikethrough.png differ diff --git a/sources/htmleditor/images/format-text-underline.png b/sources/htmleditor/images/format-text-underline.png new file mode 100644 index 000000000..d33422bdf Binary files /dev/null and b/sources/htmleditor/images/format-text-underline.png differ diff --git a/sources/htmleditor/images/image-x-generic.png b/sources/htmleditor/images/image-x-generic.png new file mode 100644 index 000000000..10f46719d Binary files /dev/null and b/sources/htmleditor/images/image-x-generic.png differ diff --git a/sources/htmleditor/images/insert-html.png b/sources/htmleditor/images/insert-html.png new file mode 100644 index 000000000..72c7e9c7f Binary files /dev/null and b/sources/htmleditor/images/insert-html.png differ diff --git a/sources/htmleditor/images/list-add.png b/sources/htmleditor/images/list-add.png new file mode 100644 index 000000000..306d3d892 Binary files /dev/null and b/sources/htmleditor/images/list-add.png differ diff --git a/sources/htmleditor/images/list-remove.png b/sources/htmleditor/images/list-remove.png new file mode 100644 index 000000000..45e5c2a8e Binary files /dev/null and b/sources/htmleditor/images/list-remove.png differ diff --git a/sources/htmleditor/images/numbered-list.png b/sources/htmleditor/images/numbered-list.png new file mode 100644 index 000000000..e9f400129 Binary files /dev/null and b/sources/htmleditor/images/numbered-list.png differ diff --git a/sources/htmleditor/images/text-html.png b/sources/htmleditor/images/text-html.png new file mode 100644 index 000000000..51beaff41 Binary files /dev/null and b/sources/htmleditor/images/text-html.png differ diff --git a/sources/htmleditor/images/text.png b/sources/htmleditor/images/text.png new file mode 100644 index 000000000..a6902947d Binary files /dev/null and b/sources/htmleditor/images/text.png differ diff --git a/sources/htmleditor/images/text_color.png b/sources/htmleditor/images/text_color.png new file mode 100644 index 000000000..496e87992 Binary files /dev/null and b/sources/htmleditor/images/text_color.png differ diff --git a/sources/htmleditor/inserthtmldialog.ui b/sources/htmleditor/inserthtmldialog.ui new file mode 100644 index 000000000..9f7cec19f --- /dev/null +++ b/sources/htmleditor/inserthtmldialog.ui @@ -0,0 +1,41 @@ + + + Dialog + + + + 0 + 0 + 426 + 288 + + + + Insert HTML + + + + + + HTML Code: + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + diff --git a/sources/htmleditor/qtlogo.png b/sources/htmleditor/qtlogo.png new file mode 100644 index 000000000..1e7ed4cf2 Binary files /dev/null and b/sources/htmleditor/qtlogo.png differ diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 21f9dcbcf..a7e9b242e 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -211,7 +211,7 @@ void QETDiagramEditor::actions() { conductor_reset = new QAction(QET::Icons::ConductorSettings, tr("R\351initialiser les conducteurs"), this); infos_diagram = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du sch\351ma"), this); add_text = new QAction(QET::Icons::PartTextField, tr("Ajouter un champ de texte"), this); - add_edittext = new QAction(QET::Icons::EditText, tr("\311diter un champ de texte"), this); + add_edittext = new QAction(QET::Icons::EditText, tr("\311diter le champ de texte"), this); add_column = new QAction(QET::Icons::EditTableInsertColumnRight, tr("Ajouter une colonne"), this); remove_column = new QAction(QET::Icons::EditTableDeleteColumn, tr("Enlever une colonne"), this); add_row = new QAction(QET::Icons::EditTableInsertRowUnder, tr("Ajouter une ligne"), this); @@ -1471,6 +1471,15 @@ void QETDiagramEditor::slot_addText() { } } +/** + to Edit en text through the html editor +*/ +void QETDiagramEditor::slot_editText() { + if (DiagramView *dv = currentDiagram()) { + dv -> editText(); + } +} + /** Affiche les projets dans des fenetres. */ diff --git a/sources/qetdiagrameditor.h b/sources/qetdiagrameditor.h index ababac6b7..8ac97bb26 100644 --- a/sources/qetdiagrameditor.h +++ b/sources/qetdiagrameditor.h @@ -123,6 +123,7 @@ class QETDiagramEditor : public QETMainWindow { void slot_editConductor(); void slot_resetConductors(); void slot_addText(); + void slot_editText(); void setWindowedMode(); void setTabbedMode(); void readSettings(); diff --git a/sources/ui/ui_htmleditor.h b/sources/ui/ui_htmleditor.h new file mode 100644 index 000000000..bef604fe7 --- /dev/null +++ b/sources/ui/ui_htmleditor.h @@ -0,0 +1,509 @@ +/******************************************************************************** +** Form generated from reading UI file 'htmleditor.ui' +** +** Created: Mon 1. Apr 15:44:25 2013 +** by: Qt User Interface Compiler version 4.8.4 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_HTMLEDITOR_H +#define UI_HTMLEDITOR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QAction *actionFileNew; + QAction *actionFileOpen; + QAction *actionFileSave; + QAction *actionFileSaveAs; + QAction *actionEditUndo; + QAction *actionEditRedo; + QAction *actionEditCut; + QAction *actionEditCopy; + QAction *actionEditPaste; + QAction *actionEditSelectAll; + QAction *actionFormatBold; + QAction *actionFormatItalic; + QAction *actionFormatUnderline; + QAction *actionFormatStrikethrough; + QAction *actionFormatAlignLeft; + QAction *actionFormatAlignCenter; + QAction *actionFormatAlignRight; + QAction *actionFormatAlignJustify; + QAction *actionFormatIncreaseIndent; + QAction *actionFormatDecreaseIndent; + QAction *actionFormatBulletedList; + QAction *actionFormatNumberedList; + QAction *actionInsertImage; + QAction *actionCreateLink; + QAction *actionZoomOut; + QAction *actionZoomIn; + QAction *actionExit; + QAction *actionStyleParagraph; + QAction *actionStyleHeading1; + QAction *actionStyleHeading2; + QAction *actionStyleHeading3; + QAction *actionStyleHeading4; + QAction *actionStyleHeading5; + QAction *actionStyleHeading6; + QAction *actionStylePreformatted; + QAction *actionStyleAddress; + QAction *actionFormatFontName; + QAction *actionFormatTextColor; + QAction *actionFormatBackgroundColor; + QAction *actionFormatFontSize; + QAction *actionInsertHtml; + QWidget *centralwidget; + QVBoxLayout *verticalLayout; + QTabWidget *tabWidget; + QWidget *tab; + QVBoxLayout *verticalLayout_2; + QWebView *webView; + QWidget *tab_2; + QVBoxLayout *verticalLayout_3; + QPlainTextEdit *plainTextEdit; + QMenuBar *menubar; + QMenu *menu_File; + QMenu *menu_Edit; + QMenu *menuF_ormat; + QMenu *menuSt_yle; + QMenu *menu_Align; + QToolBar *standardToolBar; + QToolBar *formatToolBar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName(QString::fromUtf8("MainWindow")); + MainWindow->resize(659, 398); + actionFileNew = new QAction(MainWindow); + actionFileNew->setObjectName(QString::fromUtf8("actionFileNew")); + QIcon icon; + icon.addFile(QString::fromUtf8(":/images/document-new.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFileNew->setIcon(icon); + actionFileOpen = new QAction(MainWindow); + actionFileOpen->setObjectName(QString::fromUtf8("actionFileOpen")); + QIcon icon1; + icon1.addFile(QString::fromUtf8(":/images/document-open.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFileOpen->setIcon(icon1); + actionFileSave = new QAction(MainWindow); + actionFileSave->setObjectName(QString::fromUtf8("actionFileSave")); + QIcon icon2; + icon2.addFile(QString::fromUtf8(":/images/document-save.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFileSave->setIcon(icon2); + actionFileSaveAs = new QAction(MainWindow); + actionFileSaveAs->setObjectName(QString::fromUtf8("actionFileSaveAs")); + actionEditUndo = new QAction(MainWindow); + actionEditUndo->setObjectName(QString::fromUtf8("actionEditUndo")); + QIcon icon3; + icon3.addFile(QString::fromUtf8(":/images/edit-undo.png"), QSize(), QIcon::Normal, QIcon::Off); + actionEditUndo->setIcon(icon3); + actionEditRedo = new QAction(MainWindow); + actionEditRedo->setObjectName(QString::fromUtf8("actionEditRedo")); + QIcon icon4; + icon4.addFile(QString::fromUtf8(":/images/edit-redo.png"), QSize(), QIcon::Normal, QIcon::Off); + actionEditRedo->setIcon(icon4); + actionEditCut = new QAction(MainWindow); + actionEditCut->setObjectName(QString::fromUtf8("actionEditCut")); + QIcon icon5; + icon5.addFile(QString::fromUtf8(":/images/edit-cut.png"), QSize(), QIcon::Normal, QIcon::Off); + actionEditCut->setIcon(icon5); + actionEditCopy = new QAction(MainWindow); + actionEditCopy->setObjectName(QString::fromUtf8("actionEditCopy")); + QIcon icon6; + icon6.addFile(QString::fromUtf8(":/images/edit-copy.png"), QSize(), QIcon::Normal, QIcon::Off); + actionEditCopy->setIcon(icon6); + actionEditPaste = new QAction(MainWindow); + actionEditPaste->setObjectName(QString::fromUtf8("actionEditPaste")); + QIcon icon7; + icon7.addFile(QString::fromUtf8(":/images/edit-paste.png"), QSize(), QIcon::Normal, QIcon::Off); + actionEditPaste->setIcon(icon7); + actionEditSelectAll = new QAction(MainWindow); + actionEditSelectAll->setObjectName(QString::fromUtf8("actionEditSelectAll")); + QIcon icon8; + icon8.addFile(QString::fromUtf8(":/images/edit-select-all.png"), QSize(), QIcon::Normal, QIcon::Off); + actionEditSelectAll->setIcon(icon8); + actionFormatBold = new QAction(MainWindow); + actionFormatBold->setObjectName(QString::fromUtf8("actionFormatBold")); + actionFormatBold->setCheckable(true); + QIcon icon9; + icon9.addFile(QString::fromUtf8(":/images/format-text-bold.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatBold->setIcon(icon9); + actionFormatItalic = new QAction(MainWindow); + actionFormatItalic->setObjectName(QString::fromUtf8("actionFormatItalic")); + actionFormatItalic->setCheckable(true); + QIcon icon10; + icon10.addFile(QString::fromUtf8(":/images/format-text-italic.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatItalic->setIcon(icon10); + actionFormatUnderline = new QAction(MainWindow); + actionFormatUnderline->setObjectName(QString::fromUtf8("actionFormatUnderline")); + actionFormatUnderline->setCheckable(true); + QIcon icon11; + icon11.addFile(QString::fromUtf8(":/images/format-text-underline.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatUnderline->setIcon(icon11); + actionFormatStrikethrough = new QAction(MainWindow); + actionFormatStrikethrough->setObjectName(QString::fromUtf8("actionFormatStrikethrough")); + actionFormatStrikethrough->setCheckable(true); + QIcon icon12; + icon12.addFile(QString::fromUtf8(":/images/format-text-strikethrough.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatStrikethrough->setIcon(icon12); + actionFormatAlignLeft = new QAction(MainWindow); + actionFormatAlignLeft->setObjectName(QString::fromUtf8("actionFormatAlignLeft")); + QIcon icon13; + icon13.addFile(QString::fromUtf8(":/images/format-justify-left.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatAlignLeft->setIcon(icon13); + actionFormatAlignCenter = new QAction(MainWindow); + actionFormatAlignCenter->setObjectName(QString::fromUtf8("actionFormatAlignCenter")); + QIcon icon14; + icon14.addFile(QString::fromUtf8(":/images/format-justify-center.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatAlignCenter->setIcon(icon14); + actionFormatAlignRight = new QAction(MainWindow); + actionFormatAlignRight->setObjectName(QString::fromUtf8("actionFormatAlignRight")); + QIcon icon15; + icon15.addFile(QString::fromUtf8(":/images/format-justify-right.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatAlignRight->setIcon(icon15); + actionFormatAlignJustify = new QAction(MainWindow); + actionFormatAlignJustify->setObjectName(QString::fromUtf8("actionFormatAlignJustify")); + QIcon icon16; + icon16.addFile(QString::fromUtf8(":/images/format-justify-fill.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatAlignJustify->setIcon(icon16); + actionFormatIncreaseIndent = new QAction(MainWindow); + actionFormatIncreaseIndent->setObjectName(QString::fromUtf8("actionFormatIncreaseIndent")); + QIcon icon17; + icon17.addFile(QString::fromUtf8(":/images/format-indent-more.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatIncreaseIndent->setIcon(icon17); + actionFormatDecreaseIndent = new QAction(MainWindow); + actionFormatDecreaseIndent->setObjectName(QString::fromUtf8("actionFormatDecreaseIndent")); + QIcon icon18; + icon18.addFile(QString::fromUtf8(":/images/format-indent-less.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatDecreaseIndent->setIcon(icon18); + actionFormatBulletedList = new QAction(MainWindow); + actionFormatBulletedList->setObjectName(QString::fromUtf8("actionFormatBulletedList")); + actionFormatBulletedList->setCheckable(true); + QIcon icon19; + icon19.addFile(QString::fromUtf8(":/images/bulleted-list.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatBulletedList->setIcon(icon19); + actionFormatNumberedList = new QAction(MainWindow); + actionFormatNumberedList->setObjectName(QString::fromUtf8("actionFormatNumberedList")); + actionFormatNumberedList->setCheckable(true); + QIcon icon20; + icon20.addFile(QString::fromUtf8(":/images/numbered-list.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatNumberedList->setIcon(icon20); + actionInsertImage = new QAction(MainWindow); + actionInsertImage->setObjectName(QString::fromUtf8("actionInsertImage")); + QIcon icon21; + icon21.addFile(QString::fromUtf8(":/images/image-x-generic.png"), QSize(), QIcon::Normal, QIcon::Off); + actionInsertImage->setIcon(icon21); + actionInsertImage->setVisible(false); + actionCreateLink = new QAction(MainWindow); + actionCreateLink->setObjectName(QString::fromUtf8("actionCreateLink")); + QIcon icon22; + icon22.addFile(QString::fromUtf8(":/images/text-html.png"), QSize(), QIcon::Normal, QIcon::Off); + actionCreateLink->setIcon(icon22); + actionZoomOut = new QAction(MainWindow); + actionZoomOut->setObjectName(QString::fromUtf8("actionZoomOut")); + QIcon icon23; + icon23.addFile(QString::fromUtf8(":/images/list-remove.png"), QSize(), QIcon::Normal, QIcon::Off); + actionZoomOut->setIcon(icon23); + actionZoomIn = new QAction(MainWindow); + actionZoomIn->setObjectName(QString::fromUtf8("actionZoomIn")); + QIcon icon24; + icon24.addFile(QString::fromUtf8(":/images/list-add.png"), QSize(), QIcon::Normal, QIcon::Off); + actionZoomIn->setIcon(icon24); + actionExit = new QAction(MainWindow); + actionExit->setObjectName(QString::fromUtf8("actionExit")); + actionStyleParagraph = new QAction(MainWindow); + actionStyleParagraph->setObjectName(QString::fromUtf8("actionStyleParagraph")); + actionStyleHeading1 = new QAction(MainWindow); + actionStyleHeading1->setObjectName(QString::fromUtf8("actionStyleHeading1")); + actionStyleHeading2 = new QAction(MainWindow); + actionStyleHeading2->setObjectName(QString::fromUtf8("actionStyleHeading2")); + actionStyleHeading3 = new QAction(MainWindow); + actionStyleHeading3->setObjectName(QString::fromUtf8("actionStyleHeading3")); + actionStyleHeading4 = new QAction(MainWindow); + actionStyleHeading4->setObjectName(QString::fromUtf8("actionStyleHeading4")); + actionStyleHeading5 = new QAction(MainWindow); + actionStyleHeading5->setObjectName(QString::fromUtf8("actionStyleHeading5")); + actionStyleHeading6 = new QAction(MainWindow); + actionStyleHeading6->setObjectName(QString::fromUtf8("actionStyleHeading6")); + actionStylePreformatted = new QAction(MainWindow); + actionStylePreformatted->setObjectName(QString::fromUtf8("actionStylePreformatted")); + actionStyleAddress = new QAction(MainWindow); + actionStyleAddress->setObjectName(QString::fromUtf8("actionStyleAddress")); + actionFormatFontName = new QAction(MainWindow); + actionFormatFontName->setObjectName(QString::fromUtf8("actionFormatFontName")); + actionFormatTextColor = new QAction(MainWindow); + actionFormatTextColor->setObjectName(QString::fromUtf8("actionFormatTextColor")); + QIcon icon25; + icon25.addFile(QString::fromUtf8(":/images/text_color.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatTextColor->setIcon(icon25); + actionFormatBackgroundColor = new QAction(MainWindow); + actionFormatBackgroundColor->setObjectName(QString::fromUtf8("actionFormatBackgroundColor")); + actionFormatFontSize = new QAction(MainWindow); + actionFormatFontSize->setObjectName(QString::fromUtf8("actionFormatFontSize")); + QIcon icon26; + icon26.addFile(QString::fromUtf8(":/images/text.png"), QSize(), QIcon::Normal, QIcon::Off); + actionFormatFontSize->setIcon(icon26); + actionInsertHtml = new QAction(MainWindow); + actionInsertHtml->setObjectName(QString::fromUtf8("actionInsertHtml")); + QIcon icon27; + icon27.addFile(QString::fromUtf8(":/images/insert-html.png"), QSize(), QIcon::Normal, QIcon::Off); + actionInsertHtml->setIcon(icon27); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName(QString::fromUtf8("centralwidget")); + verticalLayout = new QVBoxLayout(centralwidget); + verticalLayout->setContentsMargins(0, 0, 0, 0); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + tabWidget = new QTabWidget(centralwidget); + tabWidget->setObjectName(QString::fromUtf8("tabWidget")); + tabWidget->setTabPosition(QTabWidget::South); + tabWidget->setTabShape(QTabWidget::Rounded); + tabWidget->setDocumentMode(true); + tab = new QWidget(); + tab->setObjectName(QString::fromUtf8("tab")); + verticalLayout_2 = new QVBoxLayout(tab); + verticalLayout_2->setContentsMargins(0, 0, 0, 0); + verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2")); + webView = new QWebView(tab); + webView->setObjectName(QString::fromUtf8("webView")); + webView->setUrl(QUrl(QString::fromUtf8("about:blank"))); + + verticalLayout_2->addWidget(webView); + + tabWidget->addTab(tab, QString()); + tab_2 = new QWidget(); + tab_2->setObjectName(QString::fromUtf8("tab_2")); + verticalLayout_3 = new QVBoxLayout(tab_2); + verticalLayout_3->setContentsMargins(0, 0, 0, 0); + verticalLayout_3->setObjectName(QString::fromUtf8("verticalLayout_3")); + plainTextEdit = new QPlainTextEdit(tab_2); + plainTextEdit->setObjectName(QString::fromUtf8("plainTextEdit")); + plainTextEdit->setFrameShape(QFrame::NoFrame); + plainTextEdit->setReadOnly(true); + + verticalLayout_3->addWidget(plainTextEdit); + + tabWidget->addTab(tab_2, QString()); + + verticalLayout->addWidget(tabWidget); + + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName(QString::fromUtf8("menubar")); + menubar->setGeometry(QRect(0, 0, 659, 31)); + menu_File = new QMenu(menubar); + menu_File->setObjectName(QString::fromUtf8("menu_File")); + menu_Edit = new QMenu(menubar); + menu_Edit->setObjectName(QString::fromUtf8("menu_Edit")); + menuF_ormat = new QMenu(menubar); + menuF_ormat->setObjectName(QString::fromUtf8("menuF_ormat")); + menuSt_yle = new QMenu(menuF_ormat); + menuSt_yle->setObjectName(QString::fromUtf8("menuSt_yle")); + menu_Align = new QMenu(menuF_ormat); + menu_Align->setObjectName(QString::fromUtf8("menu_Align")); + MainWindow->setMenuBar(menubar); + standardToolBar = new QToolBar(MainWindow); + standardToolBar->setObjectName(QString::fromUtf8("standardToolBar")); + standardToolBar->setEnabled(false); + standardToolBar->setIconSize(QSize(24, 24)); + MainWindow->addToolBar(Qt::TopToolBarArea, standardToolBar); + formatToolBar = new QToolBar(MainWindow); + formatToolBar->setObjectName(QString::fromUtf8("formatToolBar")); + formatToolBar->setIconSize(QSize(24, 24)); + MainWindow->addToolBar(Qt::TopToolBarArea, formatToolBar); + MainWindow->insertToolBarBreak(formatToolBar); + + menubar->addAction(menu_File->menuAction()); + menubar->addAction(menu_Edit->menuAction()); + menubar->addAction(menuF_ormat->menuAction()); + menu_File->addAction(actionFileNew); + menu_File->addAction(actionFileOpen); + menu_File->addAction(actionFileSave); + menu_File->addAction(actionFileSaveAs); + menu_File->addSeparator(); + menu_File->addAction(actionExit); + menu_Edit->addAction(actionEditUndo); + menu_Edit->addAction(actionEditRedo); + menu_Edit->addSeparator(); + menu_Edit->addAction(actionEditCut); + menu_Edit->addAction(actionEditCopy); + menu_Edit->addAction(actionEditPaste); + menu_Edit->addSeparator(); + menu_Edit->addAction(actionEditSelectAll); + menu_Edit->addSeparator(); + menu_Edit->addAction(actionInsertImage); + menu_Edit->addAction(actionCreateLink); + menu_Edit->addAction(actionInsertHtml); + menuF_ormat->addAction(menuSt_yle->menuAction()); + menuF_ormat->addAction(menu_Align->menuAction()); + menuF_ormat->addSeparator(); + menuF_ormat->addAction(actionFormatBold); + menuF_ormat->addAction(actionFormatItalic); + menuF_ormat->addAction(actionFormatUnderline); + menuF_ormat->addAction(actionFormatStrikethrough); + menuF_ormat->addSeparator(); + menuF_ormat->addAction(actionFormatIncreaseIndent); + menuF_ormat->addAction(actionFormatDecreaseIndent); + menuF_ormat->addSeparator(); + menuF_ormat->addAction(actionFormatNumberedList); + menuF_ormat->addAction(actionFormatBulletedList); + menuF_ormat->addSeparator(); + menuF_ormat->addAction(actionFormatFontName); + menuF_ormat->addAction(actionFormatFontSize); + menuF_ormat->addSeparator(); + menuF_ormat->addAction(actionFormatTextColor); + menuF_ormat->addAction(actionFormatBackgroundColor); + menuSt_yle->addAction(actionStyleParagraph); + menuSt_yle->addAction(actionStyleHeading1); + menuSt_yle->addAction(actionStyleHeading2); + menuSt_yle->addAction(actionStyleHeading3); + menuSt_yle->addAction(actionStyleHeading4); + menuSt_yle->addAction(actionStyleHeading5); + menuSt_yle->addAction(actionStyleHeading6); + menuSt_yle->addAction(actionStylePreformatted); + menuSt_yle->addAction(actionStyleAddress); + menu_Align->addAction(actionFormatAlignLeft); + menu_Align->addAction(actionFormatAlignCenter); + menu_Align->addAction(actionFormatAlignRight); + menu_Align->addAction(actionFormatAlignJustify); + standardToolBar->addAction(actionFileNew); + standardToolBar->addAction(actionFileOpen); + standardToolBar->addAction(actionFileSave); + standardToolBar->addSeparator(); + standardToolBar->addAction(actionEditUndo); + standardToolBar->addAction(actionEditRedo); + standardToolBar->addSeparator(); + standardToolBar->addAction(actionEditCut); + standardToolBar->addAction(actionEditCopy); + standardToolBar->addAction(actionEditPaste); + standardToolBar->addSeparator(); + standardToolBar->addAction(actionZoomOut); + standardToolBar->addAction(actionZoomIn); + formatToolBar->addAction(actionFormatBold); + formatToolBar->addAction(actionFormatItalic); + formatToolBar->addAction(actionFormatUnderline); + formatToolBar->addAction(actionFormatStrikethrough); + formatToolBar->addAction(actionFormatFontSize); + formatToolBar->addAction(actionFormatTextColor); + formatToolBar->addSeparator(); + formatToolBar->addAction(actionFormatAlignLeft); + formatToolBar->addAction(actionFormatAlignCenter); + formatToolBar->addAction(actionFormatAlignRight); + formatToolBar->addAction(actionFormatAlignJustify); + formatToolBar->addSeparator(); + formatToolBar->addAction(actionFormatDecreaseIndent); + formatToolBar->addAction(actionFormatIncreaseIndent); + formatToolBar->addSeparator(); + formatToolBar->addAction(actionFormatNumberedList); + formatToolBar->addAction(actionFormatBulletedList); + formatToolBar->addSeparator(); + formatToolBar->addAction(actionInsertImage); + formatToolBar->addAction(actionCreateLink); + formatToolBar->addAction(actionInsertHtml); + + retranslateUi(MainWindow); + + tabWidget->setCurrentIndex(0); + + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QApplication::translate("MainWindow", "HTML Editor", 0, QApplication::UnicodeUTF8)); + actionFileNew->setText(QApplication::translate("MainWindow", "&New", 0, QApplication::UnicodeUTF8)); + actionFileNew->setShortcut(QApplication::translate("MainWindow", "Ctrl+N", 0, QApplication::UnicodeUTF8)); + actionFileOpen->setText(QApplication::translate("MainWindow", "&Open...", 0, QApplication::UnicodeUTF8)); + actionFileOpen->setShortcut(QApplication::translate("MainWindow", "Ctrl+O", 0, QApplication::UnicodeUTF8)); + actionFileSave->setText(QApplication::translate("MainWindow", "&Save", 0, QApplication::UnicodeUTF8)); + actionFileSave->setShortcut(QApplication::translate("MainWindow", "Ctrl+S", 0, QApplication::UnicodeUTF8)); + actionFileSaveAs->setText(QApplication::translate("MainWindow", "Save &As...", 0, QApplication::UnicodeUTF8)); + actionEditUndo->setText(QApplication::translate("MainWindow", "&Undo", 0, QApplication::UnicodeUTF8)); + actionEditUndo->setShortcut(QApplication::translate("MainWindow", "Ctrl+Z", 0, QApplication::UnicodeUTF8)); + actionEditRedo->setText(QApplication::translate("MainWindow", "&Redo", 0, QApplication::UnicodeUTF8)); + actionEditRedo->setShortcut(QApplication::translate("MainWindow", "Ctrl+Y", 0, QApplication::UnicodeUTF8)); + actionEditCut->setText(QApplication::translate("MainWindow", "Cu&t", 0, QApplication::UnicodeUTF8)); + actionEditCut->setShortcut(QApplication::translate("MainWindow", "Ctrl+X", 0, QApplication::UnicodeUTF8)); + actionEditCopy->setText(QApplication::translate("MainWindow", "&Copy", 0, QApplication::UnicodeUTF8)); + actionEditCopy->setShortcut(QApplication::translate("MainWindow", "Ctrl+C", 0, QApplication::UnicodeUTF8)); + actionEditPaste->setText(QApplication::translate("MainWindow", "&Paste", 0, QApplication::UnicodeUTF8)); + actionEditPaste->setShortcut(QApplication::translate("MainWindow", "Ctrl+V", 0, QApplication::UnicodeUTF8)); + actionEditSelectAll->setText(QApplication::translate("MainWindow", "Select A&ll", 0, QApplication::UnicodeUTF8)); + actionEditSelectAll->setShortcut(QApplication::translate("MainWindow", "Ctrl+A", 0, QApplication::UnicodeUTF8)); + actionFormatBold->setText(QApplication::translate("MainWindow", "&Bold", 0, QApplication::UnicodeUTF8)); + actionFormatBold->setShortcut(QApplication::translate("MainWindow", "Ctrl+B", 0, QApplication::UnicodeUTF8)); + actionFormatItalic->setText(QApplication::translate("MainWindow", "&Italic", 0, QApplication::UnicodeUTF8)); + actionFormatItalic->setShortcut(QApplication::translate("MainWindow", "Ctrl+I", 0, QApplication::UnicodeUTF8)); + actionFormatUnderline->setText(QApplication::translate("MainWindow", "&Underline", 0, QApplication::UnicodeUTF8)); + actionFormatUnderline->setShortcut(QApplication::translate("MainWindow", "Ctrl+U", 0, QApplication::UnicodeUTF8)); + actionFormatStrikethrough->setText(QApplication::translate("MainWindow", "&Strikethrough", 0, QApplication::UnicodeUTF8)); + actionFormatAlignLeft->setText(QApplication::translate("MainWindow", "Align &Left", 0, QApplication::UnicodeUTF8)); + actionFormatAlignCenter->setText(QApplication::translate("MainWindow", "Align &Center", 0, QApplication::UnicodeUTF8)); + actionFormatAlignRight->setText(QApplication::translate("MainWindow", "Align &Right", 0, QApplication::UnicodeUTF8)); + actionFormatAlignJustify->setText(QApplication::translate("MainWindow", "Align &Justify", 0, QApplication::UnicodeUTF8)); + actionFormatIncreaseIndent->setText(QApplication::translate("MainWindow", "I&ncrease Indent", 0, QApplication::UnicodeUTF8)); + actionFormatDecreaseIndent->setText(QApplication::translate("MainWindow", "&Decrease Indent", 0, QApplication::UnicodeUTF8)); + actionFormatBulletedList->setText(QApplication::translate("MainWindow", "Bulle&ted List", 0, QApplication::UnicodeUTF8)); + actionFormatNumberedList->setText(QApplication::translate("MainWindow", "&Numbered List", 0, QApplication::UnicodeUTF8)); + actionInsertImage->setText(QApplication::translate("MainWindow", "Insert &Image...", 0, QApplication::UnicodeUTF8)); + actionCreateLink->setText(QApplication::translate("MainWindow", "Create Link...", 0, QApplication::UnicodeUTF8)); + actionZoomOut->setText(QApplication::translate("MainWindow", "Zoom Out", 0, QApplication::UnicodeUTF8)); + actionZoomIn->setText(QApplication::translate("MainWindow", "Zoom In", 0, QApplication::UnicodeUTF8)); + actionExit->setText(QApplication::translate("MainWindow", "E&xit", 0, QApplication::UnicodeUTF8)); + actionExit->setShortcut(QApplication::translate("MainWindow", "Ctrl+Q", 0, QApplication::UnicodeUTF8)); + actionStyleParagraph->setText(QApplication::translate("MainWindow", "&Paragraph", 0, QApplication::UnicodeUTF8)); + actionStyleHeading1->setText(QApplication::translate("MainWindow", "Heading &1", 0, QApplication::UnicodeUTF8)); + actionStyleHeading2->setText(QApplication::translate("MainWindow", "Heading &2", 0, QApplication::UnicodeUTF8)); + actionStyleHeading3->setText(QApplication::translate("MainWindow", "Heading &3", 0, QApplication::UnicodeUTF8)); + actionStyleHeading4->setText(QApplication::translate("MainWindow", "Heading &4", 0, QApplication::UnicodeUTF8)); + actionStyleHeading5->setText(QApplication::translate("MainWindow", "Heading &5", 0, QApplication::UnicodeUTF8)); + actionStyleHeading6->setText(QApplication::translate("MainWindow", "Heading &6", 0, QApplication::UnicodeUTF8)); + actionStylePreformatted->setText(QApplication::translate("MainWindow", "Pre&formatted", 0, QApplication::UnicodeUTF8)); + actionStyleAddress->setText(QApplication::translate("MainWindow", "&Address", 0, QApplication::UnicodeUTF8)); + actionFormatFontName->setText(QApplication::translate("MainWindow", "&Font Name...", 0, QApplication::UnicodeUTF8)); + actionFormatTextColor->setText(QApplication::translate("MainWindow", "Text &Color...", 0, QApplication::UnicodeUTF8)); + actionFormatBackgroundColor->setText(QApplication::translate("MainWindow", "Bac&kground Color...", 0, QApplication::UnicodeUTF8)); + actionFormatFontSize->setText(QApplication::translate("MainWindow", "Font Si&ze...", 0, QApplication::UnicodeUTF8)); + actionInsertHtml->setText(QApplication::translate("MainWindow", "Insert HTML...", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + actionInsertHtml->setToolTip(QApplication::translate("MainWindow", "Insert HTML", 0, QApplication::UnicodeUTF8)); +#endif // QT_NO_TOOLTIP + tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate("MainWindow", "Tab 1", 0, QApplication::UnicodeUTF8)); + tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate("MainWindow", "Tab 2", 0, QApplication::UnicodeUTF8)); + menu_File->setTitle(QApplication::translate("MainWindow", "&File", 0, QApplication::UnicodeUTF8)); + menu_Edit->setTitle(QApplication::translate("MainWindow", "&Edit", 0, QApplication::UnicodeUTF8)); + menuF_ormat->setTitle(QApplication::translate("MainWindow", "F&ormat", 0, QApplication::UnicodeUTF8)); + menuSt_yle->setTitle(QApplication::translate("MainWindow", "St&yle", 0, QApplication::UnicodeUTF8)); + menu_Align->setTitle(QApplication::translate("MainWindow", "&Align", 0, QApplication::UnicodeUTF8)); + standardToolBar->setWindowTitle(QApplication::translate("MainWindow", "Standard", 0, QApplication::UnicodeUTF8)); + formatToolBar->setWindowTitle(QApplication::translate("MainWindow", "Formatting", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_HTMLEDITOR_H diff --git a/sources/ui/ui_inserthtmldialog.h b/sources/ui/ui_inserthtmldialog.h new file mode 100644 index 000000000..ddf46043d --- /dev/null +++ b/sources/ui/ui_inserthtmldialog.h @@ -0,0 +1,78 @@ +/******************************************************************************** +** Form generated from reading UI file 'inserthtmldialog.ui' +** +** Created: Sun 31. Mar 20:12:38 2013 +** by: Qt User Interface Compiler version 4.8.4 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_INSERTHTMLDIALOG_H +#define UI_INSERTHTMLDIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_Dialog +{ +public: + QVBoxLayout *verticalLayout; + QLabel *label; + QPlainTextEdit *plainTextEdit; + QDialogButtonBox *buttonBox; + + void setupUi(QDialog *Dialog) + { + if (Dialog->objectName().isEmpty()) + Dialog->setObjectName(QString::fromUtf8("Dialog")); + Dialog->resize(426, 288); + verticalLayout = new QVBoxLayout(Dialog); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + label = new QLabel(Dialog); + label->setObjectName(QString::fromUtf8("label")); + + verticalLayout->addWidget(label); + + plainTextEdit = new QPlainTextEdit(Dialog); + plainTextEdit->setObjectName(QString::fromUtf8("plainTextEdit")); + + verticalLayout->addWidget(plainTextEdit); + + buttonBox = new QDialogButtonBox(Dialog); + buttonBox->setObjectName(QString::fromUtf8("buttonBox")); + buttonBox->setOrientation(Qt::Horizontal); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + + verticalLayout->addWidget(buttonBox); + + + retranslateUi(Dialog); + + QMetaObject::connectSlotsByName(Dialog); + } // setupUi + + void retranslateUi(QDialog *Dialog) + { + Dialog->setWindowTitle(QApplication::translate("Dialog", "Insert HTML", 0, QApplication::UnicodeUTF8)); + label->setText(QApplication::translate("Dialog", "HTML Code:", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class Dialog: public Ui_Dialog {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_INSERTHTMLDIALOG_H