From 2dac3de8da9b0de52786a79f5c3d00936ef36309 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Fri, 19 Oct 2018 23:19:49 +0100 Subject: [PATCH 01/31] Xsheet shows up, can resize ok --- app/app.pro | 9 ++++-- app/src/mainwindow2.cpp | 9 ++++++ app/src/mainwindow2.h | 3 ++ app/src/xsheet.cpp | 14 +++++++++ app/src/xsheet.h | 22 ++++++++++++++ app/ui/mainwindow2.ui | 9 +++++- app/ui/xsheet.ui | 64 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 app/src/xsheet.cpp create mode 100644 app/src/xsheet.h create mode 100644 app/ui/xsheet.ui diff --git a/app/app.pro b/app/app.pro index c19709ee95..425689084e 100644 --- a/app/app.pro +++ b/app/app.pro @@ -58,7 +58,8 @@ HEADERS += \ src/importimageseqdialog.h \ src/spinslider.h \ src/doubleprogressdialog.h \ - src/colorslider.h + src/colorslider.h \ + src/xsheet.h SOURCES += \ src/main.cpp \ @@ -86,7 +87,8 @@ SOURCES += \ src/importimageseqdialog.cpp \ src/spinslider.cpp \ src/doubleprogressdialog.cpp \ - src/colorslider.cpp + src/colorslider.cpp \ + src/xsheet.cpp FORMS += \ ui/mainwindow2.ui \ @@ -108,7 +110,8 @@ FORMS += \ ui/timelinepage.ui \ ui/filespage.ui \ ui/toolspage.ui \ - ui/toolboxwidget.ui + ui/toolboxwidget.ui \ + ui/xsheet.ui diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index 5870837788..bf8ccd5c93 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -314,6 +314,7 @@ void MainWindow2::createMenus() connect(ui->actionDuplicate_Frame, &QAction::triggered, mCommands, &ActionCommands::duplicateKey); connect(ui->actionMove_Frame_Forward, &QAction::triggered, mCommands, &ActionCommands::moveFrameForward); connect(ui->actionMove_Frame_Backward, &QAction::triggered, mCommands, &ActionCommands::moveFrameBackward); + connect(ui->actionXsheet_toggle, &QAction::triggered, this, &MainWindow2::xsheetToggle); /// --- Tool Menu --- connect(ui->actionMove, &QAction::triggered, mToolBox, &ToolBoxWidget::moveOn); @@ -954,6 +955,14 @@ void MainWindow2::resetAndDockAllSubWidgets() } } +void MainWindow2::xsheetToggle() +{ + qDebug() << "Xsheet..."; + Xsheet* xsheet = new Xsheet(); + xsheet->setWindowFlags(Qt::WindowStaysOnTopHint); + xsheet->show(); +} + void MainWindow2::readSettings() { QSettings settings(PENCIL2D, PENCIL2D); diff --git a/app/src/mainwindow2.h b/app/src/mainwindow2.h index d557ed4ca7..76d5222e82 100644 --- a/app/src/mainwindow2.h +++ b/app/src/mainwindow2.h @@ -20,6 +20,7 @@ GNU General Public License for more details. #include #include "preferencemanager.h" +#include "xsheet.h" template class QList; @@ -42,6 +43,7 @@ class Timeline2; class ActionCommands; class ImportImageSeqDialog; class BackupElement; +class Xsheet; @@ -98,6 +100,7 @@ class MainWindow2 : public QMainWindow private slots: void resetAndDockAllSubWidgets(); + void xsheetToggle(); private: bool openObject(QString strFilename, bool checkForChanges); diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp new file mode 100644 index 0000000000..9206c95a73 --- /dev/null +++ b/app/src/xsheet.cpp @@ -0,0 +1,14 @@ +#include "xsheet.h" +#include "ui_xsheet.h" + +Xsheet::Xsheet(QWidget *parent) : + QDialog(parent), + ui(new Ui::Xsheet) +{ + ui->setupUi(this); +} + +Xsheet::~Xsheet() +{ + delete ui; +} diff --git a/app/src/xsheet.h b/app/src/xsheet.h new file mode 100644 index 0000000000..d9a5bd0a1a --- /dev/null +++ b/app/src/xsheet.h @@ -0,0 +1,22 @@ +#ifndef XSHEET_H +#define XSHEET_H + +#include + +namespace Ui { +class Xsheet; +} + +class Xsheet : public QDialog +{ + Q_OBJECT + +public: + explicit Xsheet(QWidget *parent = nullptr); + ~Xsheet(); + +private: + Ui::Xsheet *ui; +}; + +#endif // XSHEET_H diff --git a/app/ui/mainwindow2.ui b/app/ui/mainwindow2.ui index af3efc5b38..51ae070c7b 100644 --- a/app/ui/mainwindow2.ui +++ b/app/ui/mainwindow2.ui @@ -49,7 +49,7 @@ 0 0 800 - 21 + 22 @@ -166,6 +166,8 @@ + + @@ -888,6 +890,11 @@ Animated GIF... + + + Xsheet toggle + + diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui new file mode 100644 index 0000000000..f14954cde8 --- /dev/null +++ b/app/ui/xsheet.ui @@ -0,0 +1,64 @@ + + + Xsheet + + + + 0 + 0 + 343 + 433 + + + + + 0 + 0 + + + + Dialog + + + + + + Xsheet + + + Qt::AlignCenter + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + ... + + + + + + + + + + + + + From 981d9489be0ee0529414b02a2aae8f8065c31be4 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Mon, 22 Oct 2018 23:16:37 +0200 Subject: [PATCH 02/31] Xsheet interacts with Timeline, not vice versa --- app/src/mainwindow2.cpp | 19 ++++++--- app/src/mainwindow2.h | 1 + app/src/xsheet.cpp | 86 +++++++++++++++++++++++++++++++++++++++++ app/src/xsheet.h | 15 +++++++ app/ui/mainwindow2.ui | 2 +- app/ui/xsheet.ui | 60 ++++++++++++++++++++++------ 6 files changed, 165 insertions(+), 18 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index bf8ccd5c93..05b16792d3 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -401,7 +401,7 @@ void MainWindow2::clearRecentFilesList() if (!recentFilesList.isEmpty()) { mRecentFileMenu->clear(); - QMessageBox::information(this, 0, + QMessageBox::information(this, nullptr, tr("\n\n You have successfully cleared the list"), QMessageBox::Ok); } @@ -957,10 +957,19 @@ void MainWindow2::resetAndDockAllSubWidgets() void MainWindow2::xsheetToggle() { - qDebug() << "Xsheet..."; - Xsheet* xsheet = new Xsheet(); - xsheet->setWindowFlags(Qt::WindowStaysOnTopHint); - xsheet->show(); + if (mXsheet == nullptr) + { + mXsheet = new Xsheet(); + mXsheet->setWindowFlags(Qt::WindowStaysOnTopHint); + LayerManager* lMgr = mEditor->layers(); + mXsheet->updateUi(*lMgr, mEditor); + mXsheet->show(); + } + else + { + mXsheet->close(); + mXsheet = nullptr; + } } void MainWindow2::readSettings() diff --git a/app/src/mainwindow2.h b/app/src/mainwindow2.h index 76d5222e82..a1dfe1fa76 100644 --- a/app/src/mainwindow2.h +++ b/app/src/mainwindow2.h @@ -144,6 +144,7 @@ private slots: //PreviewWidget* mPreview = nullptr; TimeLine* mTimeLine = nullptr; // be public temporary ColorInspector* mColorInspector = nullptr; + Xsheet* mXsheet = nullptr; // backup BackupElement* mBackupAtSave = nullptr; diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 9206c95a73..5053cd503f 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -1,14 +1,100 @@ #include "xsheet.h" #include "ui_xsheet.h" +#include +#include +#include "pencildef.h" +#include "layer.h" Xsheet::Xsheet(QWidget *parent) : QDialog(parent), ui(new Ui::Xsheet) { ui->setupUi(this); + mTableWidget = ui->tableXsheet; + connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); +// connect(this, SIGNAL(ui->tableXsheet->cellClicked(1,2)), this, SLOT(selectLayerFrame())); } Xsheet::~Xsheet() { delete ui; } + +void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) +{ + mLayerMgr = &lMgr; + mEditor = editor; + QSettings settings(PENCIL2D, PENCIL2D); + mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); + qDebug() << "Width: " << ui->tableXsheet->width(); + mLayerCount = 0; + QStringList sl; + sl.clear(); + for (int i = 0; i < lMgr.count(); i++) + { // count Bitmap and Vector layers + if (lMgr.getLayer(i)->type() == 1 || lMgr.getLayer(i)->type() == 2) + { + mLayerCount++; + sl.append(lMgr.getLayer(i)->name()); + } + } + this->setMinimumWidth(mLayerCount * 40 + 140); + ui->tableXsheet->setRowCount(mTimeLineLength + 1); + ui->tableXsheet->setColumnCount(mLayerCount + 2); +// ui->tableXsheet->setColumnWidth(0, 40); +// ui->tableXsheet->setColumnWidth(mLayerCount + 1, 40); + qDebug() << "Width: " << ui->tableXsheet->width(); + // set column width for layers + for (int i = 0; i < ui->tableXsheet->columnCount(); i++) + { + ui->tableXsheet->setColumnWidth(i, 40); + } + + // set headers of Xsheet + ui->tableXsheet->setRowHeight(0,16); + mTableItem = new QTableWidgetItem("#"); + mTableItem->setBackgroundColor(QColor(Qt::lightGray)); + ui->tableXsheet->setItem(0, 0, mTableItem); + for (int i = 0; i < sl.size(); i++) + { + mTableItem = new QTableWidgetItem(sl.at(i)); + mTableItem->setBackgroundColor(QColor(Qt::lightGray)); + ui->tableXsheet->setItem(0, i + 1, mTableItem); + } + mTableItem = new QTableWidgetItem("DIAL"); + mTableItem->setBackgroundColor(QColor(Qt::lightGray)); + ui->tableXsheet->setItem(0, sl.size() + 1, mTableItem); + + // fill Xsheet + for (int i = 1; i <= mTimeLineLength; i++) + { + ui->tableXsheet->setRowHeight(i,16); + mTableItem = new QTableWidgetItem(QString::number(i)); + ui->tableXsheet->setItem(i, 0, mTableItem); + for (int j = 1; j <= mLayerCount; j++) + { + if (lMgr.getLayer(j)->keyExists(i)) + { + mTableItem = new QTableWidgetItem(QString::number(i)); + ui->tableXsheet->setItem(i, j, mTableItem); + } + else + { + ui->tableXsheet->setItem(i, j, new QTableWidgetItem(" ")); + } + } + } +} + +void Xsheet::selectLayerFrame(int row, int column) +{ + if (column > 0 && column <= mLayerCount) + { + mTableItem = new QTableWidgetItem(); + mTableItem = mTableWidget->item(0, column); + Layer* layer = mLayerMgr->findLayerByName(mTableItem->text()); + if (layer == nullptr) { return; } + mLayerMgr->setCurrentLayer(layer); + mEditor->scrubTo(row); + } +} diff --git a/app/src/xsheet.h b/app/src/xsheet.h index d9a5bd0a1a..5b407b3b7b 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -2,6 +2,11 @@ #define XSHEET_H #include +#include "layermanager.h" +#include "editor.h" +#include "qdebug.h" +#include +#include namespace Ui { class Xsheet; @@ -14,9 +19,19 @@ class Xsheet : public QDialog public: explicit Xsheet(QWidget *parent = nullptr); ~Xsheet(); + void updateUi(LayerManager &lMgr, Editor* &editor); + +private slots: + void selectLayerFrame(int row, int column); private: Ui::Xsheet *ui; + LayerManager* mLayerMgr = nullptr; + Editor* mEditor = nullptr; + int mLayerCount; + int mTimeLineLength; + QTableWidget* mTableWidget; + QTableWidgetItem* mTableItem; }; #endif // XSHEET_H diff --git a/app/ui/mainwindow2.ui b/app/ui/mainwindow2.ui index 51ae070c7b..8e81f2b3ba 100644 --- a/app/ui/mainwindow2.ui +++ b/app/ui/mainwindow2.ui @@ -892,7 +892,7 @@ - Xsheet toggle + Show/Hide Xsheet diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index f14954cde8..70c73805d1 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -16,22 +16,28 @@ 0 + + + 130 + 0 + + - Dialog + Xsheet - - - - Xsheet - - - Qt::AlignCenter - - - + + + + Xsheet + + + Qt::AlignCenter + + + @@ -55,7 +61,37 @@ - + + + true + + + + 10 + + + + QAbstractItemView::NoEditTriggers + + + false + + + QAbstractItemView::SingleSelection + + + false + + + false + + + 200 + + + false + + From 3a7e2c1960e8208276bda3372443af8be55ce500 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Tue, 23 Oct 2018 13:50:59 +0200 Subject: [PATCH 03/31] Removed dead code. Use member variable in stead of parameter --- app/src/xsheet.cpp | 43 ++++++++++++++++++++++--------------------- app/src/xsheet.h | 1 + 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 5053cd503f..830ad8c145 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -12,7 +12,6 @@ Xsheet::Xsheet(QWidget *parent) : ui->setupUi(this); mTableWidget = ui->tableXsheet; connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); -// connect(this, SIGNAL(ui->tableXsheet->cellClicked(1,2)), this, SLOT(selectLayerFrame())); } Xsheet::~Xsheet() @@ -30,20 +29,17 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) mLayerCount = 0; QStringList sl; sl.clear(); - for (int i = 0; i < lMgr.count(); i++) + for (int i = 0; i < mLayerMgr->count(); i++) { // count Bitmap and Vector layers - if (lMgr.getLayer(i)->type() == 1 || lMgr.getLayer(i)->type() == 2) + if (mLayerMgr->getLayer(i)->type() == 1 || mLayerMgr->getLayer(i)->type() == 2) { mLayerCount++; - sl.append(lMgr.getLayer(i)->name()); + sl.append(mLayerMgr->getLayer(i)->name()); } } this->setMinimumWidth(mLayerCount * 40 + 140); ui->tableXsheet->setRowCount(mTimeLineLength + 1); ui->tableXsheet->setColumnCount(mLayerCount + 2); -// ui->tableXsheet->setColumnWidth(0, 40); -// ui->tableXsheet->setColumnWidth(mLayerCount + 1, 40); - qDebug() << "Width: " << ui->tableXsheet->width(); // set column width for layers for (int i = 0; i < ui->tableXsheet->columnCount(); i++) { @@ -64,7 +60,25 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) mTableItem = new QTableWidgetItem("DIAL"); mTableItem->setBackgroundColor(QColor(Qt::lightGray)); ui->tableXsheet->setItem(0, sl.size() + 1, mTableItem); + fillXsheet(); +} + +void Xsheet::selectLayerFrame(int row, int column) +{ + if (column > 0 && column <= mLayerCount) + { + mTableItem = new QTableWidgetItem(); + mTableItem = mTableWidget->item(0, column); + Layer* layer = mLayerMgr->findLayerByName(mTableItem->text()); + if (layer == nullptr) { return; } + mLayerMgr->setCurrentLayer(layer); + mEditor->scrubTo(row); + } + fillXsheet(); +} +void Xsheet::fillXsheet() +{ // fill Xsheet for (int i = 1; i <= mTimeLineLength; i++) { @@ -73,7 +87,7 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) ui->tableXsheet->setItem(i, 0, mTableItem); for (int j = 1; j <= mLayerCount; j++) { - if (lMgr.getLayer(j)->keyExists(i)) + if (mLayerMgr->getLayer(j)->keyExists(i)) { mTableItem = new QTableWidgetItem(QString::number(i)); ui->tableXsheet->setItem(i, j, mTableItem); @@ -85,16 +99,3 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) } } } - -void Xsheet::selectLayerFrame(int row, int column) -{ - if (column > 0 && column <= mLayerCount) - { - mTableItem = new QTableWidgetItem(); - mTableItem = mTableWidget->item(0, column); - Layer* layer = mLayerMgr->findLayerByName(mTableItem->text()); - if (layer == nullptr) { return; } - mLayerMgr->setCurrentLayer(layer); - mEditor->scrubTo(row); - } -} diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 5b407b3b7b..8046161faa 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -23,6 +23,7 @@ class Xsheet : public QDialog private slots: void selectLayerFrame(int row, int column); + void fillXsheet(); private: Ui::Xsheet *ui; From b1605da9b853a0d352dd1a4c88a13da6759ad22e Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Tue, 23 Oct 2018 23:13:05 +0200 Subject: [PATCH 04/31] WIP Xsheet must cope with add new layer, delete layer, etc --- app/src/xsheet.cpp | 19 +++++++++++-------- app/src/xsheet.h | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 830ad8c145..8c6ba240cc 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -10,6 +10,7 @@ Xsheet::Xsheet(QWidget *parent) : ui(new Ui::Xsheet) { ui->setupUi(this); + sl = new QStringList; mTableWidget = ui->tableXsheet; connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); } @@ -27,14 +28,16 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); qDebug() << "Width: " << ui->tableXsheet->width(); mLayerCount = 0; - QStringList sl; - sl.clear(); + sl->clear(); + int lType = mLayerMgr->currentLayer()->type(); for (int i = 0; i < mLayerMgr->count(); i++) { // count Bitmap and Vector layers - if (mLayerMgr->getLayer(i)->type() == 1 || mLayerMgr->getLayer(i)->type() == 2) + if (mLayerMgr->getLayer(i)->type() == lType) +// if (mLayerMgr->getLayer(i)->type() == 1 || mLayerMgr->getLayer(i)->type() == 2) { mLayerCount++; - sl.append(mLayerMgr->getLayer(i)->name()); + sl->append(mLayerMgr->getLayer(i)->name()); + qDebug() << "id : " << mLayerMgr->getLayer(i)->id(); } } this->setMinimumWidth(mLayerCount * 40 + 140); @@ -45,21 +48,21 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) { ui->tableXsheet->setColumnWidth(i, 40); } - // set headers of Xsheet ui->tableXsheet->setRowHeight(0,16); mTableItem = new QTableWidgetItem("#"); mTableItem->setBackgroundColor(QColor(Qt::lightGray)); ui->tableXsheet->setItem(0, 0, mTableItem); - for (int i = 0; i < sl.size(); i++) + for (int i = 0; i < sl->size(); i++) { - mTableItem = new QTableWidgetItem(sl.at(i)); + mTableItem = new QTableWidgetItem(sl->at(i)); mTableItem->setBackgroundColor(QColor(Qt::lightGray)); ui->tableXsheet->setItem(0, i + 1, mTableItem); } mTableItem = new QTableWidgetItem("DIAL"); mTableItem->setBackgroundColor(QColor(Qt::lightGray)); - ui->tableXsheet->setItem(0, sl.size() + 1, mTableItem); + ui->tableXsheet->setItem(0, sl->size() + 1, mTableItem); + fillXsheet(); } diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 8046161faa..99fcd12279 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -26,6 +26,7 @@ private slots: void fillXsheet(); private: + QStringList* sl; Ui::Xsheet *ui; LayerManager* mLayerMgr = nullptr; Editor* mEditor = nullptr; From 4879e990d4610cfab0bbd37d7c9e24a8added0de Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Wed, 24 Oct 2018 10:54:31 +0200 Subject: [PATCH 05/31] Shortcut X. Modularized to subfunctions. Enhanced code --- app/src/xsheet.cpp | 114 ++++++++++++++++++++++++++---------------- app/src/xsheet.h | 1 + app/ui/mainwindow2.ui | 5 +- 3 files changed, 77 insertions(+), 43 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 8c6ba240cc..4b9f3a662e 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -1,7 +1,24 @@ +/* + +Pencil - Traditional Animation Software +Copyright (C) 2012-2018 Matthew Chiawen Chang + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +*/ + #include "xsheet.h" #include "ui_xsheet.h" #include #include +#include #include "pencildef.h" #include "layer.h" @@ -26,43 +43,7 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) mEditor = editor; QSettings settings(PENCIL2D, PENCIL2D); mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); - qDebug() << "Width: " << ui->tableXsheet->width(); - mLayerCount = 0; - sl->clear(); - int lType = mLayerMgr->currentLayer()->type(); - for (int i = 0; i < mLayerMgr->count(); i++) - { // count Bitmap and Vector layers - if (mLayerMgr->getLayer(i)->type() == lType) -// if (mLayerMgr->getLayer(i)->type() == 1 || mLayerMgr->getLayer(i)->type() == 2) - { - mLayerCount++; - sl->append(mLayerMgr->getLayer(i)->name()); - qDebug() << "id : " << mLayerMgr->getLayer(i)->id(); - } - } - this->setMinimumWidth(mLayerCount * 40 + 140); - ui->tableXsheet->setRowCount(mTimeLineLength + 1); - ui->tableXsheet->setColumnCount(mLayerCount + 2); - // set column width for layers - for (int i = 0; i < ui->tableXsheet->columnCount(); i++) - { - ui->tableXsheet->setColumnWidth(i, 40); - } - // set headers of Xsheet - ui->tableXsheet->setRowHeight(0,16); - mTableItem = new QTableWidgetItem("#"); - mTableItem->setBackgroundColor(QColor(Qt::lightGray)); - ui->tableXsheet->setItem(0, 0, mTableItem); - for (int i = 0; i < sl->size(); i++) - { - mTableItem = new QTableWidgetItem(sl->at(i)); - mTableItem->setBackgroundColor(QColor(Qt::lightGray)); - ui->tableXsheet->setItem(0, i + 1, mTableItem); - } - mTableItem = new QTableWidgetItem("DIAL"); - mTableItem->setBackgroundColor(QColor(Qt::lightGray)); - ui->tableXsheet->setItem(0, sl->size() + 1, mTableItem); - + initXsheet(); fillXsheet(); } @@ -77,6 +58,7 @@ void Xsheet::selectLayerFrame(int row, int column) mLayerMgr->setCurrentLayer(layer); mEditor->scrubTo(row); } + initXsheet(); fillXsheet(); } @@ -85,20 +67,68 @@ void Xsheet::fillXsheet() // fill Xsheet for (int i = 1; i <= mTimeLineLength; i++) { - ui->tableXsheet->setRowHeight(i,16); + mTableWidget->setRowHeight(i,16); mTableItem = new QTableWidgetItem(QString::number(i)); - ui->tableXsheet->setItem(i, 0, mTableItem); + mTableWidget->setItem(i, 0, mTableItem); for (int j = 1; j <= mLayerCount; j++) { - if (mLayerMgr->getLayer(j)->keyExists(i)) + if (mLayerMgr->findLayerByName(mTableWidget->item(0,j)->text())->keyExists(i)) { mTableItem = new QTableWidgetItem(QString::number(i)); - ui->tableXsheet->setItem(i, j, mTableItem); + mTableWidget->setItem(i, j, mTableItem); + } + else + { + mTableWidget->setItem(i, j, new QTableWidgetItem(" ")); + } + } + } +} + +void Xsheet::initXsheet() +{ + mLayerCount = 0; + sl->clear(); + int lType = mLayerMgr->currentLayer()->type(); + for (int i = 0; i < mLayerMgr->count(); i++) + { // count Bitmap OR Vector layers, whichever is active + if (mLayerMgr->getLayer(i)->type() == lType) + { + if (!sl->contains(mLayerMgr->getLayer(i)->name())) + { + mLayerCount++; + sl->append(mLayerMgr->getLayer(i)->name()); } else { - ui->tableXsheet->setItem(i, j, new QTableWidgetItem(" ")); + int ret = QMessageBox::critical(new QWidget, + tr("Layer name duplicate!"), + tr("Identical layer names '%1' not supported in Xsheet").arg(mLayerMgr->getLayer(i)->name()), + QMessageBox::Ok); + Q_UNUSED(ret); } } } + this->setMinimumWidth(mLayerCount * 40 + 140); + mTableWidget->setRowCount(mTimeLineLength + 1); + mTableWidget->setColumnCount(mLayerCount + 2); + // set column width for layers + for (int i = 0; i < mTableWidget->columnCount(); i++) + { + mTableWidget->setColumnWidth(i, 40); + } + // set headers of Xsheet + mTableWidget->setRowHeight(0,16); + mTableItem = new QTableWidgetItem("#"); + mTableItem->setBackgroundColor(QColor(Qt::lightGray)); + mTableWidget->setItem(0, 0, mTableItem); + for (int i = 0; i < sl->size(); i++) + { + mTableItem = new QTableWidgetItem(sl->at(i)); + mTableItem->setBackgroundColor(QColor(220, 220, 255)); + mTableWidget->setItem(0, i + 1, mTableItem); + } + mTableItem = new QTableWidgetItem("DIAL"); + mTableItem->setBackgroundColor(QColor(Qt::lightGray)); + mTableWidget->setItem(0, sl->size() + 1, mTableItem); } diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 99fcd12279..26cb2e4f68 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -26,6 +26,7 @@ private slots: void fillXsheet(); private: + void initXsheet(); QStringList* sl; Ui::Xsheet *ui; LayerManager* mLayerMgr = nullptr; diff --git a/app/ui/mainwindow2.ui b/app/ui/mainwindow2.ui index 8e81f2b3ba..e9e4f8839a 100644 --- a/app/ui/mainwindow2.ui +++ b/app/ui/mainwindow2.ui @@ -49,7 +49,7 @@ 0 0 800 - 22 + 21 @@ -894,6 +894,9 @@ Show/Hide Xsheet + + X + From d18c448bc6b4316fea08e31da2dd99b07eeea94e Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Wed, 24 Oct 2018 14:40:15 +0200 Subject: [PATCH 06/31] Color coded xsheet. Vector and Bitmap layers. --- app/src/xsheet.cpp | 35 +++++++++++++++++++++++++++++------ app/src/xsheet.h | 2 ++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 4b9f3a662e..e72509a49a 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -74,25 +74,36 @@ void Xsheet::fillXsheet() { if (mLayerMgr->findLayerByName(mTableWidget->item(0,j)->text())->keyExists(i)) { + int type = getLayerType(mLayerMgr->findLayerByName(mTableWidget->item(0,j)->text())); mTableItem = new QTableWidgetItem(QString::number(i)); + mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(i, j, mTableItem); } +/* else { mTableWidget->setItem(i, j, new QTableWidgetItem(" ")); } + */ } } } void Xsheet::initXsheet() { + // clear backgroundcolors + for (int i = 1; i < sl->size(); i++) + for (int j = 1; j < mTimeLineLength; j++) + { + mTableItem = new QTableWidgetItem(""); + mTableItem->setBackgroundColor(Qt::white); + mTableWidget->setItem(i, j, mTableItem); + } mLayerCount = 0; sl->clear(); - int lType = mLayerMgr->currentLayer()->type(); for (int i = 0; i < mLayerMgr->count(); i++) - { // count Bitmap OR Vector layers, whichever is active - if (mLayerMgr->getLayer(i)->type() == lType) + { // count Bitmap and Vector layers (duplicate names NOT supported) + if (mLayerMgr->getLayer(i)->type() == 1 || mLayerMgr->getLayer(i)->type() == 2) { if (!sl->contains(mLayerMgr->getLayer(i)->name())) { @@ -109,13 +120,13 @@ void Xsheet::initXsheet() } } } - this->setMinimumWidth(mLayerCount * 40 + 140); + this->setMinimumWidth(mLayerCount * 50 + 130); mTableWidget->setRowCount(mTimeLineLength + 1); mTableWidget->setColumnCount(mLayerCount + 2); // set column width for layers for (int i = 0; i < mTableWidget->columnCount(); i++) { - mTableWidget->setColumnWidth(i, 40); + mTableWidget->setColumnWidth(i, 50); } // set headers of Xsheet mTableWidget->setRowHeight(0,16); @@ -124,11 +135,23 @@ void Xsheet::initXsheet() mTableWidget->setItem(0, 0, mTableItem); for (int i = 0; i < sl->size(); i++) { + int type = getLayerType(mLayerMgr->findLayerByName(sl->at(i))); mTableItem = new QTableWidgetItem(sl->at(i)); - mTableItem->setBackgroundColor(QColor(220, 220, 255)); + mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(0, i + 1, mTableItem); } mTableItem = new QTableWidgetItem("DIAL"); mTableItem->setBackgroundColor(QColor(Qt::lightGray)); mTableWidget->setItem(0, sl->size() + 1, mTableItem); } + +int Xsheet::getLayerType(Layer *layer) +{ + return layer->type(); +} + +QColor Xsheet::getLayerColor(int color) +{ + if (color == 1) { return QColor(151, 176, 244); } + else { return QColor(150, 242, 150); } +} diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 26cb2e4f68..701b374ed5 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -27,6 +27,8 @@ private slots: private: void initXsheet(); + int getLayerType(Layer* layer); + QColor getLayerColor(int color); QStringList* sl; Ui::Xsheet *ui; LayerManager* mLayerMgr = nullptr; From 6da4c55066541f4fca83ba0efc4e81981939b10d Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Wed, 24 Oct 2018 23:43:14 +0200 Subject: [PATCH 07/31] Loads papagayo files to xsheet --- app/data/app.qrc | 1 + app/data/icons/papagayo.png | Bin 0 -> 1804 bytes app/src/xsheet.cpp | 85 ++++++++++++++++++++++++++++-------- app/src/xsheet.h | 3 ++ app/ui/xsheet.ui | 12 +++-- 5 files changed, 80 insertions(+), 21 deletions(-) create mode 100644 app/data/icons/papagayo.png diff --git a/app/data/app.qrc b/app/data/app.qrc index 78158697ef..55daf308fd 100644 --- a/app/data/app.qrc +++ b/app/data/app.qrc @@ -56,6 +56,7 @@ icons/new/arrow-horizontal.png icons/new/arrow-selectmove.png icons/new/arrow-vertical.png + icons/papagayo.png icons/onion-blue.png diff --git a/app/data/icons/papagayo.png b/app/data/icons/papagayo.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba5900b37128071affb35f8f3a027a0ad45a16b GIT binary patch literal 1804 zcmV+n2lM!eP)X1^@s6P!BAT00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;tCiKIx4*jCu#ry2AN4j zK~zY`t(I$yRaX_qfBWon?tAXsJ9p;J;iN@CDS#Rj!$t4aMpQca}9 zCMKlO6dUzRKWJ75NYOW*IJCbU5Aa<+RgC|FB8NJ4tjy;;t}Qvb6zU#7*kjIF&IUoyU`A z+y3rXQrE}74~zlSFAHx_N+pwt^wsGYkX2!^dFOZZy-)AdG4u(imNjuH1<|Nr=>n4# zb5nGl+DcRHYR-0_CYQAEhFny}{I~-;niPcRSIB5%a5X}#AL$&+1K|gDEdF)2w~)>B z=Fb4m6b9<+#qTaAJm2to!EvUKlcB>$rwil??{M_!F|H4Fa`5;8f?*%`ZI4siRC(L? zj-`~cow7nWR?(8jf7bSL|M}Dpfz0H+wRLN?jg?h1I|mS&VszBYkt6T%_S^gUYV+fq z{NpEVXkJ5PQQ&sxwxW;Nna zR<3Y^+RH-^&EeFCzvQFNpHncVFp5$WAmZz*S@~GJAsF)ofOh4m^0Xq1%@JE3dt5eI zcgSAL7A#*jOh?D>@p})lcI5zxgrwlEKxkqrYqla-?~{S3ch&IatSXILCjom30LKxb zN57(P^ZCH#0>cBkOQ7puTa&aPG!`v1XowjEJr4d{iq`HhGT@#Tv{DeP_i3I=_x*zx z)1y|=Zk<$N(dN$=Zyq>ko4O9KzGj!#tu1xk+gKcUZjXf$Am#0wmP*ii#-V=z)~sBn+d=2#iM@?kPl}?9~A2>8WEa~rYINV-?I~uqnh`OaA!|=&R%QXwGS zJ#;zy+nd1)15W^LKx@m=UV&6WKqx$`5 zLGO%?m7^$TOf+5K2^uH|@~ILZ?rnds=N}{A)0OffL?H#dDka!9vZ_k_N%M$HQsoSlg_XW#DKIuEQjQGjqHmIzIz z1sDWQ0OL0fqE;X^T|+XPl>#-MqLe~ltJ#kY0cO!A+h525uLH+#^aV4vYueqkO|j2K zV!B5|lVXB)F~PzVCe#E2(Z*m%8d?$Po6Y%M0chOXux-JE(FdhVl1!v27i^THNO$LO zOb6X9L4a*K|DJDpc#b#PRQbib`8j!q`H;WH^Yzi|kJqzte2;Gc0000 #include "pencildef.h" #include "layer.h" +#include +#include Xsheet::Xsheet(QWidget *parent) : QDialog(parent), @@ -28,8 +30,10 @@ Xsheet::Xsheet(QWidget *parent) : { ui->setupUi(this); sl = new QStringList; + mPapaLines = new QStringList; mTableWidget = ui->tableXsheet; connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); + connect(ui->btnPapa, SIGNAL(clicked(bool)), this, SLOT(loadPapa())); } Xsheet::~Xsheet() @@ -49,6 +53,9 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) void Xsheet::selectLayerFrame(int row, int column) { + initXsheet(); + fillXsheet(); + writePapa(); if (column > 0 && column <= mLayerCount) { mTableItem = new QTableWidgetItem(); @@ -58,8 +65,6 @@ void Xsheet::selectLayerFrame(int row, int column) mLayerMgr->setCurrentLayer(layer); mEditor->scrubTo(row); } - initXsheet(); - fillXsheet(); } void Xsheet::fillXsheet() @@ -79,26 +84,30 @@ void Xsheet::fillXsheet() mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(i, j, mTableItem); } -/* - else - { - mTableWidget->setItem(i, j, new QTableWidgetItem(" ")); - } - */ } } } +void Xsheet::loadPapa() +{ + mPapaLines->clear(); + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open *.pgo file"), "", tr("Pgo Files (*.pgo)")); + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return; + QTextStream in(&file); + while (!in.atEnd()) { + QString tmp = in.readLine(); + tmp.remove("\t"); + mPapaLines->append(tmp); + } + file.close(); + writePapa(); +} + void Xsheet::initXsheet() { - // clear backgroundcolors - for (int i = 1; i < sl->size(); i++) - for (int j = 1; j < mTimeLineLength; j++) - { - mTableItem = new QTableWidgetItem(""); - mTableItem->setBackgroundColor(Qt::white); - mTableWidget->setItem(i, j, mTableItem); - } mLayerCount = 0; sl->clear(); for (int i = 0; i < mLayerMgr->count(); i++) @@ -120,6 +129,15 @@ void Xsheet::initXsheet() } } } + for (int i = 1; i <= sl->size(); i++) + { + for (int j = 1; j < mTimeLineLength; j++) + { + mTableItem = new QTableWidgetItem(""); + mTableItem->setBackgroundColor(Qt::white); + mTableWidget->setItem(j, i, mTableItem); + } + } this->setMinimumWidth(mLayerCount * 50 + 130); mTableWidget->setRowCount(mTimeLineLength + 1); mTableWidget->setColumnCount(mLayerCount + 2); @@ -131,7 +149,6 @@ void Xsheet::initXsheet() // set headers of Xsheet mTableWidget->setRowHeight(0,16); mTableItem = new QTableWidgetItem("#"); - mTableItem->setBackgroundColor(QColor(Qt::lightGray)); mTableWidget->setItem(0, 0, mTableItem); for (int i = 0; i < sl->size(); i++) { @@ -141,10 +158,42 @@ void Xsheet::initXsheet() mTableWidget->setItem(0, i + 1, mTableItem); } mTableItem = new QTableWidgetItem("DIAL"); - mTableItem->setBackgroundColor(QColor(Qt::lightGray)); mTableWidget->setItem(0, sl->size() + 1, mTableItem); } +void Xsheet::writePapa() +{ + if (mPapaLines->isEmpty()) { return; } + int dial = mTableWidget->columnCount(); + + // clear column + for (int i = 0; i < mTimeLineLength; i++) + { + mTableItem = new QTableWidgetItem(" "); + mTableWidget->setItem(i, dial - 1, mTableItem); + } + + // write header + mTableItem = new QTableWidgetItem(mPapaLines->at(5)); + mTableWidget->setItem(0, dial - 1, mTableItem); + QString tmp; + QStringList lipsync; // papagayo mouths + for (int i = 12; i < mPapaLines->size(); i++) + { + tmp = mPapaLines->at(i); + lipsync = tmp.split(" "); + if (lipsync.size() == 2) + { + tmp = lipsync.at(0); + int row = tmp.toInt(); + mTableWidget->setItem(row, dial - 1, new QTableWidgetItem(lipsync.at(1))); + } + } + tmp = mPapaLines->at(10); + int row = tmp.toInt(); + mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); +} + int Xsheet::getLayerType(Layer *layer) { return layer->type(); diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 701b374ed5..d616b90c26 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -24,12 +24,15 @@ class Xsheet : public QDialog private slots: void selectLayerFrame(int row, int column); void fillXsheet(); + void loadPapa(); private: void initXsheet(); + void writePapa(); int getLayerType(Layer* layer); QColor getLayerColor(int color); QStringList* sl; + QStringList* mPapaLines; // for filling DIAL column Ui::Xsheet *ui; LayerManager* mLayerMgr = nullptr; Editor* mEditor = nullptr; diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 70c73805d1..2b6ec3641d 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -52,9 +52,13 @@ - + - ... + + + + + :/icons/papagayo.png:/icons/papagayo.png @@ -95,6 +99,8 @@ - + + + From 521506893baa46abbd61e0d9a71fdb8fed6e9bc1 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Thu, 25 Oct 2018 20:35:00 +0200 Subject: [PATCH 08/31] Optimizing colors in xsheet. Renaming stringlist --- app/src/xsheet.cpp | 36 ++++++++++++++++++++++-------------- app/src/xsheet.h | 2 +- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 0d898029d3..7eead6fac5 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -29,7 +29,8 @@ Xsheet::Xsheet(QWidget *parent) : ui(new Ui::Xsheet) { ui->setupUi(this); - sl = new QStringList; + mLayerNames = new QStringList; + mLayerCount = 0; mPapaLines = new QStringList; mTableWidget = ui->tableXsheet; connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); @@ -53,9 +54,6 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) void Xsheet::selectLayerFrame(int row, int column) { - initXsheet(); - fillXsheet(); - writePapa(); if (column > 0 && column <= mLayerCount) { mTableItem = new QTableWidgetItem(); @@ -65,6 +63,9 @@ void Xsheet::selectLayerFrame(int row, int column) mLayerMgr->setCurrentLayer(layer); mEditor->scrubTo(row); } + initXsheet(); + fillXsheet(); + writePapa(); } void Xsheet::fillXsheet() @@ -74,6 +75,7 @@ void Xsheet::fillXsheet() { mTableWidget->setRowHeight(i,16); mTableItem = new QTableWidgetItem(QString::number(i)); + mTableItem->setBackgroundColor(QColor(250, 240, 160)); mTableWidget->setItem(i, 0, mTableItem); for (int j = 1; j <= mLayerCount; j++) { @@ -109,15 +111,15 @@ void Xsheet::loadPapa() void Xsheet::initXsheet() { mLayerCount = 0; - sl->clear(); + mLayerNames->clear(); for (int i = 0; i < mLayerMgr->count(); i++) { // count Bitmap and Vector layers (duplicate names NOT supported) if (mLayerMgr->getLayer(i)->type() == 1 || mLayerMgr->getLayer(i)->type() == 2) { - if (!sl->contains(mLayerMgr->getLayer(i)->name())) + if (!mLayerNames->contains(mLayerMgr->getLayer(i)->name())) { mLayerCount++; - sl->append(mLayerMgr->getLayer(i)->name()); + mLayerNames->append(mLayerMgr->getLayer(i)->name()); } else { @@ -129,7 +131,7 @@ void Xsheet::initXsheet() } } } - for (int i = 1; i <= sl->size(); i++) + for (int i = 1; i <= mLayerNames->size(); i++) { for (int j = 1; j < mTimeLineLength; j++) { @@ -149,16 +151,18 @@ void Xsheet::initXsheet() // set headers of Xsheet mTableWidget->setRowHeight(0,16); mTableItem = new QTableWidgetItem("#"); + mTableItem->setBackgroundColor(QColor(250, 240, 160)); mTableWidget->setItem(0, 0, mTableItem); - for (int i = 0; i < sl->size(); i++) + for (int i = 0; i < mLayerNames->size(); i++) { - int type = getLayerType(mLayerMgr->findLayerByName(sl->at(i))); - mTableItem = new QTableWidgetItem(sl->at(i)); + int type = getLayerType(mLayerMgr->findLayerByName(mLayerNames->at(i))); + mTableItem = new QTableWidgetItem(mLayerNames->at(i)); mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(0, i + 1, mTableItem); } mTableItem = new QTableWidgetItem("DIAL"); - mTableWidget->setItem(0, sl->size() + 1, mTableItem); + mTableItem->setBackgroundColor(QColor(244, 167, 167, 150)); + mTableWidget->setItem(0, mLayerNames->size() + 1, mTableItem); } void Xsheet::writePapa() @@ -169,12 +173,14 @@ void Xsheet::writePapa() // clear column for (int i = 0; i < mTimeLineLength; i++) { - mTableItem = new QTableWidgetItem(" "); + mTableItem = new QTableWidgetItem(""); + mTableItem->setBackgroundColor(Qt::white); mTableWidget->setItem(i, dial - 1, mTableItem); } // write header mTableItem = new QTableWidgetItem(mPapaLines->at(5)); + mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); mTableWidget->setItem(0, dial - 1, mTableItem); QString tmp; QStringList lipsync; // papagayo mouths @@ -186,7 +192,9 @@ void Xsheet::writePapa() { tmp = lipsync.at(0); int row = tmp.toInt(); - mTableWidget->setItem(row, dial - 1, new QTableWidgetItem(lipsync.at(1))); + mTableItem = new QTableWidgetItem(lipsync.at(1)); + mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); + mTableWidget->setItem(row, dial - 1, mTableItem); } } tmp = mPapaLines->at(10); diff --git a/app/src/xsheet.h b/app/src/xsheet.h index d616b90c26..e151d945a5 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -31,7 +31,7 @@ private slots: void writePapa(); int getLayerType(Layer* layer); QColor getLayerColor(int color); - QStringList* sl; + QStringList* mLayerNames; QStringList* mPapaLines; // for filling DIAL column Ui::Xsheet *ui; LayerManager* mLayerMgr = nullptr; From 8772ef2f4b575771b3d1fed951dcdbc587454c25 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Fri, 26 Oct 2018 20:00:19 +0200 Subject: [PATCH 09/31] Erase xsheet possible. --- app/data/app.qrc | 1 + app/data/icons/papagayoNo.png | Bin 0 -> 1769 bytes app/src/xsheet.cpp | 26 ++++++++++++++++++-------- app/src/xsheet.h | 3 ++- app/ui/xsheet.ui | 29 +++++++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 app/data/icons/papagayoNo.png diff --git a/app/data/app.qrc b/app/data/app.qrc index 55daf308fd..8e5c2e1098 100644 --- a/app/data/app.qrc +++ b/app/data/app.qrc @@ -57,6 +57,7 @@ icons/new/arrow-selectmove.png icons/new/arrow-vertical.png icons/papagayo.png + icons/papagayoNo.png icons/onion-blue.png diff --git a/app/data/icons/papagayoNo.png b/app/data/icons/papagayoNo.png new file mode 100644 index 0000000000000000000000000000000000000000..e62a13a18b681787e778a1c4fd17ba2536812848 GIT binary patch literal 1769 zcmVX1^@s6P!BAT00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;tCoN2r*}EmN5VT26jnA zK~zY`t(I$S6xS8UfA`MJzU|%h8r#c)G4B{bLU9@z9)T~UsHK%#wRx%e01~Mb2b!oV zs!~;=X+N|om6A3kO52bsRp~QrLkdX>5wDaGVj4o$U<@YU2VVT%wRd;CJ2ST*)==-- zIJD}KMl<)$o%=iYKj++g1XG&;)P%MkuJv!5yS8SVr`)Jcc4dxrpBcDR9`$}P*_}Bs z+H3Bx^UetWgNX^x1`rE{L{%grB4cB!zpG1K2NIEm!Jn*ua>)~+T0hC|4B2FkVAMyT z+C#e6Ce;lMgrZ?aF-b@+AtGe#Ldu^ zQGzia?MD;&mVKQs4qY968W;hHE(@JXn%JD_06vZS+baQN^MuJ*Na;OKtJ!#fh{H<9^)Vz{ly4(G%xo8NO!gbUNGD1`&a+FB7VO1LS^aRjqxWm&kejxAfZ@`X)} zbf&IQUT>hgwW6__F8Jg2)0C`wwU8n`)!b6k=);-b0n38rcez3BX5G43ynEsooNRxV ztdX2FcF)5nirT@5d;w@xj>=6nw-%cv)<5u|R&RYm_FA^!&Sm|ywfzCV_W&!GUnd^d z$hylAQtv!=qq2+H~DJK#q$*p-QPDQ ze4>Tt1azs(^?etTaXas{j(5j^5dmo1x9Q(nwp4y^`!{mG%$ghmhJgCz%jNfN(=fDS)SS{Cjq{;XC=lI;B@~O{z^BR zOQIY_Z)*zOqcL(lOZ=}LAEtUTf0ml)*M-R5{JnM|M)T*+IZg2v=hr)S=-hK}9t8+* zG5q;wH4bO)pvBw}Q z?myRmDfPN#+6RFT041i08<+BU#wK<=zE$wCRY|B}Htw(oF~!%KOVW1m8g|a1;;aF*9EsM*JLSpB3ziJ z5T+?&pNhnEk3?#sAiF52Fi8mohDW1nad}8HqzPP`4qoIy>8fuWor^cj+%$J})oRV9 zk%$kI%i1VMG2EHP$vcJ9P=K9xZoaSo+$?WZeekolQxj^_!GVx}hUekItD}_{4_#}$ z^3UEQ!(HiWsmZdIeH~{mAHRM%)sv0RSX3^Pof(cj*V3FB7&Bac-5;3Yy?dZNW#zN> z@!P73ON&JSmrs|PA){kytIn~UF`(C7W(1@r9yL?>QRS%pF24~8)%v!MB(nMJQ0^Zt zzy7h|(Hem2%y6zl+3N2=7yoDT0+kbj*bgiK%5L}$1jhU2bQAp>PBF-|u4OL500000 LNkvXXu0mjft8Qx9 literal 0 HcmV?d00001 diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 7eead6fac5..a346de385e 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -35,6 +35,7 @@ Xsheet::Xsheet(QWidget *parent) : mTableWidget = ui->tableXsheet; connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); connect(ui->btnPapa, SIGNAL(clicked(bool)), this, SLOT(loadPapa())); + connect(ui->btnNoPapa, SIGNAL(clicked(bool)), this, SLOT(erasePapa())); } Xsheet::~Xsheet() @@ -108,6 +109,20 @@ void Xsheet::loadPapa() writePapa(); } +void Xsheet::erasePapa() +{ + int dial = mTableWidget->columnCount(); + + // clear column + for (int i = 0; i < mTimeLineLength; i++) + { + mTableItem = new QTableWidgetItem(""); + mTableItem->setBackgroundColor(Qt::white); + mTableWidget->setItem(i, dial - 1, mTableItem); + } + mPapaLines->clear(); +} + void Xsheet::initXsheet() { mLayerCount = 0; @@ -183,16 +198,16 @@ void Xsheet::writePapa() mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); mTableWidget->setItem(0, dial - 1, mTableItem); QString tmp; - QStringList lipsync; // papagayo mouths + QStringList lipsync; // papagayo info on mouths for (int i = 12; i < mPapaLines->size(); i++) { tmp = mPapaLines->at(i); lipsync = tmp.split(" "); if (lipsync.size() == 2) { - tmp = lipsync.at(0); + tmp = lipsync.at(0); // frame number int row = tmp.toInt(); - mTableItem = new QTableWidgetItem(lipsync.at(1)); + mTableItem = new QTableWidgetItem(lipsync.at(1)); // audio to animate mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); mTableWidget->setItem(row, dial - 1, mTableItem); } @@ -202,11 +217,6 @@ void Xsheet::writePapa() mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); } -int Xsheet::getLayerType(Layer *layer) -{ - return layer->type(); -} - QColor Xsheet::getLayerColor(int color) { if (color == 1) { return QColor(151, 176, 244); } diff --git a/app/src/xsheet.h b/app/src/xsheet.h index e151d945a5..41eae6d206 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -25,11 +25,12 @@ private slots: void selectLayerFrame(int row, int column); void fillXsheet(); void loadPapa(); + void erasePapa(); private: void initXsheet(); void writePapa(); - int getLayerType(Layer* layer); + int getLayerType(Layer* layer) { return layer->type(); } QColor getLayerColor(int color); QStringList* mLayerNames; QStringList* mPapaLines; // for filling DIAL column diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 2b6ec3641d..0c1ceb5a8b 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -51,8 +51,37 @@ + + + + + 40 + 16777215 + + + + + + + + :/icons/papagayoNo.png:/icons/papagayoNo.png + + + + 16 + 16 + + + + + + + 40 + 16777215 + + From cd257f73341607f0e9effceac4a34196a486e290 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Fri, 26 Oct 2018 22:38:00 +0200 Subject: [PATCH 10/31] double click in xsheet gives a new keyframe in timeline --- app/src/mainwindow2.cpp | 1 + app/src/xsheet.cpp | 41 ++++++++++++++++++++++++++++++++--------- app/src/xsheet.h | 4 ++++ 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index 05b16792d3..e3a6654c14 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -229,6 +229,7 @@ void MainWindow2::createMenus() { // ---------- File Menu ------------- connect(ui->actionNew, &QAction::triggered, this, &MainWindow2::newDocument); +// connect(ui->actionNew, &QAction::triggered, mXsheet, &Xsheet::updateXsheet); connect(ui->actionOpen, &QAction::triggered, this, &MainWindow2::openDocument); connect(ui->actionSave_as, &QAction::triggered, this, &MainWindow2::saveAsNewDocument); connect(ui->actionSave, &QAction::triggered, this, &MainWindow2::saveDocument); diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index a346de385e..3abbcfc143 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -34,6 +34,7 @@ Xsheet::Xsheet(QWidget *parent) : mPapaLines = new QStringList; mTableWidget = ui->tableXsheet; connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); + connect(mTableWidget, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(addLayerFrame(int,int))); connect(ui->btnPapa, SIGNAL(clicked(bool)), this, SLOT(loadPapa())); connect(ui->btnNoPapa, SIGNAL(clicked(bool)), this, SLOT(erasePapa())); } @@ -53,17 +54,26 @@ void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) fillXsheet(); } +void Xsheet::updateXsheet() +{ + qDebug() << "in updateXsheet..."; + initXsheet(); + fillXsheet(); + writePapa(); +} + void Xsheet::selectLayerFrame(int row, int column) { - if (column > 0 && column <= mLayerCount) - { - mTableItem = new QTableWidgetItem(); - mTableItem = mTableWidget->item(0, column); - Layer* layer = mLayerMgr->findLayerByName(mTableItem->text()); - if (layer == nullptr) { return; } - mLayerMgr->setCurrentLayer(layer); - mEditor->scrubTo(row); - } + selectItem(row, column); + initXsheet(); + fillXsheet(); + writePapa(); +} + +void Xsheet::addLayerFrame(int row, int column) +{ + selectItem(row, column); + mLayerMgr->currentLayer()->addNewKeyFrameAt(row); initXsheet(); fillXsheet(); writePapa(); @@ -217,6 +227,19 @@ void Xsheet::writePapa() mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); } +void Xsheet::selectItem(int row, int column) +{ + if (column > 0 && column <= mLayerCount) + { + mTableItem = new QTableWidgetItem(); + mTableItem = mTableWidget->item(0, column); + Layer* layer = mLayerMgr->findLayerByName(mTableItem->text()); + if (layer == nullptr) { return; } + mLayerMgr->setCurrentLayer(layer); + mEditor->scrubTo(row); + } +} + QColor Xsheet::getLayerColor(int color) { if (color == 1) { return QColor(151, 176, 244); } diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 41eae6d206..d1231b6724 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -20,9 +20,12 @@ class Xsheet : public QDialog explicit Xsheet(QWidget *parent = nullptr); ~Xsheet(); void updateUi(LayerManager &lMgr, Editor* &editor); +public slots: + void updateXsheet(); private slots: void selectLayerFrame(int row, int column); + void addLayerFrame(int row, int column); void fillXsheet(); void loadPapa(); void erasePapa(); @@ -31,6 +34,7 @@ private slots: void initXsheet(); void writePapa(); int getLayerType(Layer* layer) { return layer->type(); } + void selectItem(int row, int column); QColor getLayerColor(int color); QStringList* mLayerNames; QStringList* mPapaLines; // for filling DIAL column From 7a6f9e4033d1302810a5286cb79b0717cda5de01 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sun, 28 Oct 2018 07:17:29 +0100 Subject: [PATCH 11/31] WIP FileDialog loads twice. Ignore commit --- app/src/actioncommands.cpp | 1 - app/src/mainwindow2.cpp | 34 +++--- app/src/mainwindow2.h | 2 +- app/src/xsheet.cpp | 138 +++++++++++++++-------- app/src/xsheet.h | 16 ++- app/ui/mainwindow2.ui | 4 +- app/ui/xsheet.ui | 199 ++++++++++++++------------------- core_lib/data/resources/kb.ini | 1 + core_lib/src/util/pencildef.h | 1 + 9 files changed, 205 insertions(+), 191 deletions(-) diff --git a/app/src/actioncommands.cpp b/app/src/actioncommands.cpp index 732bb9141d..718551520c 100644 --- a/app/src/actioncommands.cpp +++ b/app/src/actioncommands.cpp @@ -48,7 +48,6 @@ GNU General Public License for more details. #include "aboutdialog.h" #include "doubleprogressdialog.h" - ActionCommands::ActionCommands(QWidget* parent) : QObject(parent) { mParent = parent; diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index e3a6654c14..6f2659a012 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -162,6 +162,9 @@ void MainWindow2::createDockWidgets() mToolBox = new ToolBoxWidget(this); mToolBox->setObjectName("ToolBox"); + mXsheet = new Xsheet(this); + mXsheet->setObjectName("Xsheet"); + /* mTimeline2 = new Timeline2; mTimeline2->setObjectName( "Timeline2" ); @@ -175,7 +178,8 @@ void MainWindow2::createDockWidgets() << mColorPalette << mDisplayOptionWidget << mToolOptions - << mToolBox; + << mToolBox + << mXsheet; // mColorInspector->setFloating(true); mStartIcon = QIcon(":icons/controls/play.png"); @@ -196,6 +200,7 @@ void MainWindow2::createDockWidgets() addDockWidget(Qt::RightDockWidgetArea, mColorBox); addDockWidget(Qt::RightDockWidgetArea, mColorInspector); addDockWidget(Qt::RightDockWidgetArea, mColorPalette); + addDockWidget(Qt::RightDockWidgetArea, mXsheet); addDockWidget(Qt::LeftDockWidgetArea, mToolBox); addDockWidget(Qt::LeftDockWidgetArea, mToolOptions); addDockWidget(Qt::LeftDockWidgetArea, mDisplayOptionWidget); @@ -229,7 +234,6 @@ void MainWindow2::createMenus() { // ---------- File Menu ------------- connect(ui->actionNew, &QAction::triggered, this, &MainWindow2::newDocument); -// connect(ui->actionNew, &QAction::triggered, mXsheet, &Xsheet::updateXsheet); connect(ui->actionOpen, &QAction::triggered, this, &MainWindow2::openDocument); connect(ui->actionSave_as, &QAction::triggered, this, &MainWindow2::saveAsNewDocument); connect(ui->actionSave, &QAction::triggered, this, &MainWindow2::saveDocument); @@ -315,7 +319,6 @@ void MainWindow2::createMenus() connect(ui->actionDuplicate_Frame, &QAction::triggered, mCommands, &ActionCommands::duplicateKey); connect(ui->actionMove_Frame_Forward, &QAction::triggered, mCommands, &ActionCommands::moveFrameForward); connect(ui->actionMove_Frame_Backward, &QAction::triggered, mCommands, &ActionCommands::moveFrameBackward); - connect(ui->actionXsheet_toggle, &QAction::triggered, this, &MainWindow2::xsheetToggle); /// --- Tool Menu --- connect(ui->actionMove, &QAction::triggered, mToolBox, &ToolBoxWidget::moveOn); @@ -331,6 +334,10 @@ void MainWindow2::createMenus() connect(ui->actionEraser, &QAction::triggered, mToolBox, &ToolBoxWidget::eraserOn); connect(ui->actionResetToolsDefault, &QAction::triggered, mEditor->tools(), &ToolManager::resetAllTools); + /// --- Xsheet update --- + connect(mEditor, &Editor::updateTimeLine, this, &MainWindow2::updateXsheet); +// connect(ui->actionDelete_Current_Layer, &QAction::changed, this, &MainWindow2::updateXsheet); + /// --- Window Menu --- QMenu* winMenu = ui->menuWindows; winMenu->clear(); @@ -342,7 +349,8 @@ void MainWindow2::createMenus() mColorPalette->toggleViewAction(), mTimeLine->toggleViewAction(), mDisplayOptionWidget->toggleViewAction(), - mColorInspector->toggleViewAction() + mColorInspector->toggleViewAction(), + mXsheet->toggleViewAction() }; for (QAction* action : actions) @@ -920,6 +928,7 @@ void MainWindow2::lockWidgets(bool shouldLock) mToolOptions->setFeatures(feat); mToolBox->setFeatures(feat); mTimeLine->setFeatures(feat); + mXsheet->setFeatures(feat); } void MainWindow2::preferences() @@ -956,21 +965,9 @@ void MainWindow2::resetAndDockAllSubWidgets() } } -void MainWindow2::xsheetToggle() +void MainWindow2::updateXsheet() { - if (mXsheet == nullptr) - { - mXsheet = new Xsheet(); - mXsheet->setWindowFlags(Qt::WindowStaysOnTopHint); - LayerManager* lMgr = mEditor->layers(); - mXsheet->updateUi(*lMgr, mEditor); - mXsheet->show(); - } - else - { - mXsheet->close(); - mXsheet = nullptr; - } + mXsheet->updateUi(mEditor); } void MainWindow2::readSettings() @@ -1103,6 +1100,7 @@ void MainWindow2::setupKeyboardShortcuts() mTimeLine->toggleViewAction()->setShortcut(cmdKeySeq(CMD_TOGGLE_TIMELINE)); mDisplayOptionWidget->toggleViewAction()->setShortcut(cmdKeySeq(CMD_TOGGLE_DISPLAY_OPTIONS)); mColorInspector->toggleViewAction()->setShortcut(cmdKeySeq(CMD_TOGGLE_COLOR_INSPECTOR)); + mXsheet->toggleViewAction()->setShortcut(cmdKeySeq(CMD_TOGGLE_XSHEET)); ui->actionHelp->setShortcut(cmdKeySeq(CMD_HELP)); ui->actionExit->setShortcut(cmdKeySeq(CMD_EXIT)); diff --git a/app/src/mainwindow2.h b/app/src/mainwindow2.h index a1dfe1fa76..c5485ef9c5 100644 --- a/app/src/mainwindow2.h +++ b/app/src/mainwindow2.h @@ -100,7 +100,7 @@ class MainWindow2 : public QMainWindow private slots: void resetAndDockAllSubWidgets(); - void xsheetToggle(); + void updateXsheet(); private: bool openObject(QString strFilename, bool checkForChanges); diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 3abbcfc143..e4d19d2c4a 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -25,10 +25,20 @@ GNU General Public License for more details. #include Xsheet::Xsheet(QWidget *parent) : - QDialog(parent), + BaseDockWidget(parent), ui(new Ui::Xsheet) { ui->setupUi(this); + initUI(); +} + +Xsheet::~Xsheet() +{ + delete ui; +} + +void Xsheet::initUI() +{ mLayerNames = new QStringList; mLayerCount = 0; mPapaLines = new QStringList; @@ -39,24 +49,38 @@ Xsheet::Xsheet(QWidget *parent) : connect(ui->btnNoPapa, SIGNAL(clicked(bool)), this, SLOT(erasePapa())); } -Xsheet::~Xsheet() +void Xsheet::updateUI() { - delete ui; + } -void Xsheet::updateUi(LayerManager &lMgr, Editor *&editor) +void Xsheet::updateUi(Editor* editor) { - mLayerMgr = &lMgr; + qDebug() << "in UpdateUi. papaSize: " << mPapaLines->size(); mEditor = editor; QSettings settings(PENCIL2D, PENCIL2D); mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); initXsheet(); fillXsheet(); + showScrub(mEditor->currentFrame()); + writePapa(); +} + +void Xsheet::upNew() +{ + qDebug() << "Up new"; +} + +void Xsheet::showScrub(int frame) +{ +// qDebug() << "in showScrub. Frame: " << frame; + mTableItem = new QTableWidgetItem(QString::number(frame)); + mTableItem->setBackgroundColor(QColor(250, 150, 150)); + mTableWidget->setItem(frame, 0, mTableItem); } void Xsheet::updateXsheet() { - qDebug() << "in updateXsheet..."; initXsheet(); fillXsheet(); writePapa(); @@ -64,24 +88,26 @@ void Xsheet::updateXsheet() void Xsheet::selectLayerFrame(int row, int column) { - selectItem(row, column); initXsheet(); fillXsheet(); + selectItem(row, column); + showScrub(row); writePapa(); } void Xsheet::addLayerFrame(int row, int column) { selectItem(row, column); - mLayerMgr->currentLayer()->addNewKeyFrameAt(row); + if (column > 0 && column <= mLayerCount) + mEditor->layers()->currentLayer()->addNewKeyFrameAt(row); initXsheet(); fillXsheet(); + showScrub(row); writePapa(); } void Xsheet::fillXsheet() { - // fill Xsheet for (int i = 1; i <= mTimeLineLength; i++) { mTableWidget->setRowHeight(i,16); @@ -90,9 +116,9 @@ void Xsheet::fillXsheet() mTableWidget->setItem(i, 0, mTableItem); for (int j = 1; j <= mLayerCount; j++) { - if (mLayerMgr->findLayerByName(mTableWidget->item(0,j)->text())->keyExists(i)) + if (mEditor->layers()->findLayerByName(mTableWidget->item(0,j)->text())->keyExists(i)) { - int type = getLayerType(mLayerMgr->findLayerByName(mTableWidget->item(0,j)->text())); + int type = getLayerType(mEditor->layers()->findLayerByName(mTableWidget->item(0,j)->text())); mTableItem = new QTableWidgetItem(QString::number(i)); mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(i, j, mTableItem); @@ -103,6 +129,7 @@ void Xsheet::fillXsheet() void Xsheet::loadPapa() { + qDebug() << "Before load: mPapaLines " << mPapaLines->size(); mPapaLines->clear(); QString fileName = QFileDialog::getOpenFileName(this, tr("Open *.pgo file"), "", tr("Pgo Files (*.pgo)")); @@ -116,6 +143,7 @@ void Xsheet::loadPapa() mPapaLines->append(tmp); } file.close(); + qDebug() << "After load: mPapaLines " << mPapaLines->size(); writePapa(); } @@ -130,6 +158,9 @@ void Xsheet::erasePapa() mTableItem->setBackgroundColor(Qt::white); mTableWidget->setItem(i, dial - 1, mTableItem); } + mTableItem = new QTableWidgetItem("DIAL"); + mTableItem->setBackgroundColor(QColor(244, 167, 167, 150)); + mTableWidget->setItem(0, mLayerNames->size() + 1, mTableItem); mPapaLines->clear(); } @@ -137,20 +168,20 @@ void Xsheet::initXsheet() { mLayerCount = 0; mLayerNames->clear(); - for (int i = 0; i < mLayerMgr->count(); i++) + for (int i = 0; i < mEditor->layers()->count(); i++) { // count Bitmap and Vector layers (duplicate names NOT supported) - if (mLayerMgr->getLayer(i)->type() == 1 || mLayerMgr->getLayer(i)->type() == 2) + if (mEditor->layers()->getLayer(i)->type() == 1 || mEditor->layers()->getLayer(i)->type() == 2) { - if (!mLayerNames->contains(mLayerMgr->getLayer(i)->name())) + if (!mLayerNames->contains(mEditor->layers()->getLayer(i)->name())) { mLayerCount++; - mLayerNames->append(mLayerMgr->getLayer(i)->name()); + mLayerNames->append(mEditor->layers()->getLayer(i)->name()); } else { int ret = QMessageBox::critical(new QWidget, tr("Layer name duplicate!"), - tr("Identical layer names '%1' not supported in Xsheet").arg(mLayerMgr->getLayer(i)->name()), + tr("Identical layer names '%1' not supported in Xsheet").arg(mEditor->layers()->getLayer(i)->name()), QMessageBox::Ok); Q_UNUSED(ret); } @@ -165,13 +196,13 @@ void Xsheet::initXsheet() mTableWidget->setItem(j, i, mTableItem); } } - this->setMinimumWidth(mLayerCount * 50 + 130); + this->setMinimumWidth(mLayerCount * 40 + 100); mTableWidget->setRowCount(mTimeLineLength + 1); mTableWidget->setColumnCount(mLayerCount + 2); // set column width for layers for (int i = 0; i < mTableWidget->columnCount(); i++) { - mTableWidget->setColumnWidth(i, 50); + mTableWidget->setColumnWidth(i, 40); } // set headers of Xsheet mTableWidget->setRowHeight(0,16); @@ -180,11 +211,12 @@ void Xsheet::initXsheet() mTableWidget->setItem(0, 0, mTableItem); for (int i = 0; i < mLayerNames->size(); i++) { - int type = getLayerType(mLayerMgr->findLayerByName(mLayerNames->at(i))); + int type = getLayerType(mEditor->layers()->findLayerByName(mLayerNames->at(i))); mTableItem = new QTableWidgetItem(mLayerNames->at(i)); mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(0, i + 1, mTableItem); } +// if (!mPapaLines->isEmpty()) { return; } mTableItem = new QTableWidgetItem("DIAL"); mTableItem->setBackgroundColor(QColor(244, 167, 167, 150)); mTableWidget->setItem(0, mLayerNames->size() + 1, mTableItem); @@ -192,39 +224,49 @@ void Xsheet::initXsheet() void Xsheet::writePapa() { - if (mPapaLines->isEmpty()) { return; } - int dial = mTableWidget->columnCount(); + qDebug() << "Before write: mPapaLines " << mPapaLines->size(); - // clear column - for (int i = 0; i < mTimeLineLength; i++) + if (mPapaLines->size() > 11) { - mTableItem = new QTableWidgetItem(""); - mTableItem->setBackgroundColor(Qt::white); - mTableWidget->setItem(i, dial - 1, mTableItem); - } + int dial = mTableWidget->columnCount(); - // write header - mTableItem = new QTableWidgetItem(mPapaLines->at(5)); - mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); - mTableWidget->setItem(0, dial - 1, mTableItem); - QString tmp; - QStringList lipsync; // papagayo info on mouths - for (int i = 12; i < mPapaLines->size(); i++) - { - tmp = mPapaLines->at(i); - lipsync = tmp.split(" "); - if (lipsync.size() == 2) + // clear column + for (int i = 0; i < mTimeLineLength; i++) { - tmp = lipsync.at(0); // frame number - int row = tmp.toInt(); - mTableItem = new QTableWidgetItem(lipsync.at(1)); // audio to animate - mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); - mTableWidget->setItem(row, dial - 1, mTableItem); + mTableItem = new QTableWidgetItem(""); + mTableItem->setBackgroundColor(Qt::white); + mTableWidget->setItem(i, dial - 1, mTableItem); + } + + // write header + mTableItem = new QTableWidgetItem(mPapaLines->at(5)); + mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); + mTableWidget->setItem(0, dial - 1, mTableItem); + QString tmp; + QStringList lipsync; // papagayo info on mouths + for (int i = 12; i < mPapaLines->size(); i++) + { + tmp = mPapaLines->at(i); + lipsync = tmp.split(" "); + if (lipsync.size() == 2) + { + tmp = lipsync.at(0); // frame number + int row = tmp.toInt(); + mTableItem = new QTableWidgetItem(lipsync.at(1)); // audio to animate + mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); + mTableWidget->setItem(row, dial - 1, mTableItem); + } } + tmp = mPapaLines->at(10); + int row = tmp.toInt(); + mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); } - tmp = mPapaLines->at(10); - int row = tmp.toInt(); - mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); + qDebug() << "After write: mPapaLines " << mPapaLines->size(); +} + +int Xsheet::getLayerType(Layer *layer) +{ + return layer->type(); } void Xsheet::selectItem(int row, int column) @@ -233,9 +275,9 @@ void Xsheet::selectItem(int row, int column) { mTableItem = new QTableWidgetItem(); mTableItem = mTableWidget->item(0, column); - Layer* layer = mLayerMgr->findLayerByName(mTableItem->text()); + Layer* layer = mEditor->layers()->findLayerByName(mTableItem->text()); if (layer == nullptr) { return; } - mLayerMgr->setCurrentLayer(layer); + mEditor->layers()->setCurrentLayer(layer); mEditor->scrubTo(row); } } diff --git a/app/src/xsheet.h b/app/src/xsheet.h index d1231b6724..a35a78269b 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -1,6 +1,8 @@ #ifndef XSHEET_H #define XSHEET_H +#include "basedockwidget.h" + #include #include "layermanager.h" #include "editor.h" @@ -12,16 +14,21 @@ namespace Ui { class Xsheet; } -class Xsheet : public QDialog +class Xsheet : public BaseDockWidget { Q_OBJECT + void initUI() override; + void updateUI() override; + public: - explicit Xsheet(QWidget *parent = nullptr); + explicit Xsheet(QWidget *parent = 0); ~Xsheet(); - void updateUi(LayerManager &lMgr, Editor* &editor); public slots: void updateXsheet(); + void updateUi(Editor *editor); + void upNew(); + void showScrub(int frame); private slots: void selectLayerFrame(int row, int column); @@ -33,13 +40,12 @@ private slots: private: void initXsheet(); void writePapa(); - int getLayerType(Layer* layer) { return layer->type(); } + int getLayerType(Layer* layer); void selectItem(int row, int column); QColor getLayerColor(int color); QStringList* mLayerNames; QStringList* mPapaLines; // for filling DIAL column Ui::Xsheet *ui; - LayerManager* mLayerMgr = nullptr; Editor* mEditor = nullptr; int mLayerCount; int mTimeLineLength; diff --git a/app/ui/mainwindow2.ui b/app/ui/mainwindow2.ui index e9e4f8839a..8ddb675239 100644 --- a/app/ui/mainwindow2.ui +++ b/app/ui/mainwindow2.ui @@ -49,7 +49,7 @@ 0 0 800 - 21 + 20 @@ -166,8 +166,6 @@ - - diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 0c1ceb5a8b..6653e26caf 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -1,132 +1,101 @@ Xsheet - + 0 0 - 343 - 433 + 400 + 300 - - - 0 - 0 - + + + :/icons/icon.png:/icons/icon.png - - - 130 - 0 - + + false Xsheet - - - - - - - Xsheet - - - Qt::AlignCenter - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 40 - 16777215 - - - - - - - - :/icons/papagayoNo.png:/icons/papagayoNo.png - - - - 16 - 16 - - - - - - - - - 40 - 16777215 - - - - - - - - :/icons/papagayo.png:/icons/papagayo.png - - - - - - - - - true - - - - 10 - - - - QAbstractItemView::NoEditTriggers - - - false - - - QAbstractItemView::SingleSelection - - - false - - - false - - - 200 - - - false - - - - + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 25 + 16777215 + + + + + + + + :/icons/papagayoNo.png:/icons/papagayoNo.png + + + + + + + + 25 + 16777215 + + + + + + + + :/icons/papagayo.png:/icons/papagayo.png + + + + + + + + + + 8 + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::SingleSelection + + + false + + + false + + + + + diff --git a/core_lib/data/resources/kb.ini b/core_lib/data/resources/kb.ini index 4e1be0b291..82b2dc1135 100644 --- a/core_lib/data/resources/kb.ini +++ b/core_lib/data/resources/kb.ini @@ -67,3 +67,4 @@ CmdToggleColorLibrary=Ctrl+4 CmdToggleDisplayOptions=Ctrl+5 CmdToggleTimeline=Ctrl+6 CmdToggleColorInspector=Ctrl+7 +CmdToggleXsheet=Ctrl+8 diff --git a/core_lib/src/util/pencildef.h b/core_lib/src/util/pencildef.h index 763e7235dc..0f8179cd89 100644 --- a/core_lib/src/util/pencildef.h +++ b/core_lib/src/util/pencildef.h @@ -152,6 +152,7 @@ enum StabilizationLevel #define CMD_TOGGLE_COLOR_LIBRARY "CmdToggleColorLibrary" #define CMD_TOGGLE_DISPLAY_OPTIONS "CmdToggleDisplayOptions" #define CMD_TOGGLE_TIMELINE "CmdToggleTimeline" +#define CMD_TOGGLE_XSHEET "CmdToggleXsheet" #define CMD_INCREASE_SIZE "CmdIncreaseSize" #define CMD_DECREASE_SIZE "CmdDecreaseSize" #define CMD_EXIT "CmdExit" From 676101eed9f9f5efa23fce787c44b0877437be76 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sun, 28 Oct 2018 14:38:28 +0100 Subject: [PATCH 12/31] Almost 100% interactive. Scrub in Xsheet. Show/hide layer --- app/src/mainwindow2.cpp | 4 +++- app/src/xsheet.cpp | 39 +++++++++++++++++++-------------------- app/src/xsheet.h | 2 +- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index 6f2659a012..aa166f291b 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -336,7 +336,9 @@ void MainWindow2::createMenus() /// --- Xsheet update --- connect(mEditor, &Editor::updateTimeLine, this, &MainWindow2::updateXsheet); -// connect(ui->actionDelete_Current_Layer, &QAction::changed, this, &MainWindow2::updateXsheet); + connect(mEditor->layers(), &LayerManager::layerCountChanged, mXsheet, &Xsheet::updateXsheet); + connect(mEditor, &Editor::currentFrameChanged, mXsheet, &Xsheet::updateScrub); + /// --- Window Menu --- QMenu* winMenu = ui->menuWindows; diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index e4d19d2c4a..e72b634223 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -29,7 +29,6 @@ Xsheet::Xsheet(QWidget *parent) : ui(new Ui::Xsheet) { ui->setupUi(this); - initUI(); } Xsheet::~Xsheet() @@ -43,20 +42,18 @@ void Xsheet::initUI() mLayerCount = 0; mPapaLines = new QStringList; mTableWidget = ui->tableXsheet; - connect(mTableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(selectLayerFrame(int, int))); - connect(mTableWidget, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(addLayerFrame(int,int))); - connect(ui->btnPapa, SIGNAL(clicked(bool)), this, SLOT(loadPapa())); - connect(ui->btnNoPapa, SIGNAL(clicked(bool)), this, SLOT(erasePapa())); + connect(mTableWidget, &QTableWidget::cellClicked, this, &Xsheet::selectLayerFrame); + connect(mTableWidget, &QTableWidget::cellDoubleClicked, this, &Xsheet::addLayerFrame); + connect(ui->btnPapa, &QPushButton::clicked, this, &Xsheet::loadPapa ); + connect(ui->btnNoPapa, &QPushButton::clicked, this, &Xsheet::erasePapa); } void Xsheet::updateUI() { - } void Xsheet::updateUi(Editor* editor) { - qDebug() << "in UpdateUi. papaSize: " << mPapaLines->size(); mEditor = editor; QSettings settings(PENCIL2D, PENCIL2D); mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); @@ -66,17 +63,18 @@ void Xsheet::updateUi(Editor* editor) writePapa(); } -void Xsheet::upNew() -{ - qDebug() << "Up new"; -} - void Xsheet::showScrub(int frame) { -// qDebug() << "in showScrub. Frame: " << frame; mTableItem = new QTableWidgetItem(QString::number(frame)); mTableItem->setBackgroundColor(QColor(250, 150, 150)); mTableWidget->setItem(frame, 0, mTableItem); + mTableWidget->scrollToItem(mTableItem); +} + +void Xsheet::updateScrub(int frame) +{ + fillXsheet(); + showScrub(frame); } void Xsheet::updateXsheet() @@ -84,6 +82,7 @@ void Xsheet::updateXsheet() initXsheet(); fillXsheet(); writePapa(); + showScrub(mEditor->currentFrame()); } void Xsheet::selectLayerFrame(int row, int column) @@ -129,13 +128,12 @@ void Xsheet::fillXsheet() void Xsheet::loadPapa() { - qDebug() << "Before load: mPapaLines " << mPapaLines->size(); - mPapaLines->clear(); QString fileName = QFileDialog::getOpenFileName(this, tr("Open *.pgo file"), "", tr("Pgo Files (*.pgo)")); QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; + mPapaLines->clear(); QTextStream in(&file); while (!in.atEnd()) { QString tmp = in.readLine(); @@ -143,7 +141,6 @@ void Xsheet::loadPapa() mPapaLines->append(tmp); } file.close(); - qDebug() << "After load: mPapaLines " << mPapaLines->size(); writePapa(); } @@ -170,7 +167,8 @@ void Xsheet::initXsheet() mLayerNames->clear(); for (int i = 0; i < mEditor->layers()->count(); i++) { // count Bitmap and Vector layers (duplicate names NOT supported) - if (mEditor->layers()->getLayer(i)->type() == 1 || mEditor->layers()->getLayer(i)->type() == 2) + bool visi = mEditor->layers()->getLayer(i)->getVisibility(); + if (visi && (mEditor->layers()->getLayer(i)->type() == 1 || mEditor->layers()->getLayer(i)->type() == 2)) { if (!mLayerNames->contains(mEditor->layers()->getLayer(i)->name())) { @@ -224,8 +222,6 @@ void Xsheet::initXsheet() void Xsheet::writePapa() { - qDebug() << "Before write: mPapaLines " << mPapaLines->size(); - if (mPapaLines->size() > 11) { int dial = mTableWidget->columnCount(); @@ -261,7 +257,10 @@ void Xsheet::writePapa() int row = tmp.toInt(); mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); } - qDebug() << "After write: mPapaLines " << mPapaLines->size(); + else + { + erasePapa(); + } } int Xsheet::getLayerType(Layer *layer) diff --git a/app/src/xsheet.h b/app/src/xsheet.h index a35a78269b..fe81db2297 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -27,8 +27,8 @@ class Xsheet : public BaseDockWidget public slots: void updateXsheet(); void updateUi(Editor *editor); - void upNew(); void showScrub(int frame); + void updateScrub(int frame); private slots: void selectLayerFrame(int row, int column); From bf9baae9e3042d3d6e9c39ddb15974c7ed0742da Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sun, 28 Oct 2018 14:57:49 +0100 Subject: [PATCH 13/31] Erasing lipsync info, when new/open file --- app/src/mainwindow2.cpp | 2 ++ app/src/xsheet.cpp | 5 +++++ app/src/xsheet.h | 5 +++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index aa166f291b..7873dbcec9 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -338,6 +338,8 @@ void MainWindow2::createMenus() connect(mEditor, &Editor::updateTimeLine, this, &MainWindow2::updateXsheet); connect(mEditor->layers(), &LayerManager::layerCountChanged, mXsheet, &Xsheet::updateXsheet); connect(mEditor, &Editor::currentFrameChanged, mXsheet, &Xsheet::updateScrub); + connect(ui->actionNew, &QAction::triggered, mXsheet, &Xsheet::newOpenScene); + connect(ui->actionOpen, &QAction::triggered, mXsheet, &Xsheet::newOpenScene); /// --- Window Menu --- diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index e72b634223..a34257a089 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -36,6 +36,11 @@ Xsheet::~Xsheet() delete ui; } +void Xsheet::newOpenScene() +{ + erasePapa(); +} + void Xsheet::initUI() { mLayerNames = new QStringList; diff --git a/app/src/xsheet.h b/app/src/xsheet.h index fe81db2297..81cd5d5674 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -22,9 +22,10 @@ class Xsheet : public BaseDockWidget void updateUI() override; public: - explicit Xsheet(QWidget *parent = 0); - ~Xsheet(); + explicit Xsheet(QWidget *parent = nullptr); + ~Xsheet() override; public slots: + void newOpenScene(); void updateXsheet(); void updateUi(Editor *editor); void showScrub(int frame); From f204a877559b65a0516800d534671ac22502328a Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sun, 28 Oct 2018 18:55:26 +0100 Subject: [PATCH 14/31] Minor rewrite og *.pgo file import --- app/src/xsheet.cpp | 68 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index a34257a089..567e3b1db4 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -23,6 +23,8 @@ GNU General Public License for more details. #include "layer.h" #include #include +#include +#include Xsheet::Xsheet(QWidget *parent) : BaseDockWidget(parent), @@ -45,6 +47,8 @@ void Xsheet::initUI() { mLayerNames = new QStringList; mLayerCount = 0; + QSettings settings(PENCIL2D, PENCIL2D); + mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); mPapaLines = new QStringList; mTableWidget = ui->tableXsheet; connect(mTableWidget, &QTableWidget::cellClicked, this, &Xsheet::selectLayerFrame); @@ -96,6 +100,7 @@ void Xsheet::selectLayerFrame(int row, int column) fillXsheet(); selectItem(row, column); showScrub(row); + mEditor->scrubTo(row); writePapa(); } @@ -104,6 +109,22 @@ void Xsheet::addLayerFrame(int row, int column) selectItem(row, column); if (column > 0 && column <= mLayerCount) mEditor->layers()->currentLayer()->addNewKeyFrameAt(row); + else if (column == mTableWidget->columnCount() - 1) + { + bool ok; + QString text = QInputDialog::getText(this, tr("Input text for Lipsync"), + tr("Maximum 4 chars accepted:"), QLineEdit::Normal, + "", &ok); + if (ok && !text.isEmpty()) + { + mTableItem = new QTableWidgetItem(text.left(4)); + mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); + mTableWidget->setItem(row, column, mTableItem); + if (mPapaLines->size() > 1) + mPapaLines->append(QString::number(row) + " " + text.left(4)); +// return; + } + } initXsheet(); fillXsheet(); showScrub(row); @@ -130,7 +151,13 @@ void Xsheet::fillXsheet() } } } - +/* + * Load *.pgo file and keep in mPapaLines as follows: + * First entry in mPapaLines: Character Name OR DIAL - SPACE - FPS - SPACE - Last frame, if any + * Next entries in mPapaLines: Frame - SPACE - phonemes (Only lines with two informations is saved) + * + * Extra phonemes can be added + */ void Xsheet::loadPapa() { QString fileName = QFileDialog::getOpenFileName(this, @@ -139,13 +166,28 @@ void Xsheet::loadPapa() if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; mPapaLines->clear(); + QStringList tmpList; QTextStream in(&file); while (!in.atEnd()) { QString tmp = in.readLine(); tmp.remove("\t"); - mPapaLines->append(tmp); + tmpList.append(tmp); } file.close(); + QString tmp = tmpList.at(5); + if (tmp.length() < 1) + tmp = "DIAL"; + mPapaLines->append(tmp + " " + tmpList.at(2) + " " + tmpList.at(10)); + QStringList lipsync; // papagayo info on mouths + for (int i = 12; i < tmpList.size(); i++) + { + tmp = tmpList.at(i); + lipsync = tmp.split(" "); + if (lipsync.size() == 2) + { + mPapaLines->append(tmp); + } + } writePapa(); } @@ -227,7 +269,7 @@ void Xsheet::initXsheet() void Xsheet::writePapa() { - if (mPapaLines->size() > 11) + if (mPapaLines->size() > 1) { int dial = mTableWidget->columnCount(); @@ -240,12 +282,21 @@ void Xsheet::writePapa() } // write header - mTableItem = new QTableWidgetItem(mPapaLines->at(5)); + QStringList lipsync; + QString tmp; + tmp = mPapaLines->at(0); + lipsync = tmp.split(" "); + mTableItem = new QTableWidgetItem(lipsync.at(0)); mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); mTableWidget->setItem(0, dial - 1, mTableItem); - QString tmp; - QStringList lipsync; // papagayo info on mouths - for (int i = 12; i < mPapaLines->size(); i++) + // TODO use fps-info at lipsync.at(1) to set fps... + if (lipsync.size() > 2) + { + tmp = lipsync.at(2); + int row = tmp.toInt(); + mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); + } + for (int i = 1; i < mPapaLines->size(); i++) { tmp = mPapaLines->at(i); lipsync = tmp.split(" "); @@ -258,9 +309,6 @@ void Xsheet::writePapa() mTableWidget->setItem(row, dial - 1, mTableItem); } } - tmp = mPapaLines->at(10); - int row = tmp.toInt(); - mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); } else { From 815e8b6bb28b98deb66aba1ad43286c1eef61c2e Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sun, 28 Oct 2018 19:57:46 +0100 Subject: [PATCH 15/31] Load and Save lipsync column in xsheet --- app/src/xsheet.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++ app/src/xsheet.h | 2 ++ app/ui/xsheet.ui | 41 +++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 567e3b1db4..9c653850e4 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -55,6 +55,8 @@ void Xsheet::initUI() connect(mTableWidget, &QTableWidget::cellDoubleClicked, this, &Xsheet::addLayerFrame); connect(ui->btnPapa, &QPushButton::clicked, this, &Xsheet::loadPapa ); connect(ui->btnNoPapa, &QPushButton::clicked, this, &Xsheet::erasePapa); + connect(ui->btnSave, &QPushButton::clicked, this, &Xsheet::saveLipsync); + connect(ui->btnLoad, &QPushButton::clicked, this, &Xsheet::loadLipsync); } void Xsheet::updateUI() @@ -208,6 +210,65 @@ void Xsheet::erasePapa() mPapaLines->clear(); } +void Xsheet::loadLipsync() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open Lipsync file"), "", + tr("Pencil2D Lipsync file (*.lip2d)")); + if (fileName.isEmpty()) { return; } + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QMessageBox::information(this, + tr("Unable to open file"), + file.errorString()); + return; + } + QTextStream in(&file); + QString first = in.readLine(); + QStringList lipsync = first.split(" "); + mTableItem = new QTableWidgetItem(lipsync.at(0)); + mTableItem->setBackgroundColor(QColor(250, 240, 160)); + mTableWidget->setItem(0, mTableWidget->columnCount() - 1, mTableItem); + // TODO use fps-info at lipsync.at(1) to set fps... + if (lipsync.size() > 2) + { + mTableItem = new QTableWidgetItem(lipsync.at(2)); + mTableItem->setBackgroundColor(QColor(250, 240, 160)); + QString tmp = lipsync.at(2); + mTableWidget->setItem(tmp.toInt(), mTableWidget->columnCount() - 1, mTableItem); + } + mPapaLines->clear(); + mPapaLines->append(first + '\n'); + while (!in.atEnd()) { + mPapaLines->append(in.readLine() + '\n'); + } + file.close(); + writePapa(); +} + + +void Xsheet::saveLipsync() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save Lipsync column"), "", + tr("Pencil2D Lipsync file (*.lip2d)")); + if (fileName.isEmpty()) { return; } + QFile file(fileName + ".lip2d"); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + { + QMessageBox::information(this, + tr("Unable to open file"), + file.errorString()); + return; + } + QTextStream out(&file); + for (int i = 0; i < mPapaLines->length(); i++) + { + out << mPapaLines->at(i) << '\n'; + } +} + void Xsheet::initXsheet() { mLayerCount = 0; diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 81cd5d5674..af672aae2d 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -37,6 +37,8 @@ private slots: void fillXsheet(); void loadPapa(); void erasePapa(); + void loadLipsync(); + void saveLipsync(); private: void initXsheet(); diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 6653e26caf..bce17f1cb5 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -37,6 +37,47 @@ + + + + + 25 + 16777215 + + + + + + + + :/icons/save.png:/icons/save.png + + + + + + + + 25 + 16777215 + + + + + + + + :/icons/open.png:/icons/open.png + + + + + + + Qt::Vertical + + + From c334012f1deeca94f13626864fbb1c45222d5791 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sun, 28 Oct 2018 23:34:05 +0100 Subject: [PATCH 16/31] Remove/Add Keyframes/Lipsync from xsheet. --- app/src/xsheet.cpp | 82 ++++++++++++++++++++++++++++++++++++++++------ app/src/xsheet.h | 1 + app/ui/xsheet.ui | 72 ++++++++++++++++++++++++++++++---------- 3 files changed, 128 insertions(+), 27 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 9c653850e4..7554da1333 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -57,6 +57,7 @@ void Xsheet::initUI() connect(ui->btnNoPapa, &QPushButton::clicked, this, &Xsheet::erasePapa); connect(ui->btnSave, &QPushButton::clicked, this, &Xsheet::saveLipsync); connect(ui->btnLoad, &QPushButton::clicked, this, &Xsheet::loadLipsync); + connect(ui->btnDeleteFrame, &QPushButton::clicked, this, &Xsheet::removeFrame); } void Xsheet::updateUI() @@ -114,17 +115,49 @@ void Xsheet::addLayerFrame(int row, int column) else if (column == mTableWidget->columnCount() - 1) { bool ok; - QString text = QInputDialog::getText(this, tr("Input text for Lipsync"), - tr("Maximum 4 chars accepted:"), QLineEdit::Normal, - "", &ok); + int len; + QString text; + if (row > 0) + { + text = QInputDialog::getText(this, tr("Input text for Lipsync"), + tr("Maximum 4 chars accepted:"), QLineEdit::Normal, + "", &ok); + len = 4; + } + else + { + text = QInputDialog::getText(this, tr("Input Character name"), + tr("Maximum 20 chars accepted:"), QLineEdit::Normal, + "", &ok); + len = 20; + } if (ok && !text.isEmpty()) { - mTableItem = new QTableWidgetItem(text.left(4)); + mTableItem = new QTableWidgetItem(text.left(len)); mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); mTableWidget->setItem(row, column, mTableItem); - if (mPapaLines->size() > 1) - mPapaLines->append(QString::number(row) + " " + text.left(4)); -// return; + if (mPapaLines->size() > 0 && row > 0) + { // if mPapaLines was NOT EMPTY and you typed a Text + mPapaLines->append(QString::number(row) + " " + text.left(len)); + } + else if (mPapaLines->size() > 0 && row == 0) + { // if mPapaLines was NOT EMPTY and you want to change Name of Character + QStringList tmp = mPapaLines->at(0).split(" "); + mPapaLines->insert(0, text.left(20) + " " + tmp.at(1) + " " + tmp.at(2)); + } + else + { // if mPapaLines was EMPTY + mPapaLines->clear(); + if (row > 0) + { + mPapaLines->append("DIAL 12 " + QString::number(mTimeLineLength)); + mPapaLines->append(QString::number(row) + " " + text); + } + else + { + mPapaLines->append(text + " 12 " + QString::number(mTimeLineLength)); + } + } } } initXsheet(); @@ -247,14 +280,13 @@ void Xsheet::loadLipsync() writePapa(); } - void Xsheet::saveLipsync() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save Lipsync column"), "", tr("Pencil2D Lipsync file (*.lip2d)")); if (fileName.isEmpty()) { return; } - QFile file(fileName + ".lip2d"); + QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::information(this, @@ -269,6 +301,36 @@ void Xsheet::saveLipsync() } } +void Xsheet::removeFrame() +{ + QString tmp = mTableWidget->item(mTableWidget->currentRow(), mTableWidget->currentColumn())->text(); + if (mTableWidget->currentColumn() > 0) + { + mTableItem = new QTableWidgetItem(""); + mTableItem->setBackgroundColor(QColor(Qt::white)); + mTableWidget->setItem(mTableWidget->currentRow(), mTableWidget->currentColumn(), mTableItem); + if (mTableWidget->currentColumn() == mTableWidget->columnCount() - 1) + { // if it is a lipsync column + for (int i = 1; i < mPapaLines->size(); i++) + if (mPapaLines->at(i).startsWith(QString::number(mTableWidget->currentRow()))) + mPapaLines->removeAt(i); + } + else + { // if it is a Bitmap or Vector layer + if (!tmp.isEmpty()) + { + QString name = mTableWidget->item(0, mTableWidget->currentColumn())->text(); + int frame = mTableWidget->currentRow(); + if (mEditor->layers()->findLayerByName(name)->keyExists(frame)) + { + mEditor->layers()->findLayerByName(name)->removeKeyFrame(frame); + emit mEditor->layers()->notifyLayerChanged(mEditor->layers()->findLayerByName(name)); + } + } + } + } +} + void Xsheet::initXsheet() { mLayerCount = 0; @@ -330,7 +392,7 @@ void Xsheet::initXsheet() void Xsheet::writePapa() { - if (mPapaLines->size() > 1) + if (!mPapaLines->isEmpty()) { int dial = mTableWidget->columnCount(); diff --git a/app/src/xsheet.h b/app/src/xsheet.h index af672aae2d..9cd5d3745c 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -39,6 +39,7 @@ private slots: void erasePapa(); void loadLipsync(); void saveLipsync(); + void removeFrame(); private: void initXsheet(); diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index bce17f1cb5..05095c5f85 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 343 + 417 @@ -24,19 +24,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -45,6 +32,9 @@ 16777215 + + Save Lipsync column + @@ -62,6 +52,9 @@ 16777215 + + Load Lipsync column + @@ -72,12 +65,51 @@ - + - Qt::Vertical + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 25 + 16777215 + + + + Erase Frame or Lipsync + + + + + + + :/icons/remove.png:/icons/remove.png + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -86,6 +118,9 @@ 16777215 + + Delete Lipsync column + @@ -103,6 +138,9 @@ 16777215 + + Load Papagayo file info + From 4c7253b1fc5de56d3c12ef2ed69befca3924af45 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Tue, 30 Oct 2018 16:13:43 +0100 Subject: [PATCH 17/31] Index error running on Win10 fixed (scrollToItem) --- app/src/mainwindow2.cpp | 2 +- app/src/xsheet.cpp | 13 ++++++++++++- app/src/xsheet.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index 7873dbcec9..83cd940ff0 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -162,7 +162,7 @@ void MainWindow2::createDockWidgets() mToolBox = new ToolBoxWidget(this); mToolBox->setObjectName("ToolBox"); - mXsheet = new Xsheet(this); + mXsheet = new Xsheet(mEditor, this); mXsheet->setObjectName("Xsheet"); /* diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 7554da1333..0cbeeffddb 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -33,6 +33,15 @@ Xsheet::Xsheet(QWidget *parent) : ui->setupUi(this); } +Xsheet::Xsheet(Editor *editor, QWidget *parent) : + BaseDockWidget(parent), + ui(new Ui::Xsheet) +{ + ui->setupUi(this); + mEditor = editor; +} + + Xsheet::~Xsheet() { delete ui; @@ -58,6 +67,7 @@ void Xsheet::initUI() connect(ui->btnSave, &QPushButton::clicked, this, &Xsheet::saveLipsync); connect(ui->btnLoad, &QPushButton::clicked, this, &Xsheet::loadLipsync); connect(ui->btnDeleteFrame, &QPushButton::clicked, this, &Xsheet::removeFrame); + initXsheet(); } void Xsheet::updateUI() @@ -80,7 +90,7 @@ void Xsheet::showScrub(int frame) mTableItem = new QTableWidgetItem(QString::number(frame)); mTableItem->setBackgroundColor(QColor(250, 150, 150)); mTableWidget->setItem(frame, 0, mTableItem); - mTableWidget->scrollToItem(mTableItem); + mTableWidget->scrollToItem(mTableItem, QAbstractItemView::PositionAtCenter); } void Xsheet::updateScrub(int frame) @@ -299,6 +309,7 @@ void Xsheet::saveLipsync() { out << mPapaLines->at(i) << '\n'; } + file.close(); } void Xsheet::removeFrame() diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 9cd5d3745c..eeb9ae3607 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -23,6 +23,7 @@ class Xsheet : public BaseDockWidget public: explicit Xsheet(QWidget *parent = nullptr); + explicit Xsheet(Editor* editor, QWidget *parent = nullptr); ~Xsheet() override; public slots: void newOpenScene(); From 34553fef6a7f4565a9f83de50615a210ed245d5e Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Tue, 30 Oct 2018 17:52:36 +0100 Subject: [PATCH 18/31] Added addFrame button to xsheet. Cleaning up code --- app/src/xsheet.cpp | 65 ++++++++++++++++++++++++++++------------------ app/src/xsheet.h | 1 + app/ui/xsheet.ui | 37 +++++++++++++++++++------- 3 files changed, 68 insertions(+), 35 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 0cbeeffddb..4e5f5aa7ed 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -66,6 +66,7 @@ void Xsheet::initUI() connect(ui->btnNoPapa, &QPushButton::clicked, this, &Xsheet::erasePapa); connect(ui->btnSave, &QPushButton::clicked, this, &Xsheet::saveLipsync); connect(ui->btnLoad, &QPushButton::clicked, this, &Xsheet::loadLipsync); + connect(ui->btnAddFrame, &QPushButton::clicked, this, &Xsheet::addFrame); connect(ui->btnDeleteFrame, &QPushButton::clicked, this, &Xsheet::removeFrame); initXsheet(); } @@ -90,7 +91,7 @@ void Xsheet::showScrub(int frame) mTableItem = new QTableWidgetItem(QString::number(frame)); mTableItem->setBackgroundColor(QColor(250, 150, 150)); mTableWidget->setItem(frame, 0, mTableItem); - mTableWidget->scrollToItem(mTableItem, QAbstractItemView::PositionAtCenter); + mTableWidget->scrollToItem(mTableItem); } void Xsheet::updateScrub(int frame) @@ -294,7 +295,8 @@ void Xsheet::saveLipsync() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save Lipsync column"), "", - tr("Pencil2D Lipsync file (*.lip2d)")); + tr("Pencil2D Lipsync file (*.lip2d)"), + new QString("Pencil2D Lipsync file (*.lip2d")); if (fileName.isEmpty()) { return; } QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) @@ -312,32 +314,45 @@ void Xsheet::saveLipsync() file.close(); } -void Xsheet::removeFrame() +void Xsheet::addFrame() { - QString tmp = mTableWidget->item(mTableWidget->currentRow(), mTableWidget->currentColumn())->text(); - if (mTableWidget->currentColumn() > 0) + if (mTableWidget->currentColumn() == 0 || + mTableWidget->currentColumn() == mTableWidget->columnCount() - 1 || + mTableWidget->currentRow() == 0) { return; } + QString name = mTableWidget->item(0, mTableWidget->currentColumn())->text(); + int frame = mTableWidget->currentRow(); + if (!mEditor->layers()->findLayerByName(name)->keyExists(frame)) { - mTableItem = new QTableWidgetItem(""); - mTableItem->setBackgroundColor(QColor(Qt::white)); + mTableItem = new QTableWidgetItem(QString::number(mTableWidget->currentRow())); + mTableItem->setBackgroundColor(QColor(getLayerColor(getLayerType(mEditor->layers()->currentLayer())))); mTableWidget->setItem(mTableWidget->currentRow(), mTableWidget->currentColumn(), mTableItem); - if (mTableWidget->currentColumn() == mTableWidget->columnCount() - 1) - { // if it is a lipsync column - for (int i = 1; i < mPapaLines->size(); i++) - if (mPapaLines->at(i).startsWith(QString::number(mTableWidget->currentRow()))) - mPapaLines->removeAt(i); - } - else - { // if it is a Bitmap or Vector layer - if (!tmp.isEmpty()) - { - QString name = mTableWidget->item(0, mTableWidget->currentColumn())->text(); - int frame = mTableWidget->currentRow(); - if (mEditor->layers()->findLayerByName(name)->keyExists(frame)) - { - mEditor->layers()->findLayerByName(name)->removeKeyFrame(frame); - emit mEditor->layers()->notifyLayerChanged(mEditor->layers()->findLayerByName(name)); - } - } + mEditor->layers()->currentLayer()->addNewKeyFrameAt(mTableWidget->currentRow()); + emit mEditor->layers()->notifyLayerChanged(mEditor->layers()->findLayerByName(name)); + } +} + +void Xsheet::removeFrame() +{ + QString tmp = mTableWidget->item(mTableWidget->currentRow(), mTableWidget->currentColumn())->text(); + if (mTableWidget->currentColumn() == 0) { return; } + mTableItem = new QTableWidgetItem(""); + mTableItem->setBackgroundColor(QColor(Qt::white)); + mTableWidget->setItem(mTableWidget->currentRow(), mTableWidget->currentColumn(), mTableItem); + if (mTableWidget->currentColumn() == mTableWidget->columnCount() - 1) + { // if it is a lipsync column + for (int i = 1; i < mPapaLines->size(); i++) + if (mPapaLines->at(i).startsWith(QString::number(mTableWidget->currentRow()))) + mPapaLines->removeAt(i); + } + else + { // if it is a Bitmap or Vector layer + if (tmp.isEmpty()) { return; } + QString name = mTableWidget->item(0, mTableWidget->currentColumn())->text(); + int frame = mTableWidget->currentRow(); + if (mEditor->layers()->findLayerByName(name)->keyExists(frame)) + { + mEditor->layers()->findLayerByName(name)->removeKeyFrame(frame); + emit mEditor->layers()->notifyLayerChanged(mEditor->layers()->findLayerByName(name)); } } } diff --git a/app/src/xsheet.h b/app/src/xsheet.h index eeb9ae3607..46a35d5561 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -40,6 +40,7 @@ private slots: void erasePapa(); void loadLipsync(); void saveLipsync(); + void addFrame(); void removeFrame(); private: diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 05095c5f85..9126b18290 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -28,8 +28,8 @@ - 25 - 16777215 + 24 + 24 @@ -48,8 +48,8 @@ - 25 - 16777215 + 24 + 24 @@ -77,12 +77,29 @@ + + + + + 24 + 24 + + + + + + + + :/icons/add.png:/icons/add.png + + + - 25 - 16777215 + 24 + 24 @@ -114,8 +131,8 @@ - 25 - 16777215 + 24 + 24 @@ -134,8 +151,8 @@ - 25 - 16777215 + 24 + 24 From f960b6e644148f40845856ab71671933cacf5d86 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Tue, 30 Oct 2018 23:06:20 +0100 Subject: [PATCH 19/31] Added csv Export. Small adjustments to come. --- app/data/app.qrc | 1 + app/data/icons/savecsv.png | Bin 0 -> 1229 bytes app/src/xsheet.cpp | 32 ++++ app/src/xsheet.h | 1 + app/ui/xsheet.ui | 330 ++++++++++++++++++++++--------------- 5 files changed, 234 insertions(+), 130 deletions(-) create mode 100644 app/data/icons/savecsv.png diff --git a/app/data/app.qrc b/app/data/app.qrc index 8e5c2e1098..e46a053b22 100644 --- a/app/data/app.qrc +++ b/app/data/app.qrc @@ -58,6 +58,7 @@ icons/new/arrow-vertical.png icons/papagayo.png icons/papagayoNo.png + icons/savecsv.png icons/onion-blue.png diff --git a/app/data/icons/savecsv.png b/app/data/icons/savecsv.png new file mode 100644 index 0000000000000000000000000000000000000000..04aedf74c7825b66a689b4d748b791d0c7ea01c4 GIT binary patch literal 1229 zcmV;;1Ty=HP)g&LJATMzkp`tb|rc$8h*f5Akjlb zgGjs57F3Z?1TqvMUM0Z}aqPs-%)B?gZ?;Ir8`wp=`=rsk^Ja8(-nsW269mD}FJHcV z*6;Uso;`bJE?>S(r_*71d6`F#9LZLtuML6dum&<(m^od@tN3B*X zZ*6VGPo6xf1B6$uT={8nagnoU&tAB8?HZRZU1D-_lKc1XGc`5E^71kOS(b5daKQTd zI;zTr3m3S4{W|mW^SpigmU6kw&6_u;Zr{G0-MxF)glU>4gTa7)zfZ5%pC+tBhQ~dXE+?Px3{O$)6??q-8*jGy2XtfH+~IN z)x>d3nx>>_N)$yzQACm?oL*U$F&qx5)oN6$Rp#dA04SA8kjDb`w?bK;y+Ku&`%EG+0?FrZSYi1%IrCMG6u&WZP4RTXQkWLf4zV@%#00rJM^ za5(%M`0VVg92^`_tyZ;ACUYz5@&*RNP>xq9^~ z0F_FGBuR+lm>kP{e+(SQG0r&^5jHnBQB`^M>Xklt@IXF){;adJvv}`iW@bjSEaOBT z1$gn|1?6&CvMkdq%ZQ>##=y=wI-QQ(yLXQ;3<1>FH@v)#Isf&hh2T7ilya0!Xn~ z)Iy;kg+d|Ue^?ibMFF(YXvogajyUH~Rf2rPy!UKxZ-X&lj9?6FYis%Y_h+)UwnqM7 zjI>%UfZSk&K@f0aX`R1#QC8o)`AdT1yx_Yt0NLH$)l*W7s;YC2IF2O<0>WJEIF1Ei zWo1RuG*v*1F`7CjE63LbkkmOwX{sxQf~3w-C>9~hR9Y>`&0?)36cMboBuS!x9335L zx7(G8i3v@TL`tQS(r#m|m4(Gc_V@SIS}O}cx7*b@ki)}6vDWH|y+uThr@}eMXf%>f zA3w5GtxDyD-5;%%o}ZihCWw+G5o3(DHaBIlUYFM9CY6&+$wN$42?2(~VeUS*x3(Az z25O8E;+T)k<~Nq+RGfZnHp$|cFbu~{v(^F-ib&RMHtBY|7-NW{X#DZNE)gMTdy?Z> zsH(L)ckWOu7BR+9DwXiw%PAx9FEyo7NsKWBL6Ap6Ed+jh{rdGU8yg$`{rmUK&(AX$ r4E`76$;nB!wzlZ^`!t))0Qmh+CC&>_lAblg00000NkvXXu0mjfN-jbN literal 0 HcmV?d00001 diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 4e5f5aa7ed..b1a9e2267c 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -66,6 +66,7 @@ void Xsheet::initUI() connect(ui->btnNoPapa, &QPushButton::clicked, this, &Xsheet::erasePapa); connect(ui->btnSave, &QPushButton::clicked, this, &Xsheet::saveLipsync); connect(ui->btnLoad, &QPushButton::clicked, this, &Xsheet::loadLipsync); + connect(ui->btnSaveCsv, &QPushButton::clicked, this, &Xsheet::saveCsv); connect(ui->btnAddFrame, &QPushButton::clicked, this, &Xsheet::addFrame); connect(ui->btnDeleteFrame, &QPushButton::clicked, this, &Xsheet::removeFrame); initXsheet(); @@ -314,6 +315,37 @@ void Xsheet::saveLipsync() file.close(); } +void Xsheet::saveCsv() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save xsheet as CSV"), "", + tr("Csv file (*.csv)"), + new QString("Csv file (*.csv")); + if (fileName.isEmpty()) { return; } + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + { + QMessageBox::information(this, + tr("Unable to open file"), + file.errorString()); + return; + } + QTextStream out(&file); + QString tmp; + for (int i = 0; i < mTimeLineLength; i++) + { + tmp.clear(); + for (int j = 0; j < mTableWidget->columnCount(); j++) + { + tmp += mTableWidget->item(i, j)->text() + ","; + } + tmp.chop(1); + tmp += '\n'; + out << tmp; + } + file.close(); +} + void Xsheet::addFrame() { if (mTableWidget->currentColumn() == 0 || diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 46a35d5561..6e18c71c2a 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -40,6 +40,7 @@ private slots: void erasePapa(); void loadLipsync(); void saveLipsync(); + void saveCsv(); void addFrame(); void removeFrame(); diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 9126b18290..849d59d3b9 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -6,8 +6,8 @@ 0 0 - 343 - 417 + 348 + 423 @@ -21,98 +21,78 @@ Xsheet - + + + 2 + + + 2 + + + 2 + - + - - - - 24 - 24 - - - - Save Lipsync column - - - - - - - :/icons/save.png:/icons/save.png - - - - - - - - 24 - 24 - - - - Load Lipsync column - - - - - - - :/icons/open.png:/icons/open.png - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 24 - 24 - - - - - - - - :/icons/add.png:/icons/add.png - - - - - - - - 24 - 24 - - - - Erase Frame or Lipsync - - - - - - - :/icons/remove.png:/icons/remove.png - - + + + + + Keyframes: + + + + + + + + + + 24 + 24 + + + + Add Keyframe + + + + + + + :/icons/add.png:/icons/add.png + + + true + + + + + + + + 24 + 24 + + + + Erase Keyframe or Lipsync + + + + + + + :/icons/remove.png:/icons/remove.png + + + true + + + + + + @@ -128,44 +108,134 @@ - - - - 24 - 24 - - - - Delete Lipsync column - - - - - - - :/icons/papagayoNo.png:/icons/papagayoNo.png - - - - - - - - 24 - 24 - - - - Load Papagayo file info - - - - - - - :/icons/papagayo.png:/icons/papagayo.png - - + + + + + Lipsync: + + + + + + + + + + 24 + 24 + + + + Save Lipsync column + + + + + + + :/icons/save.png:/icons/save.png + + + true + + + + + + + + 24 + 24 + + + + Load Lipsync column + + + + + + + :/icons/open.png:/icons/open.png + + + true + + + + + + + + 24 + 24 + + + + Export xsheet to csv + + + + + + + :/icons/savecsv.png:/icons/savecsv.png + + + true + + + + + + + + 24 + 24 + + + + Load Papagayo file info + + + + + + + :/icons/papagayo.png:/icons/papagayo.png + + + true + + + + + + + + 24 + 24 + + + + Delete Lipsync column info + + + + + + + :/icons/papagayoNo.png:/icons/papagayoNo.png + + + true + + + + + + From 114c5c1d5a43562c66456b96f7a1446a83e795a0 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Wed, 31 Oct 2018 19:20:13 +0100 Subject: [PATCH 20/31] Rearranged xsheet icons. Fixed length bug --- app/src/mainwindow2.cpp | 1 + app/src/xsheet.cpp | 31 ++++++++-------- app/src/xsheet.h | 1 + app/ui/xsheet.ui | 78 +++++++++++++++++++++++++++-------------- 4 files changed, 68 insertions(+), 43 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index 83cd940ff0..253fd5783d 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -340,6 +340,7 @@ void MainWindow2::createMenus() connect(mEditor, &Editor::currentFrameChanged, mXsheet, &Xsheet::updateScrub); connect(ui->actionNew, &QAction::triggered, mXsheet, &Xsheet::newOpenScene); connect(ui->actionOpen, &QAction::triggered, mXsheet, &Xsheet::newOpenScene); + connect(mEditor->layers(), &LayerManager::animationLengthChanged, mXsheet, &Xsheet::lengthChanged); /// --- Window Menu --- diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index b1a9e2267c..97e7d4bb2a 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -50,6 +50,7 @@ Xsheet::~Xsheet() void Xsheet::newOpenScene() { erasePapa(); + updateXsheet(); } void Xsheet::initUI() @@ -81,10 +82,7 @@ void Xsheet::updateUi(Editor* editor) mEditor = editor; QSettings settings(PENCIL2D, PENCIL2D); mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); - initXsheet(); - fillXsheet(); - showScrub(mEditor->currentFrame()); - writePapa(); + updateXsheet(); } void Xsheet::showScrub(int frame) @@ -101,6 +99,12 @@ void Xsheet::updateScrub(int frame) showScrub(frame); } +void Xsheet::lengthChanged(int frames) +{ + mTimeLineLength = frames; + updateXsheet(); +} + void Xsheet::updateXsheet() { initXsheet(); @@ -111,12 +115,9 @@ void Xsheet::updateXsheet() void Xsheet::selectLayerFrame(int row, int column) { - initXsheet(); - fillXsheet(); - selectItem(row, column); - showScrub(row); + updateXsheet(); mEditor->scrubTo(row); - writePapa(); + selectItem(row, column); } void Xsheet::addLayerFrame(int row, int column) @@ -172,10 +173,7 @@ void Xsheet::addLayerFrame(int row, int column) } } } - initXsheet(); - fillXsheet(); - showScrub(row); - writePapa(); + updateXsheet(); } void Xsheet::fillXsheet() @@ -198,6 +196,7 @@ void Xsheet::fillXsheet() } } } + /* * Load *.pgo file and keep in mPapaLines as follows: * First entry in mPapaLines: Character Name OR DIAL - SPACE - FPS - SPACE - Last frame, if any @@ -332,7 +331,7 @@ void Xsheet::saveCsv() } QTextStream out(&file); QString tmp; - for (int i = 0; i < mTimeLineLength; i++) + for (int i = 0; i <= mTimeLineLength; i++) { tmp.clear(); for (int j = 0; j < mTableWidget->columnCount(); j++) @@ -413,9 +412,9 @@ void Xsheet::initXsheet() } } } - for (int i = 1; i <= mLayerNames->size(); i++) + for (int i = 1; i <= mLayerNames->size() + 1; i++) { - for (int j = 1; j < mTimeLineLength; j++) + for (int j = 1; j <= mTimeLineLength; j++) { mTableItem = new QTableWidgetItem(""); mTableItem->setBackgroundColor(Qt::white); diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 6e18c71c2a..be8b27b278 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -31,6 +31,7 @@ public slots: void updateUi(Editor *editor); void showScrub(int frame); void updateScrub(int frame); + void lengthChanged(int frames); private slots: void selectLayerFrame(int row, int column); diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 849d59d3b9..3f11c8f577 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -21,7 +21,7 @@ Xsheet - + 2 @@ -36,7 +36,7 @@ - + Keyframes: @@ -108,9 +108,9 @@ - + - + Lipsync: @@ -164,29 +164,6 @@ - - - - - 24 - 24 - - - - Export xsheet to csv - - - - - - - :/icons/savecsv.png:/icons/savecsv.png - - - true - - - @@ -237,6 +214,53 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Csv: + + + + + + + + 24 + 24 + + + + Export xsheet to csv + + + + + + + :/icons/savecsv.png:/icons/savecsv.png + + + true + + + + + From 1f18cd184d9afe55861794fb43684bb6e88c9bfe Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Wed, 31 Oct 2018 19:45:36 +0100 Subject: [PATCH 21/31] Added suggestions for lipsync column. Clean up. --- app/src/xsheet.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 97e7d4bb2a..264b6fcf6e 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -128,20 +128,21 @@ void Xsheet::addLayerFrame(int row, int column) else if (column == mTableWidget->columnCount() - 1) { bool ok; - int len; + int len; // accepted length of string QString text; if (row > 0) { + QString string = mTableWidget->item(row, column)->text(); text = QInputDialog::getText(this, tr("Input text for Lipsync"), tr("Maximum 4 chars accepted:"), QLineEdit::Normal, - "", &ok); + string, &ok); len = 4; } else { text = QInputDialog::getText(this, tr("Input Character name"), tr("Maximum 20 chars accepted:"), QLineEdit::Normal, - "", &ok); + tr("Name or...?"), &ok); len = 20; } if (ok && !text.isEmpty()) @@ -202,7 +203,7 @@ void Xsheet::fillXsheet() * First entry in mPapaLines: Character Name OR DIAL - SPACE - FPS - SPACE - Last frame, if any * Next entries in mPapaLines: Frame - SPACE - phonemes (Only lines with two informations is saved) * - * Extra phonemes can be added + * Extra phonemes can be added by doublecliking in xsheet */ void Xsheet::loadPapa() { @@ -242,7 +243,7 @@ void Xsheet::erasePapa() int dial = mTableWidget->columnCount(); // clear column - for (int i = 0; i < mTimeLineLength; i++) + for (int i = 0; i <= mTimeLineLength; i++) { mTableItem = new QTableWidgetItem(""); mTableItem->setBackgroundColor(Qt::white); @@ -274,7 +275,6 @@ void Xsheet::loadLipsync() mTableItem = new QTableWidgetItem(lipsync.at(0)); mTableItem->setBackgroundColor(QColor(250, 240, 160)); mTableWidget->setItem(0, mTableWidget->columnCount() - 1, mTableItem); - // TODO use fps-info at lipsync.at(1) to set fps... if (lipsync.size() > 2) { mTableItem = new QTableWidgetItem(lipsync.at(2)); @@ -295,8 +295,7 @@ void Xsheet::saveLipsync() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save Lipsync column"), "", - tr("Pencil2D Lipsync file (*.lip2d)"), - new QString("Pencil2D Lipsync file (*.lip2d")); + tr("Pencil2D Lipsync file (*.lip2d)")); if (fileName.isEmpty()) { return; } QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) @@ -318,8 +317,7 @@ void Xsheet::saveCsv() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save xsheet as CSV"), "", - tr("Csv file (*.csv)"), - new QString("Csv file (*.csv")); + tr("Csv file (*.csv)")); if (fileName.isEmpty()) { return; } QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) @@ -372,8 +370,12 @@ void Xsheet::removeFrame() if (mTableWidget->currentColumn() == mTableWidget->columnCount() - 1) { // if it is a lipsync column for (int i = 1; i < mPapaLines->size(); i++) + { if (mPapaLines->at(i).startsWith(QString::number(mTableWidget->currentRow()))) + { mPapaLines->removeAt(i); + } + } } else { // if it is a Bitmap or Vector layer @@ -469,7 +471,6 @@ void Xsheet::writePapa() mTableItem = new QTableWidgetItem(lipsync.at(0)); mTableItem->setBackgroundColor(QColor(245, 155, 155, 150)); mTableWidget->setItem(0, dial - 1, mTableItem); - // TODO use fps-info at lipsync.at(1) to set fps... if (lipsync.size() > 2) { tmp = lipsync.at(2); From b29cf1b325ff82901f2a242345e98d86c461f198 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Thu, 1 Nov 2018 21:19:29 +0100 Subject: [PATCH 22/31] Ui enhanced. Less waste area. --- app/ui/xsheet.ui | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 3f11c8f577..f5448e7514 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -38,12 +38,15 @@ - Keyframes: + Keys: + + 0 + @@ -90,6 +93,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -118,6 +134,9 @@ + + 0 + @@ -210,6 +229,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + From 3e3d76aab283489556efbe3065cbb07e0f2ef1cb Mon Sep 17 00:00:00 2001 From: scribblemaniac Date: Mon, 12 Nov 2018 17:51:55 -0700 Subject: [PATCH 23/31] Improve xsheet frame selection This should now work no matter why a cell is selected: mouse click, mouse drag, arrow keys, tab, etc. --- app/src/xsheet.cpp | 8 ++++---- app/src/xsheet.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 264b6fcf6e..3e488d857f 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -61,7 +61,7 @@ void Xsheet::initUI() mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); mPapaLines = new QStringList; mTableWidget = ui->tableXsheet; - connect(mTableWidget, &QTableWidget::cellClicked, this, &Xsheet::selectLayerFrame); + connect(mTableWidget->selectionModel(), &QItemSelectionModel::currentChanged, this, &Xsheet::selectLayerFrame); connect(mTableWidget, &QTableWidget::cellDoubleClicked, this, &Xsheet::addLayerFrame); connect(ui->btnPapa, &QPushButton::clicked, this, &Xsheet::loadPapa ); connect(ui->btnNoPapa, &QPushButton::clicked, this, &Xsheet::erasePapa); @@ -113,11 +113,11 @@ void Xsheet::updateXsheet() showScrub(mEditor->currentFrame()); } -void Xsheet::selectLayerFrame(int row, int column) +void Xsheet::selectLayerFrame(const QModelIndex ¤t, const QModelIndex &previous) { + Q_UNUSED(previous); updateXsheet(); - mEditor->scrubTo(row); - selectItem(row, column); + mEditor->scrubTo(current.row()); } void Xsheet::addLayerFrame(int row, int column) diff --git a/app/src/xsheet.h b/app/src/xsheet.h index be8b27b278..7ddd2cee9d 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -34,7 +34,7 @@ public slots: void lengthChanged(int frames); private slots: - void selectLayerFrame(int row, int column); + void selectLayerFrame(const QModelIndex ¤t, const QModelIndex &previous); void addLayerFrame(int row, int column); void fillXsheet(); void loadPapa(); From 41ef981a22233434f7eb8aa4e14344d63c0788f0 Mon Sep 17 00:00:00 2001 From: scribblemaniac Date: Mon, 12 Nov 2018 18:31:11 -0700 Subject: [PATCH 24/31] Modify x-sheet spacing and text formatting Changes: - Underline button labels - Remove ':' from button labels - Add left and right margin for buttons - Remove extra horizontal spacers - Capitalize CSV (acronym) - Change xsheet to x-sheet. This seems to be the more common spelling online - Remove spacing between label and buttons --- app/ui/xsheet.ui | 57 ++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index f5448e7514..556a06225f 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -18,10 +18,13 @@ false - Xsheet + X-Sheet + + -1 + 2 @@ -33,12 +36,24 @@ + + 0 + + + 12 + + + 12 + + + 0 + - Keys: + <span style=" text-decoration: underline;">Keys</span> @@ -93,19 +108,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -125,10 +127,13 @@ + + 0 + - Lipsync: + <span style=" text-decoration: underline;">Lipsync</span> @@ -229,19 +234,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -261,10 +253,13 @@ + + 0 + - Csv: + <span style=" text-decoration: underline;">CSV</span> @@ -277,7 +272,7 @@ - Export xsheet to csv + Export x-sheet to CSV From 16f8a0f8797e39ecfe05af2c80117c820bc9bc04 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Thu, 15 Nov 2018 21:13:45 +0100 Subject: [PATCH 25/31] Optimizing xsheet updates --- app/src/mainwindow2.cpp | 7 +------ app/src/mainwindow2.h | 1 - app/src/xsheet.cpp | 29 +++++++++++++++++------------ app/src/xsheet.h | 2 +- app/ui/mainwindow2.ui | 8 -------- 5 files changed, 19 insertions(+), 28 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index 253fd5783d..a1bedac612 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -335,7 +335,7 @@ void MainWindow2::createMenus() connect(ui->actionResetToolsDefault, &QAction::triggered, mEditor->tools(), &ToolManager::resetAllTools); /// --- Xsheet update --- - connect(mEditor, &Editor::updateTimeLine, this, &MainWindow2::updateXsheet); + connect(mEditor, &Editor::updateTimeLine ,mXsheet, &Xsheet::updateXsheet); connect(mEditor->layers(), &LayerManager::layerCountChanged, mXsheet, &Xsheet::updateXsheet); connect(mEditor, &Editor::currentFrameChanged, mXsheet, &Xsheet::updateScrub); connect(ui->actionNew, &QAction::triggered, mXsheet, &Xsheet::newOpenScene); @@ -970,11 +970,6 @@ void MainWindow2::resetAndDockAllSubWidgets() } } -void MainWindow2::updateXsheet() -{ - mXsheet->updateUi(mEditor); -} - void MainWindow2::readSettings() { QSettings settings(PENCIL2D, PENCIL2D); diff --git a/app/src/mainwindow2.h b/app/src/mainwindow2.h index c5485ef9c5..550d088aff 100644 --- a/app/src/mainwindow2.h +++ b/app/src/mainwindow2.h @@ -100,7 +100,6 @@ class MainWindow2 : public QMainWindow private slots: void resetAndDockAllSubWidgets(); - void updateXsheet(); private: bool openObject(QString strFilename, bool checkForChanges); diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 3e488d857f..250646c544 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -61,6 +61,7 @@ void Xsheet::initUI() mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); mPapaLines = new QStringList; mTableWidget = ui->tableXsheet; + mCurrentFrame = 1; connect(mTableWidget->selectionModel(), &QItemSelectionModel::currentChanged, this, &Xsheet::selectLayerFrame); connect(mTableWidget, &QTableWidget::cellDoubleClicked, this, &Xsheet::addLayerFrame); connect(ui->btnPapa, &QPushButton::clicked, this, &Xsheet::loadPapa ); @@ -70,32 +71,27 @@ void Xsheet::initUI() connect(ui->btnSaveCsv, &QPushButton::clicked, this, &Xsheet::saveCsv); connect(ui->btnAddFrame, &QPushButton::clicked, this, &Xsheet::addFrame); connect(ui->btnDeleteFrame, &QPushButton::clicked, this, &Xsheet::removeFrame); - initXsheet(); + updateXsheet(); } void Xsheet::updateUI() { } -void Xsheet::updateUi(Editor* editor) -{ - mEditor = editor; - QSettings settings(PENCIL2D, PENCIL2D); - mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); - updateXsheet(); -} - void Xsheet::showScrub(int frame) { mTableItem = new QTableWidgetItem(QString::number(frame)); mTableItem->setBackgroundColor(QColor(250, 150, 150)); mTableWidget->setItem(frame, 0, mTableItem); mTableWidget->scrollToItem(mTableItem); + mCurrentFrame = frame; } void Xsheet::updateScrub(int frame) { - fillXsheet(); + mTableItem = new QTableWidgetItem(QString::number(mCurrentFrame)); + mTableItem->setBackgroundColor(QColor(250, 240, 160)); + mTableWidget->setItem(mCurrentFrame, 0, mTableItem); showScrub(frame); } @@ -116,7 +112,11 @@ void Xsheet::updateXsheet() void Xsheet::selectLayerFrame(const QModelIndex ¤t, const QModelIndex &previous) { Q_UNUSED(previous); - updateXsheet(); + if (current.column() > 0 && current.column() < mLayerCount) + { + Layer* layer = mEditor->layers()->findLayerByName(mTableWidget->item(0, current.column())->text()); + mEditor->layers()->setCurrentLayer(layer); + } mEditor->scrubTo(current.row()); } @@ -124,7 +124,13 @@ void Xsheet::addLayerFrame(int row, int column) { selectItem(row, column); if (column > 0 && column <= mLayerCount) + { mEditor->layers()->currentLayer()->addNewKeyFrameAt(row); + int type = getLayerType(mEditor->layers()->findLayerByName(mTableWidget->item(0, column)->text())); + mTableItem = new QTableWidgetItem(QString::number(row)); + mTableItem->setBackgroundColor(getLayerColor(type)); + mTableWidget->setItem(row, column, mTableItem); + } else if (column == mTableWidget->columnCount() - 1) { bool ok; @@ -174,7 +180,6 @@ void Xsheet::addLayerFrame(int row, int column) } } } - updateXsheet(); } void Xsheet::fillXsheet() diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 7ddd2cee9d..9aad4ffa8a 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -28,7 +28,6 @@ class Xsheet : public BaseDockWidget public slots: void newOpenScene(); void updateXsheet(); - void updateUi(Editor *editor); void showScrub(int frame); void updateScrub(int frame); void lengthChanged(int frames); @@ -56,6 +55,7 @@ private slots: Ui::Xsheet *ui; Editor* mEditor = nullptr; int mLayerCount; + int mCurrentFrame; int mTimeLineLength; QTableWidget* mTableWidget; QTableWidgetItem* mTableItem; diff --git a/app/ui/mainwindow2.ui b/app/ui/mainwindow2.ui index 8ddb675239..004e54d8d5 100644 --- a/app/ui/mainwindow2.ui +++ b/app/ui/mainwindow2.ui @@ -888,14 +888,6 @@ Animated GIF... - - - Show/Hide Xsheet - - - X - - From 6be66fea7f07cee474fe89b805e9476884f91e31 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Thu, 15 Nov 2018 21:37:55 +0100 Subject: [PATCH 26/31] replacing unstable function --- app/src/xsheet.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 250646c544..cc3c80c2a7 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -112,11 +112,7 @@ void Xsheet::updateXsheet() void Xsheet::selectLayerFrame(const QModelIndex ¤t, const QModelIndex &previous) { Q_UNUSED(previous); - if (current.column() > 0 && current.column() < mLayerCount) - { - Layer* layer = mEditor->layers()->findLayerByName(mTableWidget->item(0, current.column())->text()); - mEditor->layers()->setCurrentLayer(layer); - } + selectItem(current.row(), current.column()); mEditor->scrubTo(current.row()); } From 3c2db50e956f94db335eaa76db4b0b58430e26c5 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sat, 17 Nov 2018 17:50:35 +0100 Subject: [PATCH 27/31] Hide xsheet at startup, and small update fix --- app/src/mainwindow2.cpp | 3 +-- app/src/xsheet.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/mainwindow2.cpp b/app/src/mainwindow2.cpp index a1bedac612..77d95cc8bb 100644 --- a/app/src/mainwindow2.cpp +++ b/app/src/mainwindow2.cpp @@ -201,6 +201,7 @@ void MainWindow2::createDockWidgets() addDockWidget(Qt::RightDockWidgetArea, mColorInspector); addDockWidget(Qt::RightDockWidgetArea, mColorPalette); addDockWidget(Qt::RightDockWidgetArea, mXsheet); + mXsheet->hide(); addDockWidget(Qt::LeftDockWidgetArea, mToolBox); addDockWidget(Qt::LeftDockWidgetArea, mToolOptions); addDockWidget(Qt::LeftDockWidgetArea, mDisplayOptionWidget); @@ -340,8 +341,6 @@ void MainWindow2::createMenus() connect(mEditor, &Editor::currentFrameChanged, mXsheet, &Xsheet::updateScrub); connect(ui->actionNew, &QAction::triggered, mXsheet, &Xsheet::newOpenScene); connect(ui->actionOpen, &QAction::triggered, mXsheet, &Xsheet::newOpenScene); - connect(mEditor->layers(), &LayerManager::animationLengthChanged, mXsheet, &Xsheet::lengthChanged); - /// --- Window Menu --- QMenu* winMenu = ui->menuWindows; diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index cc3c80c2a7..54c8c336ea 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -111,6 +111,12 @@ void Xsheet::updateXsheet() void Xsheet::selectLayerFrame(const QModelIndex ¤t, const QModelIndex &previous) { + QSettings settings(PENCIL2D, PENCIL2D); + if (mTimeLineLength != settings.value(SETTING_TIMELINE_SIZE).toInt()) + { + mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE).toInt(); + updateXsheet(); + } Q_UNUSED(previous); selectItem(current.row(), current.column()); mEditor->scrubTo(current.row()); From 201d84414a6f20d83fa844e7acded8d3a65526af Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Tue, 8 Jan 2019 20:25:16 +0100 Subject: [PATCH 28/31] Adding support for identical layernames in xsheet --- app/src/xsheet.cpp | 61 +++++++++++++++++++++------------------------- app/src/xsheet.h | 2 ++ 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index 54c8c336ea..ac64cef75b 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -56,6 +56,7 @@ void Xsheet::newOpenScene() void Xsheet::initUI() { mLayerNames = new QStringList; + mLayerIndexes = new QVector; mLayerCount = 0; QSettings settings(PENCIL2D, PENCIL2D); mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); @@ -128,7 +129,7 @@ void Xsheet::addLayerFrame(int row, int column) if (column > 0 && column <= mLayerCount) { mEditor->layers()->currentLayer()->addNewKeyFrameAt(row); - int type = getLayerType(mEditor->layers()->findLayerByName(mTableWidget->item(0, column)->text())); + int type = getLayerType(mEditor->layers()->getLayer(mLayerIndexes->at(column-1))); mTableItem = new QTableWidgetItem(QString::number(row)); mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(row, column, mTableItem); @@ -194,9 +195,9 @@ void Xsheet::fillXsheet() mTableWidget->setItem(i, 0, mTableItem); for (int j = 1; j <= mLayerCount; j++) { - if (mEditor->layers()->findLayerByName(mTableWidget->item(0,j)->text())->keyExists(i)) + if (mEditor->layers()->getLayer(mLayerIndexes->at(j-1))->keyExists(i)) { - int type = getLayerType(mEditor->layers()->findLayerByName(mTableWidget->item(0,j)->text())); + int type = getLayerType(mEditor->layers()->getLayer(mLayerIndexes->at(j-1))); mTableItem = new QTableWidgetItem(QString::number(i)); mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(i, j, mTableItem); @@ -258,7 +259,7 @@ void Xsheet::erasePapa() } mTableItem = new QTableWidgetItem("DIAL"); mTableItem->setBackgroundColor(QColor(244, 167, 167, 150)); - mTableWidget->setItem(0, mLayerNames->size() + 1, mTableItem); + mTableWidget->setItem(0, mLayerIndexes->size() + 1, mTableItem); mPapaLines->clear(); } @@ -355,15 +356,15 @@ void Xsheet::addFrame() if (mTableWidget->currentColumn() == 0 || mTableWidget->currentColumn() == mTableWidget->columnCount() - 1 || mTableWidget->currentRow() == 0) { return; } - QString name = mTableWidget->item(0, mTableWidget->currentColumn())->text(); int frame = mTableWidget->currentRow(); - if (!mEditor->layers()->findLayerByName(name)->keyExists(frame)) + Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(mTableWidget->currentColumn() - 1)); + if (!layer->keyExists(frame)) { mTableItem = new QTableWidgetItem(QString::number(mTableWidget->currentRow())); - mTableItem->setBackgroundColor(QColor(getLayerColor(getLayerType(mEditor->layers()->currentLayer())))); + mTableItem->setBackgroundColor(QColor(getLayerColor(layer->type()))); mTableWidget->setItem(mTableWidget->currentRow(), mTableWidget->currentColumn(), mTableItem); mEditor->layers()->currentLayer()->addNewKeyFrameAt(mTableWidget->currentRow()); - emit mEditor->layers()->notifyLayerChanged(mEditor->layers()->findLayerByName(name)); + emit mEditor->layers()->notifyLayerChanged(layer); } } @@ -387,12 +388,12 @@ void Xsheet::removeFrame() else { // if it is a Bitmap or Vector layer if (tmp.isEmpty()) { return; } - QString name = mTableWidget->item(0, mTableWidget->currentColumn())->text(); + Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(mTableWidget->currentColumn() - 1)); int frame = mTableWidget->currentRow(); - if (mEditor->layers()->findLayerByName(name)->keyExists(frame)) + if (layer->keyExists(frame)) { - mEditor->layers()->findLayerByName(name)->removeKeyFrame(frame); - emit mEditor->layers()->notifyLayerChanged(mEditor->layers()->findLayerByName(name)); + layer->removeKeyFrame(frame); + emit mEditor->layers()->notifyLayerChanged(layer); } } } @@ -400,28 +401,17 @@ void Xsheet::removeFrame() void Xsheet::initXsheet() { mLayerCount = 0; - mLayerNames->clear(); + mLayerIndexes->clear(); for (int i = 0; i < mEditor->layers()->count(); i++) - { // count Bitmap and Vector layers (duplicate names NOT supported) + { // count Bitmap and Vector layers bool visi = mEditor->layers()->getLayer(i)->getVisibility(); if (visi && (mEditor->layers()->getLayer(i)->type() == 1 || mEditor->layers()->getLayer(i)->type() == 2)) { - if (!mLayerNames->contains(mEditor->layers()->getLayer(i)->name())) - { - mLayerCount++; - mLayerNames->append(mEditor->layers()->getLayer(i)->name()); - } - else - { - int ret = QMessageBox::critical(new QWidget, - tr("Layer name duplicate!"), - tr("Identical layer names '%1' not supported in Xsheet").arg(mEditor->layers()->getLayer(i)->name()), - QMessageBox::Ok); - Q_UNUSED(ret); - } + mLayerCount++; + mLayerIndexes->append(i); } } - for (int i = 1; i <= mLayerNames->size() + 1; i++) + for (int i = 1; i <= mLayerIndexes->size() + 1; i++) { for (int j = 1; j <= mTimeLineLength; j++) { @@ -443,17 +433,22 @@ void Xsheet::initXsheet() mTableItem = new QTableWidgetItem("#"); mTableItem->setBackgroundColor(QColor(250, 240, 160)); mTableWidget->setItem(0, 0, mTableItem); - for (int i = 0; i < mLayerNames->size(); i++) + for (int i = 0; i < mLayerIndexes->size(); i++) { - int type = getLayerType(mEditor->layers()->findLayerByName(mLayerNames->at(i))); - mTableItem = new QTableWidgetItem(mLayerNames->at(i)); + int type = getLayerType(mEditor->layers()->getLayer(mLayerIndexes->at(i))); + mTableItem = new QTableWidgetItem(mEditor->layers()->getLayer(mLayerIndexes->at(i))->name()); mTableItem->setBackgroundColor(getLayerColor(type)); mTableWidget->setItem(0, i + 1, mTableItem); } // if (!mPapaLines->isEmpty()) { return; } mTableItem = new QTableWidgetItem("DIAL"); mTableItem->setBackgroundColor(QColor(244, 167, 167, 150)); - mTableWidget->setItem(0, mLayerNames->size() + 1, mTableItem); + mTableWidget->setItem(0, mLayerIndexes->size() + 1, mTableItem); + if (mFirstUpdate) // hack to make sure a cell is selected at least once + { + mTableWidget->setCurrentCell(1, 2); + mFirstUpdate = false; + } } void Xsheet::writePapa() @@ -515,7 +510,7 @@ void Xsheet::selectItem(int row, int column) { mTableItem = new QTableWidgetItem(); mTableItem = mTableWidget->item(0, column); - Layer* layer = mEditor->layers()->findLayerByName(mTableItem->text()); + Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(column-1)); if (layer == nullptr) { return; } mEditor->layers()->setCurrentLayer(layer); mEditor->scrubTo(row); diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 9aad4ffa8a..e6ab5ba861 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -51,12 +51,14 @@ private slots: void selectItem(int row, int column); QColor getLayerColor(int color); QStringList* mLayerNames; + QVector* mLayerIndexes; QStringList* mPapaLines; // for filling DIAL column Ui::Xsheet *ui; Editor* mEditor = nullptr; int mLayerCount; int mCurrentFrame; int mTimeLineLength; + bool mFirstUpdate = true; QTableWidget* mTableWidget; QTableWidgetItem* mTableItem; }; From 58a8704a3d81945a50cb13b25705d3d69b7b4739 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Sun, 20 Jan 2019 12:25:43 +0100 Subject: [PATCH 29/31] Not updating xsheet when it is hidden --- app/src/xsheet.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index ac64cef75b..870821b89b 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -49,6 +49,7 @@ Xsheet::~Xsheet() void Xsheet::newOpenScene() { + if (isHidden()) return; erasePapa(); updateXsheet(); } @@ -90,6 +91,7 @@ void Xsheet::showScrub(int frame) void Xsheet::updateScrub(int frame) { + if (isHidden()) return; mTableItem = new QTableWidgetItem(QString::number(mCurrentFrame)); mTableItem->setBackgroundColor(QColor(250, 240, 160)); mTableWidget->setItem(mCurrentFrame, 0, mTableItem); @@ -104,6 +106,7 @@ void Xsheet::lengthChanged(int frames) void Xsheet::updateXsheet() { + if (isHidden()) return; initXsheet(); fillXsheet(); writePapa(); From 21a296a9a0ad0db05dc65063c3a83746069631a7 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Wed, 17 Aug 2022 20:47:44 +0200 Subject: [PATCH 30/31] Renaming member variables to more logical names --- app/src/xsheet.cpp | 180 +++++++++++++++++++++++---------------------- app/src/xsheet.h | 4 +- app/ui/xsheet.ui | 4 +- 3 files changed, 94 insertions(+), 94 deletions(-) diff --git a/app/src/xsheet.cpp b/app/src/xsheet.cpp index c1855dd037..eb7d02db18 100644 --- a/app/src/xsheet.cpp +++ b/app/src/xsheet.cpp @@ -15,6 +15,7 @@ GNU General Public License for more details. */ #include "xsheet.h" +#include "layermanager.h" #include "ui_xsheet.h" #include #include @@ -25,6 +26,7 @@ GNU General Public License for more details. #include #include #include +#include Xsheet::Xsheet(QWidget *parent) : BaseDockWidget(parent), @@ -62,10 +64,10 @@ void Xsheet::initUI() QSettings settings(PENCIL2D, PENCIL2D); mTimeLineLength = settings.value(SETTING_TIMELINE_SIZE,240).toInt(); mPapaLines = new QStringList; - mTableWidget = ui->tableXsheet; + mXsheet = ui->tableXsheet; mCurrentFrame = 1; - connect(mTableWidget->selectionModel(), &QItemSelectionModel::currentChanged, this, &Xsheet::selectLayerFrame); - connect(mTableWidget, &QTableWidget::cellDoubleClicked, this, &Xsheet::addLayerFrame); + connect(mXsheet->selectionModel(), &QItemSelectionModel::currentChanged, this, &Xsheet::selectLayerFrame); + connect(mXsheet, &QTableWidget::cellDoubleClicked, this, &Xsheet::addLayerFrame); connect(ui->btnPapa, &QPushButton::clicked, this, &Xsheet::loadPapa ); connect(ui->btnNoPapa, &QPushButton::clicked, this, &Xsheet::erasePapa); connect(ui->btnSave, &QPushButton::clicked, this, &Xsheet::saveLipsync); @@ -82,19 +84,19 @@ void Xsheet::updateUI() void Xsheet::showScrub(int frame) { - mTableItem = new QTableWidgetItem(QString::number(frame)); - mTableItem->setBackground(QColor(250, 150, 150)); - mTableWidget->setItem(frame, 0, mTableItem); - mTableWidget->scrollToItem(mTableItem); + mXsheetItem = new QTableWidgetItem(QString::number(frame)); + mXsheetItem->setBackground(QColor(250, 150, 150)); + mXsheet->setItem(frame, 0, mXsheetItem); + mXsheet->scrollToItem(mXsheetItem); mCurrentFrame = frame; } void Xsheet::updateScrub(int frame) { if (isHidden()) return; - mTableItem = new QTableWidgetItem(QString::number(mCurrentFrame)); - mTableItem->setBackground(QColor(250, 240, 160)); - mTableWidget->setItem(mCurrentFrame, 0, mTableItem); + mXsheetItem = new QTableWidgetItem(QString::number(mCurrentFrame)); + mXsheetItem->setBackground(QColor(250, 240, 160)); + mXsheet->setItem(mCurrentFrame, 0, mXsheetItem); showScrub(frame); } @@ -133,18 +135,18 @@ void Xsheet::addLayerFrame(int row, int column) { mEditor->layers()->currentLayer()->addNewKeyFrameAt(row); int type = getLayerType(mEditor->layers()->getLayer(mLayerIndexes->at(column-1))); - mTableItem = new QTableWidgetItem(QString::number(row)); - mTableItem->setBackground(getLayerColor(type)); - mTableWidget->setItem(row, column, mTableItem); + mXsheetItem = new QTableWidgetItem(QString::number(row)); + mXsheetItem->setBackground(getLayerColor(type)); + mXsheet->setItem(row, column, mXsheetItem); } - else if (column == mTableWidget->columnCount() - 1) + else if (column == mXsheet->columnCount() - 1) { bool ok; int len; // accepted length of string QString text; if (row > 0) { - QString string = mTableWidget->item(row, column)->text(); + QString string = mXsheet->item(row, column)->text(); text = QInputDialog::getText(this, tr("Input text for Lipsync"), tr("Maximum 4 chars accepted:"), QLineEdit::Normal, string, &ok); @@ -159,9 +161,9 @@ void Xsheet::addLayerFrame(int row, int column) } if (ok && !text.isEmpty()) { - mTableItem = new QTableWidgetItem(text.left(len)); - mTableItem->setBackground(QColor(245, 155, 155, 150)); - mTableWidget->setItem(row, column, mTableItem); + mXsheetItem = new QTableWidgetItem(text.left(len)); + mXsheetItem->setBackground(QColor(245, 155, 155, 150)); + mXsheet->setItem(row, column, mXsheetItem); if (mPapaLines->size() > 0 && row > 0) { // if mPapaLines was NOT EMPTY and you typed a Text mPapaLines->append(QString::number(row) + " " + text.left(len)); @@ -192,18 +194,18 @@ void Xsheet::fillXsheet() { for (int i = 1; i <= mTimeLineLength; i++) { - mTableWidget->setRowHeight(i,16); - mTableItem = new QTableWidgetItem(QString::number(i)); - mTableItem->setBackground(QColor(250, 240, 160)); - mTableWidget->setItem(i, 0, mTableItem); + mXsheet->setRowHeight(i,16); + mXsheetItem = new QTableWidgetItem(QString::number(i)); + mXsheetItem->setBackground(QColor(250, 240, 160)); + mXsheet->setItem(i, 0, mXsheetItem); for (int j = 1; j <= mLayerCount; j++) { if (mEditor->layers()->getLayer(mLayerIndexes->at(j-1))->keyExists(i)) { int type = getLayerType(mEditor->layers()->getLayer(mLayerIndexes->at(j-1))); - mTableItem = new QTableWidgetItem(QString::number(i)); - mTableItem->setBackground(getLayerColor(type)); - mTableWidget->setItem(i, j, mTableItem); + mXsheetItem = new QTableWidgetItem(QString::number(i)); + mXsheetItem->setBackground(getLayerColor(type)); + mXsheet->setItem(i, j, mXsheetItem); } } } @@ -251,18 +253,18 @@ void Xsheet::loadPapa() void Xsheet::erasePapa() { - int dial = mTableWidget->columnCount(); + int dial = mXsheet->columnCount(); // clear column for (int i = 0; i <= mTimeLineLength; i++) { - mTableItem = new QTableWidgetItem(""); - mTableItem->setBackground(Qt::white); - mTableWidget->setItem(i, dial - 1, mTableItem); + mXsheetItem = new QTableWidgetItem(""); + mXsheetItem->setBackground(Qt::white); + mXsheet->setItem(i, dial - 1, mXsheetItem); } - mTableItem = new QTableWidgetItem("DIAL"); - mTableItem->setBackground(QColor(244, 167, 167, 150)); - mTableWidget->setItem(0, mLayerIndexes->size() + 1, mTableItem); + mXsheetItem = new QTableWidgetItem("DIAL"); + mXsheetItem->setBackground(QColor(244, 167, 167, 150)); + mXsheet->setItem(0, mLayerIndexes->size() + 1, mXsheetItem); mPapaLines->clear(); } @@ -283,15 +285,15 @@ void Xsheet::loadLipsync() QTextStream in(&file); QString first = in.readLine(); QStringList lipsync = first.split(" "); - mTableItem = new QTableWidgetItem(lipsync.at(0)); - mTableItem->setBackground(QColor(250, 240, 160)); - mTableWidget->setItem(0, mTableWidget->columnCount() - 1, mTableItem); + mXsheetItem = new QTableWidgetItem(lipsync.at(0)); + mXsheetItem->setBackground(QColor(250, 240, 160)); + mXsheet->setItem(0, mXsheet->columnCount() - 1, mXsheetItem); if (lipsync.size() > 2) { - mTableItem = new QTableWidgetItem(lipsync.at(2)); - mTableItem->setBackground(QColor(250, 240, 160)); + mXsheetItem = new QTableWidgetItem(lipsync.at(2)); + mXsheetItem->setBackground(QColor(250, 240, 160)); QString tmp = lipsync.at(2); - mTableWidget->setItem(tmp.toInt(), mTableWidget->columnCount() - 1, mTableItem); + mXsheet->setItem(tmp.toInt(), mXsheet->columnCount() - 1, mXsheetItem); } mPapaLines->clear(); mPapaLines->append(first + '\n'); @@ -343,9 +345,9 @@ void Xsheet::saveCsv() for (int i = 0; i <= mTimeLineLength; i++) { tmp.clear(); - for (int j = 0; j < mTableWidget->columnCount(); j++) + for (int j = 0; j < mXsheet->columnCount(); j++) { - tmp += mTableWidget->item(i, j)->text() + ","; + tmp += mXsheet->item(i, j)->text() + ","; } tmp.chop(1); tmp += '\n'; @@ -356,33 +358,33 @@ void Xsheet::saveCsv() void Xsheet::addFrame() { - if (mTableWidget->currentColumn() == 0 || - mTableWidget->currentColumn() == mTableWidget->columnCount() - 1 || - mTableWidget->currentRow() == 0) { return; } - int frame = mTableWidget->currentRow(); - Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(mTableWidget->currentColumn() - 1)); + if (mXsheet->currentColumn() == 0 || + mXsheet->currentColumn() == mXsheet->columnCount() - 1 || + mXsheet->currentRow() == 0) { return; } + int frame = mXsheet->currentRow(); + Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(mXsheet->currentColumn() - 1)); if (!layer->keyExists(frame)) { - mTableItem = new QTableWidgetItem(QString::number(mTableWidget->currentRow())); - mTableItem->setBackground(QColor(getLayerColor(layer->type()))); - mTableWidget->setItem(mTableWidget->currentRow(), mTableWidget->currentColumn(), mTableItem); - mEditor->layers()->currentLayer()->addNewKeyFrameAt(mTableWidget->currentRow()); + mXsheetItem = new QTableWidgetItem(QString::number(mXsheet->currentRow())); + mXsheetItem->setBackground(QColor(getLayerColor(layer->type()))); + mXsheet->setItem(mXsheet->currentRow(), mXsheet->currentColumn(), mXsheetItem); + mEditor->layers()->currentLayer()->addNewKeyFrameAt(mXsheet->currentRow()); emit mEditor->layers()->notifyLayerChanged(layer); } } void Xsheet::removeFrame() { - QString tmp = mTableWidget->item(mTableWidget->currentRow(), mTableWidget->currentColumn())->text(); - if (mTableWidget->currentColumn() == 0) { return; } - mTableItem = new QTableWidgetItem(""); - mTableItem->setBackground(QColor(Qt::white)); - mTableWidget->setItem(mTableWidget->currentRow(), mTableWidget->currentColumn(), mTableItem); - if (mTableWidget->currentColumn() == mTableWidget->columnCount() - 1) + QString tmp = mXsheet->item(mXsheet->currentRow(), mXsheet->currentColumn())->text(); + if (mXsheet->currentColumn() == 0) { return; } + mXsheetItem = new QTableWidgetItem(""); + mXsheetItem->setBackground(QColor(Qt::white)); + mXsheet->setItem(mXsheet->currentRow(), mXsheet->currentColumn(), mXsheetItem); + if (mXsheet->currentColumn() == mXsheet->columnCount() - 1) { // if it is a lipsync column for (int i = 1; i < mPapaLines->size(); i++) { - if (mPapaLines->at(i).startsWith(QString::number(mTableWidget->currentRow()))) + if (mPapaLines->at(i).startsWith(QString::number(mXsheet->currentRow()))) { mPapaLines->removeAt(i); } @@ -391,8 +393,8 @@ void Xsheet::removeFrame() else { // if it is a Bitmap or Vector layer if (tmp.isEmpty()) { return; } - Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(mTableWidget->currentColumn() - 1)); - int frame = mTableWidget->currentRow(); + Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(mXsheet->currentColumn() - 1)); + int frame = mXsheet->currentRow(); if (layer->keyExists(frame)) { layer->removeKeyFrame(frame); @@ -418,38 +420,38 @@ void Xsheet::initXsheet() { for (int j = 1; j <= mTimeLineLength; j++) { - mTableItem = new QTableWidgetItem(""); - mTableItem->setBackground(Qt::white); - mTableWidget->setItem(j, i, mTableItem); + mXsheetItem = new QTableWidgetItem(""); + mXsheetItem->setBackground(Qt::white); + mXsheet->setItem(j, i, mXsheetItem); } } this->setMinimumWidth(mLayerCount * 40 + 100); - mTableWidget->setRowCount(mTimeLineLength + 1); - mTableWidget->setColumnCount(mLayerCount + 2); + mXsheet->setRowCount(mTimeLineLength + 1); + mXsheet->setColumnCount(mLayerCount + 2); // set column width for layers - for (int i = 0; i < mTableWidget->columnCount(); i++) + for (int i = 0; i < mXsheet->columnCount(); i++) { - mTableWidget->setColumnWidth(i, 40); + mXsheet->setColumnWidth(i, 40); } // set headers of Xsheet - mTableWidget->setRowHeight(0,16); - mTableItem = new QTableWidgetItem("#"); - mTableItem->setBackground(QColor(250, 240, 160)); - mTableWidget->setItem(0, 0, mTableItem); + mXsheet->setRowHeight(0,16); + mXsheetItem = new QTableWidgetItem("#"); + mXsheetItem->setBackground(QColor(250, 240, 160)); + mXsheet->setItem(0, 0, mXsheetItem); for (int i = 0; i < mLayerIndexes->size(); i++) { int type = getLayerType(mEditor->layers()->getLayer(mLayerIndexes->at(i))); - mTableItem = new QTableWidgetItem(mEditor->layers()->getLayer(mLayerIndexes->at(i))->name()); - mTableItem->setBackground(getLayerColor(type)); - mTableWidget->setItem(0, i + 1, mTableItem); + mXsheetItem = new QTableWidgetItem(mEditor->layers()->getLayer(mLayerIndexes->at(i))->name()); + mXsheetItem->setBackground(getLayerColor(type)); + mXsheet->setItem(0, i + 1, mXsheetItem); } // if (!mPapaLines->isEmpty()) { return; } - mTableItem = new QTableWidgetItem("DIAL"); - mTableItem->setBackground(QColor(244, 167, 167, 150)); - mTableWidget->setItem(0, mLayerIndexes->size() + 1, mTableItem); + mXsheetItem = new QTableWidgetItem("DIAL"); + mXsheetItem->setBackground(QColor(244, 167, 167, 150)); + mXsheet->setItem(0, mLayerIndexes->size() + 1, mXsheetItem); if (mFirstUpdate) // hack to make sure a cell is selected at least once { - mTableWidget->setCurrentCell(1, 2); + mXsheet->setCurrentCell(1, 2); mFirstUpdate = false; } } @@ -458,14 +460,14 @@ void Xsheet::writePapa() { if (!mPapaLines->isEmpty()) { - int dial = mTableWidget->columnCount(); + int dial = mXsheet->columnCount(); // clear column for (int i = 0; i < mTimeLineLength; i++) { - mTableItem = new QTableWidgetItem(""); - mTableItem->setBackground(Qt::white); - mTableWidget->setItem(i, dial - 1, mTableItem); + mXsheetItem = new QTableWidgetItem(""); + mXsheetItem->setBackground(Qt::white); + mXsheet->setItem(i, dial - 1, mXsheetItem); } // write header @@ -473,14 +475,14 @@ void Xsheet::writePapa() QString tmp; tmp = mPapaLines->at(0); lipsync = tmp.split(" "); - mTableItem = new QTableWidgetItem(lipsync.at(0)); - mTableItem->setBackground(QColor(245, 155, 155, 150)); - mTableWidget->setItem(0, dial - 1, mTableItem); + mXsheetItem = new QTableWidgetItem(lipsync.at(0)); + mXsheetItem->setBackground(QColor(245, 155, 155, 150)); + mXsheet->setItem(0, dial - 1, mXsheetItem); if (lipsync.size() > 2) { tmp = lipsync.at(2); int row = tmp.toInt(); - mTableWidget->setItem(row, dial - 1, new QTableWidgetItem("-")); + mXsheet->setItem(row, dial - 1, new QTableWidgetItem("-")); } for (int i = 1; i < mPapaLines->size(); i++) { @@ -490,9 +492,9 @@ void Xsheet::writePapa() { tmp = lipsync.at(0); // frame number int row = tmp.toInt(); - mTableItem = new QTableWidgetItem(lipsync.at(1)); // audio to animate - mTableItem->setBackground(QColor(245, 155, 155, 150)); - mTableWidget->setItem(row, dial - 1, mTableItem); + mXsheetItem = new QTableWidgetItem(lipsync.at(1)); // audio to animate + mXsheetItem->setBackground(QColor(245, 155, 155, 150)); + mXsheet->setItem(row, dial - 1, mXsheetItem); } } } @@ -511,8 +513,8 @@ void Xsheet::selectItem(int row, int column) { if (column > 0 && column <= mLayerCount) { - mTableItem = new QTableWidgetItem(); - mTableItem = mTableWidget->item(0, column); + mXsheetItem = new QTableWidgetItem(); + mXsheetItem = mXsheet->item(0, column); Layer* layer = mEditor->layers()->getLayer(mLayerIndexes->at(column-1)); if (layer == nullptr) { return; } mEditor->layers()->setCurrentLayer(layer); diff --git a/app/src/xsheet.h b/app/src/xsheet.h index e6ab5ba861..4577df79e7 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -4,9 +4,7 @@ #include "basedockwidget.h" #include -#include "layermanager.h" #include "editor.h" -#include "qdebug.h" #include #include @@ -59,7 +57,7 @@ private slots: int mCurrentFrame; int mTimeLineLength; bool mFirstUpdate = true; - QTableWidget* mTableWidget; + QTableWidget* mTableXsheet; QTableWidgetItem* mTableItem; }; diff --git a/app/ui/xsheet.ui b/app/ui/xsheet.ui index 556a06225f..f9f43e9e2c 100644 --- a/app/ui/xsheet.ui +++ b/app/ui/xsheet.ui @@ -6,7 +6,7 @@ 0 0 - 348 + 315 423 @@ -23,7 +23,7 @@ - -1 + 7 2 From 9e4ccc31e4b348356e5427dfd5a2b50ad39724f0 Mon Sep 17 00:00:00 2001 From: David Lamhauge Date: Wed, 17 Aug 2022 20:58:31 +0200 Subject: [PATCH 31/31] same as last. Forgot changes in header file --- app/src/xsheet.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/xsheet.h b/app/src/xsheet.h index 4577df79e7..af2cb035d6 100644 --- a/app/src/xsheet.h +++ b/app/src/xsheet.h @@ -57,8 +57,8 @@ private slots: int mCurrentFrame; int mTimeLineLength; bool mFirstUpdate = true; - QTableWidget* mTableXsheet; - QTableWidgetItem* mTableItem; + QTableWidget* mXsheet; + QTableWidgetItem* mXsheetItem; }; #endif // XSHEET_H