Skip to content
Extraits de code Groupes Projets
Valider df5348a7 rédigé par Elliu's avatar Elliu
Parcourir les fichiers

Properly edit AssLinesModel on TimingSeparator drag & drop

parent 3efde45b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!29Improve timingView with display of the ASS lines
......@@ -31,7 +31,6 @@ AssFactory::initFromStorage() noexcept
}
}
// Other lines
else if (!currentSection.isEmpty()) {
const int separatorIndex = line.indexOf(": ");
const int baseValueIndex = separatorIndex + 2;
......@@ -154,7 +153,7 @@ AssFactory::getStyle(const QString &name) const noexcept
return StyleWeakPtr(*styleIt);
// Will be unable to lock
return StyleWeakPtr(spareNullStylePtr);
return StyleWeakPtr();
}
bool
......
......@@ -27,8 +27,6 @@ private:
QVector<LinePtr> assLines{};
QVector<StylePtr> assStyles{};
StylePtr spareNullStylePtr{ nullptr };
static inline const QString sectionScriptInfo = "Script Info";
static inline const QString sectionStyles = "V4+ Styles";
static inline const QString sectionEvents = "Events";
......
......@@ -10,4 +10,7 @@ using LinePtr = std::shared_ptr<Line>;
using StyleWeakPtr = std::weak_ptr<Style>;
using LineWeakPtr = std::weak_ptr<Line>;
}
Q_DECLARE_METATYPE(Vivy::Ass::LinePtr)
#include "Line.hh"
#include "AssFactory.hh"
#include "../../VivyApplication.hh"
#include "../../Lib/Document/VivyDocument.hh"
using namespace Vivy::Ass;
Line::Line()
: assFactory(currentVivyDocument->getAssSubDocument()->getFactory())
{
}
Line::Line(AssFactory *const factory, const QString &lineString)
: assFactory(factory)
{
......@@ -60,9 +68,11 @@ Line::Line(AssFactory *const factory, const QString &lineString)
}
void
Line::generateLineText() noexcept
Line::updateContent() noexcept
{
// TODO : generate ___contentAsText from content
___contentAsText = "";
for (const auto &syl : content)
___contentAsText.append(syl.getContent());
}
void
......@@ -169,5 +179,5 @@ void
Line::setContent(const QVector<Syl> &syls) noexcept
{
content = syls;
generateLineText();
updateContent();
}
......@@ -31,6 +31,8 @@ class Line final {
public:
//explicit Line(const Line &) = default;
explicit Line(AssFactory *const, const QString &);
explicit Line();
explicit Line(const Line &c) = default;
Line &operator=(const Line &) = delete;
~Line() noexcept = default;
......@@ -53,6 +55,6 @@ public:
private:
void initSylFromString(const QString &) noexcept;
void generateLineText() noexcept;
void updateContent() noexcept;
};
}
......@@ -136,6 +136,7 @@ class AssSubDocument final : public CRTPSubDocument<AssDocumentType, AssSubDocum
public:
QString getElementName() const noexcept;
QJsonDocument getProperties() const noexcept;
Ass::AssFactory *getFactory() noexcept;
const QVector<Ass::LinePtr> &getLines() const noexcept;
const QVector<Ass::StylePtr> &getStyles() const noexcept;
......@@ -143,5 +144,6 @@ public:
private:
QVector<Ass::StylePtr> styles;
QVector<Ass::LinePtr> lines;
Ass::AssFactory *assFactory;
};
}
......@@ -7,9 +7,11 @@ using namespace Vivy;
void
AssSubDocument::initFromPath(const QString &path)
{
Ass::AssFactory factory(path);
factory.getStyles(styles);
factory.getLines(lines);
styles.clear();
lines.clear();
assFactory = new Ass::AssFactory(path);
assFactory->getStyles(styles);
assFactory->getLines(lines);
}
QString
......@@ -43,3 +45,9 @@ AssSubDocument::getProperties() const noexcept
{ "Styles", styleObject },
});
}
Ass::AssFactory *
AssSubDocument::getFactory() noexcept
{
return assFactory;
}
......@@ -17,7 +17,7 @@ QString
AssLinesModel::Item::getLineText() const noexcept
{
QString ret;
if (auto ptr = line.lock()) {
if (auto ptr = line.get()) {
for (const auto &syl : ptr->getContent()) {
ret.append(syl.getContent());
ret.append("(");
......@@ -33,7 +33,7 @@ AssLinesModel::Item::getLineText() const noexcept
bool
AssLinesModel::Item::getIsComment() const noexcept
{
if (auto ptr = line.lock())
if (auto ptr = line.get())
return ptr->getIsComment();
return false;
}
......@@ -41,7 +41,7 @@ AssLinesModel::Item::getIsComment() const noexcept
QString
AssLinesModel::Item::getLineStyle() const noexcept
{
if (auto ptr = line.lock()) {
if (auto ptr = line.get()) {
if (auto style = ptr->getStyle().lock()) {
return style->getElementName();
}
......@@ -50,7 +50,7 @@ AssLinesModel::Item::getLineStyle() const noexcept
}
void
AssLinesModel::Item::setLine(Ass::LineWeakPtr l) noexcept
AssLinesModel::Item::setLine(Ass::LinePtr l) noexcept
{
line = l;
}
......@@ -86,14 +86,15 @@ AssLinesModel::data(const QModelIndex &index, int role) const noexcept
}
bool
AssLinesModel::setData(const QModelIndex &index, const QVariant & /* value */, int role) noexcept
AssLinesModel::setData(const QModelIndex &index, const QVariant &value, int role) noexcept
{
const int col = index.column();
if (col >= Utils::toUnderlying(Item::Field::TotalFieldCount))
return false;
if (Qt::EditRole == role) {
emit dataChanged(index, index, { Qt::EditRole });
if (Qt::DisplayRole == role) {
childs[index.row()]->setLine(qvariant_cast<Ass::LinePtr>(value));
emit dataChanged(index, index, { Qt::DisplayRole });
return true;
}
......@@ -149,14 +150,12 @@ Qt::ItemFlags
AssLinesModel::flags(const QModelIndex &index) const noexcept
{
[[maybe_unused]] const Item *item = static_cast<const Item *>(index.internalPointer());
return Qt::ItemNeverHasChildren | Qt::ItemIsSelectable | QAbstractItemModel::flags(index);
return Qt::ItemIsEditable | Qt::ItemNeverHasChildren | Qt::ItemIsSelectable |
QAbstractItemModel::flags(index);
}
void
AssLinesModel::updateLine(int lineIndex, Ass::LinePtr line)
{
qDebug() << data(index(lineIndex, 0), Qt::DisplayRole);
childs[lineIndex]->setLine(line);
qDebug() << data(index(lineIndex, 0), Qt::DisplayRole);
qDebug() << "";
setData(index(lineIndex, 0), QVariant::fromValue(line), Qt::DisplayRole);
}
......@@ -27,10 +27,10 @@ private:
QString getLineText() const noexcept;
QString getLineStyle() const noexcept;
void setLine(Ass::LineWeakPtr) noexcept;
void setLine(Ass::LinePtr) noexcept;
private:
Ass::LineWeakPtr line;
Ass::LinePtr line;
};
static inline const QStringList headers{ "", "Style", "Text" };
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter