void PropertyWidget_Distance::handleTabs() { if (m_doc && m_item) { PageItem_TextFrame *tItem = m_item->asTextFrame(); if (tItem == 0) return; const ParagraphStyle& style(m_doc->appMode == modeEdit ? tItem->currentStyle() : tItem->itemText.defaultStyle()); TabManager *dia = new TabManager(this, m_doc->unitIndex(), style.tabValues(), tItem->columnWidth()); if (dia->exec()) { if (m_doc->appMode != modeEdit) { ParagraphStyle newStyle(m_item->itemText.defaultStyle()); newStyle.setTabValues(dia->tmpTab); Selection tempSelection(this, false); tempSelection.addItem(m_item, true); m_doc->itemSelection_ApplyParagraphStyle(newStyle, &tempSelection); } else { ParagraphStyle newStyle; newStyle.setTabValues(dia->tmpTab); m_doc->itemSelection_ApplyParagraphStyle(newStyle); } m_item->update(); } delete dia; } }
void CharSelect::slot_insertUserSpecialChar(QChar ch, QString font) { if (!m_Item) return; PageItem_TextFrame *cItem; if (m_doc->appMode == modeEditTable) cItem = m_Item->asTable()->activeCell().textFrame(); else cItem = m_Item->asTextFrame(); if (cItem->HasSel) cItem->deleteSelectedTextFromFrame(); cItem->invalidateLayout(); // //CB: Avox please make text->insertchar(char) so none of this happens in gui code, and item can tell doc its changed so the view and mainwindow slotdocch are not necessary if (ch == QChar(10)) ch = QChar(13); if (ch == QChar(9)) ch = QChar(32); int pot = cItem->itemText.cursorPosition(); cItem->itemText.insertChars(ch, true); CharStyle nstyle = m_Item->itemText.charStyle(pot); nstyle.setFont((*m_doc->AllFonts)[font]); cItem->itemText.applyCharStyle(pot, 1, nstyle); m_doc->view()->DrawNew(); m_doc->changed(); }
QPixmap SampleItem::getSample(int width, int height) { // if it's false => the used font will be removed from used fonts // after sample creating bool previouslyUsedFont = false; if (tmpStyle.charStyle().font().isNone()) return QPixmap(); UndoManager::instance()->setUndoEnabled(false); // disable undo PageItem_TextFrame *previewItem = new PageItem_TextFrame(m_Doc, 0, 0, width, height, 0, "__whiteforpreviewbg__", "__whiteforpreview__"); QImage pm(width, height, QImage::Format_ARGB32); ScPainter *painter = new ScPainter(&pm, width, height, 1.0, 0); painter->setZoomFactor(PrefsManager::instance()->appPrefs.displayPrefs.displayScale); if (m_Doc->UsedFonts.contains(tmpStyle.charStyle().font().scName())) previouslyUsedFont = true; m_Doc->AddFont(tmpStyle.charStyle().font().scName(), qRound(m_Doc->itemToolPrefs().textSize / 10.0)); previewItem->FrameType = PageItem::TextFrame; previewItem->itemText.clear(); // previewItem->setFont(tmpStyle.charStyle().font()->scName()); previewItem->Cols = 1; text.replace(QChar(10),QChar(13)).replace(QChar(5),QChar(13)); previewItem->itemText.insertChars(0, text); previewItem->itemText.setDefaultStyle(tmpStyle); previewItem->setFillColor("__whiteforpreviewbg__"); previewItem->setFillShade(bgShade); previewItem->SetRectFrame(); previewItem->Frame = false; previewItem->DrawObj(painter, QRect()); painter->end(); delete(painter); delete previewItem; // cleanups and resets if (!previouslyUsedFont) { QString fontName = tmpStyle.charStyle().font().scName(); (*m_Doc->AllFonts)[fontName].decreaseUsage(); // was increased by AddFont() m_Doc->UsedFonts.remove(fontName); } // m_Doc->docParagraphStyles.remove(tmpIndex); UndoManager::instance()->setUndoEnabled(true); return QPixmap::fromImage(pm); }
void InlinePalette::handlePasteToItem() { PageItem* selItem = currDoc->m_Selection->itemAt(0); PageItem_TextFrame *currItem; if (selItem->isTable()) currItem = selItem->asTable()->activeCell().textFrame(); else currItem = selItem->asTextFrame(); if (currItem->HasSel) currItem->deleteSelectedTextFromFrame(); currItem->itemText.insertObject(actItem); if (selItem->isTable()) selItem->asTable()->update(); else currItem->update(); }
void PropertyWidget_Distance::showColumns(int r, double g) { if (!m_ScMW || m_ScMW->scriptIsRunning()) return; bool cSigWasBlocked = columns->blockSignals(true); bool cGapSigWasBlocked = columnGap->blockSignals(true); columns->setValue(r); columnGap->setValue(g * m_unitRatio); if (m_item) { PageItem_TextFrame *textItem = m_item->asTextFrame(); if (m_doc->appMode == modeEditTable) textItem = m_item->asTable()->activeCell().textFrame(); if (textItem != 0) { //#14427: columns->setMaximum(qMax(qRound(textItem->width() / qMax(textItem->ColGap, 10.0)), 1)); if (columnGapLabel->currentIndex() == 0) { columnGap->setMaximum(qMax((textItem->width() / textItem->Cols - textItem->textToFrameDistLeft() - textItem->textToFrameDistRight()) * m_unitRatio, 0.0)); columnGap->setValue(textItem->ColGap * m_unitRatio); } else { columnGap->setMaximum(qMax((textItem->width() / textItem->Cols) * m_unitRatio, 0.0)); columnGap->setValue(textItem->columnWidth() * m_unitRatio); } } } columns->setMinimum(1); columnGap->setMinimum(0); columnGap->setEnabled(columns->value() != 1); columnGapLabel->setEnabled(columns->value() != 1); columns->blockSignals(cSigWasBlocked); columnGap->blockSignals(cGapSigWasBlocked); }
void CharSelect::slot_insertSpecialChar() { emit insertSpecialChar(); if (!m_Item) return; PageItem_TextFrame *cItem; if (m_doc->appMode == modeEditTable) cItem = m_Item->asTable()->activeCell().textFrame(); else cItem = m_Item->asTextFrame(); if (cItem->HasSel) cItem->deleteSelectedTextFromFrame(); cItem->invalidateLayout(); //CB: Avox please make text->insertchar(char) so none of this happens in gui code, and item can tell doc its changed so the view and mainwindow slotdocch are not necessary QChar ch; QString fontName = m_doc->currentStyle.charStyle().font().scName(); if (m_enhanced) fontName = m_enhanced->getUsedFont(); for (int a=0; a<chToIns.length(); ++a) { ch = chToIns.at(a); if (ch == QChar(10)) ch = QChar(13); if (ch == QChar(9)) ch = QChar(32); int pot = cItem->itemText.cursorPosition(); cItem->itemText.insertChars(ch, true); CharStyle nstyle = m_Item->itemText.charStyle(pot); nstyle.setFont((*m_doc->AllFonts)[fontName]); cItem->itemText.applyCharStyle(pot, 1, nstyle); } m_doc->view()->DrawNew(); m_doc->changed(); // delEdit(); }
void PropertyWidget_Distance::setCurrentItem(PageItem *item) { if (!m_ScMW || m_ScMW->scriptIsRunning()) return; //CB We shouldn't really need to process this if our item is the same one //maybe we do if the item has been changed by scripter.. but that should probably //set some status if so. //FIXME: This won't work until when a canvas deselect happens, m_item must be NULL. //if (m_item == i) // return; if (item && m_doc.isNull()) setDoc(item->doc()); m_item = item; disconnectSignals(); configureWidgets(); if (!m_item) return; PageItem_TextFrame *textItem = m_item->asTextFrame(); if (m_doc->appMode == modeEditTable) textItem = m_item->asTable()->activeCell().textFrame(); if (!textItem) return; columns->setMaximum(qMax(qRound(textItem->width() / qMax(textItem->ColGap, 10.0)), 1)); columns->setMinimum(1); columns->setValue(textItem->Cols); columnGap->setMinimum(0); if (columnGapLabel->currentIndex() == 0) { columnGap->setMaximum(qMax((textItem->width() / textItem->Cols - textItem->textToFrameDistLeft() - textItem->textToFrameDistRight()) * m_unitRatio, 0.0)); columnGap->setValue(textItem->ColGap*m_unitRatio); } else { columnGap->setMaximum(qMax((textItem->width() / textItem->Cols) * m_unitRatio, 0.0)); columnGap->setValue(textItem->columnWidth() * m_unitRatio); } leftDistance->setValue(textItem->textToFrameDistLeft()*m_unitRatio); topDistance->setValue(textItem->textToFrameDistTop()*m_unitRatio); bottomDistance->setValue(textItem->textToFrameDistBottom()*m_unitRatio); rightDistance->setValue(textItem->textToFrameDistRight()*m_unitRatio); if (columns->value() == 1) { columnGap->setEnabled(false); columnGapLabel->setEnabled(false); } else { columnGap->setEnabled(true); columnGapLabel->setEnabled(true); } showTextDistances(textItem->textToFrameDistLeft(), textItem->textToFrameDistTop(), textItem->textToFrameDistBottom(), textItem->textToFrameDistRight()); verticalAlign->setCurrentIndex(textItem->verticalAlignment()); connectSignals(); }
void PageItem_Table::getNamedResources(ResourceCollection& lists) const { TableBorder lborder = leftBorder(); foreach (const TableBorderLine& line, lborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } TableBorder rborder = rightBorder(); foreach (const TableBorderLine& line, rborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } TableBorder bborder = bottomBorder(); foreach (const TableBorderLine& line, bborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } TableBorder tborder = topBorder(); foreach (const TableBorderLine& line, tborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } QString tableStyleName = this->styleName(); if (!tableStyleName.isEmpty()) lists.collectTableStyle(tableStyleName); for (int row = 0; row < rows(); ++row) { int colSpan = 0; for (int col = 0; col < columns(); col += colSpan) { TableCell cell = cellAt(row, col); PageItem_TextFrame* textFrame = cell.textFrame(); textFrame->getNamedResources(lists); QString cellStyle = cell.styleName(); if (!cellStyle.isEmpty()) lists.collectCellStyle(cellStyle); QString cellFill = cell.fillColor(); if (cellFill != CommonStrings::None) lists.collectColor(cellFill); lborder = cell.leftBorder(); foreach (const TableBorderLine& line, lborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } rborder = cell.rightBorder(); foreach (const TableBorderLine& line, rborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } bborder = cell.bottomBorder(); foreach (const TableBorderLine& line, bborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } tborder = cell.topBorder(); foreach (const TableBorderLine& line, tborder.borderLines()) { if (line.color() == CommonStrings::None) continue; lists.collectColor(line.color()); } colSpan = cell.columnSpan(); } } PageItem::getNamedResources(lists); }