示例#1
0
void ColMsgTable::refresh(ColMsgList & m) {
  ColMsg * msg;
  Q3PtrListIterator<ColMsg> it(m);
  
  for ( ; (msg = it.current()) != 0; ++it) {
    QString def = msg->def(FALSE, TRUE, UmlView, DefaultShowContextMode);
    CodObjCanvas * from;
    CodObjCanvas * to;
    int r = numRows();
    
    msg->in->get_from_to(from, to, msg->is_forward);
    
    setNumRows(r + 1);
    
    setItem(r, ABS_RANK_COL, new MsgTableItem(this, msg->absolute_rank));
    setItem(r, HI_RANK_COL, new MsgTableItem(this, msg->hierarchical_rank));
    setItem(r, FROM_COL, new MsgTableItem(this, from->get_full_name()));
    setItem(r, MSG_COL, new MsgTableItem(this, def.mid(def.find(' ') + 1)));
    setItem(r, TO_COL, new MsgTableItem(this, to->get_full_name()));
    setItem(r, CMD_COL, new MsgTableItem(this, TR("do"), Qt::AlignHCenter));
    
    flat_msg_list.append(msg);
    
    if (rec)
      refresh(msg->msgs);
  }
}
示例#2
0
void ColMsg::send(ToolCom * com, const ColMsgList & l)
{
  ColMsgList lm;
  
  get_all(l, lm);
  lm.sort();
  
  com->write_unsigned(lm.count());
  
  ColMsg * msg;
  
  for (msg = lm.first(); msg != 0; msg = lm.next()) {
    if (msg->operation == 0) {
      com->write_id(0);
      com->write_string(msg->explicit_operation);
    }
    else if (msg->operation->deletedp()) {
      com->write_id(0);
      com->write_string(msg->operation->get_browser_node()->get_name());
    }
    else 
      msg->operation->get_browser_node()->write_id(com);
  
    CodObjCanvas * from;
    CodObjCanvas * to;
    
    msg->in->get_from_to(from, to, msg->is_forward);
    com->write_unsigned((unsigned) from->get_ident());
    com->write_unsigned((unsigned) to->get_ident());
    
    com->write_unsigned(msg->absolute_rank);
    com->write_string((const char *) msg->hierarchical_rank);
  }
}
示例#3
0
bool CodDirsCanvas::copyable() const
{
    CodObjCanvas * from;
    CodObjCanvas * to;

    link->get_start_end(from, to);

    return link->isSelected() && from->copyable() && to->copyable();
}
示例#4
0
    foreach (ColMsg *msg, m) {
        QString def = msg->def(FALSE, TRUE, UmlView, DefaultShowContextMode);
        CodObjCanvas * from;
        CodObjCanvas * to;
        int r = rowCount();

        msg->in->get_from_to(from, to, msg->is_forward);

        setRowCount(r + 1);

        setItem(r, ABS_RANK_COL, new MsgTableItem(msg->absolute_rank));
        setItem(r, HI_RANK_COL, new MsgTableItem(msg->hierarchical_rank));
        setItem(r, FROM_COL, new MsgTableItem(from->get_full_name()));
        setItem(r, MSG_COL, new MsgTableItem(def.mid(def.indexOf(" ") + 1)));
        setItem(r, TO_COL, new MsgTableItem(to->get_full_name()));
        setItem(r, CMD_COL, new MsgTableItem(tr("do"), Qt::AlignHCenter));

        flat_msg_list.append(msg);

        if (rec)
            refresh(msg->msgs);
    }
