scene cleanup
parent
47591ea3d1
commit
0b2d4d99f0
|
@ -595,9 +595,7 @@ void MainWindow::openNodeUI(const std::shared_ptr<Data::Node>& n) {
|
|||
if (!n) return;
|
||||
delete ui->patchboardView->scene();
|
||||
ui->patchboardView->setScene(new NodeUIScene(ui->patchboardView, n));
|
||||
QPointF scrollPt(0.0, 0.0);
|
||||
QScroller::scroller(ui->patchboardView)->scrollTo(scrollPt, 0);
|
||||
QScroller::scroller(ui->patchboardView)->scrollTo(scrollPt, 1);
|
||||
// scene handles initial scroll; don't need to do it here
|
||||
}
|
||||
|
||||
void MainWindow::openPatternProperties(const std::shared_ptr<Xybrid::Data::Pattern>& p) {
|
||||
|
|
|
@ -174,8 +174,12 @@ void BeatPad::initUI(NodeUIScene* scene) {
|
|||
|
||||
std::function<void(int16_t)> selectNote;
|
||||
std::function<void(std::shared_ptr<Sample>)> setSample;
|
||||
|
||||
//UIState() { qDebug() << "constructing ui"; }
|
||||
//~UIState() { qDebug() << "deconstructing ui"; }
|
||||
};
|
||||
auto state = std::make_shared<UIState>();
|
||||
auto _state = state.get(); // non-owning pointer for use inside state
|
||||
|
||||
// set up gadgets
|
||||
auto noteSelector = new SelectorGadget();
|
||||
|
@ -218,18 +222,18 @@ void BeatPad::initUI(NodeUIScene* scene) {
|
|||
|
||||
// create functions now that all UI elements exist to be referenced
|
||||
state->selectNote = [=](int16_t n) {
|
||||
if (auto f = cfg.find(n); f != cfg.end()) state->cfg = f->second;
|
||||
else state->cfg = std::make_shared<NoteConfig>();
|
||||
state->note = n;
|
||||
auto smp = state->cfg->smp.lock();
|
||||
if (auto f = cfg.find(n); f != cfg.end()) _state->cfg = f->second;
|
||||
else _state->cfg = std::make_shared<NoteConfig>();
|
||||
_state->note = n;
|
||||
auto smp = _state->cfg->smp.lock();
|
||||
sampleSelector->setSample(smp);
|
||||
|
||||
noteSelector->setEntry({n, qs("%1 %2").arg(Util::noteName(n)).arg(smp ? smp->name : "")}, false);
|
||||
};
|
||||
state->setSample = [=](std::shared_ptr<Sample> smp) {
|
||||
state->cfg->smp = smp;
|
||||
auto n = state->note;
|
||||
if (smp) cfg[n] = state->cfg;
|
||||
_state->cfg->smp = smp;
|
||||
auto n = _state->note;
|
||||
if (smp) cfg[n] = _state->cfg;
|
||||
else if (auto f = cfg.find(n); f != cfg.end()) cfg.erase(f);
|
||||
|
||||
noteSelector->setEntry({n, qs("%1 %2").arg(Util::noteName(n)).arg(smp ? smp->name : "")}, false);
|
||||
|
|
|
@ -29,7 +29,11 @@ NodeUIScene::NodeUIScene(QGraphicsView* view, const std::shared_ptr<Xybrid::Data
|
|||
connect(view->horizontalScrollBar(), &QScrollBar::rangeChanged, this, &NodeUIScene::queueResize);
|
||||
connect(view->verticalScrollBar(), &QScrollBar::rangeChanged, this, &NodeUIScene::queueResize);
|
||||
|
||||
queueResize();
|
||||
autoResize();
|
||||
}
|
||||
|
||||
NodeUIScene::~NodeUIScene() {
|
||||
//
|
||||
}
|
||||
|
||||
void NodeUIScene::queueResize() {
|
||||
|
@ -41,7 +45,7 @@ void NodeUIScene::queueResize() {
|
|||
|
||||
void NodeUIScene::autoResize() {
|
||||
resizeQueued = false;
|
||||
if (!view || view->scene() != this) return;
|
||||
if (!view) return;
|
||||
if (!autoCenter) return;
|
||||
auto vrect = view->mapToScene(view->viewport()->visibleRegion().boundingRect()).boundingRect();
|
||||
auto brect = itemsBoundingRect();
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace Xybrid::UI {
|
|||
bool autoCenter = true;
|
||||
|
||||
NodeUIScene(QGraphicsView* view, const std::shared_ptr<Data::Node>& node);
|
||||
~NodeUIScene() override = default;
|
||||
~NodeUIScene() override;// = default;
|
||||
|
||||
void queueResize();
|
||||
void autoResize();
|
||||
|
|
|
@ -202,12 +202,12 @@ void PatchboardScene::stopPreview(int key) {
|
|||
void PatchboardScene::queueResize() {
|
||||
if (!resizeQueued) {
|
||||
resizeQueued = true;
|
||||
QTimer::singleShot(1, this, &PatchboardScene::autoSetSize);
|
||||
QTimer::singleShot(1, this, &PatchboardScene::autoResize);
|
||||
}
|
||||
}
|
||||
|
||||
void PatchboardScene::autoSetSize() {
|
||||
if (view->scene() != this) return;
|
||||
void PatchboardScene::autoResize() {
|
||||
if (!view) return;
|
||||
auto vrect = view->mapToScene(view->viewport()->visibleRegion().boundingRect()).boundingRect();
|
||||
auto rect = itemsBoundingRect()
|
||||
.united(vrect)
|
||||
|
@ -227,4 +227,6 @@ void PatchboardScene::refresh() {
|
|||
auto* o = new NodeObject(n);
|
||||
addItem(o);
|
||||
}
|
||||
|
||||
autoResize();
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace Xybrid::UI {
|
|||
|
||||
bool resizeQueued = false;
|
||||
void queueResize();
|
||||
void autoSetSize();
|
||||
void autoResize();
|
||||
|
||||
void startPreview(int, int16_t);
|
||||
void stopPreview(int);
|
||||
|
|
Loading…
Reference in New Issue