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();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |