/** * Reimplemented from UMLWidget::updateTextItemGroups() to * calculate the texts and also show/hide the texts based on current * state. */ void NodeWidget::updateTextItemGroups() { TextItemGroup *grp = textItemGroupAt(GroupIndex); grp->setTextItemCount(NodeWidget::TextItemCount); if(umlObject()) { UMLNode *node = static_cast<UMLNode*>(umlObject()); TextItem *stereo = grp->textItemAt(NodeWidget::StereoItemIndex); stereo->setText(node->stereotype(true)); stereo->setBold(true); stereo->setExplicitVisibility(!node->stereotype(false).isEmpty()); TextItem *nameItem = grp->textItemAt(NodeWidget::NameItemIndex); QString nameText = name(); bool underline = false; if(isInstance()) { nameText.prepend(':'); nameText.prepend(instanceName()); underline = true; } nameItem->setBold(true); nameItem->setUnderline(underline); nameItem->setText(nameText); } UMLWidget::updateTextItemGroups(); }
/** * Reimplemented from UMLWidget::updateTextItemGroups to update * texts and their properties. */ void NoteWidget::updateTextItemGroups() { TextItemGroup *grp = textItemGroupAt(GroupIndex); grp->setTextItemCount(TextItemCount); TextItem *diagramLinkItem = grp->textItemAt(DiagramLinkItemIndex); diagramLinkItem->setExplicitVisibility(false); //FIXME: Fixe diagram link drawing TextItem *noteTypeItem = grp->textItemAt(NoteTypeItemIndex); if (m_noteType == NoteWidget::PreCondition) { noteTypeItem->setText(i18n("<< precondition >>")); noteTypeItem->setExplicitVisibility(true); } else if (m_noteType == NoteWidget::PostCondition) { noteTypeItem->setText(i18n("<< postcondition >>")); noteTypeItem->setExplicitVisibility(true); } else if (m_noteType == NoteWidget::Transformation) { noteTypeItem->setText(i18n("<< transformation >>")); noteTypeItem->setExplicitVisibility(true); } else { // = NoteWidget::Normal noteTypeItem->setExplicitVisibility(false); } TextItem *noteTextItem = grp->textItemAt(NoteTextItemIndex); noteTextItem->setText(documentation()); UMLWidget::updateTextItemGroups(); }
void TextBoxConfig::slotOkClicked() { TextItem * textModel = dynamic_cast<TextItem*>(m_textContent->modelItem()); m_saving = true; textModel->setText(m_editor->text(Qt::RichText)); m_saving = false; }
/** * Reimplemented from UMLWidget::updateTextItemGroups to update * the text of TextItemGroups. */ void DatatypeWidget::updateTextItemGroups() { if(umlObject()) { TextItemGroup *grp = textItemGroupAt(DatatypeWidget::GroupIndex); grp->setTextItemCount(DatatypeWidget::TextItemCount); TextItem *stereo = grp->textItemAt(DatatypeWidget::StereoTypeItemIndex); stereo->setText(umlObject()->stereotype(true)); stereo->setBold(true); TextItem *nameItem = grp->textItemAt(DatatypeWidget::NameItemIndex); nameItem->setText(name()); nameItem->setItalic(umlObject()->isAbstract()); } UMLWidget::updateTextItemGroups(); }
/** * Reimplemented from UMLWidget::updateTextItemGroups to update * the texts displayed. */ void SignalWidget::updateTextItemGroups() { TextItemGroup *grp = textItemGroupAt(GroupIndex); grp->setTextItemCount(1); // Only name item TextItem *nameItem = grp->textItemAt(0); nameItem->setText(name()); UMLWidget::updateTextItemGroups(); }
Plot::Plot( QWidget *parent, const QwtInterval &interval ): QwtPlot( parent ) { for ( int axis = 0; axis < QwtPlot::axisCnt; axis ++ ) setAxisScale( axis, interval.minValue(), interval.maxValue() ); setCanvasBackground( QColor( Qt::darkBlue ) ); plotLayout()->setAlignCanvasToScales( true ); // grid QwtPlotGrid *grid = new QwtPlotGrid; //grid->enableXMin(true); grid->setMajorPen( Qt::white, 0, Qt::DotLine ); grid->setMinorPen( Qt::gray, 0 , Qt::DotLine ); grid->attach( this ); const int numEllipses = 10; for ( int i = 0; i < numEllipses; i++ ) { const double x = interval.minValue() + qrand() % qRound( interval.width() ); const double y = interval.minValue() + qrand() % qRound( interval.width() ); const double r = interval.minValue() + qrand() % qRound( interval.width() / 6 ); const QRectF area( x - r, y - r , 2 * r, 2 * r ); RectItem *item = new RectItem( RectItem::Ellipse ); item->setRenderHint( QwtPlotItem::RenderAntialiased, true ); item->setRect( area ); item->setPen( QPen( Qt::yellow ) ); item->attach( this ); } TextItem *textItem = new TextItem(); textItem->setText( "Navigation Example" ); textItem->attach( this ); d_rectOfInterest = new RectItem( RectItem::Rect ); d_rectOfInterest->setPen( Qt::NoPen ); QColor c = Qt::gray; c.setAlpha( 100 ); d_rectOfInterest->setBrush( QBrush( c ) ); d_rectOfInterest->attach( this ); }
AbstractVisualItem * SimpleTextContent::syncToModelItem(AbstractVisualItem *model) { setModelItemIsChanging(true); TextItem * textModel = dynamic_cast<TextItem*>(AbstractContent::syncToModelItem(model)); if(!textModel) { setModelItemIsChanging(false); //qDebug("SimpleTextContent::syncToModelItem: textModel is null, cannot sync\n"); return 0; } //qDebug("TextContent:syncToModelItem: Syncing to model! Yay!"); textModel->setText(text()); // textModel->setFontFamily(font().family()); // textModel->setFontSize(font().pointSize()); setModelItemIsChanging(false); return model; }
/** * Reimplemented from UMLWidget::updateTextItemGroups to * calculate the Text strings, their properties and also hide/show * them based on the current state. */ void ClassifierWidget::updateTextItemGroups() { // Invalidate stuff and recalculate them. invalidateDummies(); TextItemGroup *headerGroup = textItemGroupAt(HeaderGroupIndex); TextItemGroup *attribOpGroup = textItemGroupAt(AttribOpGroupIndex); TextItemGroup *templateGroup = textItemGroupAt(TemplateGroupIndex); attribOpGroup->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); templateGroup->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); UMLClassifier *umlC = classifier(); UMLClassifierListItemList attribList = umlC->getFilteredList(UMLObject::ot_Attribute); UMLClassifierListItemList opList = umlC->getFilteredList(UMLObject::ot_Operation); // Set up template group and template text items. UMLTemplateList tlist = umlC->getTemplateList(); templateGroup->setTextItemCount(tlist.size()); bool templateHide = shouldDrawAsCircle(); // Hide if draw as circle. for(int i = 0; i < tlist.size(); ++i) { UMLTemplate *t = tlist[i]; templateGroup->textItemAt(i)->setText(t->toString()); templateGroup->textItemAt(i)->setExplicitVisibility(!templateHide); } // Stereo type and name. const int headerItemCount = 2; headerGroup->setTextItemCount(headerItemCount); const int cnt = attribList.count() + opList.count(); attribOpGroup->setTextItemCount(cnt); // Setup Stereo text item. TextItem *stereoItem = headerGroup->textItemAt(StereotypeItemIndex); stereoItem->setBold(true); stereoItem->setText(umlC->stereotype(true)); bool v = !shouldDrawAsCircle() && visualProperty(ShowStereotype) && !(umlC->stereotype(false).isEmpty()); stereoItem->setExplicitVisibility(v); // name item is always visible. TextItem *nameItem = headerGroup->textItemAt(NameItemIndex); nameItem->setBold(true); nameItem->setItalic(umlC->isAbstract()); nameItem->setUnderline(shouldDrawAsCircle()); QString nameText = name(); if (visualProperty(ShowPackage) == true) { nameText = umlC->fullyQualifiedName(); } bool showNameOnly = (!visualProperty(ShowAttributes) && !visualProperty(ShowOperations) && !visualProperty(ShowStereotype) && !shouldDrawAsCircle()); nameItem->setText(nameText); int attribStartIndex = 0; int opStartIndex = attribStartIndex + attribList.size(); // Now setup attribute texts. int visibleAttributes = 0; for (int i=0; i < attribList.size(); ++i) { UMLClassifierListItem *obj = attribList[i]; TextItem *item = attribOpGroup->textItemAt(attribStartIndex + i); item->setItalic(obj->isAbstract()); item->setUnderline(obj->isStatic()); item->setText(obj->toString(m_attributeSignature)); bool v = !shouldDrawAsCircle() && ( !visualProperty(ShowPublicOnly) || obj->visibility() == Uml::Visibility::Public) && visualProperty(ShowAttributes) == true; item->setExplicitVisibility(v); if (v) { ++visibleAttributes; } } // Update expander box to reflect current state and also visibility m_attributeExpanderBox->setExpanded(visualProperty(ShowAttributes)); const QString dummyText; // Setup line and dummies. if (!showNameOnly) { // Stuff in a dummy item as spacer if there are no attributes, if (!shouldDrawAsCircle() && (visibleAttributes == 0 || !visualProperty(ShowAttributes))) { m_dummyAttributeItem = new TextItem(dummyText); int index = attribStartIndex; if (visibleAttributes == 0 && !attribList.isEmpty()) { index = opStartIndex; } attribOpGroup->insertTextItemAt(index, m_dummyAttributeItem); m_lineItem2Index = index; ++opStartIndex; } else { // Now set the second index. m_lineItem2Index = opStartIndex - 1; } } int visibleOperations = 0; for (int i=0; i < opList.size(); ++i) { UMLClassifierListItem *obj = opList[i]; TextItem *item = attribOpGroup->textItemAt(opStartIndex + i); item->setItalic(obj->isAbstract()); item->setUnderline(obj->isStatic()); item->setText(obj->toString(m_operationSignature)); bool v = !shouldDrawAsCircle() && ( !visualProperty(ShowPublicOnly) || obj->visibility() == Uml::Visibility::Public) && visualProperty(ShowOperations); item->setExplicitVisibility(v); if (v) { ++visibleOperations; } } m_operationExpanderBox->setExpanded(visualProperty(ShowOperations)); if (!showNameOnly) { if (!shouldDrawAsCircle() && (visibleOperations == 0 || !visualProperty(ShowOperations))) { m_dummyOperationItem = new TextItem(dummyText); attribOpGroup->insertTextItemAt(opStartIndex+opList.size(), m_dummyOperationItem); } } UMLWidget::updateTextItemGroups(); }
void TextBoxContent::syncFromModelItem(AbstractVisualItem *model) { DEBUG_TSTART(); m_dontSyncToModel = true; if(!modelItem()) { setModelItem(model); // Start out the last remembered model rev at the rev of the model // so we dont force a redraw of the cache just because we're a fresh // object. if(QPixmapCache::find(cacheKey())) m_lastModelRev = modelItem()->revision(); } static int x = 0; x++; //qDebug() << x<<": TextBoxContent::syncFromModelItem() mark"; QFont font; TextItem * textModel = dynamic_cast<TextItem*>(model); font.setFamily(textModel->fontFamily()); font.setPointSize((int)textModel->fontSize()); m_text->setDefaultFont(font); if (!Qt::mightBeRichText(textModel->text())) { qDebug() << "TextBoxContent:: converting plain text from model item to html"; m_text->setPlainText(textModel->text()); textModel->setText(m_text->toHtml()); } //qDebug() << "TextBoxContent:: Original HTML:"<<textModel->text(); setHtml(textModel->text()); //qDebug() << "TextBoxContent:: New HTML:"<<m_text->toHtml(); AbstractContent::syncFromModelItem(model); if(modelItem()->revision() != m_lastModelRev) { //qDebug()<<"modelItem():"<<modelItem()->itemName()<<": last revision:"<<m_lastModelRev<<", this revision:"<<m_lastModelRev<<", cache dirty!"; m_lastModelRev = modelItem()->revision(); // DONT dirty cache here since we changed the cacheKey algorithm - cache key is now based on visual description, not on item identity //dirtyCache(); } if( model->zoomEffectEnabled() && model->zoomSpeed() > 0 && sceneContextHint() == MyGraphicsScene::Live) { m_zoomEnabled = true; m_zoomAnimationTimer->start(1000 / 20); // / model->zoomSpeed()); QSize size = contentsRect().size(); double width = size.width(); double height = size.height(); double aspectRatio = height == 0 ? 1 : width/height; // if(!m_zoomInit) // { //qDebug() << "aspectRatio: "<<aspectRatio; QPointF delta; m_zoomStartSize.setX(width); m_zoomStartSize.setY(height); m_zoomEndSize.setX(width * model->zoomFactor()); m_zoomEndSize.setY(height * model->zoomFactor()); bool zoomIn = true; if(model->zoomDirection() == AbstractVisualItem::ZoomIn) zoomIn = true; else if(model->zoomDirection() == AbstractVisualItem::ZoomOut) zoomIn = false; else if(model->zoomDirection() == AbstractVisualItem::ZoomRandom) zoomIn = qrand() < RAND_MAX/2; m_zoomCurSize = zoomIn ? m_zoomStartSize : m_zoomEndSize; m_zoomDir = zoomIn ? 1 : -1; delta.setX(m_zoomEndSize.x() - m_zoomCurSize.x()); delta.setY(m_zoomEndSize.y() - m_zoomCurSize.y()); //step.setX(delta.x()/ZOOM_STEPS); //step.setY(delta.y()/ZOOM_STEPS); // m_zoomInit = true; // } // allow it to go below 1.0 for step size by using 75.0 when the max of the zoomSpeed slider in config is 100 m_zoomStep.setX(8.0 / (100.01 - ((double)model->zoomSpeed())) * aspectRatio); m_zoomStep.setY(8.0 / (100.01 - ((double)model->zoomSpeed()))); if(model->zoomAnchorPoint() == AbstractVisualItem::ZoomAnchorRandom) { // pick a third intersection double x = qrand() < RAND_MAX/2 ? .33 : .66; double y = qrand() < RAND_MAX/2 ? .33 : .66; // apply a fudge factor // x += 0.15 - ((double)qrand()) / ((double)RAND_MAX) * 0.075; // y += 0.15 - ((double)qrand()) / ((double)RAND_MAX) * 0.075; m_zoomDestPoint = QPointF(x,y); //qDebug() << "ZoomRandom: "<<x<<","<<y; //qDebug() << model->itemName() << "Random zoom anchor: "<<m_zoomDestPoint; } else { double x = .0, y = .0; switch(model->zoomAnchorPoint()) { case AbstractVisualItem::ZoomTopLeft: x = .33; y = .33; break; case AbstractVisualItem::ZoomTopMid: x = .50; y = .25; break; case AbstractVisualItem::ZoomTopRight: x = .66; y = .33; break; case AbstractVisualItem::ZoomRightMid: x = .75; y = .50; break; case AbstractVisualItem::ZoomBottomRight: x = .66; y = .66; break; case AbstractVisualItem::ZoomBottomMid: x = .50; y = .75; break; case AbstractVisualItem::ZoomBottomLeft: x = .33; y = .66; break; case AbstractVisualItem::ZoomLeftMid: x = .25; y = .50; break; case AbstractVisualItem::ZoomCenter: default: x = .50; y = .50; break; }; m_zoomDestPoint = QPointF(x,y); } } else { m_zoomEnabled = false; if(m_zoomAnimationTimer->isActive()) m_zoomAnimationTimer->stop(); } m_dontSyncToModel = false; }