application::application(char* n) : name(0) { giveName(n); }
void RectScene::mousePressEvent(QGraphicsSceneMouseEvent *event) { QPointF pos = event->scenePos(); MyRect * item = dynamic_cast<MyRect *>(itemAt(pos,QTransform())); switch (mode) { case Add: { buffer.push_back(pos); if (buffer.size() == 2) { MyRect * newrect = new MyRect(buffer[0],buffer[1]); addItem(newrect); buffer.clear(); newrect->label = giveName(namePool++); auto x = new QGraphicsTextItem(newrect->label,newrect); x->setPos(newrect->rect().center()); treescene->tree->insert(newrect->entry); update(); treescene->drawTree(); } } break; case Remove: { if (item) { removeItem(item); treescene->tree->deleteEntry(item->entry); delete item; update(); treescene->drawTree(); } } break; case Search: { if (!insearch) { insearch = true; buffer.push_back(pos); } else { insearch = false; QRectF rect(pos,buffer[0]); searchBuf.push_back(new QGraphicsRectItem(rect)); addItem(searchBuf.back()); deque<LeafEntry*> x = treescene->tree->searchOverlap(to2D(rect)); MyRect * rectpt; int n = x.size(); for (int i = 0; i<n; ++i) { rectpt =(MyRect*) x[i]->data; rectpt->setSelected(true); } buffer.clear(); } } break; } }