enable frame suffix in camera capture
This commit is contained in:
parent
866d31d07c
commit
fe105a05cb
6 changed files with 145 additions and 39 deletions
49
toonz/sources/include/toonz/filepathproperties.h
Normal file
49
toonz/sources/include/toonz/filepathproperties.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
#pragma once
|
||||
|
||||
#ifndef FILEPATHPROPERTIES_H
|
||||
#define FILEPATHPROPERTIES_H
|
||||
|
||||
#include "tcommon.h"
|
||||
|
||||
#undef DVAPI
|
||||
#undef DVVAR
|
||||
#ifdef TOONZLIB_EXPORTS
|
||||
#define DVAPI DV_EXPORT_API
|
||||
#define DVVAR DV_EXPORT_VAR
|
||||
#else
|
||||
#define DVAPI DV_IMPORT_API
|
||||
#define DVVAR DV_IMPORT_VAR
|
||||
#endif
|
||||
//=============================================================================
|
||||
// forward declarations
|
||||
class TIStream;
|
||||
class TOStream;
|
||||
|
||||
//=============================================================================
|
||||
// FilePathProperties
|
||||
// This class defines file path condition for sequential image level
|
||||
|
||||
class DVAPI FilePathProperties {
|
||||
bool m_useStandard;
|
||||
bool m_acceptNonAlphabetSuffix;
|
||||
int m_letterCountForSuffix;
|
||||
|
||||
public:
|
||||
FilePathProperties();
|
||||
|
||||
bool useStandard() { return m_useStandard; }
|
||||
void setUseStandard(bool on) { m_useStandard = on; }
|
||||
|
||||
bool acceptNonAlphabetSuffix() { return m_acceptNonAlphabetSuffix; }
|
||||
void setAcceptNonAlphabetSuffix(bool on) { m_acceptNonAlphabetSuffix = on; }
|
||||
|
||||
int letterCountForSuffix() { return m_letterCountForSuffix; }
|
||||
void setLetterCountForSuffix(int val) { m_letterCountForSuffix = val; }
|
||||
|
||||
void saveData(TOStream& os) const;
|
||||
void loadData(TIStream& is);
|
||||
|
||||
bool isDefault();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -161,18 +161,24 @@ QString fidsToString(const std::vector<TFrameId> &fids,
|
|||
bool beginBlock = true;
|
||||
for (int f = 0; f < fids.size() - 1; f++) {
|
||||
int num = fids[f].getNumber();
|
||||
char letter = fids[f].getLetter();
|
||||
int next_num = fids[f + 1].getNumber();
|
||||
if (num + 1 == next_num) {
|
||||
char next_letter = fids[f + 1].getLetter();
|
||||
|
||||
if (num + 1 == next_num && letter == '\0' && next_letter == '\0') {
|
||||
if (beginBlock) {
|
||||
retStr += QString::number(num) + " - ";
|
||||
beginBlock = false;
|
||||
}
|
||||
} else {
|
||||
retStr += QString::number(num) + ", ";
|
||||
retStr += QString::number(num);
|
||||
if (letter != '\0') retStr += QString(letter);
|
||||
retStr += ", ";
|
||||
beginBlock = true;
|
||||
}
|
||||
}
|
||||
retStr += QString::number(fids.back().getNumber());
|
||||
if (fids.back().getLetter() != '\0')
|
||||
retStr += QString(fids.back().getLetter());
|
||||
}
|
||||
return retStr;
|
||||
}
|
||||
|
|
|
@ -666,42 +666,44 @@ void StopMotionSaveInFolderPopup::updateParentFolder() {
|
|||
|
||||
//=============================================================================
|
||||
|
||||
FrameNumberLineEdit::FrameNumberLineEdit(QWidget *parent, int value)
|
||||
FrameNumberLineEdit::FrameNumberLineEdit(QWidget* parent, TFrameId fId,
|
||||
bool acceptLetter)
|
||||
: LineEdit(parent) {
|
||||
setFixedWidth(54);
|
||||
m_intValidator = new QIntValidator(this);
|
||||
setValue(value);
|
||||
m_intValidator->setRange(1, 9999);
|
||||
setFixedWidth(60);
|
||||
if (acceptLetter)
|
||||
m_regexpValidator =
|
||||
new QRegExpValidator(QRegExp("^\\d{1,4}[A-Za-z]?$"), this);
|
||||
else
|
||||
m_regexpValidator = new QRegExpValidator(QRegExp("^\\d{1,4}$"), this);
|
||||
|
||||
QRegExp rx("^[0-9]{1,4}[A-Ia-i]?$");
|
||||
m_regexpValidator = new QRegExpValidator(rx, this);
|
||||
m_regexpValidator_alt =
|
||||
new QRegExpValidator(QRegExp("^\\d{1,3}[A-Ia-i]?$"), this);
|
||||
|
||||
updateValidator();
|
||||
|
||||
setValue(fId);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void FrameNumberLineEdit::updateValidator() {
|
||||
if (Preferences::instance()->isShowFrameNumberWithLettersEnabled())
|
||||
setValidator(m_regexpValidator);
|
||||
setValidator(m_regexpValidator_alt);
|
||||
else
|
||||
setValidator(m_intValidator);
|
||||
setValidator(m_regexpValidator);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void FrameNumberLineEdit::setValue(int value) {
|
||||
if (value <= 0)
|
||||
value = 1;
|
||||
else if (value > 9999)
|
||||
value = 9999;
|
||||
|
||||
void FrameNumberLineEdit::setValue(TFrameId fId) {
|
||||
QString str;
|
||||
if (Preferences::instance()->isShowFrameNumberWithLettersEnabled()) {
|
||||
str = convertToFrameWithLetter(value, 3);
|
||||
if (fId.getLetter() != '\0') {
|
||||
// need some warning?
|
||||
}
|
||||
str = convertToFrameWithLetter(fId.getNumber(), 3);
|
||||
} else {
|
||||
str.setNum(value);
|
||||
while (str.length() < 4) str.push_front("0");
|
||||
str = QString::fromStdString(fId.expand());
|
||||
}
|
||||
setText(str);
|
||||
setCursorPosition(0);
|
||||
|
@ -709,18 +711,27 @@ void FrameNumberLineEdit::setValue(int value) {
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
int FrameNumberLineEdit::getValue() {
|
||||
TFrameId FrameNumberLineEdit::getValue() {
|
||||
if (Preferences::instance()->isShowFrameNumberWithLettersEnabled()) {
|
||||
QString str = text();
|
||||
int f;
|
||||
// if no letters added
|
||||
if (str.at(str.size() - 1).isDigit())
|
||||
return str.toInt() * 10;
|
||||
f = str.toInt() * 10;
|
||||
else {
|
||||
return str.left(str.size() - 1).toInt() * 10 +
|
||||
f = str.left(str.size() - 1).toInt() * 10 +
|
||||
letterToNum(str.at(str.size() - 1));
|
||||
}
|
||||
} else
|
||||
return text().toInt();
|
||||
return TFrameId(f);
|
||||
} else {
|
||||
QRegExp rx("^(\\d{1,4})([A-Za-z]?)$");
|
||||
int pos = rx.indexIn(text());
|
||||
if (pos < 0) return TFrameId();
|
||||
if (rx.cap(2).isEmpty())
|
||||
return TFrameId(rx.cap(1).toInt());
|
||||
else
|
||||
return TFrameId(rx.cap(1).toInt(), rx.cap(2).at(0).toLatin1());
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -3578,7 +3589,7 @@ void StopMotionController::onFileTypeActivated() {
|
|||
//-----------------------------------------------------------------------------
|
||||
|
||||
void StopMotionController::onFrameNumberChanged() {
|
||||
m_stopMotion->setFrameNumber(m_frameNumberEdit->getValue());
|
||||
m_stopMotion->setFrameNumber(m_frameNumberEdit->getValue().getNumber());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#include "toonzqt/dvdialog.h"
|
||||
#include "toonzqt/lineedit.h"
|
||||
|
||||
#include "tfilepath.h"
|
||||
|
||||
// TnzQt includes
|
||||
#include "toonzqt/tabbar.h"
|
||||
#include "toonzqt/gutil.h"
|
||||
|
@ -72,20 +74,20 @@ class IntLineEdit;
|
|||
class FrameNumberLineEdit : public DVGui::LineEdit {
|
||||
Q_OBJECT
|
||||
/* having two validators and switch them according to the preferences*/
|
||||
QIntValidator *m_intValidator;
|
||||
QRegExpValidator *m_regexpValidator;
|
||||
QRegExpValidator *m_regexpValidator, *m_regexpValidator_alt;
|
||||
|
||||
void updateValidator();
|
||||
QString m_textOnFocusIn;
|
||||
|
||||
public:
|
||||
FrameNumberLineEdit(QWidget *parent = 0, int value = 1);
|
||||
FrameNumberLineEdit(QWidget* parent = 0, TFrameId fId = TFrameId(1),
|
||||
bool acceptLetter = true);
|
||||
~FrameNumberLineEdit() {}
|
||||
|
||||
/*! Set text in field to \b value. */
|
||||
void setValue(int value);
|
||||
void setValue(TFrameId fId);
|
||||
/*! Return an integer with text field value. */
|
||||
int getValue();
|
||||
TFrameId getValue();
|
||||
|
||||
protected:
|
||||
/*! If focus is lost and current text value is out of range emit signal
|
||||
|
|
|
@ -196,9 +196,9 @@ AutoInputCellNumberPopup::AutoInputCellNumberPopup()
|
|||
"AutoInputCellNumberPopup") {
|
||||
setWindowTitle(tr("Auto Input Cell Number"));
|
||||
|
||||
m_from = new FrameNumberLineEdit(this);
|
||||
m_from = new FrameNumberLineEdit(this, TFrameId(1), false);
|
||||
m_increment = new DVGui::IntLineEdit(this, 0, 0);
|
||||
m_to = new FrameNumberLineEdit(this);
|
||||
m_to = new FrameNumberLineEdit(this, TFrameId(1), false);
|
||||
m_interval = new DVGui::IntLineEdit(this, 0, 0);
|
||||
m_step = new DVGui::IntLineEdit(this, 1, 1);
|
||||
m_repeat = new DVGui::IntLineEdit(this, 1, 1);
|
||||
|
@ -301,8 +301,8 @@ void AutoInputCellNumberPopup::doExecute(bool overwrite) {
|
|||
}
|
||||
AutoInputCellNumberUndo *undo = new AutoInputCellNumberUndo(
|
||||
m_increment->getValue(), m_interval->getValue(), m_step->getValue(),
|
||||
m_repeat->getValue(), m_from->getValue(), m_to->getValue(), r0, r1,
|
||||
overwrite, columnIndices, levels);
|
||||
m_repeat->getValue(), m_from->getValue().getNumber(),
|
||||
m_to->getValue().getNumber(), r0, r1, overwrite, columnIndices, levels);
|
||||
// if no cells will be arranged, then return
|
||||
if (undo->rowsCount() == 0) {
|
||||
DVGui::MsgBox(DVGui::WARNING,
|
||||
|
|
38
toonz/sources/toonzlib/filepathproperties.cpp
Normal file
38
toonz/sources/toonzlib/filepathproperties.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include "toonz/filepathproperties.h"
|
||||
|
||||
// TnzCore includes
|
||||
#include "tstream.h"
|
||||
|
||||
FilePathProperties::FilePathProperties()
|
||||
: m_useStandard(true)
|
||||
, m_acceptNonAlphabetSuffix(false)
|
||||
, m_letterCountForSuffix(1) {}
|
||||
|
||||
bool FilePathProperties::isDefault() {
|
||||
return (m_useStandard == true && m_acceptNonAlphabetSuffix == false &&
|
||||
m_letterCountForSuffix == 1);
|
||||
}
|
||||
|
||||
void FilePathProperties::saveData(TOStream& os) const {
|
||||
os.child("useStandard") << ((m_useStandard) ? 1 : 0);
|
||||
os.child("acceptNonAlphabetSuffix") << ((m_acceptNonAlphabetSuffix) ? 1 : 0);
|
||||
os.child("letterCountForSuffix") << m_letterCountForSuffix;
|
||||
}
|
||||
|
||||
// make sure to let TFilePath to know the new properties!
|
||||
void FilePathProperties::loadData(TIStream& is) {
|
||||
int val;
|
||||
std::string tagName;
|
||||
while (is.matchTag(tagName)) {
|
||||
if (tagName == "useStandard") {
|
||||
is >> val;
|
||||
m_useStandard = (val == 1);
|
||||
} else if (tagName == "acceptNonAlphabetSuffix") {
|
||||
is >> val;
|
||||
m_acceptNonAlphabetSuffix = (val == 1);
|
||||
} else if (tagName == "letterCountForSuffix") {
|
||||
is >> m_letterCountForSuffix;
|
||||
}
|
||||
is.closeChild();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue