From b35bb53512119ffe60415b3d3bb96a3cdb87d141 Mon Sep 17 00:00:00 2001 From: cfdev Date: Tue, 9 Apr 2013 11:26:53 +0000 Subject: [PATCH] Delete htmleditor, add ritchEdit git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2095 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- qelectrotech.pro | 10 +- sources/diagramtextitem.cpp | 9 +- sources/diagramview.cpp | 1 - sources/htmleditor/highlighter.cpp | 269 ------ sources/htmleditor/highlighter.h | 70 -- sources/htmleditor/htmleditor.cpp | 647 -------------- sources/htmleditor/htmleditor.h | 121 --- sources/htmleditor/htmleditor.qrc | 33 - sources/htmleditor/htmleditor.ui | 640 -------------- sources/htmleditor/images/bulleted-list.png | Bin 678 -> 0 bytes sources/htmleditor/images/document-new.png | Bin 692 -> 0 bytes sources/htmleditor/images/document-open.png | Bin 919 -> 0 bytes .../htmleditor/images/document-save-as.png | Bin 1097 -> 0 bytes sources/htmleditor/images/document-save.png | Bin 1150 -> 0 bytes sources/htmleditor/images/edit-copy.png | Bin 725 -> 0 bytes sources/htmleditor/images/edit-cut.png | Bin 1177 -> 0 bytes sources/htmleditor/images/edit-paste.png | Bin 773 -> 0 bytes sources/htmleditor/images/edit-redo.png | Bin 810 -> 0 bytes sources/htmleditor/images/edit-select-all.png | Bin 645 -> 0 bytes sources/htmleditor/images/edit-undo.png | Bin 1011 -> 0 bytes .../htmleditor/images/format-indent-less.png | Bin 683 -> 0 bytes .../htmleditor/images/format-indent-more.png | Bin 698 -> 0 bytes .../images/format-justify-center.png | Bin 506 -> 0 bytes .../htmleditor/images/format-justify-fill.png | Bin 495 -> 0 bytes .../htmleditor/images/format-justify-left.png | Bin 494 -> 0 bytes .../images/format-justify-right.png | Bin 506 -> 0 bytes .../htmleditor/images/format-text-bold.png | Bin 939 -> 0 bytes .../htmleditor/images/format-text-italic.png | Bin 784 -> 0 bytes .../images/format-text-strikethrough.png | Bin 797 -> 0 bytes .../images/format-text-underline.png | Bin 869 -> 0 bytes sources/htmleditor/images/image-x-generic.png | Bin 900 -> 0 bytes sources/htmleditor/images/insert-html.png | Bin 757 -> 0 bytes sources/htmleditor/images/list-add.png | Bin 386 -> 0 bytes sources/htmleditor/images/list-remove.png | Bin 252 -> 0 bytes sources/htmleditor/images/numbered-list.png | Bin 739 -> 0 bytes sources/htmleditor/images/text-html.png | Bin 1097 -> 0 bytes sources/htmleditor/images/text.png | Bin 1185 -> 0 bytes sources/htmleditor/images/text_color.png | Bin 889 -> 0 bytes sources/htmleditor/inserthtmldialog.ui | 41 - sources/htmleditor/qtlogo.png | Bin 2205 -> 0 bytes sources/richtext/README.txt | 1 + sources/richtext/addlinkdialog.ui | 112 +++ sources/richtext/richtexteditor.cpp | 797 ++++++++++++++++++ sources/richtext/richtexteditor_p.h | 104 +++ sources/richtext/ui_addlinkdialog.h | 117 +++ 45 files changed, 1140 insertions(+), 1832 deletions(-) delete mode 100644 sources/htmleditor/highlighter.cpp delete mode 100644 sources/htmleditor/highlighter.h delete mode 100644 sources/htmleditor/htmleditor.cpp delete mode 100644 sources/htmleditor/htmleditor.h delete mode 100644 sources/htmleditor/htmleditor.qrc delete mode 100644 sources/htmleditor/htmleditor.ui delete mode 100644 sources/htmleditor/images/bulleted-list.png delete mode 100644 sources/htmleditor/images/document-new.png delete mode 100644 sources/htmleditor/images/document-open.png delete mode 100644 sources/htmleditor/images/document-save-as.png delete mode 100644 sources/htmleditor/images/document-save.png delete mode 100644 sources/htmleditor/images/edit-copy.png delete mode 100644 sources/htmleditor/images/edit-cut.png delete mode 100644 sources/htmleditor/images/edit-paste.png delete mode 100644 sources/htmleditor/images/edit-redo.png delete mode 100644 sources/htmleditor/images/edit-select-all.png delete mode 100644 sources/htmleditor/images/edit-undo.png delete mode 100644 sources/htmleditor/images/format-indent-less.png delete mode 100644 sources/htmleditor/images/format-indent-more.png delete mode 100644 sources/htmleditor/images/format-justify-center.png delete mode 100644 sources/htmleditor/images/format-justify-fill.png delete mode 100644 sources/htmleditor/images/format-justify-left.png delete mode 100644 sources/htmleditor/images/format-justify-right.png delete mode 100644 sources/htmleditor/images/format-text-bold.png delete mode 100644 sources/htmleditor/images/format-text-italic.png delete mode 100644 sources/htmleditor/images/format-text-strikethrough.png delete mode 100644 sources/htmleditor/images/format-text-underline.png delete mode 100644 sources/htmleditor/images/image-x-generic.png delete mode 100644 sources/htmleditor/images/insert-html.png delete mode 100644 sources/htmleditor/images/list-add.png delete mode 100644 sources/htmleditor/images/list-remove.png delete mode 100644 sources/htmleditor/images/numbered-list.png delete mode 100644 sources/htmleditor/images/text-html.png delete mode 100644 sources/htmleditor/images/text.png delete mode 100644 sources/htmleditor/images/text_color.png delete mode 100644 sources/htmleditor/inserthtmldialog.ui delete mode 100644 sources/htmleditor/qtlogo.png create mode 100644 sources/richtext/README.txt create mode 100644 sources/richtext/addlinkdialog.ui create mode 100644 sources/richtext/richtexteditor.cpp create mode 100644 sources/richtext/richtexteditor_p.h create mode 100644 sources/richtext/ui_addlinkdialog.h diff --git a/qelectrotech.pro b/qelectrotech.pro index fb8082c74..15f8ad344 100644 --- a/qelectrotech.pro +++ b/qelectrotech.pro @@ -63,11 +63,11 @@ DEPENDPATH += . INCLUDEPATH += sources sources/editor sources/titleblock # Fichiers sources -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 +HEADERS += sources/*.h sources/ui/*.h sources/editor/*.h sources/titleblock/*.h sources/richtext/*.h +SOURCES += sources/*.cpp sources/editor/*.cpp sources/titleblock/*.cpp sources/richtext/*.cpp # Liste des fichiers qui seront incorpores au binaire en tant que ressources Qt -RESOURCES += qelectrotech.qrc sources/htmleditor/htmleditor.qrc +RESOURCES += qelectrotech.qrc # Liste des ressources Windows RC_FILE = ico/windows_icon/qelectrotech.rc @@ -76,10 +76,10 @@ 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 webkit +QT += xml svg network sql # UI DESIGNER FILES AND GENERATION SOURCES FILES -FORMS = sources/htmleditor/htmleditor.ui sources/htmleditor/inserthtmldialog.ui +FORMS = sources/richtext/addlinkdialog.ui UI_SOURCES_DIR = sources/ui/ UI_HEADERS_DIR = sources/ui/ diff --git a/sources/diagramtextitem.cpp b/sources/diagramtextitem.cpp index 2c1cf042f..a204280cd 100644 --- a/sources/diagramtextitem.cpp +++ b/sources/diagramtextitem.cpp @@ -20,7 +20,8 @@ #include "qet.h" #include "qetapp.h" -#include "htmleditor/htmleditor.h" +#include "richtext/richtexteditor_p.h" + /** Constructeur @param parent Le QGraphicsItem parent du champ de texte @@ -313,13 +314,11 @@ void DiagramTextItem::setHtmlText(const QString &txt) { */ void DiagramTextItem::edit() { //Open the HtmlEditor - HtmlEditor *editor = new HtmlEditor(); + qdesigner_internal::RichTextEditorDialog *editor = new qdesigner_internal::RichTextEditorDialog(); // 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); + editor->setText( toHtml() ); // show editor->show(); } diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index e4f0cd8f3..3bf0b5f2a 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -38,7 +38,6 @@ #include "qetmessagebox.h" #include "qtextorientationspinboxwidget.h" -#include "htmleditor/htmleditor.h" /** Constructeur diff --git a/sources/htmleditor/highlighter.cpp b/sources/htmleditor/highlighter.cpp deleted file mode 100644 index 6d1062941..000000000 --- a/sources/htmleditor/highlighter.cpp +++ /dev/null @@ -1,269 +0,0 @@ -/**************************************************************************** -** -** 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 deleted file mode 100644 index 603433efe..000000000 --- a/sources/htmleditor/highlighter.h +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** 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 deleted file mode 100644 index 9f769d18d..000000000 --- a/sources/htmleditor/htmleditor.cpp +++ /dev/null @@ -1,647 +0,0 @@ -/**************************************************************************** -** -** 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 "../ui/ui_htmleditor.h" -#include "../ui/ui_inserthtmldialog.h" - -#include "htmleditor.h" -#include "highlighter.h" - -#include -#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, 300); - - 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::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); -} - - -/** - * @brief HtmlEditor::on_buttonBox_accepted - */ -void HtmlEditor::on_buttonBox_accepted() { - emit applyEditText( ui->webView->page()->mainFrame()->toHtml() ); - this->close(); -} - - -/** - * @brief HtmlEditor::on_buttonBox_rejected - */ -void HtmlEditor::on_buttonBox_rejected() { - this->close(); -} - diff --git a/sources/htmleditor/htmleditor.h b/sources/htmleditor/htmleditor.h deleted file mode 100644 index ed76ce7ba..000000000 --- a/sources/htmleditor/htmleditor.h +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** -** -** 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); - -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; - - private slots: - void on_buttonBox_accepted(); - void on_buttonBox_rejected(); -}; - -#endif // HTML_EDITOR_H diff --git a/sources/htmleditor/htmleditor.qrc b/sources/htmleditor/htmleditor.qrc deleted file mode 100644 index 5207a22fa..000000000 --- a/sources/htmleditor/htmleditor.qrc +++ /dev/null @@ -1,33 +0,0 @@ - - - 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 deleted file mode 100644 index a949b94f6..000000000 --- a/sources/htmleditor/htmleditor.ui +++ /dev/null @@ -1,640 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 562 - 361 - - - - HTML Editor - - - - - - - - - QTabWidget::South - - - QTabWidget::Rounded - - - 0 - - - true - - - - Tab 1 - - - - - - - 0 - 0 - - - - - about:blank - - - - - - - - - Tab 2 - - - - 0 - - - - - QFrame::NoFrame - - - true - - - - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - - - 0 - 0 - 562 - 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 deleted file mode 100644 index 69708f1c4167e8ceaa7bc281e9832c109cbbd0b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$KfuP)Px#24YJ`L;#BbjR1%>`?);;00K@)L_t(I%dJ(>YScg!JvW=gx^}6L_0|53A0P#h zYPGep)Jj1F-z#eui|e}9(kcj|79RyasSmawm2EaNnLF2qY_ge6c5BfCf#l}Sx%Zsh znUIL!Mf00_hIE5-3Z;#gt-{X6(kG=Neuass7d z!4Sq6?C$kaGGiFb2F5UqF#wRhIQX!~D1eB5EiG0FnliB!Mvo z%nW8ugGy;IGptR!@jKlet||loPO))_2;RJXJ!${|y1fq8n;Yo%I!^NH{WSo9S6rP* z7>Cx0o16twc`lMfyFH(roWNQOYb`_sB6fJC_lMsOK|8P7U$oYXI0sLkJR@Igz4-Xi z=G4S6yyW&g2}v>%>=$jT!h@BE<>d9|2ADaw&)QU&*81<6mu@e+$;^zk)h0yj&^~c& zEG6&l?^ZG|-n=!QY_WW2C1+wb!+|vbY?;~pda1bL%m9EN1i|-DpFiF>&+m=(&2(jJ zdrSTo+AmuoBJS)@+bq*I(Qs}tGjqB8{l+&}aR{o(ikIuzMB+)E6_HI`s#Kv?^Djos z%(>J_of3IYp%QVnz$LbYcr|g=I=|fA_>n6hN(*EMY89;IixF#`lq|^9F(-xM-uc9L zm+s{5m=7n<7f+}u_C3y8@5lPoM;_vf$8&mI3fu1AAGJ<+;ujHxr*S!;RL zTDc-(8zKmZND)!r^Sr+2d1tj+t?vhZ6ox_6m~Hfrj*fnvp8k&i0JlO+q%(Fov;Y7A M07*qoM6N<$f_nNrBme*a diff --git a/sources/htmleditor/images/document-new.png b/sources/htmleditor/images/document-new.png deleted file mode 100644 index e3808a108e335b14e13711783a3717f7b6013375..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 692 zcmV;l0!#ggP);y z08cd6u?+wK010qNS#tmY4c7nw4c7reD4Tcy000McNliru)dCU@B{0fECJ6ul0zpYc zK~y-)t(DDd6JZdCpPAiMn&Jmdn>7fYJcxJ_#8&Vh@X~`PZ{pRn2x2dy;>SPX!Ham1 z+(i)tHKi8|da}9HkQgW;F{asM$HRVRQ|)SfA!K*h_jzZ2znNWOpKH`v5ugP4u2;7> zF7d_vhj(uStA7Jk38)+yP+RQbsIfED#}_X&uen~m?`ED`y>b0!VW^o8{zroTOMI(f zl-d6J>5AdJ8g*8ly7>*wW)sJ8Ff&91k+7)jH5esnQPvkYrCDs|65`BrXyG*$Ji9FR zZC&%=7!X6u49qYyEHKOf#;EiV*}-H1bRJOP05C2ChxY^{Kpay+6+|2YIY_`FGTH?H z4FnyAg9c(hHh}Hlf>kyA7ePeR!$eVW2sp}sWrlVFhHJR~b2dM3Ap}o=mb)8RRa1=- zkgUc6DhM-}9K)x=m{ZKom1t~y=gi602jJ&a#%t@1NwYH9CqLpU98Bjh=QuKRnqI$z z>(%?NSGOtfxwA{uYPFoEq;jZ4_fd7CVO5i3!LCxY+wE|ZX(&TdK1mgkr$i4-E%#4d zVPZ*k`Cd*A5J4#bPBsA=nH6dZqS1XEkCF}JxpB`2-o1Z2m61p&MGVbqEU^iDftQ!g zQ>|9h9@fZ2G%`*Q6xD2(Xfchu-R?xYG4Y;|`| aWBLmt`;((hn6}^m0000 z)2Km68^MnvEGgK7-Rpo;Z-zSP9E?vGfG2zJ* zCjdBe<{fwLlaHTVzOZ~2MmGBz{TKVn$1@y+>T$9q>fpn>$R7szB_i!XRE8~vMi&~Xvo6CLVWQ`i}Sw-QFM1^ zGb3_i^{)LL@`tN)!8zByeD2Moql`lcY~EI$d-@o!oqA&Q0>H4l_SE>J+)Mo4N8iq5 z*;_WsSVYK6V`jR}W~bo#R{vj6duyr|^YGysQ5QQ-(rh;E&yA9sor3RwzItFNKrp4- z%TwuXUn3qkuIG9F<*%#l*Q-W7x!o)71MAGpq}8u~JNUE6!| z#2YuP{GhkzhOxN$E&{%OK02M}gBOk-=>$&YqKHmvugYZ>qS4HDBauk%$%)1O=@%4g z^LYM%pGYKv#bTkgy`?_q7^t?{>;Qx#VTz^V|8%+pHJt|FvEyf0NG3UZY##u!EE5a{ z-N2BT2}zO=MG;rUM!NSm=EOxopx9_)bZCI?{f)RPHs<(>lG%l^)Ck}ffh~7z z+Ds~yQZfEtJS9m62VqCa75d)2a?=a<>@&^8I$=Sn|S$RoITuwI0CRPhsmNOsASccJ9iqUAyo7XIVDbyC?@pxDZ*7la0)@T5xrl!3|zoo&0*WtZL7Wm!I!A_dx#R*N546CW@_G)8>T7t{CvHAq!b z1NtCF0vL;FY#&4)G>VeQiw|fFF*e4CG(l9XCA76R#n#=n({{gSXLo#PcWkLpO#CM| z=jNVs{`Y^+Ju_Ee0iJuK{rx`@m5;`zw2Fo6lFdl^T=Bk@@^5XOuYUF&w*jFz>H46p z_Uw=0i>o6Wv!RtfF`g5hRb@``&$z}^I?MFc^Fyg*#t~Nf+q+*o{qb_dmLlo-{=nH) zTOM!^5A@pyhlgz=zYmHd6O-6VD^Q$voZfZHbh=P>J?7lG>k-eTi{Jb@a4TXF;D>9@ z<9DpE4kre_y4vWy@N`edKJmU#@6O!J_1V$ED@JrSPCS`F@dc25LB}t#t)IU1`Yw4{ zVl^eLv*Z&q_pcv)=;({@eFAXo;74CJ1V@h~R8>gMPN8K|0QiFIMX#)lOlaZmWo!J@ zp%*?6J90nIs)fS~oeoLh+o=$%H`Omna;N*4_-mZX!t{-N?VWFTodB=`1k2)Iq$cg% z$Bw?aWakIlx|XbEJa;iV)We4-7wO>TLkEuoC(Kf$#_iV>x0h6E?zqWh(i|pP`k%SQ zW?vLHGCD#snZ)b$vj0G9t*IDT>-Pr$NF)=uWY@ncEy5@i0C?=kX>?8F%;7x%D2hTX z7K;Fv#rfFXbzAF6r_%@srqb$$9aJ~$pj`0+kj-Z1Y&y=m+Phg((*Qt;R06;~P4@z9 zHcJ6KTv=JQNY%T~H#6|l_W+EI4uN5i*K=gjN#Zjq07F-Ld1v2tGbb1f0lWer?my64 zD@i5T?RGpKj~Nv3hUjS7Mt^S)72Zk;hB03UgEF^=fy)=@XxT=nG6H}s%k$;%u>U}7 ztq4R``uqT>s){Vj$g+$miiE2+(7CtCBo_q%S9t{kmoLz{w~27o1~Xn&=T1>xRt^vm zfz5Yr+(a&yGptq%Gcz-&s){5@$g)gLq@Gi4&Gh&7;9e16xbG6D+M20})SHB=s*=y^ zBoYZ@?V7a!O=32i-QxHAak*TAuIDMt-*_=WRaGiV19UvwK!0x!Z#`2_MQOnF0p#;K z2%sp65Dcy&lgXA^9S+CtNF-vm%gvxDjeLEwaoOKxb#*mPr=!IR5R1i_oSeLQ-xe?K zHhf<1Tx%9T5HwB0GC5-yhuRaNo%d_<$sCALT` zF5FGmbu1POhG8HI7P8qanxo@C8T-_3a006Dl?}?!^Gg%N(Y>yRJWM=AgI&$DQBoaw5Gfxa| zHh)H-herpGZf^eM0fZm~A~V3t^_5{65)pllfQ!XK@ZIw~`E}<@e(~uNF*8lPs6?o2 ztj>-!R$YZ#Q@XxxO_e_Y9%Oq#_zDy>AY&Hu3$mMbYD+Kmoz6C|Vj#G>P0frC~Qc7s8 zA%uWG``g7cJ0P7-2aymFY}+1KECNw~7udE9B4O+-D_Fd0Z5LW=Sau@u$S#kdYD{C*72J`o)&&(zUFlO)G2LN1NUEuKh0hq95jXVG0 z{B7HUl;#yH;UH$AF;6 z<+=F}=GKmRDjTbxy4~)B!JDgph#3rM0jg^7z2(K{fBo7&#+023nteo900000NkvXX Hu0mjfy%<3* diff --git a/sources/htmleditor/images/edit-cut.png b/sources/htmleditor/images/edit-cut.png deleted file mode 100644 index 7017d1b3c05602eae02c4e24ee0dd623a4a988b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1177 zcmV;K1ZMk*P)@nd7muDXRbu{1HZCDn+AB-+xJK7@d@6iHtMr8cef zK?O^Tg+P)9v=kwvArB!GKZ3D_k`_~mX^OQEH6J?YG_mrPO`;?5S&M!A__1!#7@klXwfCgN@p>Z!ezjNCo|-yQ{~& z%gwU3XX8-SVeHJ?xi2l4bMDT~aRC6T4jl%7_7oNr#pCgJ%gZVtgn*`Lh(sd=X~FS$ zd}`?WHOp?dLtzT?^73t0zPmiKJ|{CXbMRn!1vnR=l;YOt&j^J=t!cpkjx9Z1BDx-f zloBQT_9Gk)9a&dxr4XXj<1U1h5>FPNARaeX+gjSY(t_Js+8+bBG&nRMolYmDlz4gn ztLW?Rc?19%85utuJyHYCIT&LYy*+|hELxiC9g-_XTT6SruIqt^f8Cda5ai~%5DEo% zU%YgoYx}mWt(xk9loAtn|A4Bhy@_Hr2Pf3{+xQsSvgH}%V0k4nGc!LaC@g}M5|k3m z&CePqo0{L-XdF|5+gjRtEz27H<<4!(X0t(26sW2O!8r&a_-Xh@ghHX}baPJA#6I|E z`fmv$A*Dp|?iUe>gfTrc4Q8`FNVk;$VB08gb9f|BU31j&-_%rPaY-pm(}ZCd@IQQj z6OBzfu!+)DjN;EajQGq9CjXp3ad9z;g+f@GdW1o{y<;;lN&ayK@NUzz4oXOEoO5mO z-j|5q;lRJ+zoVe+HRQx%n4G*XRmOBn%Km_^e^Cd_qy-P!?Tw1f_IXiOR=%bvQ0TLU z#%E_`B3G6b77_q3EepD7;_=Fg&lKXzV}@})r4<7nca4y;b&t!HzZ#4ACw;yZe>954 za2SRVXISm=3x*J97QnAFUVkKl#c;UK z5Te_mC|C#vVF7oK_w+Xam{N!+rip1QlMd7tv^aYOrZOuQ7&*Velm( zhE&EHoOU}XA@e7I>j1Pm;Co8Qywh%n%2>ma5JM5e;2L9)hVjCBYuVZb#N?i!u4AjF zp@gv;p6qN)EG#U|a^45P4L}0GEa$!O`RZQrcy`P!FW*oY<3U{q<-!d>17HFWG;s^H zGj@3{5I}~aFo&w*p3jG6DS!Ql^L_x?iObk1Yj}N13*pe z1|jPfg-sqWe63=VG)_f&`LnWx)TYzECBc)r|Z?9gzmJw00000NkvXXu0mjfHJ>47 diff --git a/sources/htmleditor/images/edit-paste.png b/sources/htmleditor/images/edit-paste.png deleted file mode 100644 index f6a625ce0c201664218344077ac47171e3437933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 773 zcmV+g1N!`lP)1v7=gySn zH0n71Btjr4xeIgQCMlI#aXhER{OgQ^dEs)t^YcBt_x%p{6I6JHhlf7`z5AADCnqN_AC@NyCw@QL z@+=O3WaIS<`iV2|rBt4-t`3AqA5}`Ru<#vC6OmLRHslDsn+G`8OVaO09srN_+3qOh zb1A6?_*>hfHMaMN*4D<7idI)6tpAu(CpYJ$0yKf8q;~JchrPD|dRFPyXZdXCQkyHZ z+rU?|lO1ypx7$NoTYFAJT6B6$Bw&5LLsYe#w{@Rc!bQk6J@<1Q$b*+>aX58q>~@X$ z%}#s|pI}4{#>bzsxVThOvC~Ml*zNYR`%0;TNd<7>{>;qGAyDY=_mKF zbM_ZBIXGVN=2EfS6#-HJj$p%rUuzp<=s;_*02$>V}$MzLaL|EsJnCjLO_y(=-W%)|q%c!L_D^^5AUQPCF!# zjR?)nExAK2`;rVJS_E}Fwks=cmERb9>?5AkDm52wwS3`}Em_`*H?t&0ud-?Fq&yeT z8g#2q9Cp7;^`WSh0#x`w2f2HN8$#1wqLimZ+Y;seMfpH%$*RV{Zd328U~p>ZK*Gq# z?JA%Kr~~Q&573Z_oj@Ge0ycmM@CVq;jIm&FN&@@?USWreIVMnR00000NkvXXu0mjf D-0Nc} diff --git a/sources/htmleditor/images/edit-redo.png b/sources/htmleditor/images/edit-redo.png deleted file mode 100644 index 576cfc76c6b8868e648ad44ad39afc63b8bf8e81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(SAP)Mk1> z`U_^^N1>pg6c@#|3$fG|YiXJ$n2F6tGdDB$x=F%hn54CM;4pB{;W_WTbLIm77_qo6 zV{!f9ZhZ{ofC*eB7tyf0KEy|{q6Bl6k1*U$y(rY z2aFL&C2-pYQwdhG0AfHi8m+>^rooGW;8$_?B@bLP4eqD`f?r&{blN6RC}nLzy7fhuY^Vysu|@671MM;m?f^g#cuMw$kj$?_ zQ5d>A4+CJ(C~dZG+SEm;EocaB zvd4tBj#g}?6LMyDISb&7X>c+PP5_{g))d+htUyIX8Int%vo3(Uroq2^>$Y2{LXQPO z8(Lw@oLiEr10ZxN!N2*p#{=Ei>n}|JR*%lRxj&^e0O08pBrAPX9l#6nxM}c&_pF&> z0zgvAFTbsY3Bs_bIpYb_;JQzg^krSKI+^7+@pyVi>2zE!)lw)s`AoZCfvdjMDo@4# zMqV{kDYBm*MDgSemP)K;Vi(4vBDs+nvsPuimx<#A6Rc6a_=1(VL#SBii8JN1u7Mw@YEpiqcE2IvN2)jB=4-W`}#p z$^MeIaB2_{04DN*na7rz?<0?t?!I&E4l(pe7h4Oj+}FaDqDLqq(obrrMT(7exidfK oI@KW*ux>%w=!*4jL!A|W0rDI=0Gne09{>OV07*qoM6N<$g6d&rbN~PV diff --git a/sources/htmleditor/images/edit-select-all.png b/sources/htmleditor/images/edit-select-all.png deleted file mode 100644 index e6331c6e9b996a186d54116bdb0280b70ea60908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)D zl|7HsKoEwXiK8TZ2m&ZI1t+8^aZ*qq!AS^FQBc5tphhQwkmwJNMB!-YDES9mOAoZR z<0u6Yw6v!viPs*AVB=3XZluwA$GgwIGdq?=Rf+BO_+=9iPG|c3*^6~Nsl^YI!_hln z2^<5*BJy7jEZ@8xfB18ZDyquCXkWuHRAY=9V>F5)4Z|?;IBty5AP6)F0^MvjiLcjd z9gSZF2c!Lqs!Bbbi-@pTENC{Hgkgw?AR@`T^q99!r-RfaB;1y=o?jp$eEzm1ilRzb zetv7`eBq!{Fu-g!%fx%V9WhN(53=l<8W}Y7{%i>P=QYrMW;Cxr) zZ8#hjI;0Yu?uxh+Rf$*I=eGSKPD!Zssar{N4)rtrozkKJx&8r-J{gF|BBCv>Hj46QY z^?H)_J-burph|H166W)HVXyopEyI0Kvo&i(cVux9&j fjD4l5tNi|7!U+Lk41T1`00000NkvXXu0mjfGwmdp diff --git a/sources/htmleditor/images/edit-undo.png b/sources/htmleditor/images/edit-undo.png deleted file mode 100644 index f37c6963d5a09fca4392a9c624171b6ebd8ed75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmVTE&9H7IvbZ+cqG6s%a3~8qyOAA9sH1p3h*yWIRf(}TT_~f(C;C};eLubYT zdu`WXWhbb`N1!U*0DeU>2Hvo6!?f^IgOT&sH`K)G_nOsCV7VQX(^bIpI0&KGGpZvz z7Dg~^g!=q)rI;`6edIy=#qfmsLn6sa9l;kCM-By$UY?v8N8K8OPu|D5zr&u0tdwe|HPw60!GtvqM83Cg^n%=@1wQ3jwc zeiV8k83PxWkjEA3x3NGm|N8;^k5q_W_{_)MwQ5yN996=1&+${)_|4qlOX9y9tjUB! zlGJ9Y+}*V8#-

