From f442815c7e77842bb90f1120650054fe3fb2be10 Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Thu, 29 Mar 2018 17:38:46 +0200 Subject: [PATCH] . --- cdocumentreader.cpp | 45 ++++++++++++++++++++++---------- cdocumentwriter.cpp | 10 +++++-- cmainwindow.cpp | 29 +++++++++++++++------ cmainwindow.ui | 13 +++++++--- ctextedit.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++ ctextedit.h | 22 ++++++++++++++++ qtStoryWriter.pro | 7 ++--- 7 files changed, 160 insertions(+), 29 deletions(-) create mode 100644 ctextedit.cpp create mode 100644 ctextedit.h diff --git a/cdocumentreader.cpp b/cdocumentreader.cpp index 6be33ca..e12fdb2 100644 --- a/cdocumentreader.cpp +++ b/cdocumentreader.cpp @@ -1719,6 +1719,7 @@ void cDocumentReader::parseTextBlock(const QDomElement& element, QTextCursor* lp QVector textFormats; QString text; + qDebug() << "***** parseTextBlock start *****"; QDomNamedNodeMap attributes = element.attributes(); for(int x = 0;x < attributes.count();x++) { @@ -1750,10 +1751,9 @@ void cDocumentReader::parseTextBlock(const QDomElement& element, QTextCursor* lp child = child.nextSibling(); } - int indent; - if(m_bFirstBlock) { + qDebug() << "block #1"; m_bFirstBlock = false; lpCursor->setBlockFormat(allFormats[blockFormatIndex].blockFormat); lpCursor->setCharFormat(allFormats[charFormatIndex].charFormat); @@ -1761,28 +1761,46 @@ void cDocumentReader::parseTextBlock(const QDomElement& element, QTextCursor* lp } else { + qDebug() << "block #n"; if(listFormatIndex != -1) { + int indent = allFormats[listFormatIndex].listFormat.indent(); + qDebug() << "listFormat"; + qDebug() << "--> " << text; indent = allFormats[listFormatIndex].listFormat.indent(); - if(!m_textLists.value(indent)) + if(!m_textLists.contains(indent)) { - m_textLists.insert(allFormats[listFormatIndex].listFormat.indent(), lpCursor->insertList(allFormats[listFormatIndex].listFormat)); - lpCursor->setBlockFormat(allFormats[blockFormatIndex].blockFormat); - lpCursor->setCharFormat(allFormats[charFormatIndex].charFormat); - lpCursor->setBlockCharFormat(allFormats[charFormatIndex].charFormat); + qDebug() << "list does not exist"; + qDebug() << " indent: " << indent; + QTextListFormat format = allFormats[listFormatIndex].listFormat; + QTextList* lpList = lpCursor->insertList(format); + qDebug() << " list: " << (int)lpList; + m_textLists.insert(indent, lpList); +DO MUASS I UMMANANDATUAN ... INDEX FOISCH? +// lpCursor->setBlockFormat(allFormats[blockFormatIndex].blockFormat); +// lpCursor->setCharFormat(allFormats[charFormatIndex].charFormat); +// lpCursor->setBlockCharFormat(allFormats[charFormatIndex].charFormat); } else { + qDebug() << "list already exists"; + qDebug() << " indent: " << indent; lpCursor->insertBlock(); - lpCursor->setBlockFormat(allFormats[blockFormatIndex].blockFormat); - lpCursor->setCharFormat(allFormats[charFormatIndex].charFormat); - lpCursor->setBlockCharFormat(allFormats[charFormatIndex].charFormat); +// lpCursor->setBlockFormat(allFormats[blockFormatIndex].blockFormat); +// lpCursor->setCharFormat(allFormats[charFormatIndex].charFormat); +// lpCursor->setBlockCharFormat(allFormats[charFormatIndex].charFormat); + QTextList* list = m_textLists.value(indent); + qDebug() << " list: " << (int)list; + list->add(lpCursor->block()); } - QTextBlock block = lpCursor->block(); - QTextList* list = m_textLists.value(indent); - list->add(block); +// qDebug() << "process further"; +// QTextBlock block = lpCursor->block(); +// qDebug() << " indent: " << indent; +// QTextList* list = m_textLists.value(indent); +// qDebug() << " list: " << (int)list; +// list->add(block); } // else if(tableFormatIndex != -1) // lpCursor->insertTable(allFormats[tableFormatIndex].tableFormat); @@ -1805,6 +1823,7 @@ void cDocumentReader::parseTextBlock(const QDomElement& element, QTextCursor* lp QString textPart = text.mid(start, length); lpCursor->insertText(textPart, format); } + qDebug() << "****** parseTextBlock end ******"; } QVector cDocumentReader::parseTextFormats(const QDomElement& element) diff --git a/cdocumentwriter.cpp b/cdocumentwriter.cpp index c58258c..685c97e 100644 --- a/cdocumentwriter.cpp +++ b/cdocumentwriter.cpp @@ -585,9 +585,15 @@ void cDocumentWriter::writeTextImageFormat(QTextImageFormat* lpTextImageFormat, name = m_szPath + "/" + name; QString path = name.left(name.lastIndexOf("/")); - QDir dir; + QFileInfo fileInfo(name); + if(fileInfo.suffix().isEmpty()) + name.append(".png"); + + QDir dir; dir.mkpath(path); - pixmap.save(name); + bool ret = pixmap.save(name); + if(!ret) + return; } } diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 7656736..fe7ad32 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -14,6 +14,9 @@ #include +//#define WITH_ZIP + + cTextDocument* g_lpInputDocument = 0; cTextDocument* g_lpOutputDocument = 0; @@ -267,13 +270,23 @@ void cMainWindow::on_actionTest1_triggered() void cMainWindow::on_actionSave_triggered() { -// g_lpInputDocument->saveAs("C:/Temp/qtStoryWriter/documentText.zip"); -// cDocumentReader reader("C:/Temp/qtStoryWriter/documentText.zip"); -// g_lpOutputDocument = reader.readDocument(); -// ui->m_lpOutput->setDocument(g_lpOutputDocument); - - g_lpInputDocument->saveAs("C:/Temp/qtStoryWriter/documentText.xml", false); - cDocumentReader reader("C:/Temp/qtStoryWriter/documentText.xml", false); +#ifdef __linux__ + #ifdef WITH_ZIP + g_lpInputDocument->saveAs("/tmp/qtStoryWriter/documentText.zip", false); + cDocumentReader reader("/tmp/qtStoryWriter/documentText.zip", false); + #else + g_lpInputDocument->saveAs("/tmp/qtStoryWriter/documentText.xml", false); + cDocumentReader reader("/tmp/qtStoryWriter/documentText.xml", false); + #endif +#elif _WIN32 + #ifdef WITH_ZIP + g_lpInputDocument->saveAs("C:/Temp/qtStoryWriter/documentText.zip", false); + cDocumentReader reader("C:/Temp/qtStoryWriter/documentText.zip", false); + #else + g_lpInputDocument->saveAs("C:/Temp/qtStoryWriter/documentText.xml", false); + cDocumentReader reader("C:/Temp/qtStoryWriter/documentText.xml", false); + #endif g_lpOutputDocument = reader.readDocument(); -// ui->m_lpOutput->setDocument(g_lpOutputDocument); + ui->m_lpOutput->setDocument(g_lpOutputDocument); +#endif } diff --git a/cmainwindow.ui b/cmainwindow.ui index 11431fb..2ddcc3c 100644 --- a/cmainwindow.ui +++ b/cmainwindow.ui @@ -18,7 +18,7 @@ - 0 + 1 @@ -26,7 +26,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -83,6 +83,13 @@ + + + cTextEdit + QTextEdit +
ctextedit.h
+
+
diff --git a/ctextedit.cpp b/ctextedit.cpp new file mode 100644 index 0000000..9e2b5d3 --- /dev/null +++ b/ctextedit.cpp @@ -0,0 +1,63 @@ +#include "ctextedit.h" + +#include +#include +#include +#include + + +cTextEdit::cTextEdit(QWidget* parent) : + QTextEdit(parent) +{ +} + +cTextEdit::cTextEdit(const QString& text, QWidget* parent) : + QTextEdit(text, parent) +{ +} + +bool cTextEdit::canInsertFromMimeData(const QMimeData* source) const +{ + return source->hasImage() || source->hasUrls() || QTextEdit::canInsertFromMimeData(source); +} + +void cTextEdit::insertFromMimeData(const QMimeData* source) +{ + if(source->hasImage()) + { + static int i = 1; + QUrl url(QString("dropped_image_%1").arg(i++)); + dropImage(url, qvariant_cast(source->imageData())); + } + else if(source->hasUrls()) + { + foreach(QUrl url, source->urls()) + { + QFileInfo info(url.toLocalFile()); + if(QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1())) + dropImage(url, QImage(info.filePath())); + else + dropTextFile(url); + } + } + else + { + QTextEdit::insertFromMimeData(source); + } +} + +void cTextEdit::dropImage(const QUrl& url, const QImage& image) +{ + if(!image.isNull()) + { + document()->addResource(QTextDocument::ImageResource, url, image); + textCursor().insertImage(url.toString()); + } +} + +void cTextEdit::dropTextFile(const QUrl& url) +{ + QFile file(url.toLocalFile()); + if(file.open(QIODevice::ReadOnly | QIODevice::Text)) + textCursor().insertText(file.readAll()); +} diff --git a/ctextedit.h b/ctextedit.h new file mode 100644 index 0000000..0caf307 --- /dev/null +++ b/ctextedit.h @@ -0,0 +1,22 @@ +#ifndef CTEXTEDIT_H +#define CTEXTEDIT_H + + +#include + + +class cTextEdit : public QTextEdit +{ +public: + cTextEdit(QWidget* parent = Q_NULLPTR); + cTextEdit(const QString& text, QWidget* parent = Q_NULLPTR); + + bool canInsertFromMimeData(const QMimeData* source) const; + void insertFromMimeData(const QMimeData* source); + +private: + void dropImage(const QUrl& url, const QImage& image); + void dropTextFile(const QUrl& url); +}; + +#endif // CTEXTEDIT_H diff --git a/qtStoryWriter.pro b/qtStoryWriter.pro index 7da8d14..2c49475 100644 --- a/qtStoryWriter.pro +++ b/qtStoryWriter.pro @@ -41,7 +41,6 @@ win32-g++ { message("mingw") INCLUDEPATH += C:/dev/3rdParty/quazip/include DEPENDPATH += C:/dev/3rdParty/quazip/include - #LIBS += -LC:/dev/3rdParty/quazip/gcc/lib -lquazip.a LIBS += -LC:/dev/3rdParty/quazip/gcc/lib -lquazip INCLUDEPATH += C:/dev/3rdParty/zlib/include DEPENDPATH += C:/dev/3rdParty/zlib/include @@ -59,14 +58,16 @@ SOURCES += \ cdocumentreader.cpp \ cdocumentwriter.cpp \ ctextdocument.cpp \ - common.cpp + common.cpp \ + ctextedit.cpp HEADERS += \ cmainwindow.h \ cdocumentreader.h \ cdocumentwriter.h \ ctextdocument.h \ - common.h + common.h \ + ctextedit.h FORMS += \ cmainwindow.ui