170 lines
5.0 KiB
C++
170 lines
5.0 KiB
C++
#include "newdialog.h"
|
||
#include <DDialogButtonBox>
|
||
#include <DFileDialog>
|
||
#include <DMessageManager>
|
||
#include <QShortcut>
|
||
#include <QWidget>
|
||
|
||
NewDialog::NewDialog(NewType type, DMainWindow *parent) : DDialog(parent) {
|
||
setWindowTitle(tr("New"));
|
||
auto nopic = QPixmap(":/images/nopic.jpeg");
|
||
btnbox = new DButtonBox(this);
|
||
QList<DButtonBoxButton *> blist;
|
||
auto b = new DButtonBoxButton(tr("Add"), this);
|
||
connect(b, &DButtonBoxButton::clicked, [=] {
|
||
QFileDialog d;
|
||
if (type == NewType::FromPics) {
|
||
d.setNameFilter(tr("Images (*.jpg *.tiff *.png)"));
|
||
} else {
|
||
d.setNameFilter("GIF (*.gif)");
|
||
}
|
||
d.setAcceptMode(QFileDialog::AcceptOpen);
|
||
d.setFileMode(QFileDialog::ExistingFiles);
|
||
if (d.exec()) {
|
||
auto files = d.selectedFiles();
|
||
for (auto item : files) {
|
||
QImage img;
|
||
if (img.load(item)) {
|
||
filenames << item;
|
||
auto p = new QListWidgetItem(QIcon(":/images/picture.png"), item,
|
||
imgslist);
|
||
p->setToolTip(item);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
blist.append(b);
|
||
b = new DButtonBoxButton(tr("Remove"), this);
|
||
connect(b, &DButtonBoxButton::clicked, [=] {
|
||
auto indices = imgslist->selectionModel()->selectedRows();
|
||
QList<int> ins;
|
||
for (auto i : indices) {
|
||
ins.append(i.row());
|
||
}
|
||
std::sort(ins.begin(), ins.end(), std::greater<int>());
|
||
for (auto i : ins) {
|
||
auto p = imgslist->item(i);
|
||
imgslist->removeItemWidget(p);
|
||
delete p;
|
||
filenames.removeAt(i);
|
||
}
|
||
});
|
||
blist.append(b);
|
||
b = new DButtonBoxButton(tr("Clear"), this);
|
||
connect(b, &DButtonBoxButton::clicked, [=] {
|
||
imgslist->clear();
|
||
filenames.clear();
|
||
});
|
||
blist.append(b);
|
||
b = new DButtonBoxButton(tr("MoveUp"), this);
|
||
connect(b, &DButtonBoxButton::clicked, [=] {
|
||
auto si = imgslist->selectionModel()->selectedRows();
|
||
auto len = si.count();
|
||
QVector<int> indices(len);
|
||
auto i = 0;
|
||
for (auto &item : si) {
|
||
indices[i] = item.row();
|
||
}
|
||
std::sort(indices.begin(), indices.end());
|
||
if (indices[0] == 0) {
|
||
for (i = 1; i < len; i++) {
|
||
if (indices[i] != i)
|
||
break;
|
||
}
|
||
}
|
||
|
||
for (; i < len; i++) {
|
||
auto p = imgslist->takeItem(i);
|
||
imgslist->insertItem(i - 1, p);
|
||
filenames.move(i, i - 1);
|
||
}
|
||
});
|
||
blist.append(b);
|
||
b = new DButtonBoxButton(tr("MoveDown"), this);
|
||
connect(b, &DButtonBoxButton::clicked, [=] {
|
||
auto si = imgslist->selectionModel()->selectedRows();
|
||
auto len = si.count();
|
||
QVector<int> indices(len);
|
||
auto i = 0;
|
||
for (auto &item : si) {
|
||
indices[i] = item.row();
|
||
}
|
||
std::sort(indices.begin(), indices.end(), std::greater<int>());
|
||
if (indices[0] == len - 1) {
|
||
for (i = 1; i < len; i++) {
|
||
if (indices[i] != len - 1 - i)
|
||
break;
|
||
}
|
||
}
|
||
for (; i < len; i++) {
|
||
auto p = imgslist->takeItem(i);
|
||
imgslist->insertItem(i + 1, p);
|
||
filenames.move(i, i + 1);
|
||
}
|
||
});
|
||
blist.append(b);
|
||
btnbox->setButtonList(blist, false);
|
||
addContent(btnbox);
|
||
addSpacing(10);
|
||
auto w = new QWidget(this);
|
||
auto hbox = new QHBoxLayout(w);
|
||
imgslist = new DListWidget(this);
|
||
hbox->addWidget(imgslist);
|
||
auto vbox = new QVBoxLayout(w);
|
||
hbox->addLayout(vbox);
|
||
imgview = new DLabel(this);
|
||
imgview->setFixedSize(200, 200);
|
||
imgview->setScaledContents(true);
|
||
imgview->setPixmap(nopic.scaled(imgview->size(), Qt::KeepAspectRatio,
|
||
Qt::SmoothTransformation));
|
||
vbox->addWidget(imgview);
|
||
vbox->addSpacing(5);
|
||
vbox->addWidget(new DLabel(tr("Size"), this));
|
||
imgsize = new DLabel(tr("Unknown"), this);
|
||
vbox->addWidget(imgsize);
|
||
addContent(w);
|
||
addSpacing(5);
|
||
addContent(new DLabel(tr("FirstSizeJudge"), this));
|
||
addSpacing(20);
|
||
auto dbbox = new DDialogButtonBox(
|
||
DDialogButtonBox::Ok | DDialogButtonBox::Cancel, this);
|
||
connect(dbbox, &DDialogButtonBox::accepted, this, &NewDialog::on_accept);
|
||
connect(dbbox, &DDialogButtonBox::rejected, this, &NewDialog::on_reject);
|
||
auto key = QKeySequence(Qt::Key_Return);
|
||
auto s = new QShortcut(key, this);
|
||
connect(s, &QShortcut::activated, this, &NewDialog::on_accept);
|
||
addContent(dbbox);
|
||
|
||
connect(imgslist, &DListWidget::itemSelectionChanged, this, [=] {
|
||
auto cur = imgslist->currentItem();
|
||
if (cur) {
|
||
auto p = QPixmap(cur->text());
|
||
imgview->setPixmap(p.scaled(imgview->size(), Qt::KeepAspectRatio,
|
||
Qt::SmoothTransformation));
|
||
imgsize->setText(
|
||
QString("%1 × %2").arg(p.size().width()).arg(p.size().height()));
|
||
} else {
|
||
imgview->setPixmap(nopic);
|
||
imgsize->setText(tr("Unknown"));
|
||
}
|
||
});
|
||
}
|
||
|
||
QStringList NewDialog::getResult() { return filenames; }
|
||
|
||
void NewDialog::on_accept() {
|
||
if (filenames.count()) {
|
||
done(1);
|
||
return;
|
||
}
|
||
DMessageManager::instance()->sendMessage(this, QIcon(":/images/new.png"),
|
||
tr("NoImageFile"));
|
||
}
|
||
|
||
void NewDialog::on_reject() { done(0); }
|
||
|
||
void NewDialog::closeEvent(QCloseEvent *event) {
|
||
Q_UNUSED(event)
|
||
done(0);
|
||
}
|