Merge remote-tracking branch 'origin/master' into add_save_all_command
This commit is contained in:
commit
723f49bcab
12 changed files with 243 additions and 58 deletions
|
@ -1,6 +1,7 @@
|
|||
|
||||
|
||||
#include "ttimer.h"
|
||||
#include "tthreadmessage.h"
|
||||
#include "texception.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -178,16 +179,16 @@ public:
|
|||
TGenericTimerAction *m_action;
|
||||
};
|
||||
|
||||
class SendCommandMSG : public TThread::Msg
|
||||
class SendCommandMSG : public TThread::Message
|
||||
{
|
||||
TTimer::Imp *m_ztimp;
|
||||
|
||||
public:
|
||||
SendCommandMSG(TTimer::Imp *ztimp) : TThread::Msg(), m_ztimp(ztimp)
|
||||
SendCommandMSG(TTimer::Imp *ztimp) : TThread::Message(), m_ztimp(ztimp)
|
||||
{
|
||||
}
|
||||
~SendCommandMSG() {}
|
||||
TThread::Msg *clone() const { return new SendCommandMSG(*this); }
|
||||
TThread::Message *clone() const { return new SendCommandMSG(*this); }
|
||||
void onDeliver()
|
||||
{
|
||||
if (m_ztimp->m_action)
|
||||
|
|
|
@ -334,6 +334,12 @@ public:
|
|||
void setDragCellsBehaviour(int dragCellsBehaviour);
|
||||
int getDragCellsBehaviour() const { return m_dragCellsBehaviour; }
|
||||
|
||||
void enableShowKeyframesOnXsheetCellArea(bool on);
|
||||
bool isShowKeyframesOnXsheetCellAreaEnabled() const
|
||||
{
|
||||
return m_showKeyframesOnXsheetCellArea;
|
||||
}
|
||||
|
||||
// Animation tab
|
||||
|
||||
void setKeyframeType(int s);
|
||||
|
@ -528,6 +534,8 @@ private:
|
|||
--*/
|
||||
int m_paletteTypeOnLoadRasterImageAsColorModel;
|
||||
|
||||
bool m_showKeyframesOnXsheetCellArea;
|
||||
|
||||
private:
|
||||
Preferences();
|
||||
~Preferences();
|
||||
|
|
|
@ -119,7 +119,7 @@ public:
|
|||
|
||||
QString getHistoryString()
|
||||
{
|
||||
return QObject::tr("Set Keyframe %1 at frame %2").arg(QString::fromStdString(m_objId.toString())).arg(m_frame);
|
||||
return QObject::tr("Set Keyframe %1 at frame %2").arg(QString::fromStdString(m_objId.toString())).arg(m_frame+1);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 15 KiB |
|
@ -6,6 +6,9 @@
|
|||
#include "tapp.h"
|
||||
#include "xsheetviewer.h"
|
||||
|
||||
// TnzQt includes
|
||||
#include "historytypes.h"
|
||||
|
||||
// TnzLib includes
|
||||
#include "toonz/txsheethandle.h"
|
||||
#include "toonz/tscenehandle.h"
|
||||
|
@ -230,6 +233,16 @@ public:
|
|||
{
|
||||
return sizeof(*this);
|
||||
}
|
||||
|
||||
QString getHistoryString()
|
||||
{
|
||||
return QObject::tr("Move Keyframe");
|
||||
}
|
||||
|
||||
int getHistoryType()
|
||||
{
|
||||
return HistoryType::Xsheet;
|
||||
}
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
@ -637,6 +637,13 @@ void PreferencesPopup::onPaletteTypeForRasterColorModelChanged(int index)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void PreferencesPopup::onShowKeyframesOnCellAreaChanged(int index)
|
||||
{
|
||||
m_pref->enableShowKeyframesOnXsheetCellArea(index == Qt::Checked);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void PreferencesPopup::onStyleSheetTypeChanged(int index)
|
||||
{
|
||||
m_pref->setCurrentStyleSheet(index);
|
||||
|
@ -943,6 +950,7 @@ PreferencesPopup::PreferencesPopup()
|
|||
m_xsheetStep = new DVGui::IntLineEdit(this, Preferences::instance()->getXsheetStep(), 0);
|
||||
m_cellsDragBehaviour = new QComboBox();
|
||||
CheckBox *ignoreAlphaonColumn1CB = new CheckBox(tr("Ignore Alpha Channel on Levels in Column 1"), this);
|
||||
CheckBox *showKeyframesOnCellAreaCB = new CheckBox(tr("Show Keyframes on Cell Area"), this);
|
||||
|
||||
//--- Animation ------------------------------
|
||||
categoryList->addItem(tr("Animation"));
|
||||
|
@ -1129,6 +1137,7 @@ PreferencesPopup::PreferencesPopup()
|
|||
m_cellsDragBehaviour->addItem(tr("Cells and Column Data"));
|
||||
m_cellsDragBehaviour->setCurrentIndex(m_pref->getDragCellsBehaviour());
|
||||
ignoreAlphaonColumn1CB->setChecked(m_pref->isIgnoreAlphaonColumn1Enabled());
|
||||
showKeyframesOnCellAreaCB->setChecked(m_pref->isShowKeyframesOnXsheetCellAreaEnabled());
|
||||
|
||||
//--- Animation ------------------------------
|
||||
QStringList list;
|
||||
|
@ -1416,11 +1425,12 @@ PreferencesPopup::PreferencesPopup()
|
|||
xsheetFrameLay->addWidget(m_cellsDragBehaviour, 2, 1);
|
||||
|
||||
xsheetFrameLay->addWidget(ignoreAlphaonColumn1CB, 3, 0, 1, 2);
|
||||
xsheetFrameLay->addWidget(showKeyframesOnCellAreaCB, 4, 0, 1, 2);
|
||||
}
|
||||
xsheetFrameLay->setColumnStretch(0, 0);
|
||||
xsheetFrameLay->setColumnStretch(1, 0);
|
||||
xsheetFrameLay->setColumnStretch(2, 1);
|
||||
xsheetFrameLay->setRowStretch(4, 1);
|
||||
xsheetFrameLay->setRowStretch(5, 1);
|
||||
xsheetBox->setLayout(xsheetFrameLay);
|
||||
stackedWidget->addWidget(xsheetBox);
|
||||
|
||||
|
@ -1628,6 +1638,7 @@ PreferencesPopup::PreferencesPopup()
|
|||
ret = ret && connect(ignoreAlphaonColumn1CB, SIGNAL(stateChanged(int)), this, SLOT(onIgnoreAlphaonColumn1Changed(int)));
|
||||
ret = ret && connect(m_xsheetStep, SIGNAL(editingFinished()), SLOT(onXsheetStepChanged()));
|
||||
ret = ret && connect(m_cellsDragBehaviour, SIGNAL(currentIndexChanged(int)), SLOT(onDragCellsBehaviourChanged(int)));
|
||||
ret = ret && connect(showKeyframesOnCellAreaCB, SIGNAL(stateChanged(int)), this, SLOT(onShowKeyframesOnCellAreaChanged(int)));
|
||||
|
||||
//--- Animation ----------------------
|
||||
ret = ret && connect(m_keyframeType, SIGNAL(currentIndexChanged(int)), SLOT(onKeyframeTypeChanged(int)));
|
||||
|
|
|
@ -167,6 +167,7 @@ private slots:
|
|||
void onShowRasterImageDarkenBlendedInViewerChanged(int index);
|
||||
void onShowFrameNumberWithLettersChanged(int index);
|
||||
void onPaletteTypeForRasterColorModelChanged(int index);
|
||||
void onShowKeyframesOnCellAreaChanged(int);
|
||||
};
|
||||
|
||||
//**********************************************************************************
|
||||
|
|
|
@ -797,26 +797,27 @@ void CellArea::drawCells(QPainter &p, const QRect toBeUpdated)
|
|||
}
|
||||
|
||||
// smart tab
|
||||
int smartTabPosOffset = (Preferences::instance()->isShowKeyframesOnXsheetCellAreaEnabled()) ? 31 : 20;
|
||||
if (!cellSelection->isEmpty() && !m_viewer->areSoundCellsSelected()) {
|
||||
m_levelExtenderRect = QRect(xS1 - 20, yS1 + 1, 19, 8);
|
||||
m_levelExtenderRect = QRect(xS1 - smartTabPosOffset, yS1 + 1, 19, 8);
|
||||
p.setPen(Qt::black);
|
||||
p.setBrush(SmartTabColor);
|
||||
p.drawRoundRect(m_levelExtenderRect, 30, 75);
|
||||
QColor color = ((rS1 + 1 - offset) % distance != 0) ? m_viewer->getLightLineColor() : m_viewer->getMarkerLineColor();
|
||||
p.setPen(color);
|
||||
p.drawLine(xS1 - 20, yS1 + 1, xS1 - 1, yS1 + 1);
|
||||
p.drawLine(xS1 - smartTabPosOffset, yS1 + 1, xS1 - 1, yS1 + 1);
|
||||
|
||||
// upper-directional smart tab
|
||||
if (isCtrlPressed &&
|
||||
rS0 > 0 &&
|
||||
!m_viewer->areCellsSelectedEmpty()) {
|
||||
m_upperLevelExtenderRect = QRect(xS1 - 20, yS0 - 8, 19, 8);
|
||||
m_upperLevelExtenderRect = QRect(xS1 - smartTabPosOffset, yS0 - 8, 19, 8);
|
||||
p.setPen(Qt::black);
|
||||
p.setBrush(SmartTabColor);
|
||||
p.drawRoundRect(m_upperLevelExtenderRect, 30, 75);
|
||||
QColor color = ((rS0 - offset) % distance != 0) ? m_viewer->getLightLineColor() : m_viewer->getMarkerLineColor();
|
||||
p.setPen(color);
|
||||
p.drawLine(xS1 - 20, yS0, xS0 + 20, yS0);
|
||||
p.drawLine(xS1 - smartTabPosOffset, yS0, xS1 - 1, yS0);
|
||||
}
|
||||
|
||||
p.setBrush(Qt::NoBrush);
|
||||
|
@ -970,8 +971,10 @@ void CellArea::drawLevelCell(QPainter &p, int row, int col, bool isReference)
|
|||
int x = m_viewer->columnToX(col);
|
||||
int y = m_viewer->rowToY(row);
|
||||
QRect rect = QRect(x + 1, y + 1, ColumnWidth - 1, RowHeight - 1);
|
||||
if (cell.isEmpty()) { // vuol dire che la precedente non e' vuota
|
||||
p.setPen(XsheetGUI::LevelEndCrossColor);
|
||||
if (cell.isEmpty()) { // draw end-of-level mark of which the previous cell is not empty
|
||||
QColor levelEndColor = m_viewer->getTextColor();
|
||||
levelEndColor.setAlphaF(0.3);
|
||||
p.setPen(levelEndColor);
|
||||
p.drawLine(rect.topLeft(), rect.bottomRight());
|
||||
p.drawLine(rect.topRight(), rect.bottomLeft());
|
||||
return;
|
||||
|
@ -1008,7 +1011,7 @@ void CellArea::drawLevelCell(QPainter &p, int row, int col, bool isReference)
|
|||
//draw dot line if the column is locked
|
||||
TXshColumn *column = xsh->getColumn(col);
|
||||
if (column->isLocked()) {
|
||||
p.setPen(QPen(Qt::gray, 2, Qt::DotLine));
|
||||
p.setPen(QPen(cellColor, 2, Qt::DotLine));
|
||||
p.drawLine(x + 3, y, x + 3, y + RowHeight);
|
||||
}
|
||||
// draw "end of the level"
|
||||
|
@ -1036,6 +1039,14 @@ void CellArea::drawLevelCell(QPainter &p, int row, int col, bool isReference)
|
|||
|
||||
QRect nameRect = rect.adjusted(7, 4, -6, 0);
|
||||
|
||||
if (Preferences::instance()->isShowKeyframesOnXsheetCellAreaEnabled())
|
||||
{
|
||||
TStageObject *pegbar = xsh->getStageObject(m_viewer->getObjectId(col));
|
||||
int r0, r1;
|
||||
if (pegbar && pegbar->getKeyframeRange(r0,r1))
|
||||
nameRect.adjust(0, 0, -9, 0);
|
||||
}
|
||||
|
||||
//draw text in red if the file does not exist
|
||||
bool isRed = false;
|
||||
TXshSimpleLevel *sl = cell.getSimpleLevel();
|
||||
|
@ -1182,8 +1193,10 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col, bool isReference)
|
|||
int x = m_viewer->columnToX(col);
|
||||
int y = m_viewer->rowToY(row);
|
||||
QRect rect = QRect(x + 1, y + 1, ColumnWidth - 1, RowHeight - 1);
|
||||
if (cell.isEmpty()) { // vuol dire che la precedente non e' vuota
|
||||
p.setPen(XsheetGUI::LevelEndCrossColor);
|
||||
if (cell.isEmpty()) { // draw end-of-level mark of which the previous cell is not empty
|
||||
QColor levelEndColor = m_viewer->getTextColor();
|
||||
levelEndColor.setAlphaF(0.3);
|
||||
p.setPen(levelEndColor);
|
||||
p.drawLine(rect.topLeft(), rect.bottomRight());
|
||||
p.drawLine(rect.topRight(), rect.bottomLeft());
|
||||
return;
|
||||
|
@ -1203,7 +1216,7 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col, bool isReference)
|
|||
|
||||
TXshColumn *column = xsh->getColumn(col);
|
||||
if (column->isLocked()) {
|
||||
p.setPen(QPen(Qt::gray, 2, Qt::DotLine));
|
||||
p.setPen(QPen(cellColor, 2, Qt::DotLine));
|
||||
p.drawLine(x + 3, y, x + 3, y + RowHeight);
|
||||
}
|
||||
|
||||
|
@ -1286,12 +1299,16 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col, bool isReference)
|
|||
|
||||
void CellArea::drawKeyframe(QPainter &p, const QRect toBeUpdated)
|
||||
{
|
||||
int r0, r1, c0, c1; // range di righe e colonne visibili
|
||||
int r0, r1, c0, c1; // range of visible rows and columns
|
||||
r0 = m_viewer->yToRow(toBeUpdated.top());
|
||||
r1 = m_viewer->yToRow(toBeUpdated.bottom());
|
||||
c0 = m_viewer->xToColumn(toBeUpdated.left());
|
||||
c1 = m_viewer->xToColumn(toBeUpdated.right());
|
||||
|
||||
static QPixmap selectedKey = QPixmap(":Resources/selected_key.bmp");
|
||||
static QPixmap key = QPixmap(":Resources/key.bmp");
|
||||
int keyPixOffset = (RowHeight - key.height()) / 2;
|
||||
|
||||
TXsheet *xsh = m_viewer->getXsheet();
|
||||
ColumnFan *columnFan = xsh->getColumnFan();
|
||||
int col;
|
||||
|
@ -1310,48 +1327,59 @@ void CellArea::drawKeyframe(QPainter &p, const QRect toBeUpdated)
|
|||
int row;
|
||||
row0 = tmax(row0, r0);
|
||||
row1 = tmin(row1, r1);
|
||||
|
||||
/*- first, draw key segments -*/
|
||||
p.setPen(m_viewer->getTextColor());
|
||||
int x_line = x + ColumnWidth - 8;
|
||||
for (row = row0; row <= row1; row++) {
|
||||
int y = m_viewer->rowToY(row);
|
||||
int r0, r1;
|
||||
int hr0, hr1;
|
||||
double e0, e1;
|
||||
p.setPen(Qt::black);
|
||||
if (pegbar->getKeyframeSpan(row, hr0, e0, hr1, e1)) {
|
||||
int y0 = m_viewer->rowToY(hr0+1) - keyPixOffset;
|
||||
int y1 = m_viewer->rowToY(hr1) + keyPixOffset;
|
||||
p.drawLine(x_line, y0, x_line, y1);
|
||||
if (hr1 - hr0 > 4) {
|
||||
int rh0, rh1;
|
||||
if (getEaseHandles(hr0, hr1, e0, e1, rh0, rh1)) {
|
||||
int e0Y = m_viewer->rowToY(rh0) + keyPixOffset;
|
||||
drawArrow(p, QPointF(x_line - 4, e0Y + 2),
|
||||
QPointF(x_line + 4, e0Y + 2),
|
||||
QPointF(x_line, e0Y + 6),
|
||||
true, m_viewer->getLightLineColor(), m_viewer->getTextColor());
|
||||
int e1Y = m_viewer->rowToY(rh1 + 1) - keyPixOffset;
|
||||
drawArrow(p, QPointF(x_line - 4, e1Y - 2),
|
||||
QPointF(x_line + 4, e1Y - 2),
|
||||
QPointF(x_line, e1Y - 6),
|
||||
true, m_viewer->getLightLineColor(), m_viewer->getTextColor());
|
||||
}
|
||||
}
|
||||
// jump to next segment
|
||||
row = hr1-1;
|
||||
}
|
||||
else if (pegbar->isKeyframe(row) && pegbar->isKeyframe(row+1)) {
|
||||
int y0 = m_viewer->rowToY(row + 1);
|
||||
p.drawLine(x_line, y0 - keyPixOffset, x_line, y0 + keyPixOffset);
|
||||
}
|
||||
}
|
||||
|
||||
/*- then draw keyframe pixmaps -*/
|
||||
int x1 = x + ColumnWidth - 13;
|
||||
for (row = row0; row <= row1; row++) {
|
||||
int y = m_viewer->rowToY(row)+1;
|
||||
p.setPen(m_viewer->getTextColor());
|
||||
if (pegbar->isKeyframe(row)) {
|
||||
if (m_viewer->getKeyframeSelection() &&
|
||||
m_viewer->getKeyframeSelection()->isSelected(row, col)) {
|
||||
// keyframe selezionato
|
||||
static QPixmap selectedKey = QPixmap(":Resources/selected_key.bmp");
|
||||
p.drawPixmap(x + ColumnWidth - 11, y, selectedKey);
|
||||
p.drawPixmap(x1, y + keyPixOffset, selectedKey);
|
||||
} else {
|
||||
// keyframe non selezionato
|
||||
static QPixmap key = QPixmap(":Resources/key.bmp");
|
||||
p.drawPixmap(x + ColumnWidth - 11, y, key);
|
||||
p.drawPixmap(x1, y + keyPixOffset, key);
|
||||
}
|
||||
} else if (pegbar->getKeyframeSpan(row, r0, e0, r1, e1)) {
|
||||
// sono fra due keyframe: devo disegnare la linea e i bilancini
|
||||
int y1 = m_viewer->rowToY(r1 + 1);
|
||||
int x1 = x + ColumnWidth - 6;
|
||||
p.drawLine(x + ColumnWidth - 6, y, x + ColumnWidth - 6, y1);
|
||||
if (r1 - r0 > 4) {
|
||||
int rh0, rh1;
|
||||
#ifndef STUDENT
|
||||
if (getEaseHandles(r0, r1, e0, e1, rh0, rh1)) {
|
||||
int e0Y = m_viewer->rowToY(rh0);
|
||||
drawArrow(p, QPointF(x1 - 4, e0Y + 2),
|
||||
QPointF(x1 + 4, e0Y + 2),
|
||||
QPointF(x1, e0Y + 6),
|
||||
true, m_viewer->getLightLineColor());
|
||||
int e1Y = m_viewer->rowToY(rh1 + 1);
|
||||
drawArrow(p, QPointF(x1 - 4, e1Y - 2),
|
||||
QPointF(x1 + 4, e1Y - 2),
|
||||
QPointF(x1, e1Y - 6),
|
||||
true, m_viewer->getLightLineColor());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int y1 = m_viewer->rowToY(row1 + 1);
|
||||
int x1 = x + ColumnWidth - 11;
|
||||
if (!emptyKeyframeRange && row0 <= row1 + 1) {
|
||||
// c'e' piu' di un keyframe
|
||||
// disegno il bottone per il ciclo
|
||||
|
@ -1377,7 +1405,7 @@ void CellArea::drawKeyframe(QPainter &p, const QRect toBeUpdated)
|
|||
int qy = y1 + 12;
|
||||
int zig = 2;
|
||||
int qx = x1 + 5;
|
||||
p.setPen(Qt::black);
|
||||
p.setPen(m_viewer->getTextColor());
|
||||
p.drawLine(qx, qy, qx - zig, qy + zig);
|
||||
while (qy < ymax) {
|
||||
p.drawLine(qx - zig, qy + zig, qx + zig, qy + 3 * zig);
|
||||
|
@ -1485,7 +1513,8 @@ void CellArea::paintEvent(QPaintEvent *event)
|
|||
p.fillRect(toBeUpdated, QBrush(m_viewer->getEmptyCellColor()));
|
||||
|
||||
drawCells(p, toBeUpdated);
|
||||
//drawKeyframe(p, toBeUpdated);
|
||||
if (Preferences::instance()->isShowKeyframesOnXsheetCellAreaEnabled())
|
||||
drawKeyframe(p, toBeUpdated);
|
||||
drawNotes(p, toBeUpdated);
|
||||
|
||||
if (getDragTool())
|
||||
|
@ -1518,6 +1547,15 @@ public:
|
|||
}
|
||||
void redo() const { undo(); }
|
||||
int getSize() const { return sizeof *this; }
|
||||
|
||||
QString getHistoryString()
|
||||
{
|
||||
return QObject::tr("Toggle cycle of %1").arg(QString::fromStdString(m_pegbar->getName()));
|
||||
}
|
||||
int getHistoryType()
|
||||
{
|
||||
return HistoryType::Xsheet;
|
||||
}
|
||||
};
|
||||
//----------------------------------------------------------
|
||||
|
||||
|
@ -1581,7 +1619,47 @@ void CellArea::mousePressEvent(QMouseEvent *event)
|
|||
|
||||
TStageObject *pegbar = xsh->getStageObject(m_viewer->getObjectId(col));
|
||||
|
||||
m_viewer->getKeyframeSelection()->selectNone();
|
||||
if (Preferences::instance()->isShowKeyframesOnXsheetCellAreaEnabled())
|
||||
{
|
||||
int k0, k1;
|
||||
bool isKeyFrameArea = (pegbar && pegbar->getKeyframeRange(k0, k1) &&
|
||||
(k1 > k0 || k0 == row) && k0 <= row && row <= k1 + 1 &&
|
||||
ColumnWidth - 13 <= x && x <= ColumnWidth)
|
||||
? true
|
||||
: false;
|
||||
|
||||
if (isKeyFrameArea)
|
||||
{ // They are in the keyframe selection
|
||||
if (pegbar->isKeyframe(row))// in the keyframe
|
||||
{
|
||||
m_viewer->setCurrentRow(row); //If you click on the key, change the current row as well
|
||||
setDragTool(XsheetGUI::DragTool::makeKeyframeMoverTool(m_viewer));
|
||||
}
|
||||
else
|
||||
{
|
||||
int r0, r1;
|
||||
double e0, e1;
|
||||
int rh0, rh1;
|
||||
if (pegbar->getKeyframeSpan(row, r0, e0, r1, e1) &&
|
||||
getEaseHandles(r0, r1, e0, e1, rh0, rh1))
|
||||
{
|
||||
if (rh0 == row) // in a keyframe handle
|
||||
setDragTool(XsheetGUI::DragTool::makeKeyFrameHandleMoverTool(m_viewer, true, r0));
|
||||
else if (rh1 == row) // in a keyframe handle
|
||||
setDragTool(XsheetGUI::DragTool::makeKeyFrameHandleMoverTool(m_viewer, false, r1));
|
||||
}
|
||||
if (row == k1 + 1) // in the cycle toggle
|
||||
{
|
||||
pegbar->enableCycle(!pegbar->isCycleEnabled());
|
||||
TUndoManager::manager()->add(new CycleUndo(pegbar, this));
|
||||
}
|
||||
}
|
||||
m_viewer->dragToolClick(event);
|
||||
event->accept();
|
||||
update();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((!xsh->getCell(row, col).isEmpty()) && x < 6) {
|
||||
TXshColumn *column = xsh->getColumn(col);
|
||||
|
@ -1669,7 +1747,30 @@ void CellArea::mouseMoveEvent(QMouseEvent *event)
|
|||
isZeraryColumn = (!zeraryColumn) ? false : true;
|
||||
}
|
||||
|
||||
if ((!xsh->getCell(row, col).isEmpty() || isSoundColumn) && x < 6)
|
||||
TStageObject* pegbar = xsh->getStageObject(m_viewer->getObjectId(col));
|
||||
int k0, k1;
|
||||
if (Preferences::instance()->isShowKeyframesOnXsheetCellAreaEnabled() && pegbar && pegbar->getKeyframeRange(k0, k1) && k0 <= row && row <= k1 + 1 && ColumnWidth - 13 <= x && x <= ColumnWidth)
|
||||
{
|
||||
if (pegbar->isKeyframe(row)) // key frame
|
||||
m_tooltip = tr("Click to select keyframe, drag to move it");
|
||||
else
|
||||
{
|
||||
int r0, r1;
|
||||
double e0, e1;
|
||||
int rh0, rh1;
|
||||
if (pegbar->getKeyframeSpan(row, r0, e0, r1, e1) &&
|
||||
getEaseHandles(r0, r1, e0, e1, rh0, rh1))
|
||||
{ // triangles in the segment betweeen key frames
|
||||
if (rh0 == row)
|
||||
m_tooltip = tr("Click and drag to set the acceleration range");
|
||||
else if (rh1 == row)
|
||||
m_tooltip = tr("Click and drag to set the deceleration range");
|
||||
}
|
||||
if (row == k1 + 1) // cycle toggle of key frames
|
||||
m_tooltip = tr("Set the cycle of previous keyframes");
|
||||
}
|
||||
}
|
||||
else if((!xsh->getCell(row, col).isEmpty() || isSoundColumn) && x < 6)
|
||||
m_tooltip = tr("Click and drag to move the selection");
|
||||
else if (isZeraryColumn)
|
||||
m_tooltip = QString::fromStdWString(column->getZeraryFxColumn()->getZeraryColumnFx()->getZeraryFx()->getName());
|
||||
|
@ -1743,6 +1844,22 @@ void CellArea::mouseDoubleClickEvent(QMouseEvent *event)
|
|||
TObjectHandle *oh = TApp::instance()->getCurrentObject();
|
||||
oh->setObjectId(m_viewer->getObjectId(col));
|
||||
|
||||
if (Preferences::instance()->isShowKeyframesOnXsheetCellAreaEnabled())
|
||||
{
|
||||
int x = pos.x - m_viewer->columnToX(col);
|
||||
TStageObject* pegbar = m_viewer->getXsheet()->getStageObject(m_viewer->getObjectId(col));
|
||||
bool isKeyFrameArea = (pegbar && pegbar->isKeyframe(row) && ColumnWidth - 13 <= x && x <= ColumnWidth)
|
||||
? true
|
||||
: false;
|
||||
//If you are in the keyframe area, open a function editor
|
||||
if (isKeyFrameArea)
|
||||
{
|
||||
QAction *action = CommandManager::instance()->getAction(MI_OpenFunctionEditor);
|
||||
action->trigger();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (col == -1)
|
||||
return;
|
||||
|
||||
|
@ -1786,11 +1903,35 @@ void CellArea::contextMenuEvent(QContextMenuEvent *event)
|
|||
int y1 = m_viewer->rowToY(row) - 1;
|
||||
int x = pos.x - x0;
|
||||
TStageObject *pegbar = xsh->getStageObject(m_viewer->getObjectId(col));
|
||||
int k0, k1;
|
||||
int r0, r1, c0, c1;
|
||||
if (col >= 0)
|
||||
m_viewer->getCellSelection()->getSelectedCells(r0, c0, r1, c1);
|
||||
|
||||
if (col >= 0 && //Non e' la colonna di camera
|
||||
|
||||
if (pegbar && pegbar->getKeyframeRange(k0, k1) && k0 <= row && row <= k1 &&
|
||||
ColumnWidth - 13 <= x && x <= ColumnWidth &&
|
||||
Preferences::instance()->isShowKeyframesOnXsheetCellAreaEnabled())
|
||||
{
|
||||
TStageObjectId objectId;
|
||||
if (col<0) objectId = TStageObjectId::CameraId(0);
|
||||
else
|
||||
{ //Set the current column and the current object
|
||||
objectId = TStageObjectId::ColumnId(col);
|
||||
m_viewer->setCurrentColumn(col);
|
||||
}
|
||||
TApp::instance()->getCurrentObject()->setObjectId(objectId);
|
||||
m_viewer->setCurrentRow(row);
|
||||
if (pegbar->isKeyframe(row))
|
||||
{ //clicking on keyframes
|
||||
TKeyframeSelection* keyframeSelection = m_viewer->getKeyframeSelection();
|
||||
keyframeSelection->select(row, col);
|
||||
keyframeSelection->makeCurrent();
|
||||
createKeyMenu(menu);
|
||||
}
|
||||
else if (!xsh->getColumn(col) || !xsh->getColumn(col)->isLocked())// on the line between two keyframes
|
||||
createKeyLineMenu(menu, row, col);
|
||||
}
|
||||
else if (col >= 0 && //Non e' la colonna di camera
|
||||
m_viewer->getCellSelection()->isCellSelected(row, col) && //La cella e' selezionata
|
||||
(abs(r1 - r0) > 0 || abs(c1 - c0) > 0)) //Il numero di celle selezionate e' maggiore di 1
|
||||
{ //Sono su una selezione di celle
|
||||
|
@ -1818,6 +1959,7 @@ void CellArea::contextMenuEvent(QContextMenuEvent *event)
|
|||
else
|
||||
createCellMenu(menu, false);
|
||||
}
|
||||
|
||||
if (!menu.isEmpty())
|
||||
menu.exec(event->globalPos());
|
||||
}
|
||||
|
@ -1989,6 +2131,7 @@ void CellArea::createCellMenu(QMenu &menu, bool isCellSelected)
|
|||
menu.addAction(cmdManager->getAction(MI_RevertToCleanedUp));
|
||||
if (selectionContainLevelImage(m_viewer->getCellSelection(), m_viewer->getXsheet()))
|
||||
menu.addAction(cmdManager->getAction(MI_RevertToLastSaved));
|
||||
menu.addAction(cmdManager->getAction(MI_SetKeyframes));
|
||||
}
|
||||
menu.addSeparator();
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ class CellArea : public QWidget
|
|||
QString m_tooltip;
|
||||
|
||||
RenameCellField *m_renameCell;
|
||||
|
||||
|
||||
void drawCells(QPainter &p, const QRect toBeUpdated);
|
||||
void drawLevelCell(QPainter &p, int row, int col, bool isReference = false);
|
||||
void drawSoundTextCell(QPainter &p, int row, int col);
|
||||
|
@ -123,6 +123,7 @@ protected slots:
|
|||
void onStepChanged(QAction *);
|
||||
// replace level with another level in the cast
|
||||
void onReplaceByCastedLevel(QAction *action);
|
||||
|
||||
};
|
||||
|
||||
} // namespace XsheetGUI
|
||||
|
|
|
@ -1173,7 +1173,7 @@ public:
|
|||
|
||||
QString getHistoryString()
|
||||
{
|
||||
return QObject::tr("Set Keyframe : %1 at Frame %2")
|
||||
return QObject::tr("Move keyframe handle : %1 Handle of the keyframe %2")
|
||||
.arg(QString::fromStdString(m_objId.toString()))
|
||||
.arg(QString::number(m_row + 1));
|
||||
}
|
||||
|
|
|
@ -111,8 +111,6 @@ const QColor XsheetBGColor(212, 208, 200);
|
|||
//Xsheet horizontal lines
|
||||
const QColor NormalHLineColor(146, 144, 146);
|
||||
const QColor IntervalHLineColor(0, 255, 246);
|
||||
//"X" mark at the end of the level
|
||||
const QColor LevelEndCrossColor(50, 50, 50);
|
||||
|
||||
//column header
|
||||
const QColor EmptyColumnHeadColor(200, 200, 200);
|
||||
|
|
|
@ -227,7 +227,7 @@ bool Preferences::LevelFormat::matches(const TFilePath &fp) const
|
|||
//**********************************************************************************
|
||||
|
||||
Preferences::Preferences()
|
||||
: m_units("mm"), m_cameraUnits("inch"), m_scanLevelType("tif"), m_defLevelWidth(0.0), m_defLevelHeight(0.0), m_defLevelDpi(0.0), m_iconSize(160, 120), m_blankColor(TPixel32::White), m_frontOnionColor(TPixel::Black), m_backOnionColor(TPixel::Black), m_transpCheckBg(TPixel::White), m_transpCheckInk(TPixel::Black), m_transpCheckPaint(TPixel(127, 127, 127)), m_autosavePeriod(15), m_chunkSize(10), m_rasterOptimizedMemory(0), m_shrink(1), m_step(1), m_blanksCount(0), m_keyframeType(3), m_animationStep(1), m_textureSize(0), m_xsheetStep(10), m_shmmax(-1), m_shmseg(-1), m_shmall(-1), m_shmmni(-1), m_onionPaperThickness(50), m_currentLanguage(0), m_currentStyleSheet(0), m_undoMemorySize(100), m_dragCellsBehaviour(0), m_lineTestFpsCapture(25), m_defLevelType(0), m_autocreationType(1), m_autoExposeEnabled(true), m_autoCreateEnabled(true), m_subsceneFolderEnabled(true), m_generatedMovieViewEnabled(true), m_xsheetAutopanEnabled(true), m_ignoreAlphaonColumn1Enabled(false), m_rewindAfterPlaybackEnabled(true), m_fitToFlipbookEnabled(false), m_previewAlwaysOpenNewFlipEnabled(false), m_autosaveEnabled(false), m_defaultViewerEnabled(false), m_saveUnpaintedInCleanup(true), m_askForOverrideRender(true), m_automaticSVNFolderRefreshEnabled(true), m_SVNEnabled(false), m_minimizeSaveboxAfterEditing(true), m_levelsBackupEnabled(false), m_sceneNumberingEnabled(false), m_animationSheetEnabled(false), m_inksOnly(false), m_fillOnlySavebox(false), m_show0ThickLines(true), m_regionAntialias(false), m_viewerBGColor(128, 128, 128, 255), m_previewBGColor(64, 64, 64, 255), m_chessboardColor1(180, 180, 180), m_chessboardColor2(230, 230, 230), m_showRasterImagesDarkenBlendedInViewer(false), m_actualPixelViewOnSceneEditingMode(false), m_viewerZoomCenter(0), m_initialLoadTlvCachingBehavior(0), m_removeSceneNumberFromLoadedLevelName(false), m_replaceAfterSaveLevelAs(true), m_showFrameNumberWithLetters(false), m_levelNameOnEachMarker(false), m_columnIconLoadingPolicy((int)LoadAtOnce), m_moveCurrentFrameByClickCellArea(true), m_onionSkinEnabled(false), m_multiLayerStylePickerEnabled(false), m_paletteTypeOnLoadRasterImageAsColorModel(0)
|
||||
: m_units("mm"), m_cameraUnits("inch"), m_scanLevelType("tif"), m_defLevelWidth(0.0), m_defLevelHeight(0.0), m_defLevelDpi(0.0), m_iconSize(160, 120), m_blankColor(TPixel32::White), m_frontOnionColor(TPixel::Black), m_backOnionColor(TPixel::Black), m_transpCheckBg(TPixel::White), m_transpCheckInk(TPixel::Black), m_transpCheckPaint(TPixel(127, 127, 127)), m_autosavePeriod(15), m_chunkSize(10), m_rasterOptimizedMemory(0), m_shrink(1), m_step(1), m_blanksCount(0), m_keyframeType(3), m_animationStep(1), m_textureSize(0), m_xsheetStep(10), m_shmmax(-1), m_shmseg(-1), m_shmall(-1), m_shmmni(-1), m_onionPaperThickness(50), m_currentLanguage(0), m_currentStyleSheet(0), m_undoMemorySize(100), m_dragCellsBehaviour(0), m_lineTestFpsCapture(25), m_defLevelType(0), m_autocreationType(1), m_autoExposeEnabled(true), m_autoCreateEnabled(true), m_subsceneFolderEnabled(true), m_generatedMovieViewEnabled(true), m_xsheetAutopanEnabled(true), m_ignoreAlphaonColumn1Enabled(false), m_rewindAfterPlaybackEnabled(true), m_fitToFlipbookEnabled(false), m_previewAlwaysOpenNewFlipEnabled(false), m_autosaveEnabled(false), m_defaultViewerEnabled(false), m_saveUnpaintedInCleanup(true), m_askForOverrideRender(true), m_automaticSVNFolderRefreshEnabled(true), m_SVNEnabled(false), m_minimizeSaveboxAfterEditing(true), m_levelsBackupEnabled(false), m_sceneNumberingEnabled(false), m_animationSheetEnabled(false), m_inksOnly(false), m_fillOnlySavebox(false), m_show0ThickLines(true), m_regionAntialias(false), m_viewerBGColor(128, 128, 128, 255), m_previewBGColor(64, 64, 64, 255), m_chessboardColor1(180, 180, 180), m_chessboardColor2(230, 230, 230), m_showRasterImagesDarkenBlendedInViewer(false), m_actualPixelViewOnSceneEditingMode(false), m_viewerZoomCenter(0), m_initialLoadTlvCachingBehavior(0), m_removeSceneNumberFromLoadedLevelName(false), m_replaceAfterSaveLevelAs(true), m_showFrameNumberWithLetters(false), m_levelNameOnEachMarker(false), m_columnIconLoadingPolicy((int)LoadAtOnce), m_moveCurrentFrameByClickCellArea(true), m_onionSkinEnabled(false), m_multiLayerStylePickerEnabled(false), m_paletteTypeOnLoadRasterImageAsColorModel(0), m_showKeyframesOnXsheetCellArea(true)
|
||||
{
|
||||
TCamera camera;
|
||||
m_defLevelType = PLI_XSHLEVEL;
|
||||
|
@ -423,6 +423,7 @@ Preferences::Preferences()
|
|||
getValue(*m_settings, "onionSkinEnabled", m_onionSkinEnabled);
|
||||
getValue(*m_settings, "multiLayerStylePickerEnabled", m_multiLayerStylePickerEnabled);
|
||||
getValue(*m_settings, "paletteTypeOnLoadRasterImageAsColorModel", m_paletteTypeOnLoadRasterImageAsColorModel);
|
||||
getValue(*m_settings, "showKeyframesOnXsheetCellArea", m_showKeyframesOnXsheetCellArea);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
@ -480,6 +481,14 @@ void Preferences::enableIgnoreAlphaonColumn1(bool on)
|
|||
m_settings->setValue("ignoreAlphaonColumn1Enabled", on ? "1" : "0");
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
|
||||
void Preferences::enableShowKeyframesOnXsheetCellArea(bool on)
|
||||
{
|
||||
m_showKeyframesOnXsheetCellArea = on;
|
||||
m_settings->setValue("showKeyframesOnXsheetCellArea", on ? "1" : "0");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
void Preferences::enableRewindAfterPlayback(bool on)
|
||||
|
|
Loading…
Reference in a new issue