示例#1
0
// have marked elements not yet drawn ?
static bool marked_not_yet_drawn(Q3PtrDict<DiagramItem> & drawn)
{
  const Q3PtrList<BrowserNode> & l = BrowserNode::marked_nodes();
  Q3PtrListIterator<BrowserNode> it(l);
  BrowserNode * bn;
      
  for (; (bn = it.current()) != 0; ++it) {
    UmlCode k = bn->get_type();
    
    switch (k) {
    default:
      if (!IsaSimpleRelation(k))
	break;
      // no break
    case UmlComponent:
    case UmlDeploymentNode:
    case UmlArtifact:
    case UmlPackage:
      if (drawn[bn->get_data()] == 0)
	return TRUE;
    }
  }
  
  return FALSE;
}
示例#2
0
void ClassDiagramView::save(QTextStream & st, QString & warning,
			    bool copy) const {
  DiagramItemList items(canvas()->allItems());
  DiagramItem * di;
  
  if (!copy)
    // sort is useless for a copy
    items.sort();
    
  st << "format " << FILEFORMAT << "\n";
  
  // save first the classes packages fragment notes and icons
  
  for (di = items.first(); di != 0; di = items.next()) {
    switch (di->type()) {
    case UmlClass:
    case UmlNote:
    case UmlText:
    case UmlImage:
    case UmlPackage:
    case UmlFragment:
    case UmlIcon:
      if (!copy || di->copyable())
	di->save(st, FALSE, warning);
      // no break
    default:
      break;
    }
  }

  // then saves relations
  
  for (di = items.first(); di != 0; di = items.next()) {
    if (!copy || di->copyable()) {
      UmlCode k = di->type();
      
      if (IsaRelation(k) || IsaSimpleRelation(k) || (k == UmlInner))
	di->save(st, FALSE, warning);
    }
  }
  
  // then saves anchors
  
  for (di = items.first(); di != 0; di = items.next())
    if ((!copy || di->copyable()) && (di->type() == UmlAnchor))
      di->save(st, FALSE, warning);
  
  if (!copy && (preferred_zoom != 0)) {
    nl_indent(st);
    st << "preferred_whz " << preferred_size.width() << ' '
      << preferred_size.height() << ' ' << preferred_zoom;
  }
  
  nl_indent(st);
  st << "end\n";
}
示例#3
0
void UcUseCaseCanvas::connexion(UmlCode action, DiagramItem * dest,
				const QPoint &, const QPoint &) {
  ArrowCanvas * a;
  
  if (IsaSimpleRelation(action))
    a = new SimpleRelationCanvas(the_canvas(), this, dest, 0, action, 0, -1.0, -1.0);
  else
    a = new ArrowCanvas(the_canvas(), this, dest, action, 0, FALSE, -1.0, -1.0);
  
  a->show();
  the_canvas()->select(a);
}
示例#4
0
void PackageCanvas::connexion(UmlCode action, DiagramItem * dest,
			      const QPoint &, const QPoint &) {
  ArrowCanvas * r;
  
  if (IsaSimpleRelation(action))
    r = new SimpleRelationCanvas(the_canvas(), this, dest, 0, action, 0, -1.0, -1.0);
  else
    r = new ArrowCanvas(the_canvas(), this, dest, action, 0, FALSE, -1.0, -1.0);
  
  r->show();
  the_canvas()->select(r);
}
    foreach (BrowserNode *bn, BrowserNode::marked_nodes()) {
        UmlCode k = bn->get_type();

        switch (k) {
        default:
            if (!IsaSimpleRelation(k))
                break;

            // no break
        case UmlComponent:
        case UmlPackage:
            if (drawn[bn->get_data()] == 0)
                return TRUE;
        }
    }
