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 69708f1c4..000000000 Binary files a/sources/htmleditor/images/bulleted-list.png and /dev/null differ diff --git a/sources/htmleditor/images/document-new.png b/sources/htmleditor/images/document-new.png deleted file mode 100644 index e3808a108..000000000 Binary files a/sources/htmleditor/images/document-new.png and /dev/null differ diff --git a/sources/htmleditor/images/document-open.png b/sources/htmleditor/images/document-open.png deleted file mode 100644 index 254a6b814..000000000 Binary files a/sources/htmleditor/images/document-open.png and /dev/null differ diff --git a/sources/htmleditor/images/document-save-as.png b/sources/htmleditor/images/document-save-as.png deleted file mode 100644 index 340a87eec..000000000 Binary files a/sources/htmleditor/images/document-save-as.png and /dev/null differ diff --git a/sources/htmleditor/images/document-save.png b/sources/htmleditor/images/document-save.png deleted file mode 100644 index a94e0eab9..000000000 Binary files a/sources/htmleditor/images/document-save.png and /dev/null differ diff --git a/sources/htmleditor/images/edit-copy.png b/sources/htmleditor/images/edit-copy.png deleted file mode 100644 index 345b2f1d7..000000000 Binary files a/sources/htmleditor/images/edit-copy.png and /dev/null differ diff --git a/sources/htmleditor/images/edit-cut.png b/sources/htmleditor/images/edit-cut.png deleted file mode 100644 index 7017d1b3c..000000000 Binary files a/sources/htmleditor/images/edit-cut.png and /dev/null differ diff --git a/sources/htmleditor/images/edit-paste.png b/sources/htmleditor/images/edit-paste.png deleted file mode 100644 index f6a625ce0..000000000 Binary files a/sources/htmleditor/images/edit-paste.png and /dev/null differ diff --git a/sources/htmleditor/images/edit-redo.png b/sources/htmleditor/images/edit-redo.png deleted file mode 100644 index 576cfc76c..000000000 Binary files a/sources/htmleditor/images/edit-redo.png and /dev/null differ diff --git a/sources/htmleditor/images/edit-select-all.png b/sources/htmleditor/images/edit-select-all.png deleted file mode 100644 index e6331c6e9..000000000 Binary files a/sources/htmleditor/images/edit-select-all.png and /dev/null differ diff --git a/sources/htmleditor/images/edit-undo.png b/sources/htmleditor/images/edit-undo.png deleted file mode 100644 index f37c6963d..000000000 Binary files a/sources/htmleditor/images/edit-undo.png and /dev/null differ diff --git a/sources/htmleditor/images/format-indent-less.png b/sources/htmleditor/images/format-indent-less.png deleted file mode 100644 index 52920122f..000000000 Binary files a/sources/htmleditor/images/format-indent-less.png and /dev/null differ diff --git a/sources/htmleditor/images/format-indent-more.png b/sources/htmleditor/images/format-indent-more.png deleted file mode 100644 index ad2b527db..000000000 Binary files a/sources/htmleditor/images/format-indent-more.png and /dev/null differ diff --git a/sources/htmleditor/images/format-justify-center.png b/sources/htmleditor/images/format-justify-center.png deleted file mode 100644 index 0777a9adf..000000000 Binary files a/sources/htmleditor/images/format-justify-center.png and /dev/null differ diff --git a/sources/htmleditor/images/format-justify-fill.png b/sources/htmleditor/images/format-justify-fill.png deleted file mode 100644 index 0ce401357..000000000 Binary files a/sources/htmleditor/images/format-justify-fill.png and /dev/null differ diff --git a/sources/htmleditor/images/format-justify-left.png b/sources/htmleditor/images/format-justify-left.png deleted file mode 100644 index a8e1ca886..000000000 Binary files a/sources/htmleditor/images/format-justify-left.png and /dev/null differ diff --git a/sources/htmleditor/images/format-justify-right.png b/sources/htmleditor/images/format-justify-right.png deleted file mode 100644 index 8228d81d8..000000000 Binary files a/sources/htmleditor/images/format-justify-right.png and /dev/null differ diff --git a/sources/htmleditor/images/format-text-bold.png b/sources/htmleditor/images/format-text-bold.png deleted file mode 100644 index 7166e3d74..000000000 Binary files a/sources/htmleditor/images/format-text-bold.png and /dev/null differ diff --git a/sources/htmleditor/images/format-text-italic.png b/sources/htmleditor/images/format-text-italic.png deleted file mode 100644 index ef68fb340..000000000 Binary files a/sources/htmleditor/images/format-text-italic.png and /dev/null differ diff --git a/sources/htmleditor/images/format-text-strikethrough.png b/sources/htmleditor/images/format-text-strikethrough.png deleted file mode 100644 index e4ca57332..000000000 Binary files a/sources/htmleditor/images/format-text-strikethrough.png and /dev/null differ diff --git a/sources/htmleditor/images/format-text-underline.png b/sources/htmleditor/images/format-text-underline.png deleted file mode 100644 index d33422bdf..000000000 Binary files a/sources/htmleditor/images/format-text-underline.png and /dev/null differ diff --git a/sources/htmleditor/images/image-x-generic.png b/sources/htmleditor/images/image-x-generic.png deleted file mode 100644 index 10f46719d..000000000 Binary files a/sources/htmleditor/images/image-x-generic.png and /dev/null differ diff --git a/sources/htmleditor/images/insert-html.png b/sources/htmleditor/images/insert-html.png deleted file mode 100644 index 72c7e9c7f..000000000 Binary files a/sources/htmleditor/images/insert-html.png and /dev/null differ diff --git a/sources/htmleditor/images/list-add.png b/sources/htmleditor/images/list-add.png deleted file mode 100644 index 306d3d892..000000000 Binary files a/sources/htmleditor/images/list-add.png and /dev/null differ diff --git a/sources/htmleditor/images/list-remove.png b/sources/htmleditor/images/list-remove.png deleted file mode 100644 index 45e5c2a8e..000000000 Binary files a/sources/htmleditor/images/list-remove.png and /dev/null differ diff --git a/sources/htmleditor/images/numbered-list.png b/sources/htmleditor/images/numbered-list.png deleted file mode 100644 index e9f400129..000000000 Binary files a/sources/htmleditor/images/numbered-list.png and /dev/null differ diff --git a/sources/htmleditor/images/text-html.png b/sources/htmleditor/images/text-html.png deleted file mode 100644 index 51beaff41..000000000 Binary files a/sources/htmleditor/images/text-html.png and /dev/null differ diff --git a/sources/htmleditor/images/text.png b/sources/htmleditor/images/text.png deleted file mode 100644 index a6902947d..000000000 Binary files a/sources/htmleditor/images/text.png and /dev/null differ diff --git a/sources/htmleditor/images/text_color.png b/sources/htmleditor/images/text_color.png deleted file mode 100644 index 496e87992..000000000 Binary files a/sources/htmleditor/images/text_color.png and /dev/null differ 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 1e7ed4cf2..000000000 Binary files a/sources/htmleditor/qtlogo.png and /dev/null differ diff --git a/sources/richtext/README.txt b/sources/richtext/README.txt new file mode 100644 index 000000000..9315f7c80 --- /dev/null +++ b/sources/richtext/README.txt @@ -0,0 +1 @@ +Example running richtext through XSLT diff --git a/sources/richtext/addlinkdialog.ui b/sources/richtext/addlinkdialog.ui new file mode 100644 index 000000000..3171159f9 --- /dev/null +++ b/sources/richtext/addlinkdialog.ui @@ -0,0 +1,112 @@ + + 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