diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml new file mode 100644 index 0000000000..2040fe797f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -0,0 +1,58 @@ +name: "🐛 Bug Report" +description: Create a new ticket for a bug. +title: "🐛 [BUG]
This release of Pencil2D brings more than three years worth of exciting new features, enhancements and bug fixes. We have made it easier to manage keyframes, allowing you to copy, paste or delete several of them at once, or to reposition their contents or adjust their exposure in bulk. Entire layers can now be easily duplicated. On top of that, dragging keyframes across the timeline will no longer cause any changes until the moment you drop them at their new position, and the opacity of keyframes and whole layers is now adjustable as well.
+We also haven’t forgotten about the canvas: Its performance should now be noticeably better than before. New overlays have been added to help with perspective drawing. The bucket tool has become more flexible with the addition of several new options and features. The move tool has also seen some love and handles rotated selections much better than it used to, and it will now apply changes automatically when switching to a different layer. Cursor quick sizing is now much more intuitive and more reliable than before. And last but not least, the camera system has been completely overhauled and is now considerably easier to work with.
+Besides keyframe management and canvas tools, we’ve also given the user interface a facelift. The icon set was completely redesigned from scratch and is now finally consistent across the entire program. We’ve also added toolbars for a number of commonly used actions, and updated the status bar to include help text for the current tool. Moreover, the software is now available in seven additional languages!
+Of course, these are only the most notable changes. For a more detailed look at all the improvements in this release, as well as the many bug fixes, check out the full release announcements on our website!
+%1" ).arg( details ) ); } + + QPushButton* copyToClipboard = new QPushButton(tr("Copy to Clipboard")); + ui->buttonBox->addButton(copyToClipboard, QDialogButtonBox::ActionRole); + + connect(copyToClipboard, &QPushButton::clicked, this, &ErrorDialog::onCopyToClipboard); } ErrorDialog::~ErrorDialog() { delete ui; } + +void ErrorDialog::onCopyToClipboard() { + QGuiApplication::clipboard()->setText(ui->details->toPlainText()); +} diff --git a/app/src/errordialog.h b/app/src/errordialog.h index 690c19ee7f..ae9b7169a1 100644 --- a/app/src/errordialog.h +++ b/app/src/errordialog.h @@ -32,6 +32,9 @@ class ErrorDialog : public QDialog explicit ErrorDialog(QString title, QString description, QString details = QString(), QWidget *parent = nullptr); ~ErrorDialog(); +public slots: + void onCopyToClipboard(); + private: Ui::ErrorDialog *ui; }; diff --git a/app/src/filedialog.cpp b/app/src/filedialog.cpp index 42ee65db25..e1b21bf1ce 100644 --- a/app/src/filedialog.cpp +++ b/app/src/filedialog.cpp @@ -186,7 +186,7 @@ QString FileDialog::saveDialogCaption(FileType fileType) case FileType::GIF: return tr("Export Animated GIF"); case FileType::ANIMATED_IMAGE: return tr("Export animated image"); case FileType::MOVIE: return tr("Export movie"); - case FileType::SOUND: return tr("Export sound"); + case FileType::SOUND: return ""; case FileType::PALETTE: return tr("Export palette"); } return ""; @@ -226,6 +226,8 @@ QString FileDialog::saveFileFilters(FileType fileType) bool FileDialog::hasValidSuffix(const QString& filters, const QString& filePath) { + if (filters.isEmpty()) return true; + QString fileName = QFileInfo(filePath).fileName(); for (const QString& filter : filters.split(";;")) { diff --git a/app/src/generalpage.cpp b/app/src/generalpage.cpp index 9a931b574a..77044ca5ea 100644 --- a/app/src/generalpage.cpp +++ b/app/src/generalpage.cpp @@ -100,6 +100,9 @@ GeneralPage::GeneralPage() : ui(new Ui::GeneralPage) ui->backgroundButtons->setId(ui->dotsBackgroundButton, 4); ui->backgroundButtons->setId(ui->weaveBackgroundButton, 5); + ui->undoRedoGroupApplyButton->setDisabled(true); + ui->undoRedoGroupCancelButton->setDisabled(true); + auto buttonClicked = static_cast