示例#6
0
bool DiagramItem::has_relation(BasicData * def) const
{
    // manage only SimpleRelations
    Q3PtrListIterator<ArrowCanvas> it(lines);

    while (it.current()) {
        if (IsaSimpleRelation(it.current()->type()) &&
            (it.current()->get_data() == def))
            return TRUE;

        ++it;
    }

    return FALSE;
}
示例#7
0
static void get_drawn(DiagramItemList & items,
		      Q3PtrDict<DiagramItem> & drawn)
{
  DiagramItem * di;
  
  for (di = items.first(); di != 0; di = items.next()) {
    UmlCode k = di->type();
    
    switch (k) {
    case UmlComponent:
    case UmlPackage:
      drawn.replace(di->get_bn()->get_data(), di);
      break;
    default:
      if (IsaSimpleRelation(k))
	drawn.replace(((ArrowCanvas *) di)->get_data(), di);
    }
  }
}
示例#8
0
// have marked elements not yet drawn ?
static bool marked_not_yet_drawn(Q3PtrDict<DiagramItem> & drawn)
{
    const QList<BrowserNode *> & l = BrowserNode::marked_nodes();
    foreach (BrowserNode *bn, l) {
        UmlCode k = bn->get_type();

        switch (k) {
        default:
            if (!IsaRelation(k) && !IsaSimpleRelation(k))
                break;

            // no break
        case UmlClass:
        case UmlPackage:
        case UmlUseCase:
            if (drawn[bn->get_data()] == 0)
                return TRUE;
        }
    }
示例#9
0
void ComponentDiagramView::add_marked_elements(const QPoint& p,
					       Q3PtrDict<DiagramItem> & drawn) {
  QApplication::setOverrideCursor(Qt::waitCursor);
  
  history_save();
  history_protected = TRUE;
  
  int xmax = canvas()->width() - Diagram_Margin;
  int ymax = canvas()->height() - Diagram_Margin;
  int x = p.x();
  int y = p.y();
  int future_y = y;
  const Q3PtrList<BrowserNode> & l = BrowserNode::marked_nodes();
  Q3PtrListIterator<BrowserNode> it(l);
  BrowserNode * bn;

  for (; (bn = it.current()) != 0; ++it) {
    if (drawn[bn->get_data()] == 0) {
      DiagramCanvas * dc;
      
      switch (bn->get_type()) {
      case UmlComponent:
	dc = new ComponentCanvas(bn, the_canvas(), x, y);
	break;
      case UmlPackage:
	dc = new PackageCanvas(bn, the_canvas(), x, y, 0);
	break;
      default:
	continue;
      }

      drawn.replace(dc->get_bn()->get_data(), dc);
      
      if ((x + dc->width()) > xmax)
	dc->move(x = Diagram_Margin, y = future_y);
      
      if (y + dc->height() > ymax) {
	dc->move(x = Diagram_Margin, y = Diagram_Margin);
	future_y = y + dc->height() + Diagram_Margin;
      }
      else {
	int bot = y + dc->height() + Diagram_Margin;
	
	if (bot > future_y)
	  future_y = bot;
      }
      
      x = x + dc->width() + Diagram_Margin;
      
      dc->show();
      dc->upper();
    }
  }
  
  UmlCanvas * cnv = (UmlCanvas *) canvas();
  
  if (! cnv->must_draw_all_relations()) {
    for (it.toFirst(); (bn = it.current()) != 0; ++it) {
      if ((drawn[bn->get_data()] == 0) &&
	  IsaSimpleRelation(bn->get_type()))
	SimpleRelationCanvas::drop(bn, cnv, drawn);
    }
  }
  
  canvas()->update();
  history_protected = FALSE;
  window()->package_modified();
  
  QApplication::restoreOverrideCursor();
}
示例#10
0
void ArrowPointCanvas::connexion(UmlCode action, DiagramItem * dest,
                                 const QPoint &, const QPoint &)
{
    ArrowCanvas * a;

    switch (the_canvas()->browser_diagram()->get_type()) {
    case UmlClassDiagram:
        if (IsaRelation(action)) {
            a = new RelationCanvas(the_canvas(), this, dest, 0, action, 0, -1.0, -1.0);
            a->show();
            the_canvas()->select(a);
            return;
        }

        break;

    case UmlColDiagram:
        if (action == UmlLink) {
            a = new CodLinkCanvas(the_canvas(), this, dest, 0, -1.0, -1.0);
            a->show();
            the_canvas()->select(a);
            return;
        }

        break;

    case UmlObjectDiagram:
        if (action == UmlObjectLink) {
            a = new ObjectLinkCanvas(the_canvas(), this, dest, UmlObjectLink, 0, -1.0, -1.0);
            a->show();
            the_canvas()->select(a);
            return;
        }
        break;

    case UmlDeploymentDiagram:
    case UmlComponentDiagram:
        if (action == UmlContain) {
            a = new AssocContainCanvas(the_canvas(), this, dest, 0, -1.0, -1.0);
            a->show();
            the_canvas()->select(a);
            return;
        }

    case UmlStateDiagram:
        if (action == UmlTransition) {
            a = new TransitionCanvas(the_canvas(), this, dest, 0, 0, -1.0, -1.0);
            a->show();
            the_canvas()->select(a);
            return;
        }

    case UmlActivityDiagram:
        if (action == UmlFlow) {
            a = new FlowCanvas(the_canvas(), this, dest, 0, 0, -1.0, -1.0);
            a->show();
            the_canvas()->select(a);
            return;
        }
    default:	// to avoid warning
        break;
    }
    if (IsaSimpleRelation(action))
        a = new SimpleRelationCanvas(the_canvas(), this, dest, 0, action, 0, -1.0, -1.0);
    else
        a = new ArrowCanvas(the_canvas(), this, dest, action, 0, FALSE, -1.0, -1.0);

    a->show();
    the_canvas()->select(a);
}