forked from qt-creator/qt-creator
83 lines
1.7 KiB
C++
83 lines
1.7 KiB
C++
|
|
#include "htmleditorwidget.h"
|
||
|
|
|
||
|
|
#include <QTextEdit>
|
||
|
|
#include <QPlainTextEdit>
|
||
|
|
#include <QtWebKit>
|
||
|
|
#include <QDebug>
|
||
|
|
|
||
|
|
struct HTMLEditorWidgetData
|
||
|
|
{
|
||
|
|
QWebView* webView;
|
||
|
|
QPlainTextEdit* textEdit;
|
||
|
|
bool modified;
|
||
|
|
QString path;
|
||
|
|
};
|
||
|
|
|
||
|
|
HTMLEditorWidget::HTMLEditorWidget(QWidget* parent):QTabWidget(parent)
|
||
|
|
{
|
||
|
|
d = new HTMLEditorWidgetData;
|
||
|
|
|
||
|
|
d->webView = new QWebView;
|
||
|
|
d->textEdit = new QPlainTextEdit;
|
||
|
|
|
||
|
|
addTab(d->webView, "Preview");
|
||
|
|
addTab(d->textEdit, "Source");
|
||
|
|
setTabPosition(QTabWidget::South);
|
||
|
|
setTabShape(QTabWidget::Triangular);
|
||
|
|
|
||
|
|
d->textEdit->setFont( QFont("Courier", 12) );
|
||
|
|
|
||
|
|
connect(this, SIGNAL(currentChanged(int)),
|
||
|
|
this, SLOT(slotCurrentTabChanged(int)));
|
||
|
|
|
||
|
|
connect(d->textEdit, SIGNAL(textChanged()),
|
||
|
|
this, SLOT(slotContentModified()));
|
||
|
|
|
||
|
|
connect(d->webView, SIGNAL(titleChanged(QString)),
|
||
|
|
this, SIGNAL(titleChanged(QString)));
|
||
|
|
|
||
|
|
d->modified = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
HTMLEditorWidget::~HTMLEditorWidget()
|
||
|
|
{
|
||
|
|
delete d;
|
||
|
|
}
|
||
|
|
|
||
|
|
void HTMLEditorWidget::setContent(const QByteArray& ba, const QString& path)
|
||
|
|
{
|
||
|
|
if(path.isEmpty())
|
||
|
|
d->webView->setHtml(ba);
|
||
|
|
else
|
||
|
|
d->webView->setHtml(ba, "file:///" + path);
|
||
|
|
d->textEdit->setPlainText(ba);
|
||
|
|
d->modified = false;
|
||
|
|
d->path = path;
|
||
|
|
}
|
||
|
|
|
||
|
|
QByteArray HTMLEditorWidget::content() const
|
||
|
|
{
|
||
|
|
QString HTMLText = d->textEdit->toPlainText();
|
||
|
|
return HTMLText.toAscii();
|
||
|
|
}
|
||
|
|
|
||
|
|
QString HTMLEditorWidget::title() const
|
||
|
|
{
|
||
|
|
return d->webView->title();
|
||
|
|
}
|
||
|
|
|
||
|
|
void HTMLEditorWidget::slotCurrentTabChanged(int tab)
|
||
|
|
{
|
||
|
|
if(tab == 0 && d->modified)
|
||
|
|
setContent( content(), d->path );
|
||
|
|
}
|
||
|
|
|
||
|
|
void HTMLEditorWidget::slotContentModified()
|
||
|
|
{
|
||
|
|
d->modified = true;
|
||
|
|
emit contentModified();
|
||
|
|
}
|
||
|
|
|
||
|
|
|