void Request::setHeaders(const QVariantMap &headers) { Q_D(Request); d->headers = headers; emit headersChanged(); #ifdef QYOUTUBE_DEBUG qDebug() << "QYouTube::Request::setHeaders" << headers; #endif }
//create page-layout and master-page void Document::slotSectionFound(wvWare::SharedPtr<const wvWare::Word97::SEP> sep) { kDebug(30513) ; m_omittMasterPage = false; m_useLastMasterPage = false; //does this section require a specific first page bool firstPage = sep->fTitlePage || sep->pgbApplyTo; // ******************************* // page-layout style // ******************************* kDebug(30513) << "preparing page-layout styles"; KoGenStyle* pageLayoutStyle = new KoGenStyle(KoGenStyle::PageLayoutStyle); //set page-layout attributes setPageLayoutStyle(pageLayoutStyle, sep, 0); pageLayoutStyle->setAutoStyleInStylesDotXml(true); //NOTE: Each section may require a new page-layout. If this is not the //case and the header/footer content didn't change, the <style:master-page> //element can be omitted. Except of continuous section break a manual page //break has to be inserted. //TODO: Even page/Odd page section break support //FIXME: missing support for fo:break-before="page" in table properties so //let's omitt the <style:master-page> element only in case of a continuous //section break if ( !firstPage && !headersChanged() && (m_pageLayoutStyle_last == *pageLayoutStyle) ){ // if (sep->bkc != 0) { // textHandler()->set_breakBeforePage(true); // } switch (sep->bkc) { case bkcContinuous: kDebug(30513) << "omitting page-layout & master-page creation"; m_omittMasterPage = true; break; case bkcNewPage: case bkcEvenPage: case bkcOddPage: kDebug(30513) << "using the last defined master-page"; m_useLastMasterPage = true; m_writeMasterPageName = true; break; default: kWarning(30513) << "Warning: section break type (" << sep->bkc << ") NOT SUPPORTED!"; m_omittMasterPage = true; break; } //cleaning required! delete pageLayoutStyle; } else { //save the actual KoGenStyle! m_pageLayoutStyle_last = *pageLayoutStyle; //add data into corresponding lists m_pageLayoutStyle_list.prepend(pageLayoutStyle); } //yeah, we can omitt creation of a new master-page if (m_omittMasterPage || m_useLastMasterPage) { return; } //check if a first-page specific page-layout has to be created if (firstPage) { pageLayoutStyle = new KoGenStyle(KoGenStyle::PageLayoutStyle); //set page-layout attributes for the first page setPageLayoutStyle(pageLayoutStyle, sep, 1); pageLayoutStyle->setAutoStyleInStylesDotXml(true); //add data into corresponding lists m_pageLayoutStyle_list.prepend(pageLayoutStyle); } // ******************************* // master-page style // ******************************* KoGenStyle* masterStyle = new KoGenStyle(KoGenStyle::MasterPageStyle); QString masterStyleName; //NOTE: The first master-page-name has to be "Standard", words has hard //coded that the value of fo:backgroud-color from this style is used for //the entire frameset. if (m_textHandler->sectionNumber() > 1) { masterStyleName.append("MP"); masterStyleName.append(QString::number(m_textHandler->sectionNumber())); } else { masterStyleName.append("Standard"); } masterStyle->addAttribute("style:display-name", masterStyleName); //add data into corresponding lists m_masterPageName_list.prepend(masterStyleName); m_masterPageStyle_list.prepend(masterStyle); //initialize the header/footer list m_hasHeader_list.prepend(false); m_hasFooter_list.prepend(false); //check if a first-page specific master-page has to be created if (firstPage) { masterStyle = new KoGenStyle(KoGenStyle::MasterPageStyle); masterStyleName.clear(); masterStyleName.append("First_Page"); if (m_textHandler->sectionNumber() > 1) { masterStyleName.append(QString::number(m_textHandler->sectionNumber())); } masterStyle->addAttribute("style:display-name", masterStyleName); masterStyle->addAttribute("style:next-style-name", m_masterPageName_list.last()); //add data into corresponding lists m_masterPageName_list.prepend(masterStyleName); m_masterPageStyle_list.prepend(masterStyle); //initialize the header/footer list m_hasHeader_list.prepend(false); m_hasFooter_list.prepend(false); } //required by handlers m_writeMasterPageName = true; //required by this module m_lastMasterPageName = m_masterPageName_list.first(); for (int i = 0; i < m_masterPageName_list.size(); i++) { kDebug(30513) << "prepared master-page style:" << m_masterPageName_list[i]; } }
void VMdEditor::updateHeaders(const QVector<VElementRegion> &p_headerRegions) { QTextDocument *doc = document(); QVector<VTableOfContentItem> headers; QVector<int> headerBlockNumbers; QVector<QString> headerSequences; if (!p_headerRegions.isEmpty()) { headers.reserve(p_headerRegions.size()); headerBlockNumbers.reserve(p_headerRegions.size()); headerSequences.reserve(p_headerRegions.size()); } // Assume that each block contains only one line // Only support # syntax for now QRegExp headerReg(VUtils::c_headerRegExp); int baseLevel = -1; for (auto const & reg : p_headerRegions) { QTextBlock block = doc->findBlock(reg.m_startPos); if (!block.isValid()) { continue; } if (!block.contains(reg.m_endPos - 1)) { qWarning() << "header accross multiple blocks, starting from block" << block.blockNumber() << block.text(); } if ((block.userState() == HighlightBlockState::Normal) && headerReg.exactMatch(block.text())) { int level = headerReg.cap(1).length(); VTableOfContentItem header(headerReg.cap(2).trimmed(), level, block.blockNumber(), headers.size()); headers.append(header); headerBlockNumbers.append(block.blockNumber()); headerSequences.append(headerReg.cap(3)); if (baseLevel == -1) { baseLevel = level; } else if (baseLevel > level) { baseLevel = level; } } } m_headers.clear(); bool autoSequence = m_config.m_enableHeadingSequence && !isReadOnly() && m_file->isModifiable(); int headingSequenceBaseLevel = g_config->getHeadingSequenceBaseLevel(); if (headingSequenceBaseLevel < 1 || headingSequenceBaseLevel > 6) { headingSequenceBaseLevel = 1; } QVector<int> seqs(7, 0); QRegExp preReg(VUtils::c_headerPrefixRegExp); int curLevel = baseLevel - 1; for (int i = 0; i < headers.size(); ++i) { VTableOfContentItem &item = headers[i]; while (item.m_level > curLevel + 1) { curLevel += 1; // Insert empty level which is an invalid header. m_headers.append(VTableOfContentItem(c_emptyHeaderName, curLevel, -1, m_headers.size())); if (autoSequence) { addHeaderSequence(seqs, curLevel, headingSequenceBaseLevel); } } item.m_index = m_headers.size(); m_headers.append(item); curLevel = item.m_level; if (autoSequence) { addHeaderSequence(seqs, item.m_level, headingSequenceBaseLevel); QString seqStr = headerSequenceStr(seqs); if (headerSequences[i] != seqStr) { // Insert correct sequence. insertSequenceToHeader(doc->findBlockByNumber(headerBlockNumbers[i]), headerReg, preReg, seqStr); } } } emit headersChanged(m_headers); updateCurrentHeader(); }