示例#5
0
void CodLinkCanvas::menu(const QPoint&) {
  bool new_dirs;
  CodDirsCanvas * d = find_dirs();
  CodObjCanvas * from;
  CodObjCanvas * to;

  get_start_end(from, to);
  
  if (d == 0) {
    new_dirs = TRUE;
    (d = dirs = new CodDirsCanvas(the_canvas(), this, 0))->show();
  }
  else
    new_dirs = FALSE;
  
  Q3PopupMenu m;
  Q3PopupMenu geo;
  
  m.insertItem(new MenuTitle(TR("Link"), m.font()), -1);
  m.insertSeparator();
  m.insertItem(TR("add messages to ") + from->get_full_name(), 1);
  m.insertItem(TR("add messages to ") + to->get_full_name(), 2);
  m.insertSeparator();
  m.insertItem(TR("Edit its messages"), 3);
  m.insertItem(TR("Edit all the messages"), 4);
  m.insertSeparator();
  m.insertItem(TR("Select linked items"), 7);
  m.insertSeparator();
  if (!new_dirs) {
    m.insertItem(TR("Edit drawing settings"), 5);
    m.insertSeparator();
  }
  if (get_start() != get_end()) {
    init_geometry_menu(geo, 10);
    m.insertItem(TR("Geometry (Ctrl+l)"), &geo);
    m.insertSeparator();
  }
  m.insertItem(TR("Remove from diagram"), 6);
  
  int rank = m.exec(QCursor::pos());
  
  switch (rank) {
  case 1:
    {
      CodAddMsgDialog dialog(to, from, d,
			     (ColDiagramView *) the_canvas()->get_view(),
			     FALSE);
      
      dialog.raise();
      if (dialog.exec() != QDialog::Accepted)
	return;
    }
    break;
  case 2:
    {
      CodAddMsgDialog dialog(from, to, d,
			     (ColDiagramView *) the_canvas()->get_view(),
			     TRUE);
      
      dialog.raise();
      if (dialog.exec() != QDialog::Accepted)
	return;
    }
    break;
  case 3:
    CodEditMsgDialog::exec((ColDiagramView *) the_canvas()->get_view(), d->get_msgs());
    return;
  case 4:
    CodEditMsgDialog::exec((ColDiagramView *) the_canvas()->get_view(),
			   ((ColDiagramView *) the_canvas()->get_view())->get_msgs());
    return;
  case 5:
    if (d->edit_drawing_settings())
      modified();
    return;
  case 6:
    delete_it();
    ((ColDiagramView *) the_canvas()->get_view())->update_msgs();
    break;
  case 7:
    select_associated();
    return;
  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();
  
  if (new_dirs && (dirs != 0)) {
    if (dirs->get_msgs().count() == 0) {
      dirs->delete_it();
      dirs = 0;
    }
    else
      dirs->update_pos(beginp, endp);
  }
}
CodChangeMsgDialog::CodChangeMsgDialog(QWidget * parent, ColMsg * m)
    : QDialog(parent/*, "Communication message dialog", TRUE*/), msg(m)
{
    setWindowTitle(tr("Communicationg message dialog"));

    QVBoxLayout * vbox = new QVBoxLayout(this);
    QHBoxLayout * hbox;

    vbox->setMargin(5);

    hbox = new QHBoxLayout();
    vbox->addLayout(hbox);
    hbox->setMargin(5);

    SmallPushButton * b = new SmallPushButton(tr("message :"), this);

    hbox->addWidget(b);
    connect(b, SIGNAL(clicked()), this, SLOT(menu_op()));

    edoper = new QComboBox(this);
    edoper->setEditable(true);
    edoper->setAutoCompletion(completion());

    if (msg->operation == 0)
        edoper->addItem(msg->explicit_operation);
    else
        edoper->addItem(msg->operation->definition(TRUE, FALSE));

    CodObjCanvas * from;
    CodObjCanvas * to;

    msg->in->get_from_to(from, to, msg->is_forward);

    // gets operations
    cl = to->get_class();

    if (cl != 0) {
        cl->get_opers(opers, list);
        edoper->addItems(list);

        if (!cl->is_writable())
            cl = 0;
    }

    edoper->setCurrentIndex(0);

    QSizePolicy sp = edoper->sizePolicy();

    sp.setHorizontalPolicy(QSizePolicy::Expanding);
    edoper->setSizePolicy(sp);

    hbox->addWidget(edoper);

    // ok & cancel

    hbox = new QHBoxLayout();
    vbox->addLayout(hbox);
    hbox->setMargin(5);
    QPushButton * ok = new QPushButton(tr("&OK"), this);
    QPushButton * cancel = new QPushButton(tr("&Cancel"), this);
    QSize bs(cancel->sizeHint());

    ok->setDefault(TRUE);
    ok->setFixedSize(bs);
    cancel->setFixedSize(bs);

    hbox->addWidget(ok);
    hbox->addWidget(cancel);

    connect(ok, SIGNAL(clicked()), this, SLOT(accept()));
    connect(cancel, SIGNAL(clicked()), this, SLOT(reject()));
}