void QReportTreeManager::on_actionNewConnection_triggered() { QReportDataConnection *conn = _designer->addDataConnection(); if(conn) addConnectionNode(conn); // QReportDatabaseInfoDialog info(_report); // if(info.exec() != QDialog::Accepted) return; // QReportDataConnection *conn = info.dataConnection(); // _report->addConnection(conn); }
void QReportTreeManager::initTreeItems() { bool isDatatableOpen = nodeDataTable && nodeDataTable->isExpanded(); bool isParameteresOpen = nodeParameters && nodeParameters->isExpanded(); clear(); nodeDataTable = new QTreeWidgetItem; nodeDataTable->setIcon(0, QIcon(":/designer/database")); nodeDataTable->setData(0, 0, "DataTable"); addTopLevelItem(nodeDataTable); nodeParameters = new QTreeWidgetItem; nodeParameters->setIcon(0, QIcon(":/designer/form")); nodeParameters->setData(0, 0, "params"); addTopLevelItem(nodeParameters); /*for(int i = 0; i < nodeDataTable->childCount(); i++) nodeDataTable->removeChild(nodeDataTable->child(i)); for(int i = 0; i < nodeParameters->childCount(); i++) nodeParameters->removeChild(nodeParameters->child(i));*/ for(int i = 0; i < _report->parameters().count(); i++) addParametereNode(_report->parameters().at(i)); for(int i = 0; i < _report->connections().count(); i++){ QTreeWidgetItem *newConnectionItem = addConnectionNode(_report->connections().at(i)); QList<QReportDataTable*> DataTables = _report->dataTablesByConnections(_report->connections().at(i)->objectName()); //add DataTables if current connection foreach (QReportDataTable *dataTable, DataTables) { QTreeWidgetItem *newTableItem = addTableNode(newConnectionItem, dataTable); for(int k = 0; k < dataTable->fields().count(); k++) addFieldNode(newTableItem, dataTable->fields().at(k)); } }//for
bool ConnectionManager::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::RightButton) { if (m_fromPin != -1) { m_fromPin = -1; m_points.clear(); return true; } int point; Connection *c = getPoint(NORM(event->x()), NORM(event->y()), point); if (point != -1) { // User can't remove first or last point like that if (point == 0 || point == c->points.size() - 1) { return false; } QList<QAction *> actions; actions.append(new QAction("Remove point", 0)); QAction *action = QMenu::exec(actions, event->globalPos(), 0, 0); if (action) { removePoint(c, point); } return true; } c = getConnection(NORM(event->x()), NORM(event->y()), point); if (c) { QList<QAction *> actions; actions.append(new QAction("Remove connection", 0)); QAction *action = QMenu::exec(actions, event->globalPos(), 0, 0); if (action) { removeConnection(c); } return true; } } else if (event->button() == Qt::LeftButton) { if (m_fromPin != -1) { QPoint from = QPoint(m_movingX, m_movingY); QPoint to(NORM(event->pos().x()), NORM(event->pos().y())); ScreenObject *object = m_screen->getObject(NORM(event->x()), NORM(event->y())); if (object) { int pin = m_screen->getPin(object, NORM(event->x()), NORM(event->y())); if (pin != -1) { to = object->getPins()[pin].rect.center(); } } bool firstPoints = m_points.empty(); if (firstPoints) { m_points.push_back(from); } if (m_screen->getObject(from.x(), to.y()) == m_fromObject/* && m_screen->getPin(m_moving, from.x(), to.y()) != -1*/) { m_points.push_back(QPoint(to.x(), from.y())); } else { m_points.push_back(QPoint(from.x(), to.y())); } // if (!firstPoints) { m_points.push_back(to); // } int point; Connection *c = getPoint(NORM(event->x()), NORM(event->y()), point); if (point != -1) { ScreenObject *object = m_screen->getObject(NORM(event->x()), NORM(event->y())); if (object) { m_points.erase(m_points.end() - 1); m_points.erase(m_points.end() - 1); return false; } addConnectionNode(c, point, event->x(), event->y(), m_points); m_fromPin = -1; m_points.clear(); // qDebug() << newPoints.size() << c->points.size() << "\n"; return true; } else { QPointF intersectPnt; int point; c = getConnection(NORM(event->x()), NORM(event->y()), point, &intersectPnt); if (c) { QPoint p = intersectPnt.toPoint(); p = QPoint(NORM(p.x()), NORM(p.y())); c->points.insert(c->points.begin() + point, p); addConnectionNode(c, point, event->x(), event->y(), m_points); m_fromPin = -1; m_points.clear(); return true; } } if (object) { int pin = m_screen->getPin(object, NORM(event->x()), NORM(event->y())); if (pin != -1) { addConnection(m_fromObject, m_fromPin, object, pin, m_points); m_fromPin = -1; m_points.clear(); return true; } } m_movingX = NORM(event->x()); m_movingY = NORM(event->y()); return true; } // qDebug() << NORM(event->x()) << NORM(event->y()); int point; Connection *c = getPoint(NORM(event->x()), NORM(event->y()), point); if (point != -1) { if (point == 0) { m_fromObject = c->from; } else if (point == c->points.size() - 1) { m_fromObject = c->to; } else { m_fromObject = 0; } m_movingConn = c; m_moving = &c->points[point]; m_movingX = NORM(event->x()); m_movingY = NORM(event->y()); return true; } ScreenObject *object = m_screen->getObject(NORM(event->x()), NORM(event->y())); if (!object) { return false; } m_fromPin = m_screen->getPin(object, NORM(event->x()), NORM(event->y())); if (m_fromPin != -1) { m_fromObject = object; m_movingX = object->getPins()[m_fromPin].rect.center().x(); m_movingY = object->getPins()[m_fromPin].rect.center().y(); return true; } } return false; }