Esempio n. 1
0
void SdMsgBaseCanvas::modified() {
  if (visible()) {
    hide();
    
    QString s = get_msg(TRUE);
    
    if (s.isEmpty()) {
      // remove label if needed
      if (label != 0) {
	the_canvas()->del(label);
	label = 0;
      }
    }
    else if (label == 0) {
      // adds label
      label = new LabelCanvas(s, the_canvas(), 0, 0, FALSE, FALSE, FALSE, FALSE);
      default_label_position();
      label->show();
    }
    else if (label->get_name() != s)
      // update label
      label->set_name(s);
    else
      label->set_strikeout((msg != 0) && (msg->deletedp()));
    
    package_modified();
  
    show();
    canvas()->update();
  }
}
Esempio n. 2
0
void AssocContainCanvas::menu(const QPoint&) {
  Q3PopupMenu m(0);
  Q3PopupMenu geo(0);
  ArrowCanvas * aplabel;
  ArrowCanvas * apstereotype;
    
  search_supports(aplabel, apstereotype);
  
  AssocContainCanvas * plabel = (AssocContainCanvas *) aplabel;
  AssocContainCanvas * pstereotype = (AssocContainCanvas *) apstereotype;
  
  MenuFactory::createTitle(m, TR("Association"));
  m.insertSeparator();
  m.insertItem(TR("Edit"),1);
  
  if (pstereotype || plabel) {
    m.insertSeparator();
    m.insertItem(TR("Select stereotype and label"), 2);
    m.insertItem(TR("Default stereotype and label position"), 3);
    if (plabel && (label == 0))
      m.insertItem(TR("Attach label to this segment"), 4);
    if (pstereotype && (stereotype == 0))
      m.insertItem(TR("Attach stereotype to this segment"), 5);
  }
  
  if (get_start() != get_end()) {
    m.insertSeparator();
    init_geometry_menu(geo, 10);
    m.insertItem(TR("Geometry (Ctrl+l)"), &geo);
  }
  
  m.insertSeparator();
  m.insertItem(TR("Remove from diagram"), 6);
  m.insertItem(TR("Delete from model"), 7);

  int rank = m.exec(QCursor::pos());
  
  switch (rank) {
  case 1:
    open();
    return;
  case 2:
    the_canvas()->unselect_all();
    if (plabel) 
      the_canvas()->select(plabel->label);
    if (pstereotype)
      the_canvas()->select(pstereotype->stereotype);
    return;
  case 3:
    if (plabel) 
      plabel->default_label_position();
    if (pstereotype)
      pstereotype->default_stereotype_position();
    break;
  case 4:
    label = plabel->label;
    plabel->label = 0;
    default_label_position();
    break;
  case 5:
    stereotype = pstereotype->stereotype;
    pstereotype->stereotype = 0;
    default_stereotype_position();
    break;
  case 6:
    // not removed from the model : just hide it
    remove(FALSE);
    break;
  case 7:
    get_start()->unassociate(get_end());	// line will be deleted
    break;
  default:
    if (rank >= 10) {
      rank -= 10;
      if (rank == RecenterBegin)
	set_decenter(-1.0, decenter_end);
      else if (rank == RecenterEnd)
	set_decenter(decenter_begin, -1.0);
      else if (rank != (int) geometry)
	set_geometry((LineGeometry) rank, TRUE);
      else
	return;      
    }
    else
      return;
  }
  
  package_modified();
}
Esempio n. 3
0
void FlowCanvas::update(bool updatepos) {
  if (data) {    
    QFontMetrics fm(the_canvas()->get_font(UmlNormalFont));
    FlowCanvas * plabel;
    FlowCanvas * pstereotype;
    
    {
      ArrowCanvas * aplabel;
      ArrowCanvas * apstereotype;
      
      search_supports(aplabel, apstereotype);
      plabel = (FlowCanvas *) aplabel;
      pstereotype = (FlowCanvas *) apstereotype;
    }
    
    // manages relation's stereotype
    
    QString s = data->get_short_stereotype();
    bool update_label = FALSE;
    
    if (s.isEmpty()) {
      // relation does not have stereotype
      if (pstereotype != 0) {
	// removes it
	the_canvas()->del(pstereotype->stereotype);
	pstereotype->stereotype = 0;
	pstereotype = 0;
      }
    }
    else {
      if (s == "interrupt")
	s = LabelCanvas::Zigzag;
      else if (s != LabelCanvas::Zigzag)
	s = QString("<<") + toUnicode(s) + ">>";
    
      if ((pstereotype == 0) && (begin->type() != UmlArrowPoint)) {
	// adds relation's stereotype
	stereotype = new LabelCanvas(s, the_canvas(), 0, 0);
	update_label = (label != 0);
	stereotype_default_position();
      }
      else if ((pstereotype != 0) && 
	       (pstereotype->stereotype->get_name() != s)) {
	// update name
	pstereotype->stereotype->set_name(s);
	if (auto_pos)
	  pstereotype->stereotype_default_position();
      }
    }
    
    // manages relation's name, guard and weight
  
    bool horiz = (write_horizontally == UmlDefaultState)
      ? ((BrowserActivityDiagram *) the_canvas()->browser_diagram())
	->get_write_label_horizontally()
      : (write_horizontally == UmlYes);

    used_settings = settings;
    ((BrowserActivityDiagram *) the_canvas()->browser_diagram())
      ->get_activitydrawingsettings(used_settings);
      
    s = data->str(horiz, used_settings.drawing_language);
    
    QString n = data->get_start()->get_name();
    
    if (! s.isEmpty()) {
      if (n != "<flow>")
	s = n + ((horiz) ? ' ' : '\n') + toUnicode(s);
      else
	s = toUnicode(s);
    }
    else if (n != "<flow>")
      s = n;
    
    if (s.isEmpty()) {
      if (plabel != 0) {
	// removes it
	the_canvas()->del(plabel->label);
	plabel->label = 0;
      }
    }
    else if ((plabel == 0) && (begin->type() != UmlArrowPoint)) {
      // adds relation's name
      label = new LabelCanvas(s, the_canvas(), 0, 0);
      default_label_position();
    }
    else if ((plabel != 0) && (plabel->label->get_name() != s)) {
      // update it
      plabel->label->set_name(s);
      if (auto_pos || update_label)
	plabel->default_label_position();
    }
    else if (update_label)
      plabel->default_label_position();
  }
  
  if (updatepos)
    update_pos();
}
Esempio n. 4
0
void FlowCanvas::menu(const QPoint &) {
  if ((data != 0) && !data->get_start()->in_edition()) {
    FlowCanvas * plabel;
    FlowCanvas * pstereotype;
    
    {
      ArrowCanvas * aplabel;
      ArrowCanvas * apstereotype;
      
      search_supports(aplabel, apstereotype);
      plabel = (FlowCanvas *) aplabel;
      pstereotype = (FlowCanvas *) apstereotype;
    }
    
    Q3PopupMenu m(0);
    Q3PopupMenu geo(0);
    Q3PopupMenu toolm(0);
    
    MenuFactory::createTitle(m, data->definition(FALSE, TRUE));
    m.insertSeparator();
    m.insertItem(TR("Edit"), 0);
    m.insertSeparator();

    m.insertItem(TR("Select in browser"), 2);
    if (plabel || pstereotype) {
      m.insertSeparator();
      m.insertItem(TR("Edit drawing settings"), 1);
      m.insertItem(TR("Select labels"), 3);
      m.insertItem(TR("Labels default position"), 4);
      if (plabel && (label == 0))
	m.insertItem(TR("Attach flow label to this segment"), 5);
      if (pstereotype && (stereotype == 0))
	m.insertItem(TR("Attach stereotype to this segment"), 6);
    }
  
    if (get_start() != get_end()) {
      m.insertSeparator();
      init_geometry_menu(geo, 10);
      m.insertItem(TR("Geometry (Ctrl+l)"), &geo);
    }
    
    m.insertSeparator();
    m.insertItem(TR("Remove from diagram"),7);
    if (data->get_start()->is_writable())
      m.insertItem(TR("Delete from model"), 8);
    
    m.insertSeparator();
    if (Tool::menu_insert(&toolm, itstype, 20))
      m.insertItem(TR("Tool"), &toolm);
    
    int rank = m.exec(QCursor::pos());
    
    switch (rank) {
    case 0:
      data->edit();
      return;
    case 1:
      edit_drawing_settings();
      return;
    case 2:
      data->get_start()->select_in_browser();
      return;
    case 3:
      the_canvas()->unselect_all();
      if (plabel)
	the_canvas()->select(plabel->label);
      if (pstereotype)
	the_canvas()->select(pstereotype->stereotype);
      return;
    case 4:
      if (plabel)
	plabel->default_label_position();
      if (pstereotype)
	pstereotype->stereotype_default_position();
      return;
    case 5:
      label = plabel->label;
      plabel->label = 0;
      default_label_position();
      return;
    case 6:
      stereotype = pstereotype->stereotype;
      pstereotype->stereotype = 0;
      if (label != 0)
	default_label_position();
      stereotype_default_position();
      return;
    case 7:
      // not removed from the browser : just hide it
      remove(FALSE);
      break;
    case 8:
      data->delete_it();	// will delete the canvas
      break;
    default:
      if (rank >= 20) {
	ToolCom::run(Tool::command(rank - 20), data->get_start());
	return;
      }
      else if (rank >= 10) {
	rank -= 10;
	if (rank == RecenterBegin)
	  set_decenter(-1.0, decenter_end);
	else if (rank == RecenterEnd)
	  set_decenter(decenter_begin, -1.0);
	else if (rank != (int) geometry)
	  set_geometry((LineGeometry) rank, TRUE);
	else
	  return;
      }
      else
	return;
    }
    
    package_modified();
  }
}
Esempio n. 5
0
void SdSelfMsgCanvas::menu(const QPoint&) {
    Q3PopupMenu m(0);

    m.insertItem(new MenuTitle(TR("Message"), m.font()), -1);
    m.insertSeparator();
    m.insertItem(TR("Upper"), 0);
    m.insertItem(TR("Lower"), 1);
    m.insertItem(TR("Go up"), 13);
    m.insertItem(TR("Go down"), 14);
    m.insertSeparator();
    m.insertItem(TR("Edit"), 2);
    m.insertItem(TR("Edit drawing settings"), 3);
    m.insertSeparator();
    if (msg != 0)
        m.insertItem(TR("Select operation in browser"), 8);
    m.insertItem(TR("Select linked items"), 4);
    if (label || stereotype) {
        m.insertSeparator();
        m.insertItem(TR("Select stereotype and label"), 5);
        m.insertItem(TR("Default stereotype and label position"), 6);
    }
    if (((BrowserSeqDiagram *) the_canvas()->browser_diagram())
            ->is_overlapping_bars()) {
        m.insertSeparator();
        m.insertItem(TR("Go to new overlapping bar"), 9);
        if (dest->isOverlappingDuration())
            m.insertItem(TR("Go to parent bar"), 10);
    }
    m.insertSeparator();
    m.insertItem(TR("Remove from diagram"), 7);

    switch (m.exec(QCursor::pos())) {
    case 0:
        upper();
        // force son reaffichage
        hide();
        show();
        break;
    case 1:
        lower();
        // force son reaffichage
        hide();
        show();
        break;
    case 13:
        z_up();
        // force son reaffichage
        hide();
        show();
        break;
    case 14:
        z_down();
        // force son reaffichage
        hide();
        show();
        break;
    case 2:
        open();
        break;
    case 3:
        edit_drawing_settings();
        return;
    case 4:
        select_associated();
        break;
    case 5:
        the_canvas()->unselect_all();
        if (label)
            the_canvas()->select(label);
        if (stereotype)
            the_canvas()->select(stereotype);
        break;
    case 6:
        if (label)
            default_label_position();
        if (stereotype)
            default_stereotype_position();
        break;
    case 7:
        delete_it();
        return;
    case 8:
        msg->get_browser_node()->select_in_browser();
        return;
    case 9:
        ((SdDurationCanvas *) dest)->go_up(this, TRUE);
        break;
    case 10:
        ((SdDurationCanvas *) dest)->go_down(this);
    default:
        return;
    }

    package_modified();
    canvas()->update();
}
Esempio n. 6
0
void TransitionCanvas::update(bool updatepos) {
  if (data) {    
    QFontMetrics fm(the_canvas()->get_font(UmlNormalFont));
    TransitionCanvas * plabel;
    TransitionCanvas * pstereotype;
    
    {
      ArrowCanvas * aplabel;
      ArrowCanvas * apstereotype;
      
      search_supports(aplabel, apstereotype);
      plabel = (TransitionCanvas *) aplabel;
      pstereotype = (TransitionCanvas *) apstereotype;
    }
    
    // manages relation's stereotype
    
    QString s = data->get_short_stereotype();
    bool update_label = FALSE;
    
    if (s.isEmpty()) {
      // relation does not have stereotype
      if (pstereotype != 0) {
	// removes it
	the_canvas()->del(pstereotype->stereotype);
	pstereotype->stereotype = 0;
      }
    }
    else {
      s = QString("<<") + toUnicode(s) + ">>";
      
      if ((pstereotype == 0) && (begin->type() != UmlArrowPoint)) {
	// adds relation's stereotype
	stereotype = new LabelCanvas(s, the_canvas(), 0, 0);
	update_label = (label != 0);
	stereotype_default_position();
      }
      else if ((pstereotype != 0) && 
	       (pstereotype->stereotype->get_name() != s)) {
	// update name
	pstereotype->stereotype->set_name(s);
	if (auto_pos)
	  pstereotype->stereotype_default_position();
      }
    }
    
    // manages relation's name
    
    BrowserStateDiagram * diagram = 
      (BrowserStateDiagram *) the_canvas()->browser_diagram();
    
    if ((show_definition == UmlDefaultState)
	? diagram->get_show_trans_definition()
	: (show_definition == UmlYes)) {
      s = data->str((write_horizontally == UmlDefaultState)
		    ? diagram->get_write_label_horizontally()
		    : (write_horizontally == UmlYes),
		    (drawing_language == DefaultDrawingLanguage)
		    ? diagram->get_language()
		    : drawing_language);
      s = toUnicode(s);
    }
    else if ((s = data->get_start()->get_name()) == "<transition>")
      s = QString::null;
    
    if (s.isEmpty()) {
      // relation does not have name
      if (plabel != 0) {
	// removes it
	the_canvas()->del(plabel->label);
	plabel->label = 0;
      }
    }
    else if ((plabel == 0) && (begin->type() != UmlArrowPoint)) {
      // adds relation's name
      label = new LabelCanvas(s, the_canvas(), 0, 0);
      default_label_position();
    }
    else if ((plabel != 0) && (plabel->label->get_name() != s)) {
      // update name
      plabel->label->set_name(s);
      if (auto_pos || update_label)
	plabel->default_label_position();
    }
    else if (update_label)
      plabel->default_label_position();
  }
  
  if (updatepos)
    update_pos();
}