void VirtualConsole::slotAddButtonMatrix() { VCWidget* parent(closestParent()); if (parent == NULL) return; AddVCButtonMatrix abm(this, m_doc); if (abm.exec() == QDialog::Rejected) return; int h = abm.horizontalCount(); int v = abm.verticalCount(); int sz = abm.buttonSize(); VCFrame* frame = NULL; if (abm.frameStyle() == AddVCButtonMatrix::NormalFrame) frame = new VCFrame(parent, m_doc); else frame = new VCSoloFrame(parent, m_doc); Q_ASSERT(frame != NULL); // Resize the parent frame to fit the buttons nicely and toggle resizing off frame->resize(QSize((h * sz) + 20, (v * sz) + 20)); frame->setAllowResize(false); for (int y = 0; y < v; y++) { for (int x = 0; x < h; x++) { VCButton* button = new VCButton(frame, m_doc); Q_ASSERT(button != NULL); button->move(QPoint(10 + (x * sz), 10 + (y * sz))); button->resize(QSize(sz, sz)); button->show(); int index = (y * h) + x; if (index < abm.functions().size()) { quint32 fid = abm.functions().at(index); Function* function = m_doc->function(fid); if (function != NULL) { button->setFunction(fid); button->setCaption(function->name()); } } } } // Show the frame after adding buttons to prevent flickering frame->show(); frame->move(parent->lastClickPoint()); frame->setAllowChildren(false); // Don't allow more children clearWidgetSelection(); setWidgetSelected(frame, true); m_doc->setModified(); }
void VCFrame_Test::copy() { QWidget w; VCFrame parent(&w, m_doc); VCFrame frame(&parent, m_doc); VCButton* btn = new VCButton(&frame, m_doc); btn->setCaption("Foobar"); VCWidget* frame2 = frame.createCopy(&parent); QVERIFY(frame2 != NULL && frame2 != &frame); QCOMPARE(frame2->objectName(), QString("VCFrame")); QCOMPARE(frame2->parentWidget(), &parent); // Also children should get copied QList <VCButton*> list = frame2->findChildren<VCButton*>(); QCOMPARE(list.size(), 1); QCOMPARE(list[0]->caption(), QString("Foobar")); QVERIFY(frame.copyFrom(NULL) == false); }