wJV+jRz;EmK$?Few+vtafY+_6&a^C1bfcXAO|mFi6$?@k%mI@& ziWQd%=bZo`XHNId`g|nRr0T}nCJR=JjdK9H0n`PQ1K>(aPq!|jx^^M^d{CnM^fx2X zTK0?2m(@Et{_fi!;%flfzo!b81D9K%lKWy3b20!DjY|6B2Z2uleP%hnT(LJ+*<0^? ziiFs{19hz6q{U;!<*}@)P^J!PfvJPC;n!KeSFFHc!|e?JSZq^R%C@e}CX#P73^ zaIgncgDpjv=VAV^OJVJS*$|eQ;mv#R_hv=_z~RS(uhZ%D9yZW&x!kws&tBXI0CeBK zG;@IljHD~o7YtpS!=W^3ok zf*k-*f_fZ=F^TxI+_K9Zl*H#R{q;;^#Y!%oVg)GyLG0QhDUYLJgoaW=fDURz%HS`IKUXmT2M=4F?FrPEu*ihD7AjtdMpx5e)_i-*)WS zqunM7g#tX!gIDuVtySSwJ=AJdR4O;p<7O%y4U?cNRq1bO?MdArs!(AVrk^xKA_=@o z@fv;uZ`!Z_iyBXj@|kJCYJ%_A(SFrl3v2mtv7ys*Y%)p0ulv{w_ORdG2LSYY$1!H+ zq*Go?UIunn70+bU_irNzf`#<>$0)>#gW~ee<3g-def}*U!OH-!YLcg!AtBSO*xI_j z($`9*dZlYg2$2MKUHAJ@@9^#>?mQvH4|`{9Z{Nv!H@))7&y)Pw`FZ~Dbef;dX8HMC z7NwjQrDTDWB@(U>;z9^9b{uEyIL@C;CNs{u*|S{EJu4MU-6;ZbXCq7+D_5R(JFmM7r};8c;)Q1K%n)coA51gjMl2o*|s0JtOZ zJ~&Zg(gP}T(=;SI9PC}&`7xJnW=^b z_CcH1wGQ9f1b}q3+SPar2=$Mk1Q`54f|8)W1IS>91n9pj6mDv)7_bJVh65=903T0| zm$v?-TJuXW{yqlG2q+XgpDcE3&p?I@0ST!XYZ@zn1qm5c@If_ioSc42G_AU|y&705 zAR=TJbn$d&7gEt@SXAjuCNKs7N^MW9&C@TRmok04Rn^5;YfK3U0x~?PB;DDr!Eqei ztyFv;)T0tJSI~$92N7d55!68Y?R_}T&xnai766i~fmI&0Zc2BCowhq|I9(^ySno60 zyy5T{27>_xuK&0L7q08VyYTe6&YKQetrjX)MTK-BZgY$okwN8k`Lb;r-EJ3B5~N%h zkhsQre5D5ElJINr0~@_wFOv5J^YjERX>Wct>P=Xd^?!}^fxyHh+-AK2%PPk%sf4?N zSTC-lc)N(r`;*>HKx9cqq+k` zbFYrFWyQ==9myodYiqX>%_(^b diff --git a/sources/htmleditor/images/format-justify-center.png b/sources/htmleditor/images/format-justify-center.png deleted file mode 100644 index 0777a9adfb643d7a51720e6e7a1341b3dc0f2f04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVT zlgnztKoo}08IxF2rMR=(`Zg^JLKaa&eS}izD-@(xq)%Wi+KsD1AIU{s6iezQ)%m*+ z6LT?%tp|pXWagXi{KGH+dTihI9mg?g52b0^>*d8&jQ~*V<{JB|+xr#(kg~bkd_McL zDFDi558QVpW^QUAKtu%J_egN3^Sl$>vKj=W05_ZGv7nWuH>5;5a59jH2%!y9fz!re zn&xg`%W4EHJzEb10_1LBA;iXHCgvcV2w*qgMDTh70P1#MVnQG?41>I^{r`O6VB7V2 zEu!`9V=Gun>4KsmQJH%kCK~s8{n!YCRjE`c_U5gP4a11A-e&7P6ODyn_taMl{0o^m z0F_A@`)vk;L2Lx&@|o`z#u!Uq>(y#CqHPZpjw7XU_|(IoRNz9P5ZiiEF|!}6s_I+& z>EZNWR1f}6M8p87R60?L$Hk-3$4H+{r}~fM=!?ZdUoK@%%4JSU90D>Akjl(+X10Y8 wwh-bwlgZeMs!TLZo#bliKU$b zl*>-SP!NV^PA`}WG3;rE;nU*Xw6%A+AdALnP%I#nFI7L_zpJSy3*R z)!=Hi5~6accB#;tmuj%4X+EGEOw2(z5y0eb1J-*S*NQ@+5Do@FwOTb|>;7+2Dy)!F zE-tT{x)&7O2IW=&pmzH?mKFK@p;~dNR0?T5Of5WJDijOBE2r-L7cjH0u=`ee4C-_` zv8>4D_Em}{6^loqt3#I9;b>%iJB~G-POaHYCZ(JurNlNMQveyvJYi;A2w@8$zBEmb zlgm!RKoo}0nO-mzV%XtU-o_0JA%O_;2*ku!Fd<$;d;&~R!`8${Vj&BIsaz_|?*eEU zO4~v4B+XVe5nERkUK z>TJq!bG}QdSmRFTNh^wF6$%AkB-VJDUD!J6Hpt{(8UP8w{;31J_&_ycW~Fg3MjC^< z-LBTQgOQTKfTUvaBxdV!4YY-E{HcdQTHtIp8ySO6F|!J`EbF!PaCiJCY5;#DB4PlP z&mWn&!`wmtz3&W1Bj?-moauDx%w{qzT zl-)`KK^TU=Z`@sDQ^GSl&8sPK4-}+L$xDc!TL`3Iq$@BCJrsg2$%8xy!~EHF-VXfR z-P~zRKNyzz7@m3GcV?CW&|~ec>3QBM?Vv2nYF%Djxdec!H`mxz-QHILfDHd`0+?pE0e@$_$Z7#;G+tDumX*)vqrtyzgIw2* zupW#>N<|b>%H`s9r|t)ZZ-eqy_!l>uEv*O^* zl}~6~MI6V!Gw<#0OLo)jKeI_(NULe3O^hxirz#pKf{550M03$gX^6KL%)t~&Q4~DX z-b#9mhhqH$z4aC^7QsNV+R&^CYd4#>@3p&c|Ga&9yE|`YJaoH+WLGPggFpB&!wkO< z-{JRXh?EisVe~+#2MJcYT};khk1GTlLWur-YACI6iP6=i*}}gDQ^@((QX|^jJ1>C{ z;7KZk1irqtrrr8^V;;b#-Qr27agn)1JO{x*7ce0 zFYaIgg)YAR%CX>vQA3>xtY=Icz;}OSO`CZFn|TLAiC9pjbn&UdQ)iY_nvWhGKN7=w zu8LyWfnD2SzOw%V$97q{x`T493F^}T$&XH*Sx!9_SfOO$tyf>r^imxa$HQhO?{be_ zxqahZmveSyD`&b*Pl9nE7L5b|x$uwR$+>HBA-vNkCzAATrUIwVU_2}msLiVY0JVAb zQPCo9gMoPx{o$x0g*ZJqcP;++iko!)P~E}bm^!0OW30+HgT zX+Gl26A+;24TYp=()qpMcDYSYUsCOnA@kgar=mHFLAUC-x3=yS3dP{wphMw^GnjlX z$hm~;?jWB{Tj8vcSXsH)F1>bx6o+Foho9;9gQ(cHstEd3y#MA@Q1dAW_!MY<3eB&e z=dlNWxV??v{#v_B-}<5X1M__Bs?L(xdayg zZ|@~UtG7atL?1IUi~GQ1vzJr70d2H5bO_mpE-KY3*6!Z%gp^%do)F>HW3!i2_pYD6(*~kU(&_t;)qpS~y>f$)^9cY-%SnqV0r2S9sqY7mzwxnC zGJ9I*3ZZm@5JIGsa^Dalgpd|wx9=`Xxywash1>(`INkmW`~Q7Se*xj7g!G23{yYEx N002ovPDHLkV1j)z!vg>S diff --git a/sources/htmleditor/images/format-text-italic.png b/sources/htmleditor/images/format-text-italic.png deleted file mode 100644 index ef68fb340456bd5223aefabf77f570df65460f0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmV+r1MmEaP)* zmD@{HQ543%ea@UY=P>0pZLk#6H1dLs_X$BN3ZO+qBFQA8 zG_5Q$CB;-iMol9G!=#i%%ETDwqRyOi_U=I^yw_Mhv|zoh{o`YOYp+EZW7v$~Hif#G zVBJO^W|q`u5{_@9l*s_V^JJpyhQ;_-;Eb}`SV1SeDnFhg$L#RO^o)Xw746#>*ZACu z^wK(`j_{pljwWmg@{{nea}A{5lOrNC-auem2zHxN+kGPo1vU_fx7y|%CRZQAfDqeTo%w>=A4YGKpIL{>a4o#xDYiLGM zltX=$1%uuiswr^Js$kmEKCh`by`(N%&=woOZ4@LEyO;r;a4bP7gy%_h+}_@yKBGWpZH^7^48AV2py}_&K-2B=);jq?gu& z^91er2jdKapvU`>X{5wQisqy!hyn*u;2{beBs~vV;Ne!ObpQ1j)&-jis{=$?>d486 z4%il8AXN=km(A`l{8C8i619v{5MDR8GbUA{R9PJybD>ELmh`R0VE?e#@KF9* zm0d`aQ5eVn&%1Y<`>6cfatxQTx>55&GAk%-QFP%&7ZpNUL>E#J1Vy=mAVMz+f-cI7 zK(IuVf*>jg1xW>&=~y+P%>1a-P1nk`x$XTp-OSnicm>0Y9ylD%dCvKr|9PInbBHm9 z^)PN-sOt&lS6fhauBA>A<=XkNis$Nk?^ilk+eb<4w@1(T<#Dy#%n424!l)un|N0udTs3^JJ!cGyj%PUEUpQ>+N)Rs59$C0lf^K_B`& zBh>SL0!7;`IyKK-T{F0}rrBZ1GG^yw7|`Jw4gq-5G)f(v2v{|J!&5kvJd64t) z9=qQCc?Q8>VZkT}RiRKs82TE7H8}X#L)k?FGW-m%mKc}*7mh4Ci10>7r*0eM=saq z=%pL>e57KIp@}Vo8im10Nexp zqRiNewSh!RaZ%_p!Z=h|EM}AtEag zb zlwC+vK@`XTGk31;^=|2^X-c3QB0(PuMPe3(`OtF@6+tc`8Bq`jfwlD*)kBa3rGg+N zB1I3r^kyF*l4WI9D^%(#Wwz^@*0Q_q-udXkl-7^clnxx`9L~&-|CwP9QA*)|7+Y>b z>Djhxg3C*@xyI=A?z_i5%bg?16uaClrfKSd>*vbT9QITMe@)|Z{j*3UY~}Rbs|+Ut z(`3a|gSbn!a-hadP;(SAA z^x~?)C1+YI^0VyO8yqGczZ?t!c-YxH9Mbg^q}fulO3t)atP0FPJcr7P(s~DinEV;G z?3Ps-3Pr5XUna3BFWV$gNgr@gu&cVsscWjNFwa4rycmcIVbwitJ~=IfRp%WTjoJ*8 zC@#ue)lJTS0;fn;vv22SZSY$NBclNV7O$UaBVIoqoFLN{ha=NLbxCVh40gF&Or>~L zaY3&B{Qa;1Wc#be(?I}u)p$Cnq-+oP$3=QZR*Dp|%H?h`SEg8n-Nl8un2HGWfAqyf zoZm<&bABV>AB!oOnoFgYoF#-1o>Q=utDHC&))rp*XxZ=P6V%gxLoij2`uJy9a~*1iW9d2zC*B^^R*vAL_*UDfoR3z@rG z5TVrnruo#y1z?Nw+>=Mjp#Vs!AS589S|pyy=f|C0-3g-Rz!dN|-|twpVoHfWp@Z4S vBZN=@+F#D*xduQ1-~hy*H6d0?iCOS(3D;aaMJ{tC00000NkvXXu0mjf@nMZ3 diff --git a/sources/htmleditor/images/image-x-generic.png b/sources/htmleditor/images/image-x-generic.png deleted file mode 100644 index 10f46719da836d4c5b4fbf39d247a7b510290073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 900 zcmV-~1AF|5P)l3YA1 zcv*r6gX9!Uh#>2Abwwj?7GsPi>YB`iJ!CUGe|x*Co`>maXEJD%Yi{_f~gJi>3G9@kg}P)Q>?)e3Fnm4dnN|5VOWW3#MapL3|hBvbJo>r$ztJN)v7ln>;n1Kkt*3aX- zaQ@^uJc`*$X;g}$lBEa{aL$oAhqXdzCfGGIF}f1(=(TUrYIiVEf~G@ddL9${aj*y& z6Bohpow~v9d2E)_>umGXWBZ6E%1o6t^&7QODYVwiR%icHr`g)tqEw1`>BZ-mnTj#S zuy)}BS_g*;@Uu_u<@-yQ@7xX z5x)Ftg=^O~s9nGQ;o^~_hXF$G{qfVEo_^B58LjAmeNGOWRuM~ zGvCa7GiQvd;_dDm1pp5KT-QbMaS29MaejWLzTbt}-q}(B$Y!(OO}E?8O05h4aN6w- z<{#t%AoTJ5uA&Db!hWL`G7~ZO8&v>6e!dWUlq-9L1c>No6fp^-s_OgQq-Dqr0L%>E zw*WLe41xee1ZD;^hljpz!ORe0FcZ9TWsipi0)SMo%TQHR>mT9-E<;41st^%~NT^rR zyHYEIh(JW}eINCMDmtAmtPRp>G@DI`FhoK&BI>aV9LK@elh1J)*4ikfszOzIpMoe< z+U&jGJ+ao#;TpVp`Pz8a+PN1Sn4j}&vIRt7V}T8sKY z1=dF@M?IENkEl1~n3%XZdNRf%OMYq1#v<--w)NEwRO=t2e`Zcp>ce%t@re6` zt1IhJ?GM^&v_Al#R9uFt!WbtNXn;6bUcC4uad!ERhx!Z<6mIH#~rWm z+1b0^%$=F(vtMVqcBhjItj!Toj#(x}cv3`fsmhcpGR7F+7}Ihbr{y@#AJ=tTUdC%@ nvzhkP8> diff --git a/sources/htmleditor/images/list-add.png b/sources/htmleditor/images/list-add.png deleted file mode 100644 index 306d3d89291bc35b7515b84a7eb1ff06b1f5329a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHisK6gRuhm*3iZ7#JA&JzX3_EKa|jYUs`EDAKau+CLy? zi@+M4HE-T~2{!%fF%eU2Rrtr`$+ht#Kg;butkJqUIYqsDTetSMc0GD4&0VZ$$iDj^ zcSK4;qIlYK+p@Op8xHIdY@M(vte#=X;bglVS!w&M3lo?#x8GfGInN+$f!M>DAMIOA znaw{+m};&Pd|uwG={#9$v7SHQPorKX;p2w+@~lEJGV%d4COG`+yc+pl?Q0p&hhHx% zs_NXCj1!sC4@ru!o$EZ*BKam~ZJRCYgz~EG!LoDAzMqtj-?6)X#if&b4~0HFA64r* zdCrP$A#2v_CeL!e)0TEsbx%m%HuLZsx9@VyGwpQ0G4+|u-1z09ZZGvO>q9>CFZQ5?)tP;KpJ*&bQ%kKV6pXhPsZ)QwBze<6)o`Lu?1IrnmCtIy` q#6K4lsK|Z0yY!dH&rr{xgWTashPVA$C(8gG#o+1c=d#Wzp$Pz5QChkH diff --git a/sources/htmleditor/images/numbered-list.png b/sources/htmleditor/images/numbered-list.png deleted file mode 100644 index e9f400129ae2f284e091ad1bbadcef324d64bc31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 739 zcmV<90v!E`P)Px#24YJ`L;#BbjR1%>`?);;00N6iL_t(I%dJ&iPZL2DJ+s}dSRwd`ukvsF140Z~ zZECHxl#mb;-!TZmAo3Y(2#HbOP5enb$b-SO+nw3D_xiA%-7fur7*8_UbaUo@oO|w8 zi3r|rzY_pZB7!jNN)$!#0U!)RXdOXqZfytv6pO|0DvEj%MH;8=WB6g%gVqt!09r?a zKCHDkIyry`0G|#%LTim~H$=A^0zi@_2m(4gZ@WuSO8rbT4nm2DxMVKA?|u*wv^D@F zOK6M%5y6-^V;U2KnLuQrcK3Gds6+seOLiS1g8jq2EbMhKGeiW;3}((69=u(zHE?ut zkh@r3uH?!4hkF13tqsb{6(!_?Q}ZQ< zK}4{Y2HuT6V=E>~%vr0})2fn>abnlG~x?2Q3ZJ(g>teUoZcK&(d@D?90LMd-@ z;P%-m+={uXm!6dS)#vpdd`_%*cJ@BjR@d>bP|0#<|0MJC5B<3ZbF-JfE=ysrSBi}( zS!+u~Jk3ng%yLhJXG9PvrLfu=@n z(iTH)w_Uh%VcLc1V^L#b(uK7ssDy`(5D-wF0~h82^Sm?no-UMh#u>GV-{d6scTVo- z_dUPgIY$5toa_GvIL%8)O8MhU}ue0$^; z2lw|PgkWrJ41jPv$F<-Vjk~>k@NOHg`CXLjI+1va2a5)`gNqCWub^650k~iv`+E-H z^Z5`$(ACw2%h$|b!8k_`ck*dpfV!G8=4K|Ddbq+`0;wx0`DTZ-l68Y^A!+M>3ryv^a-qn0V_t9V^i_&jdhH5K%C=ozl&Ql>omXa!IrRdV&l;;`vR>9A&^qCyt+m@mBQz)2IwwweDFXo9*+kh z1Zgvet~*gGJw)SajBS%-#$r2ZV#bYv>+W^Cn3$SH*HnPolFc)W$3Hn73b90*iu4MV zs?K_%jt$L8&az2|a|E(kG8vPq$_kRnBzygC)>9@xxCorD+Nv_U=qYH~Kjtoom#@QALnk`~meU?D1bxSnNrbehGfJEwtiAg2P@w*B4rKb$>P%DLMXjNX;ZE*NyR)Kg#gD!Q(b zOlMg&qWnF!gt4|tbY}3Ee}2EP22=u>ryo-V(10@Fl_%LNgmAd}K0EVum8+p!ah6qp z5VmbuW@5`&d3f*2(4Xfo0~^3H5Ge&NrJZDYUNYyCc>zcu1tgyg6R`gU@r%#W_2EC| P00000NkvXXu0mjf=ZOj{ diff --git a/sources/htmleditor/images/text.png b/sources/htmleditor/images/text.png deleted file mode 100644 index a6902947d9c3f56ed6740146a95342dba8afaf3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1185 zcmV;S1YY}zP)0&R?3PP)`;0v14U}A{z(g?=B=nJtz!UK)r zr7;CfH1UD(MnIox3`l(Ojl{%?iPc0Bqz$z##oFy&%kJ!DW_D)ha*hum(Nt~^e93t_ z=lt@0=l}n{LpbMn5<&5V;)#L9`)%wVxeyl!78zqrYqFuV>T_(ndTzM**kB5NWT3B2 z8F}Mb5CZ%o1>?Y1muHpBzb+mD@X7t|lm8QM@YIi@ozE3MJ31IG>Mm~O4J_x%JP~gq z(RDI5HwWKe4qEoZ>(ptLtB&0a!VwHrGkl6wv6AdFOhVes( zVOh^+haO8jS)gODz1XcT<_*{`!~9Y~2k`C9R6%z=hFdukiH$K;q;%|&!Fvu*^eGbU z+SL)me7c5G#e{CuU8xdy*VHYyQmdn4IG~aOaKCHM;fcOS0t=L!c=e^Hm2BBY)%0*{ zDQEefduHm=Axpt!IE^=iXsg=AB&c3^P?)@U! zcT#K#Mh^6EZ*8>42s&c~Z83^iEFyRfdhEV-8yq|(>TQX_@%LVirZpE?&Bl${d9zq7 zsdtZ}yCZ?O_V=Lf_^=ut)~hn6rZf2E+FUiVoQ+RTj(ckwq_jCU)V`r903srz)u0AM zymMfWsz?H4NkFbxh3~tlI}BHT&%iKk?AV%sBuP+|kW$(lI|$(78n7skvEFAo!t)se zj>};+926=I_>80Bc_5C3{rw3n7Yr0M3y#Z>UNs;GL}X8a}fXtq1gNUc5ou#&vX&_%rdy|`N2S^5RXTp1QZZLw(cB0-FM@{ z=(T&|iBvd|Y)vZpasv&IA-$5ae8x}BTs%(fs-U!PY8h=$ZZI-D1_m{gXC0Om4b5di)Mn3VgF;d;VA00000NkvXXu0mjf%lIkt diff --git a/sources/htmleditor/images/text_color.png b/sources/htmleditor/images/text_color.png deleted file mode 100644 index 496e87992472f1e762f784418c3cbfa56779c24b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BU#GP)?jHaE0|rS% zK~y-)?Um1K6KNR7zt2q4naQ*rYNK7yY_koA!!}Gq+ zkC&JkM74Pr!=VNahjm^o~*<RS( zFr2Ei+d*r48?AB~impR4kIavbjvWfD5@j!5x}*!&MNq9G@47-V-@1{@3CVoR+1U}? zZiB-RKN*GwAp2GDLMD@x%;Q5>t|&Xto*}4K@y7Rwi0%LY5#4cxAlYaj3IZJ0G?jtz zg-j;-MQ|8J)4!!s)Y{%gvs6N%P>=u~?e=TueDuciqzpebgB6c+7)8?uw%hN+!?BcM zY)(#19TSBDn#CfP^LhW@M#KC(=m%Z*Pxtki0W)erfLyIsc_+lsU$0+>T?2AL(#UfZrFf-aw1j&pDKp^Fw-MK+u-uLIaz%#Zz)~BlJxMji5=TY@M zJlWa`zclgy!i;6b3{`~{k0WAE&)D|Z&DGWCd*C=x*6#1uo23$>AizqkCL-Ya&DGU~ zgQzpMea#i(&vb9E(aBmbHk(-hlY8KRIkQwQt4rnb?)D0vRx0<1Xb6DXQR*-mfc#}( z;NgYA!9PmPrm;H$F-18`M8wS8wSI*|Rkzb$#6Mx7J<8Hm1rO}p|DLcVoVq1l@X P00000NkvXXu0mjfc%G*> diff --git a/sources/htmleditor/inserthtmldialog.ui b/sources/htmleditor/inserthtmldialog.ui deleted file mode 100644 index 9f7cec19f..000000000 --- a/sources/htmleditor/inserthtmldialog.ui +++ /dev/null @@ -1,41 +0,0 @@ - - - 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 deleted file mode 100644 index 1e7ed4cf21300f6695a894db7a6c2376dd65c288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2205 zcmb_d`9IT-A780f%21!m(VXST2e~C@4J}t;jyZ}f=h$qHCRh6;zE-}5=Dsz(8OgQL zNHq0rL^Zz$MgBiGv%hewTQ5kFbD(^fnSF??sLul zSsxYJ#}_%IXZy5x)7IIN&~bHdZx4L;{OgJ0yngK1YTv_m_Ll$h*cNP7e@p3^r>A~E zu59z>Hb)w`S><12-_2BWmbyB=z0c^m=LK9DTk9j%k^KrIEyy~|i4thUMO>@-#L~>^ zFqQK$f1gEb`_&q+ZLQ;}|6C?%^-m2r6dGtJX_mgD=_lAh0+m7%# z0WRg2$t^|kjG&@U%A3!uxlOKGg1S5fwh~deENlF0d$N{pPoxg84zYDwKSDzEJTEJZWvls7gmQe0Dv;j+rs&+n%(8&1f zyx9@?;(j>*0NPEBe{Hn4pHyQ8pMSljO6OnIE(7^bKoC$$Jsp{pF%&Y+IxP;{CA;Nr|qR#{oQfH`e? zNmJI9a>L6z8qM}WJZc`qjM&uYH`+w^BL#c2rdnzG4fWdvS_lNw!z#&eXzJS;rk~NX@L#dyOCr4G6-B7;*+4J>usB0M4TE_j@q{QSdSw0ED-8 zgmCTWxgjmOAUPEJ_zT~bF_vH5b?E6V;PP}M$ zd(8p5)0actXI?M&_3~lJE(zlS7a5j+~9+{NU^lHx4%nsl6y<$LmV@NJ` zIzBe7P!5xn43elL$(TJqwAFnALZN@6_*A>+w&u%*@&K!J34%CPim>1j*l;?%ayYpX zqA*2BZXddjYAb^us>$fc*gznOqc)*wqCnFr>Br)HT@Oc|)dNN!0AvkQ+cx3O zs4mFxY(QB(sndbIAN^s8b*L%H3w(JJt#Q`5!+#Ch0BsZUPn24O@<<~S1Awr*dVx|Y zaIg9f^*He&?2&iLV+-q`kCl2Z>fr`7HQ^70^5(*~1sa)$t#;}r8ak0M^)bSt=v*P1 z*A}Z;b2|NmmkExROjqL)=ANQ91gg{&$koYbq4M7tIwaf|8vS4${z!lBErj04k82EY zD^A*h41s|w-wphPR42GqzH6e;Kf2m|P0ZrfU)yGO#lAwmK*KV7L^3dW%+=~A0P(_5 z(~rAsulFP^BpLl5WZSPUImLlM*TtAHk37?t5tL{wL~gw2?8@?8_RBMc?aZas?ev%y zQae-^X{lWZL$6o^L0nBQj|tkNqL?1{;MzCvuaLs_y~ zmZfu9vLPBK6`>$zDTOc?OsUxAlz$l_2mCzK`{aJTA6AC#^xj~cJ$NQ4SVmB8}c;;1S(ONB4h+Vv1<2q{$+iUe$x2 zC=s3!S<*L5<;jO0n#0F+Awhjlz4g8vu3R7PxA>wX92Z~`OI%&gEphn-s(C$bX_crV zws;bbK5y%K%46$0h77)aghBOSpdz!Ro;R&nTn8?|Y#RX7bAAbQP%T)=I$Y?am%=ud`<*BY^m)tRV8e$;1HYIm{-WaNl zT?Xu5#6c;Wt~OH(;Xm@rc%tz;f|$;f(Q}g3tngK8{ec@oRc~)PJ%ru9N`yEVm}iIC z3Kd!f8(&lExA%1Ch?9Xuxn&M5b5jRb_sl$ODJ`VpDBL(=&CdYlgI64~5MoYrf=&R) zY49K)M6Y;-;2gRO7ke!8+Mer!pg!ug#Lp}9%w zhEX`vDC%gII=6AbR|ZvUnpkJ;@vUkoTCI6Zaiz5p9&)^SR8iv-yR1{1;l7>nv47JQ z90rkf?O_Htnl7E)wl2iCq}HsJaL-45ZfeCbmkCkU0|oS`6S46t-sZ|H@u5>I;`ph> z-+V^XnC3j2Bar5r#6624WD8Cu)X;Zll|kyW@mK-gJx9krdA}b)a7%kw&DA>({|g8V Bgth + AddLinkDialog + + + Insert Link + + + false + + + true + + + + + + + + Title: + + + + + + + + 337 + 0 + + + + + + + + URL: + + + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + AddLinkDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AddLinkDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/sources/richtext/richtexteditor.cpp b/sources/richtext/richtexteditor.cpp new file mode 100644 index 000000000..43993f28b --- /dev/null +++ b/sources/richtext/richtexteditor.cpp @@ -0,0 +1,797 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Designer of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/** + Integration : QElectroTech Team + Changelog: + - 09/04/2013 : Start integration...Compilation and object creation are successful +*/ + +#include "richtexteditor_p.h" +#include "ui_addlinkdialog.h" + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +//static const char *RichTextDialogC = "RichTextDialog"; +//static const char *Geometry = "Geometry"; + +namespace qdesigner_internal { + +class RichTextEditor : public QTextEdit +{ + Q_OBJECT +public: + RichTextEditor(QWidget *parent = 0); + void setDefaultFont(const QFont &font); + + QToolBar *createToolBar(QWidget *parent = 0); + +public slots: + void setFontBold(bool b); + void setFontPointSize(double); + void setText(const QString &text); + QString text(Qt::TextFormat format) const; + +signals: + void stateChanged(); +}; + +class AddLinkDialog : public QDialog +{ + Q_OBJECT + +public: + AddLinkDialog(RichTextEditor *editor, QWidget *parent = 0); + ~AddLinkDialog(); + + int showDialog(); + +public slots: + void accept(); + +private: + RichTextEditor *m_editor; + Ui::AddLinkDialog *m_ui; +}; + +AddLinkDialog::AddLinkDialog(RichTextEditor *editor, QWidget *parent) : + QDialog(parent), + m_ui(new Ui::AddLinkDialog) +{ + m_ui->setupUi(this); + + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + + m_editor = editor; +} + +AddLinkDialog::~AddLinkDialog() +{ + delete m_ui; +} + +int AddLinkDialog::showDialog() +{ + // Set initial focus + const QTextCursor cursor = m_editor->textCursor(); + if (cursor.hasSelection()) { + m_ui->titleInput->setText(cursor.selectedText()); + m_ui->urlInput->setFocus(); + } else { + m_ui->titleInput->setFocus(); + } + + return exec(); +} + +void AddLinkDialog::accept() +{ + const QString title = m_ui->titleInput->text(); + const QString url = m_ui->urlInput->text(); + + if (!title.isEmpty()) { + QString html = QLatin1String(""); + html += title; + html += QLatin1String(""); + + m_editor->insertHtml(html); + } + + m_ui->titleInput->clear(); + m_ui->urlInput->clear(); + + QDialog::accept(); +} + +class HtmlTextEdit : public QTextEdit +{ + Q_OBJECT + +public: + HtmlTextEdit(QWidget *parent = 0) + : QTextEdit(parent) + {} + + void contextMenuEvent(QContextMenuEvent *event); + +private slots: + void actionTriggered(QAction *action); +}; + +void HtmlTextEdit::contextMenuEvent(QContextMenuEvent *event) +{ + QMenu *menu = createStandardContextMenu(); + QMenu *htmlMenu = new QMenu(tr("Insert HTML entity"), menu); + + typedef struct { + const char *text; + const char *entity; + } Entry; + + const Entry entries[] = { + { "&& (&&)", "&" }, + { "& ", " " }, + { "&< (<)", "<" }, + { "&> (>)", ">" }, + { "&© (Copyright)", "©" }, + { "&® (Trade Mark)", "®" }, + }; + + for (int i = 0; i < 6; ++i) { + QAction *entityAction = new QAction(QLatin1String(entries[i].text), + htmlMenu); + entityAction->setData(QLatin1String(entries[i].entity)); + htmlMenu->addAction(entityAction); + } + + menu->addMenu(htmlMenu); + connect(htmlMenu, SIGNAL(triggered(QAction*)), + SLOT(actionTriggered(QAction*))); + menu->exec(event->globalPos()); + delete menu; +} + +void HtmlTextEdit::actionTriggered(QAction *action) +{ + insertPlainText(action->data().toString()); +} + +class ColorAction : public QAction +{ + Q_OBJECT + +public: + ColorAction(QObject *parent); + + const QColor& color() const { return m_color; } + void setColor(const QColor &color); + +signals: + void colorChanged(const QColor &color); + +private slots: + void chooseColor(); + +private: + QColor m_color; +}; + +ColorAction::ColorAction(QObject *parent): + QAction(parent) +{ + setText(tr("Text Color")); + setColor(Qt::black); + connect(this, SIGNAL(triggered()), this, SLOT(chooseColor())); +} + +void ColorAction::setColor(const QColor &color) +{ + if (color == m_color) + return; + m_color = color; + QPixmap pix(24, 24); + QPainter painter(&pix); + painter.setRenderHint(QPainter::Antialiasing, false); + painter.fillRect(pix.rect(), m_color); + painter.setPen(m_color.darker()); + painter.drawRect(pix.rect().adjusted(0, 0, -1, -1)); + setIcon(pix); +} + +void ColorAction::chooseColor() +{ + const QColor col = QColorDialog::getColor(m_color, 0); + if (col.isValid() && col != m_color) { + setColor(col); + emit colorChanged(m_color); + } +} + +class RichTextEditorToolBar : public QToolBar +{ + Q_OBJECT +public: + RichTextEditorToolBar(RichTextEditor *editor, + QWidget *parent = 0); + +public slots: + void updateActions(); + +private slots: + void alignmentActionTriggered(QAction *action); + void sizeInputActivated(const QString &size); + void colorChanged(const QColor &color); + void setVAlignSuper(bool super); + void setVAlignSub(bool sub); + void insertLink(); + void insertImage(); + void runXmlPatterns(); + +private: + QAction *m_bold_action; + QAction *m_italic_action; + QAction *m_underline_action; + QAction *m_valign_sup_action; + QAction *m_valign_sub_action; + QAction *m_align_left_action; + QAction *m_align_center_action; + QAction *m_align_right_action; + QAction *m_align_justify_action; + QAction *m_link_action; + QAction *m_image_action; + QAction *m_xmlPatterns; + ColorAction *m_color_action; + QComboBox *m_font_size_input; + + QPointer m_editor; +}; + +static QAction *createCheckableAction(const QIcon &icon, const QString &text, + QObject *receiver, const char *slot, + QObject *parent = 0) +{ + QAction *result = new QAction(parent); + result->setIcon(icon); + result->setText(text); + result->setCheckable(true); + result->setChecked(false); + if (slot) + QObject::connect(result, SIGNAL(triggered(bool)), receiver, slot); + return result; +} + +RichTextEditorToolBar::RichTextEditorToolBar(RichTextEditor *editor, + QWidget *parent) : + QToolBar(parent), + m_link_action(new QAction(this)), + m_image_action(new QAction(this)), + m_color_action(new ColorAction(this)), + m_font_size_input(new QComboBox), + m_editor(editor) +{ + + m_xmlPatterns = new QAction("Run XMLPatterns", this); + connect(m_xmlPatterns, SIGNAL(triggered()), this, SLOT(runXmlPatterns())); + addAction(m_xmlPatterns); + m_xmlPatterns -> setVisible( false ); + + // Font size combo box + m_font_size_input->setEditable(false); + const QList font_sizes = QFontDatabase::standardSizes(); + foreach (int font_size, font_sizes) + m_font_size_input->addItem(QString::number(font_size)); + + connect(m_font_size_input, SIGNAL(activated(QString)), + this, SLOT(sizeInputActivated(QString))); + addWidget(m_font_size_input); + + addSeparator(); + + // Bold, italic and underline buttons + + m_bold_action = createCheckableAction(QIcon(), + tr("Bold"), editor, SLOT(setFontBold(bool)), this); + m_bold_action->setShortcut(tr("CTRL+B")); + addAction(m_bold_action); + + m_italic_action = createCheckableAction( + QIcon(), + tr("Italic"), editor, SLOT(setFontItalic(bool)), this); + m_italic_action->setShortcut(tr("CTRL+I")); + addAction(m_italic_action); + + m_underline_action = createCheckableAction( + QIcon(), + tr("Underline"), editor, SLOT(setFontUnderline(bool)), this); + m_underline_action->setShortcut(tr("CTRL+U")); + addAction(m_underline_action); + + addSeparator(); + + // Left, center, right and justified alignment buttons + + QActionGroup *alignment_group = new QActionGroup(this); + connect(alignment_group, SIGNAL(triggered(QAction*)), + SLOT(alignmentActionTriggered(QAction*))); + + m_align_left_action = createCheckableAction( + QIcon(), + tr("Left Align"), editor, 0, alignment_group); + addAction(m_align_left_action); + + m_align_center_action = createCheckableAction( + QIcon(), + tr("Center"), editor, 0, alignment_group); + addAction(m_align_center_action); + + m_align_right_action = createCheckableAction( + QIcon(), + tr("Right Align"), editor, 0, alignment_group); + addAction(m_align_right_action); + + m_align_justify_action = createCheckableAction( + QIcon(), + tr("Justify"), editor, 0, alignment_group); + addAction(m_align_justify_action); + + addSeparator(); + + // Superscript and subscript buttons + + m_valign_sup_action = createCheckableAction( + QIcon(), + tr("Superscript"), + this, SLOT(setVAlignSuper(bool)), this); + addAction(m_valign_sup_action); + + m_valign_sub_action = createCheckableAction( + QIcon(), + tr("Subscript"), + this, SLOT(setVAlignSub(bool)), this); + addAction(m_valign_sub_action); + + m_valign_sup_action -> setVisible( false ); + m_valign_sub_action -> setVisible( false ); + +/* addSeparator(); + + // Insert hyperlink and image buttons + + m_link_action->setText(tr("Insert &Link")); + connect(m_link_action, SIGNAL(triggered()), SLOT(insertLink())); + addAction(m_link_action); + + m_image_action->setText(tr("Insert &Image")); + connect(m_image_action, SIGNAL(triggered()), SLOT(insertImage())); + addAction(m_image_action); + + addSeparator();*/ + + // Text color button + connect(m_color_action, SIGNAL(colorChanged(QColor)), + this, SLOT(colorChanged(QColor))); + addAction(m_color_action); + + connect(editor, SIGNAL(textChanged()), this, SLOT(updateActions())); + connect(editor, SIGNAL(stateChanged()), this, SLOT(updateActions())); + + updateActions(); +} + +void RichTextEditorToolBar::alignmentActionTriggered(QAction *action) +{ + Qt::Alignment new_alignment; + + if (action == m_align_left_action) { + new_alignment = Qt::AlignLeft; + } else if (action == m_align_center_action) { + new_alignment = Qt::AlignCenter; + } else if (action == m_align_right_action) { + new_alignment = Qt::AlignRight; + } else { + new_alignment = Qt::AlignJustify; + } + + m_editor->setAlignment(new_alignment); +} + +QString runXSLT(const QString &t) +{ + QString pattern = QDir::tempPath(); + if (!pattern.endsWith('/')) + pattern += '/'; + pattern += "qt_tempXXXXXX.html"; + QTemporaryFile tf(pattern); + if (!tf.open()) + return QLatin1String("Open failure"); + const QString tfName = tf.fileName(); + tf.write(t.toUtf8()); + tf.close(); + QProcess p; + QStringList args; + args << "tohtml.xsl" << tfName; + p.start("xmlpatterns",args); + if (!p.waitForStarted() || !p.waitForFinished()) + return QLatin1String("Run failure"); + const QByteArray output = p.exitStatus() == QProcess::NormalExit && + p.exitCode() == 0 ? + p.readAllStandardOutput() : + p.readAllStandardError(); + return QString::fromUtf8(output); +} + + +void RichTextEditorToolBar::runXmlPatterns() +{ + qWarning("%s", qPrintable(runXSLT(m_editor->text(Qt::RichText)))); +} + +void RichTextEditorToolBar::colorChanged(const QColor &color) +{ + m_editor->setTextColor(color); + m_editor->setFocus(); +} + +void RichTextEditorToolBar::sizeInputActivated(const QString &size) +{ + bool ok; + int i = size.toInt(&ok); + if (!ok) + return; + + m_editor->setFontPointSize(i); + m_editor->setFocus(); +} + +void RichTextEditorToolBar::setVAlignSuper(bool super) +{ + const QTextCharFormat::VerticalAlignment align = super ? + QTextCharFormat::AlignSuperScript : QTextCharFormat::AlignNormal; + + QTextCharFormat charFormat = m_editor->currentCharFormat(); + charFormat.setVerticalAlignment(align); + m_editor->setCurrentCharFormat(charFormat); + + m_valign_sub_action->setChecked(false); +} + +void RichTextEditorToolBar::setVAlignSub(bool sub) +{ + const QTextCharFormat::VerticalAlignment align = sub ? + QTextCharFormat::AlignSubScript : QTextCharFormat::AlignNormal; + + QTextCharFormat charFormat = m_editor->currentCharFormat(); + charFormat.setVerticalAlignment(align); + m_editor->setCurrentCharFormat(charFormat); + + m_valign_sup_action->setChecked(false); +} + +void RichTextEditorToolBar::insertLink() +{ + AddLinkDialog linkDialog(m_editor, this); + linkDialog.showDialog(); + m_editor->setFocus(); +} + +void RichTextEditorToolBar::insertImage() +{ +#ifdef hip + const QString path = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(), QString(), this); + if (!path.isEmpty()) + m_editor->insertHtml(QLatin1String("")); +#endif +} + +void RichTextEditorToolBar::updateActions() +{ + if (m_editor == 0) { + setEnabled(false); + return; + } + + const Qt::Alignment alignment = m_editor->alignment(); + const QTextCursor cursor = m_editor->textCursor(); + const QTextCharFormat charFormat = cursor.charFormat(); + const QFont font = charFormat.font(); + const QTextCharFormat::VerticalAlignment valign = + charFormat.verticalAlignment(); + const bool superScript = valign == QTextCharFormat::AlignSuperScript; + const bool subScript = valign == QTextCharFormat::AlignSubScript; + + if (alignment & Qt::AlignLeft) { + m_align_left_action->setChecked(true); + } else if (alignment & Qt::AlignRight) { + m_align_right_action->setChecked(true); + } else if (alignment & Qt::AlignHCenter) { + m_align_center_action->setChecked(true); + } else { + m_align_justify_action->setChecked(true); + } + + m_bold_action->setChecked(font.bold()); + m_italic_action->setChecked(font.italic()); + m_underline_action->setChecked(font.underline()); + m_valign_sup_action->setChecked(superScript); + m_valign_sub_action->setChecked(subScript); + + const int size = font.pointSize(); + const int idx = m_font_size_input->findText(QString::number(size)); + if (idx != -1) + m_font_size_input->setCurrentIndex(idx); + + m_color_action->setColor(m_editor->textColor()); +} + +RichTextEditor::RichTextEditor(QWidget *parent) + : QTextEdit(parent) +{ + connect(this, SIGNAL(currentCharFormatChanged(QTextCharFormat)), + this, SIGNAL(stateChanged())); + connect(this, SIGNAL(cursorPositionChanged()), + this, SIGNAL(stateChanged())); +} + +QToolBar *RichTextEditor::createToolBar(QWidget *parent) +{ + return new RichTextEditorToolBar(this, parent); +} + +void RichTextEditor::setFontBold(bool b) +{ + if (b) + setFontWeight(QFont::Bold); + else + setFontWeight(QFont::Normal); +} + +void RichTextEditor::setFontPointSize(double d) +{ + QTextEdit::setFontPointSize(qreal(d)); +} + +void RichTextEditor::setText(const QString &text) +{ + if (Qt::mightBeRichText(text)) + setHtml(text); + else + setPlainText(text); +} + +void RichTextEditor::setDefaultFont(const QFont &font) +{ + document()->setDefaultFont(font); + if (font.pointSize() > 0) + setFontPointSize(font.pointSize()); + else + setFontPointSize(QFontInfo(font).pointSize()); + emit textChanged(); +} + +QString RichTextEditor::text(Qt::TextFormat format) const +{ + switch (format) { + case Qt::LogText: + case Qt::PlainText: + return toPlainText(); + case Qt::RichText: + return toHtml(); + case Qt::AutoText: + break; + } + const QString html = toHtml(); + const QString plain = toPlainText(); + QTextEdit tester; + tester.setPlainText(plain); + return tester.toHtml() == html ? plain : html; +} + +RichTextEditorDialog::RichTextEditorDialog(QWidget *parent) : + QDialog(parent), + m_editor(new RichTextEditor()), + m_text_edit(new HtmlTextEdit), + m_tab_widget(new QTabWidget), + m_state(Clean) +{ + setWindowTitle(tr("Edit text")); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + + m_text_edit->setAcceptRichText(false); + + connect(m_editor, SIGNAL(textChanged()), this, SLOT(richTextChanged())); + connect(m_text_edit, SIGNAL(textChanged()), this, SLOT(sourceChanged())); + + // The toolbar needs to be created after the RichTextEditor + QToolBar *tool_bar = m_editor->createToolBar(); + tool_bar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + + QWidget *rich_edit = new QWidget; + QVBoxLayout *rich_edit_layout = new QVBoxLayout(rich_edit); + rich_edit_layout->addWidget(tool_bar); + rich_edit_layout->addWidget(m_editor); + + QWidget *plain_edit = new QWidget; + QVBoxLayout *plain_edit_layout = new QVBoxLayout(plain_edit); + plain_edit_layout->addWidget(m_text_edit); + + m_tab_widget->setTabPosition(QTabWidget::South); + m_tab_widget->addTab(rich_edit, tr("Rich Text")); + m_tab_widget->addTab(plain_edit, tr("Source")); + connect(m_tab_widget, SIGNAL(currentChanged(int)), + SLOT(tabIndexChanged(int))); + + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal); + QPushButton *ok_button = buttonBox->button(QDialogButtonBox::Ok); + ok_button->setText(tr("&OK")); + ok_button->setDefault(true); + buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("&Cancel")); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(on_buttonBox_accepted())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addWidget(m_tab_widget); + layout->addWidget(buttonBox); + + m_editor->setFocus(); + +} + +RichTextEditorDialog::~RichTextEditorDialog() +{ +} + +/** + * @brief RichTextEditorDialog::on_buttonBox_accepted + */ +void RichTextEditorDialog::on_buttonBox_accepted() { + emit applyEditText( text(Qt::RichText) ); + this->close(); +} + + +int RichTextEditorDialog::showDialog() +{ + m_tab_widget->setCurrentIndex(0); + m_editor->selectAll(); + m_editor->setFocus(); + + return exec(); +} + +void RichTextEditorDialog::setDefaultFont(const QFont &font) +{ + m_editor->setDefaultFont(font); +} + +void RichTextEditorDialog::setText(const QString &text) +{ + m_editor->setText(text); + m_text_edit->setPlainText(text); + m_state = Clean; +} + +QString RichTextEditorDialog::text(Qt::TextFormat format) const +{ + // In autotext mode, if the user has changed the source, use that + if (format == Qt::AutoText && (m_state == Clean || m_state == SourceChanged)) + return m_text_edit->toPlainText(); + // If the plain text HTML editor is selected, first copy its contents over + // to the rich text editor so that it is converted to Qt-HTML or actual + // plain text. + if (m_tab_widget->currentIndex() == SourceIndex && m_state == SourceChanged) + m_editor->setHtml(m_text_edit->toPlainText()); + return m_editor->text(format); +} + +void RichTextEditorDialog::tabIndexChanged(int newIndex) +{ + // Anything changed, is there a need for a conversion? + if (newIndex == SourceIndex && m_state != RichTextChanged) + return; + if (newIndex == RichTextIndex && m_state != SourceChanged) + return; + const State oldState = m_state; + // Remember the cursor position, since it is invalidated by setPlainText + QTextEdit *new_edit = (newIndex == SourceIndex) ? m_text_edit : m_editor; + const int position = new_edit->textCursor().position(); + + if (newIndex == SourceIndex) { + const QString html = m_editor->text(Qt::RichText); + qWarning("%s", qPrintable(runXSLT(html))); + m_text_edit->setPlainText(html); + + } else + m_editor->setHtml(m_text_edit->toPlainText()); + + QTextCursor cursor = new_edit->textCursor(); + cursor.movePosition(QTextCursor::End); + if (cursor.position() > position) { + cursor.setPosition(position); + } + new_edit->setTextCursor(cursor); + m_state = oldState; // Changed is triggered by setting the text +} + +void RichTextEditorDialog::richTextChanged() +{ + m_state = RichTextChanged; +} + +void RichTextEditorDialog::sourceChanged() +{ + m_state = SourceChanged; +} + +} // namespace qdesigner_internal + +QT_END_NAMESPACE + +#include "richtexteditor.moc" diff --git a/sources/richtext/richtexteditor_p.h b/sources/richtext/richtexteditor_p.h new file mode 100644 index 000000000..48e9b2cf6 --- /dev/null +++ b/sources/richtext/richtexteditor_p.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Designer of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef RICHTEXTEDITOR_H +#define RICHTEXTEDITOR_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QTabWidget; +class QToolBar; + +class QDesignerFormEditorInterface; + +namespace qdesigner_internal { + +class RichTextEditor; + +class RichTextEditorDialog : public QDialog +{ + Q_OBJECT +public: + explicit RichTextEditorDialog(QWidget *parent = 0); + ~RichTextEditorDialog(); + + int showDialog(); + void setDefaultFont(const QFont &font); + void setText(const QString &text); + QString text(Qt::TextFormat format = Qt::AutoText) const; + +signals: + void applyEditText(const QString &); + +private slots: + void tabIndexChanged(int newIndex); + void richTextChanged(); + void sourceChanged(); + void on_buttonBox_accepted(); + +private: + enum TabIndex { RichTextIndex, SourceIndex }; + enum State { Clean, RichTextChanged, SourceChanged }; + RichTextEditor *m_editor; + QTextEdit *m_text_edit; + QTabWidget *m_tab_widget; + State m_state; + }; + +} // namespace qdesigner_internal + +QT_END_NAMESPACE + +#endif // RITCHTEXTEDITOR_H diff --git a/sources/richtext/ui_addlinkdialog.h b/sources/richtext/ui_addlinkdialog.h new file mode 100644 index 000000000..47d48bc52 --- /dev/null +++ b/sources/richtext/ui_addlinkdialog.h @@ -0,0 +1,117 @@ +/******************************************************************************** +** Form generated from reading UI file 'addlinkdialog.ui' +** +** Created: Thu 4. Apr 17:13:59 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_ADDLINKDIALOG_H +#define UI_ADDLINKDIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_AddLinkDialog +{ +public: + QVBoxLayout *verticalLayout; + QFormLayout *formLayout; + QLabel *label; + QLineEdit *titleInput; + QLabel *label_2; + QLineEdit *urlInput; + QSpacerItem *verticalSpacer; + QFrame *line; + QDialogButtonBox *buttonBox; + + void setupUi(QDialog *AddLinkDialog) + { + if (AddLinkDialog->objectName().isEmpty()) + AddLinkDialog->setObjectName(QString::fromUtf8("AddLinkDialog")); + AddLinkDialog->setSizeGripEnabled(false); + AddLinkDialog->setModal(true); + verticalLayout = new QVBoxLayout(AddLinkDialog); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + formLayout = new QFormLayout(); + formLayout->setObjectName(QString::fromUtf8("formLayout")); + label = new QLabel(AddLinkDialog); + label->setObjectName(QString::fromUtf8("label")); + + formLayout->setWidget(0, QFormLayout::LabelRole, label); + + titleInput = new QLineEdit(AddLinkDialog); + titleInput->setObjectName(QString::fromUtf8("titleInput")); + titleInput->setMinimumSize(QSize(337, 0)); + + formLayout->setWidget(0, QFormLayout::FieldRole, titleInput); + + label_2 = new QLabel(AddLinkDialog); + label_2->setObjectName(QString::fromUtf8("label_2")); + + formLayout->setWidget(1, QFormLayout::LabelRole, label_2); + + urlInput = new QLineEdit(AddLinkDialog); + urlInput->setObjectName(QString::fromUtf8("urlInput")); + + formLayout->setWidget(1, QFormLayout::FieldRole, urlInput); + + + verticalLayout->addLayout(formLayout); + + verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); + + verticalLayout->addItem(verticalSpacer); + + line = new QFrame(AddLinkDialog); + line->setObjectName(QString::fromUtf8("line")); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + + verticalLayout->addWidget(line); + + buttonBox = new QDialogButtonBox(AddLinkDialog); + buttonBox->setObjectName(QString::fromUtf8("buttonBox")); + buttonBox->setOrientation(Qt::Horizontal); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + + verticalLayout->addWidget(buttonBox); + + + retranslateUi(AddLinkDialog); + QObject::connect(buttonBox, SIGNAL(accepted()), AddLinkDialog, SLOT(accept())); + QObject::connect(buttonBox, SIGNAL(rejected()), AddLinkDialog, SLOT(reject())); + + QMetaObject::connectSlotsByName(AddLinkDialog); + } // setupUi + + void retranslateUi(QDialog *AddLinkDialog) + { + AddLinkDialog->setWindowTitle(QApplication::translate("AddLinkDialog", "Insert Link", 0, QApplication::UnicodeUTF8)); + label->setText(QApplication::translate("AddLinkDialog", "Title:", 0, QApplication::UnicodeUTF8)); + label_2->setText(QApplication::translate("AddLinkDialog", "URL:", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class AddLinkDialog: public Ui_AddLinkDialog {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_ADDLINKDIALOG_H