qt/Compass/outputpanel.cpp

182 lines
5.8 KiB
C++
Raw Permalink Normal View History

2025-05-06 18:28:05 +08:00
#include "outputpanel.h"
#include "main.h"
#include "layer.h"
#include <QApplication>
#include <QMessageBox>
#include <QLineEdit>
#include <QPushButton>
#include <QCheckBox>
OutputPanel::OutputPanel(QWidget *parent) : QWidget(parent) {
gOutPanel = this;
auto vBox = new VBox(this);
vBox->setContentsMargins(0, 0, 0, 0);
vBox->setSpacing(0);
auto hBox = new HBox(vBox);
auto bnAdd = new QPushButton("🞥");
bnAdd->setMaximumWidth(50);
hBox->addWidget(bnAdd);
connect(bnAdd, &QPushButton::clicked, this, [=] {
QString name;
auto cnt = tree->topLevelItemCount();
for(int i=1;;i++) {
name = QString("Output %1").arg(i);
for(int r=0; r<cnt; ++r) if(tree->topLevelItem(r)->text("name"**tree)==name) goto conti;
break;
conti:;
}
auto out = new Layer(0, name, gEditView);
gEditView->layers.push_back(out);
out->updateGeo();
out->show();
out->item = new OutputItem(tree);
out->item->setText("name", out->name);
out->item->setText("size", QString("%1×%2").arg(out->sSize.width()).arg(out->sSize.height()));
out->item->setData(0, (quint64) out);
tree->setCurrentItem(out->item);
out->view = new OutputView;
out->view->setGeometry({QPoint(), out->sSize});
out->view->setSceneRect({out->sPos, out->sSize});
});
auto bnDelet = new QPushButton("🗑");
bnDelet->setMaximumWidth(50);
hBox->addWidget(bnDelet);
connect(bnDelet, &QPushButton::clicked, this, [=] {
// for(int i=0; i<tree->topLevelItemCount(); i++) if(tree->item(i)->checkState("check") == Qt::Checked) {
// auto item = (MediaItem*) tree->topLevelItem(i--);
// item->del();
// delete item;
// }
});
hBox->addStretch();
tree = new TreeWidget;
tree->addCol("#", "", 20);
tree->addCol("name", "", 140);
tree->addCol("size", "", 120);
tree->setDefs()->setHeaderAlignC();
tree->minRowHeight = 26;
connect(tree, &TreeWidget::currentItemChanged, this, [=](QTreeWidgetItem *current, QTreeWidgetItem *) {
if(enCurChanged) gEditView->select((Layer*) current->data(0, Qt::UserRole).toULongLong());
});
vBox->addWidget(tree);
vBox->addSpacing(8);
vBox->addLabel("Output Area Properties");
vBox->addSpacing(6);
auto grid = new Grid(vBox);
grid->setHorizontalSpacing(6);
int r = 0;
grid->addLabel("Name", r, 0);
edName = new QLineEdit;
grid->addWidget(edName, r, 1);
r++;
grid->addLabel("Position", r, 0);
hBox = new HBox;
hBox->addLabel("X:")->setMinimumWidth(20);
edX = new QSpinBox;
edX->setRange(-99999, 999999);
connect(edX, &QSpinBox::valueChanged, this, [=](int value) {
auto layer = gEditView->selected;
if(! layer) return;
layer->sPos.rx() = value;
layer->view->move(layer->sPos);
layer->updateGeo();
layer->update();
});
hBox->addWidget(edX);
hBox->addSpacing(10);
hBox->addLabel("Y:")->setMinimumWidth(20);
edY = new QSpinBox;
edY->setRange(-99999, 999999);
edY->setValue(y());
connect(edY, &QSpinBox::valueChanged, this, [=](int value) {
auto layer = gEditView->selected;
if(! layer) return;
layer->sPos.ry() = value;
layer->view->move(layer->sPos);
layer->updateGeo();
layer->update();
});
hBox->addWidget(edY);
hBox->addStretch();
grid->addLayout(hBox, r, 1);
r++;
grid->addLabel("Size", r, 0);
hBox = new HBox;
hBox->addLabel("W:")->setMinimumWidth(20);
edW = new QSpinBox;
edW->setRange(10, 999999);
connect(edW, &QSpinBox::valueChanged, this, [=](int value) {
auto layer = gEditView->selected;
if(! layer || ! layer->item) return;
layer->sSize.rwidth() = value;
layer->view->resize(layer->sSize);
layer->updateGeo();
layer->update();
layer->item->setText("size"**tree, QString("%1×%2").arg(layer->sSize.rwidth()).arg(layer->sSize.rheight()));
});
hBox->addWidget(edW);
hBox->addSpacing(10);
hBox->addLabel("H:")->setMinimumWidth(20);
edH = new QSpinBox;
edH->setRange(10, 999999);
connect(edH, &QSpinBox::valueChanged, this, [=](int value) {
auto layer = gEditView->selected;
if(! layer || ! layer->item) return;
layer->sSize.rheight() = value;
layer->view->resize(layer->sSize);
layer->updateGeo();
layer->update();
layer->item->setText("size"**tree, QString("%1×%2").arg(layer->sSize.rwidth()).arg(layer->sSize.rheight()));
});
hBox->addWidget(edH);
hBox->addStretch();
grid->addLayout(hBox, r, 1);
r++;
auto edShow = new QCheckBox("Open");
connect(edShow, &QCheckBox::checkStateChanged, this, [=](Qt::CheckState checkState) {
auto area = gEditView->selected;
if(! area || ! area->view) return;
area->view->setVisible(checkState==Qt::Checked);
});
grid->addWidget(edShow, r, 1);
r++;
transUi();
}
void OutputPanel::showEvent(QShowEvent *event) {
QWidget::showEvent(event);
for(auto layer : gEditView->layers) if(layer->item) layer->raise();
auto item = tree->curItem();
if(item) gEditView->select((Layer*) item->data(0).toULongLong());
qDebug()<<"showEvent";
}
void OutputPanel::hideEvent(QHideEvent *event) {
QWidget::hideEvent(event);
for(auto layer : gEditView->layers) if(layer->item) layer->stackUnder(gEditView->originWgt);
qDebug()<<"hideEvent";
}
void OutputPanel::changeEvent(QEvent *event) {
QWidget::changeEvent(event);
if(event->type() == QEvent::LanguageChange) transUi();
}
void OutputPanel::transUi() {
tree->headerItem()->setText("name"**tree, tr("Name"));
tree->headerItem()->setText("size"**tree, tr("Size"));
}