scene cleanup

portability/boost
zetaPRIME 2019-06-23 13:24:57 -04:00
parent 47591ea3d1
commit 0b2d4d99f0
6 changed files with 25 additions and 17 deletions

View File

@ -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) {

View File

@ -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);

View File

@ -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();

View File

@ -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();

View File

@ -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();
}

View File

@ -19,7 +19,7 @@ namespace Xybrid::UI {
bool resizeQueued = false;
void queueResize();
void autoSetSize();
void autoResize();
void startPreview(int, int16_t);
void stopPreview(int);