highlight xsheet line every second

This commit is contained in:
shun-iwasawa 2022-03-30 16:58:41 +09:00 committed by manongjohn
parent b45e7ac54a
commit e1d56eec48
13 changed files with 118 additions and 133 deletions

View file

@ -133,6 +133,7 @@ enum PreferencesItemId {
expandFunctionHeader, expandFunctionHeader,
showColumnNumbers, showColumnNumbers,
parentColorsInXsheetColumn, parentColorsInXsheetColumn,
highlightLineEverySecond,
syncLevelRenumberWithXsheet, syncLevelRenumberWithXsheet,
currentTimelineEnabled, currentTimelineEnabled,
currentColumnColor, currentColumnColor,

View file

@ -190,10 +190,8 @@ Set the distance between two markers to \p distance and \b offset to markers
offset, offset,
\sa setMarkers() \sa setMarkers()
*/ */
void getMarkers(int &distance, int &offset) const { void getMarkers(int &distance, int &offset, int &secDistance) const;
distance = m_markerDistance;
offset = m_markerOffset;
}
/*! /*!
Sets information about xsheet markers, xsheet horizontal line. Sets information about xsheet markers, xsheet horizontal line.
Sets the distance between two markers to \p distance and \b offset,row Sets the distance between two markers to \p distance and \b offset,row
@ -202,6 +200,7 @@ of first
\sa getMarkers() \sa getMarkers()
*/ */
void setMarkers(int distance, int offset); void setMarkers(int distance, int offset);
/*! /*!
Returns full-color images subsampling in scene. Subsampling value is Returns full-color images subsampling in scene. Subsampling value is
the simplifying the simplifying

View file

@ -312,7 +312,7 @@ class DVAPI SpreadsheetViewer : public QDialog {
QPoint m_lastAutoPanPos; QPoint m_lastAutoPanPos;
int m_rowCount, m_columnCount; int m_rowCount, m_columnCount;
int m_currentRow; int m_currentRow;
int m_markRowDistance, m_markRowOffset; int m_markRowDistance, m_markRowOffset, m_markSecRowDistance;
// QRect m_selectedCells; // x=col, y=row // QRect m_selectedCells; // x=col, y=row
bool m_isComputingSize; bool m_isComputingSize;
// const Orientation *m_orientation; // const Orientation *m_orientation;
@ -456,17 +456,22 @@ public:
bool isSelectedCell(int row, int col) const { bool isSelectedCell(int row, int col) const {
return getSelectedCells().contains(QPoint(col, row)); return getSelectedCells().contains(QPoint(col, row));
} }
void setMarkRow(int distance, int offset) { void setMarkRow(int distance, int offset, int secDistance) {
m_markRowDistance = distance; // distance > 0 ? distance : 6; m_markRowDistance = distance; // distance > 0 ? distance : 6;
m_markRowOffset = offset; m_markRowOffset = offset;
m_markSecRowDistance = secDistance;
} }
void getMarkRow(int &distance, int &offset) const { void getMarkRow(int &distance, int &offset) const {
distance = m_markRowDistance; distance = m_markRowDistance;
offset = m_markRowOffset; offset = m_markRowOffset;
} }
int isMarkRow(int row) const { bool isMarkRow(int row) const {
return m_markRowDistance > 0 && return m_markRowDistance > 0 &&
((row - m_markRowOffset) % m_markRowDistance) == 0; ((row - m_markRowOffset) % m_markRowDistance) == 0 && row > 0;
}
bool isMarkSecRow(int row) const {
return m_markSecRowDistance > 0 &&
((row - m_markRowOffset) % m_markSecRowDistance) == 0 && row > 0;
} }
void setFrameHandle(TFrameHandle *frameHandle); void setFrameHandle(TFrameHandle *frameHandle);

View file

@ -1301,6 +1301,7 @@ QString PreferencesPopup::getUIString(PreferencesItemId id) {
{showColumnNumbers, tr("Show Column Numbers in Column Headers")}, {showColumnNumbers, tr("Show Column Numbers in Column Headers")},
{parentColorsInXsheetColumn, {parentColorsInXsheetColumn,
tr("Show Column Parent's Color in the Xsheet")}, tr("Show Column Parent's Color in the Xsheet")},
{highlightLineEverySecond, tr("Highlight Line Every Second")},
{syncLevelRenumberWithXsheet, {syncLevelRenumberWithXsheet,
tr("Sync Level Strip Drawing Number Changes with the Scene")}, tr("Sync Level Strip Drawing Number Changes with the Scene")},
{currentTimelineEnabled, {currentTimelineEnabled,
@ -2007,6 +2008,7 @@ QWidget* PreferencesPopup::createXsheetPage() {
{ insertUI(expandFunctionHeader, xshToolbarLay); } { insertUI(expandFunctionHeader, xshToolbarLay); }
insertUI(showColumnNumbers, lay); insertUI(showColumnNumbers, lay);
insertUI(parentColorsInXsheetColumn, lay); insertUI(parentColorsInXsheetColumn, lay);
insertUI(highlightLineEverySecond, lay);
// insertUI(syncLevelRenumberWithXsheet, lay); // insertUI(syncLevelRenumberWithXsheet, lay);
// insertUI(currentTimelineEnabled, lay); // insertUI(currentTimelineEnabled, lay);
// insertUI(currentColumnColor, lay); // insertUI(currentColumnColor, lay);

View file

@ -270,8 +270,8 @@ SceneSettingsPopup::SceneSettingsPopup()
m_tlvSubsamplingFld = new DVGui::IntLineEdit(this, tlvSubsampling, 1); m_tlvSubsamplingFld = new DVGui::IntLineEdit(this, tlvSubsampling, 1);
// Marker Interval - Start Frame // Marker Interval - Start Frame
int distance, offset; int distance, offset, secDistance;
sprop->getMarkers(distance, offset); sprop->getMarkers(distance, offset, secDistance);
m_markerIntervalFld = new DVGui::IntLineEdit(this, distance, 0); m_markerIntervalFld = new DVGui::IntLineEdit(this, distance, 0);
m_startFrameFld = new DVGui::IntLineEdit(this, offset); m_startFrameFld = new DVGui::IntLineEdit(this, offset);
@ -294,7 +294,8 @@ SceneSettingsPopup::SceneSettingsPopup()
// Frame Rate // Frame Rate
mainLayout->addWidget(new QLabel(tr("Frame Rate:"), this), 0, 0, mainLayout->addWidget(new QLabel(tr("Frame Rate:"), this), 0, 0,
Qt::AlignRight | Qt::AlignVCenter); Qt::AlignRight | Qt::AlignVCenter);
mainLayout->addWidget(m_frameRateFld, 0, 1); mainLayout->addWidget(m_frameRateFld, 0, 1, 1, 4,
Qt::AlignLeft | Qt::AlignVCenter);
// Camera BG color // Camera BG color
mainLayout->addWidget(new QLabel(tr("Camera BG Color:"), this), 1, 0, mainLayout->addWidget(new QLabel(tr("Camera BG Color:"), this), 1, 0,
Qt::AlignRight | Qt::AlignVCenter); Qt::AlignRight | Qt::AlignVCenter);
@ -305,7 +306,8 @@ SceneSettingsPopup::SceneSettingsPopup()
mainLayout->addWidget(m_fieldGuideFld, 2, 1); mainLayout->addWidget(m_fieldGuideFld, 2, 1);
mainLayout->addWidget(new QLabel(tr("A/R:"), this), 2, 2, mainLayout->addWidget(new QLabel(tr("A/R:"), this), 2, 2,
Qt::AlignRight | Qt::AlignVCenter); Qt::AlignRight | Qt::AlignVCenter);
mainLayout->addWidget(m_aspectRatioFld, 2, 3); mainLayout->addWidget(m_aspectRatioFld, 2, 3, 1, 2,
Qt::AlignLeft | Qt::AlignVCenter);
// Image Subsampling - Tlv Subsampling // Image Subsampling - Tlv Subsampling
mainLayout->addWidget(new QLabel(tr("Image Subsampling:"), this), 3, 0, mainLayout->addWidget(new QLabel(tr("Image Subsampling:"), this), 3, 0,
Qt::AlignRight | Qt::AlignVCenter); Qt::AlignRight | Qt::AlignVCenter);
@ -362,9 +364,10 @@ SceneSettingsPopup::SceneSettingsPopup()
SLOT(onTlvSubsampEditingFinished())); SLOT(onTlvSubsampEditingFinished()));
// Marker Interval - Start Frame // Marker Interval - Start Frame
ret = ret && connect(m_markerIntervalFld, SIGNAL(editingFinished()), this, ret = ret && connect(m_markerIntervalFld, SIGNAL(editingFinished()), this,
SLOT(onMakerIntervalEditingFinished())); SLOT(onMakerInformationChanged()));
ret = ret && connect(m_startFrameFld, SIGNAL(editingFinished()), this, ret = ret && connect(m_startFrameFld, SIGNAL(editingFinished()), this,
SLOT(onStartFrameEditingFinished())); SLOT(onMakerInformationChanged()));
// Use Color Filter and Transparency for Rendering // Use Color Filter and Transparency for Rendering
ret = ret && connect(m_colorFilterOnRenderCB, SIGNAL(stateChanged(int)), this, ret = ret && connect(m_colorFilterOnRenderCB, SIGNAL(stateChanged(int)), this,
SLOT(onColorFilterOnRenderChanged())); SLOT(onColorFilterOnRenderChanged()));
@ -418,8 +421,8 @@ void SceneSettingsPopup::update() {
m_fullcolorSubsamplingFld->setValue(sprop->getFullcolorSubsampling()); m_fullcolorSubsamplingFld->setValue(sprop->getFullcolorSubsampling());
if (m_tlvSubsamplingFld) if (m_tlvSubsamplingFld)
m_tlvSubsamplingFld->setValue(sprop->getTlvSubsampling()); m_tlvSubsamplingFld->setValue(sprop->getTlvSubsampling());
int markerDistance = 0, markerOffset = 0; int markerDistance = 0, markerOffset = 0, secDistance;
sprop->getMarkers(markerDistance, markerOffset); sprop->getMarkers(markerDistance, markerOffset, secDistance);
m_markerIntervalFld->setValue(markerDistance); m_markerIntervalFld->setValue(markerDistance);
m_startFrameFld->setValue(markerOffset + 1); m_startFrameFld->setValue(markerOffset + 1);
m_colorFilterOnRenderCB->setChecked( m_colorFilterOnRenderCB->setChecked(
@ -494,29 +497,13 @@ void SceneSettingsPopup::onTlvSubsampEditingFinished() {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void SceneSettingsPopup::onMakerIntervalEditingFinished() { void SceneSettingsPopup::onMakerInformationChanged() {
TSceneProperties *sprop = getProperties(); TSceneProperties *sprop = getProperties();
int distance, offset; int distance, offset, secDistance;
sprop->getMarkers(distance, offset); sprop->getMarkers(distance, offset, secDistance);
int markerDistance = m_markerIntervalFld->text().toInt(); int markerDistance = m_markerIntervalFld->text().toInt();
int markerOffset = m_startFrameFld->text().toInt() - 1; int markerOffset = m_startFrameFld->text().toInt() - 1;
assert(offset == markerOffset); if (distance == markerDistance && offset == markerOffset) return;
if (distance == markerDistance) return;
sprop->setMarkers(markerDistance, markerOffset);
TApp::instance()->getCurrentScene()->notifySceneChanged();
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
}
//-----------------------------------------------------------------------------
void SceneSettingsPopup::onStartFrameEditingFinished() {
TSceneProperties *sprop = getProperties();
int distance, offset;
sprop->getMarkers(distance, offset);
int markerDistance = m_markerIntervalFld->text().toInt();
int markerOffset = m_startFrameFld->text().toInt() - 1;
assert(markerDistance == distance);
if (offset == markerOffset) return;
sprop->setMarkers(markerDistance, markerOffset); sprop->setMarkers(markerDistance, markerOffset);
TApp::instance()->getCurrentScene()->notifySceneChanged(); TApp::instance()->getCurrentScene()->notifySceneChanged();
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();

View file

@ -76,8 +76,7 @@ public slots:
void onFullColorSubsampEditingFinished(); void onFullColorSubsampEditingFinished();
void onTlvSubsampEditingFinished(); void onTlvSubsampEditingFinished();
void onMakerIntervalEditingFinished(); void onMakerInformationChanged();
void onStartFrameEditingFinished();
void setBgColor(const TPixel32 &value, bool isDragging); void setBgColor(const TPixel32 &value, bool isDragging);

View file

@ -1256,32 +1256,42 @@ void CellArea::drawFrameSeparator(QPainter &p, int row, int col,
layerAxisRange = NumberRange(layerAxis + 1, layerAxis + adjY); layerAxisRange = NumberRange(layerAxis + 1, layerAxis + adjY);
} }
// mark interval every 6 frames // mark interval
int distance, offset; int distance, offset, secDistance;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers( TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset); distance, offset, secDistance);
// if (distance == 0) distance = 6;
bool isAfterMarkers = bool isAfterMarkers =
distance > 0 && ((row - offset) % distance) == 0 && row != 0; distance > 0 && ((row - offset) % distance) == 0 && row != 0;
QColor color = isAfterMarkers ? m_viewer->getMarkerLineColor() bool isAfterSecMarkers =
: m_viewer->getLightLineColor(); secDistance > 0 && ((row - offset) % secDistance) == 0 && row != 0;
color.setAlpha(isAfterMarkers ? m_viewer->getMarkerLineColor().alpha()
: m_viewer->getLightLineColor().alpha()); QColor color = (isAfterMarkers || isAfterSecMarkers)
? m_viewer->getMarkerLineColor()
: m_viewer->getLightLineColor();
double lineWidth = (isAfterSecMarkers) ? 3. : 1.;
int frameAxis = m_viewer->rowToFrameAxis(row);
int handleSize =
(emptyFrame)
? 0
: (o->isVerticalTimeline())
? (isAfterMarkers || isAfterSecMarkers)
? 0
: -1 // o->rect(PredefinedRect::DRAG_HANDLE_CORNER).width()
: -1; // o->rect(PredefinedRect::DRAG_HANDLE_CORNER).height();
int frameAxis = m_viewer->rowToFrameAxis(row);
QLine horizontalLine = m_viewer->orientation()->horizontalLine( QLine horizontalLine = m_viewer->orientation()->horizontalLine(
frameAxis, frameAxis, layerAxisRange.adjusted(handleSize - 1, 1));
layerAxisRange.adjusted((o->isVerticalTimeline() ? 0 : -1), 0));
if (heldFrame) { if (heldFrame) {
int x = horizontalLine.x1(); int x = horizontalLine.x1();
int y = horizontalLine.y2() - 1; int y = horizontalLine.y2() - 2;
horizontalLine.setP1(QPoint(x, y)); horizontalLine.setP1(QPoint(x, y));
color.setAlpha(120); color.setAlpha(120);
} else if (!o->isVerticalTimeline() && !isAfterMarkers && emptyFrame) } else if (!o->isVerticalTimeline() && !isAfterMarkers && emptyFrame)
color.setAlpha(isAfterMarkers ? m_viewer->getMarkerLineColor().alpha() color.setAlpha(m_viewer->getLightLineColor().alpha());
: m_viewer->getLightLineColor().alpha());
p.setPen(color); p.setPen(QPen(color, lineWidth, Qt::SolidLine, Qt::FlatCap));
p.drawLine(horizontalLine); p.drawLine(horizontalLine);
} }
@ -1535,10 +1545,9 @@ void CellArea::drawExtenderHandles(QPainter &p) {
? QPoint(0, 0) ? QPoint(0, 0)
: o->point(PredefinedPoint::KEY_HIDDEN); : o->point(PredefinedPoint::KEY_HIDDEN);
int distance, offset; int distance, offset, secDistance;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers( TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset); distance, offset, secDistance);
// if (distance == 0) distance = 6;
QPoint xyRadius = o->point(PredefinedPoint::EXTENDER_XY_RADIUS); QPoint xyRadius = o->point(PredefinedPoint::EXTENDER_XY_RADIUS);
@ -1629,6 +1638,8 @@ void CellArea::drawSoundCell(QPainter &p, int row, int col, bool isReference) {
if (!soundColumn->getLevelRange(row, r0, r1)) { if (!soundColumn->getLevelRange(row, r0, r1)) {
// cell mark // cell mark
drawCellMarker(p, markId, rect, true, isNextEmpty); drawCellMarker(p, markId, rect, true, isNextEmpty);
if (o->isVerticalTimeline() || !row) drawFrameSeparator(p, row, col, false);
return; return;
} }
bool isFirstRow = (row > 0 && row == r0); bool isFirstRow = (row > 0 && row == r0);
@ -1762,19 +1773,6 @@ void CellArea::drawSoundCell(QPainter &p, int row, int col, bool isReference) {
if (r1 != r1WithoutOff) p.fillRect(modifierRect, SoundColumnExtenderColor); if (r1 != r1WithoutOff) p.fillRect(modifierRect, SoundColumnExtenderColor);
m_soundLevelModifyRects.append(modifierRect); m_soundLevelModifyRects.append(modifierRect);
} }
int distance, markerOffset;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, markerOffset);
// if (distance == 0) distance = 6;
bool isAfterMarkers =
distance > 0 && ((row - markerOffset) % distance) == 0 && row != 0;
// draw marker interval
if (o->isVerticalTimeline() && isAfterMarkers) {
p.setPen(m_viewer->getMarkerLineColor());
p.drawLine(o->line(PredefinedLine::SEE_MARKER_THROUGH).translated(xy));
}
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -2211,18 +2209,6 @@ void CellArea::drawLevelCell(QPainter &p, int row, int col, bool isReference,
cellColor); cellColor);
} }
int distance, offset;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset);
// if (distance == 0) distance = 6;
bool isAfterMarkers =
distance > 0 && ((row - offset) % distance) == 0 && row != 0;
// draw marker interval
if (o->isVerticalTimeline() && isAfterMarkers) {
p.setPen(m_viewer->getMarkerLineColor());
p.drawLine(o->line(PredefinedLine::SEE_MARKER_THROUGH).translated(xy));
}
QRect nameRect = o->rect(PredefinedRect::CELL_NAME).translated(QPoint(x, y)); QRect nameRect = o->rect(PredefinedRect::CELL_NAME).translated(QPoint(x, y));
@ -2327,6 +2313,12 @@ void CellArea::drawLevelCell(QPainter &p, int row, int col, bool isReference,
if (isImplicitCell || isStopFrame) return; if (isImplicitCell || isStopFrame) return;
int distance, offset, secDistance;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset, secDistance);
bool isAfterMarkers =
distance > 0 && ((row - offset) % distance) == 0 && row != 0;
// draw level name // draw level name
if (showLevelName && if (showLevelName &&
(!sameLevel || (row > 0 && xsh->isImplicitCell(row - 1, col)) || (!sameLevel || (row > 0 && xsh->isImplicitCell(row - 1, col)) ||
@ -2462,19 +2454,6 @@ void CellArea::drawSoundTextCell(QPainter &p, int row, int col) {
TFrameId fid = cell.m_frameId; TFrameId fid = cell.m_frameId;
if (fid.getNumber() - 1 < 0) return; if (fid.getNumber() - 1 < 0) return;
int distance, offset;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset);
// if (distance == 0) distance = 6;
bool isAfterMarkers =
distance > 0 && ((row - offset) % distance) == 0 && row != 0;
// draw marker interval
if (o->isVerticalTimeline() && isAfterMarkers) {
p.setPen(m_viewer->getMarkerLineColor());
p.drawLine(o->line(PredefinedLine::SEE_MARKER_THROUGH).translated(xy));
}
p.setPen(Qt::black); p.setPen(Qt::black);
QRect nameRect = o->rect(PredefinedRect::CELL_NAME).translated(QPoint(x, y)); QRect nameRect = o->rect(PredefinedRect::CELL_NAME).translated(QPoint(x, y));
nameRect.adjust(0, 0, -frameAdj.x(), -frameAdj.y()); nameRect.adjust(0, 0, -frameAdj.x(), -frameAdj.y());
@ -2658,8 +2637,6 @@ void CellArea::drawSoundTextColumn(QPainter &p, int r0, int r1, int col) {
// paint background and other stuffs // paint background and other stuffs
for (auto info : infoList) { for (auto info : infoList) {
bool heldFrame = (!o->isVerticalTimeline() && info.row != row);
bool isSelected = bool isSelected =
isColSelected || cellSelection->isCellSelected(info.row, col); isColSelected || cellSelection->isCellSelected(info.row, col);
QColor tmpCellColor = (isSelected) ? selectedCellColor : cellColor; QColor tmpCellColor = (isSelected) ? selectedCellColor : cellColor;
@ -2677,6 +2654,7 @@ void CellArea::drawSoundTextColumn(QPainter &p, int r0, int r1, int col) {
// cell mark // cell mark
drawCellMarker(p, info.markId, info.rect, true); drawCellMarker(p, info.markId, info.rect, true);
bool heldFrame = (!o->isVerticalTimeline() && info.row != row);
drawFrameSeparator(p, info.row, col, false, heldFrame); drawFrameSeparator(p, info.row, col, false, heldFrame);
if (TApp::instance()->getCurrentFrame()->isEditingScene() && if (TApp::instance()->getCurrentFrame()->isEditingScene() &&
@ -2820,13 +2798,6 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col,
bool sameLevel = prevCell.m_level.getPointer() == cell.m_level.getPointer(); bool sameLevel = prevCell.m_level.getPointer() == cell.m_level.getPointer();
int distance, offset;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset);
// if (distance == 0) distance = 6;
bool isAfterMarkers =
distance > 0 && ((row - offset) % distance) == 0 && row != 0;
bool isRed = false; bool isRed = false;
TXshPaletteLevel *pl = cell.getPaletteLevel(); TXshPaletteLevel *pl = cell.getPaletteLevel();
if (pl && !pl->getPalette()) isRed = true; if (pl && !pl->getPalette()) isRed = true;
@ -2872,6 +2843,13 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col,
return; return;
} }
int distance, offset, secDistance;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset, secDistance);
bool isAfterMarkers =
distance > 0 && ((row - offset) % distance) == 0 && row != 0;
bool heldFrame = (!o->isVerticalTimeline() && !isAfterMarkers && sameLevel && bool heldFrame = (!o->isVerticalTimeline() && !isAfterMarkers && sameLevel &&
prevCell.m_frameId == cell.m_frameId) && prevCell.m_frameId == cell.m_frameId) &&
!isImplicitCell; !isImplicitCell;
@ -2952,11 +2930,6 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col,
cellColor); cellColor);
} }
if (o->isVerticalTimeline() && isAfterMarkers) {
p.setPen(m_viewer->getMarkerLineColor());
p.drawLine(o->line(PredefinedLine::SEE_MARKER_THROUGH).translated(xy));
}
if ((sameLevel && prevCell.m_frameId == cell.m_frameId && !isAfterMarkers) || if ((sameLevel && prevCell.m_frameId == cell.m_frameId && !isAfterMarkers) ||
isImplicitCell) { // cell equal to previous one (not on marker line): isImplicitCell) { // cell equal to previous one (not on marker line):
// do not write anything and draw a vertical line // do not write anything and draw a vertical line

View file

@ -1181,12 +1181,12 @@ void XsheetViewer::wheelEvent(QWheelEvent *event) {
return; return;
} }
int markerDistance = 0, markerOffset = 0; int markerDistance = 0, markerOffset = 0, secDistance;
TApp::instance() TApp::instance()
->getCurrentScene() ->getCurrentScene()
->getScene() ->getScene()
->getProperties() ->getProperties()
->getMarkers(markerDistance, markerOffset); ->getMarkers(markerDistance, markerOffset, secDistance);
if (event->angleDelta().x() == 0) { // vertical scroll if (event->angleDelta().x() == 0) { // vertical scroll
if (!orientation()->isVerticalTimeline()) markerDistance = 1; if (!orientation()->isVerticalTimeline()) markerDistance = 1;

View file

@ -105,9 +105,9 @@ void RowArea::drawRows(QPainter &p, int r0, int r1) {
p.setFont(font); p.setFont(font);
// marker interval // marker interval
int distance, offset; int distance, offset, secDistance;
TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers( TApp::instance()->getCurrentScene()->getScene()->getProperties()->getMarkers(
distance, offset); distance, offset, secDistance);
// default value // default value
// if (distance == 0) distance = 6; // if (distance == 0) distance = 6;
@ -130,9 +130,16 @@ void RowArea::drawRows(QPainter &p, int r0, int r1) {
//--- draw horizontal line //--- draw horizontal line
bool isAfterMarkers = bool isAfterMarkers =
(distance > 0 && ((r - offset) % distance) == 0 && r != 0); (distance > 0 && ((r - offset) % distance) == 0 && r != 0);
QColor color = isAfterMarkers ? m_viewer->getMarkerLineColor() bool isAfterSecMarkers =
: m_viewer->getLightLineColor(); secDistance > 0 && ((r - offset) % secDistance) == 0 && r != 0;
p.setPen(color);
QColor color = (isAfterSecMarkers || isAfterMarkers)
? m_viewer->getMarkerLineColor()
: m_viewer->getLightLineColor();
p.setPen(
QPen(color, (isAfterSecMarkers) ? 3. : 1., Qt::SolidLine, Qt::FlatCap));
// p.setPen(color);
QLine horizontalLine = o->horizontalLine(frameAxis, layerSide); QLine horizontalLine = o->horizontalLine(frameAxis, layerSide);
if (!o->isVerticalTimeline()) { if (!o->isVerticalTimeline()) {
int x = horizontalLine.x1(); int x = horizontalLine.x1();

View file

@ -580,6 +580,8 @@ void Preferences::definePreferenceItems() {
define(showColumnNumbers, "showColumnNumbers", QMetaType::Bool, false); define(showColumnNumbers, "showColumnNumbers", QMetaType::Bool, false);
define(parentColorsInXsheetColumn, "parentColorsInXsheetColumn", define(parentColorsInXsheetColumn, "parentColorsInXsheetColumn",
QMetaType::Bool, true); QMetaType::Bool, true);
define(highlightLineEverySecond, "highlightLineEverySecond", QMetaType::Bool,
false);
define(syncLevelRenumberWithXsheet, "syncLevelRenumberWithXsheet", define(syncLevelRenumberWithXsheet, "syncLevelRenumberWithXsheet",
QMetaType::Bool, true); QMetaType::Bool, true);
define(currentTimelineEnabled, "currentTimelineEnabled", QMetaType::Bool, define(currentTimelineEnabled, "currentTimelineEnabled", QMetaType::Bool,

View file

@ -133,6 +133,19 @@ void TSceneProperties::setBgColor(const TPixel32 &color) { m_bgColor = color; }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void TSceneProperties::getMarkers(int &distance, int &offset,
int &secDistance) const {
distance = m_markerDistance;
offset = m_markerOffset;
// TODO: handle drop frame when the fps has decimal part
secDistance =
(Preferences::instance()->getBoolValue(highlightLineEverySecond))
? (int)std::round(getOutputProperties()->getFrameRate())
: -1;
}
//-----------------------------------------------------------------------------
void TSceneProperties::setMarkers(int distance, int offset) { void TSceneProperties::setMarkers(int distance, int offset) {
m_markerDistance = distance; m_markerDistance = distance;
m_markerOffset = offset; m_markerOffset = offset;

View file

@ -373,9 +373,9 @@ void FunctionViewer::refreshModel() {
m_treeView->setCurrentScenePath(scenePath); m_treeView->setCurrentScenePath(scenePath);
int distance, offset; int distance, offset, secDistance;
scene->getProperties()->getMarkers(distance, offset); scene->getProperties()->getMarkers(distance, offset, secDistance);
m_numericalColumns->setMarkRow(distance, offset); m_numericalColumns->setMarkRow(distance, offset, secDistance);
} }
m_treeView->updateAll(); m_treeView->updateAll();

View file

@ -382,7 +382,8 @@ void RowPanel::drawRows(QPainter &p, int r0, int r1) {
for (r = r0; r <= r1; r++) { for (r = r0; r <= r1; r++) {
int next_y = getViewer()->rowToY(r + 1); int next_y = getViewer()->rowToY(r + 1);
// draw horizontal line // draw horizontal line
QColor color = (getViewer()->isMarkRow(r)) bool isMarkSecRow = getViewer()->isMarkSecRow(r);
QColor color = (isMarkSecRow || getViewer()->isMarkRow(r))
? getViewer()->getMarkerLineColor() ? getViewer()->getMarkerLineColor()
: getViewer()->getLightLineColor(); : getViewer()->getLightLineColor();
p.setPen(color); p.setPen(color);
@ -401,11 +402,6 @@ void RowPanel::drawRows(QPainter &p, int r0, int r1) {
Qt::AlignVCenter | Qt::AlignRight, number); Qt::AlignVCenter | Qt::AlignRight, number);
y = next_y; y = next_y;
} }
// erase the marker interval at upper-end
if (r0 == 0) {
p.setPen(getViewer()->getLightLineColor());
p.drawLine(x0, getViewer()->rowToY(0), x1, getViewer()->rowToY(0));
}
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -499,15 +495,15 @@ void CellPanel::paintEvent(QPaintEvent *e) {
// draw rows // draw rows
int currentRow = getViewer()->getCurrentRow(); int currentRow = getViewer()->getCurrentRow();
for (int r = r0; r <= r1; r++) { for (int r = r0; r <= r1; r++) {
int y = getViewer()->rowToY(r); int y = getViewer()->rowToY(r);
QColor color = getViewer()->isMarkRow(r) ? getViewer()->getMarkerLineColor() bool isMarkSecRow = getViewer()->isMarkSecRow(r);
: getViewer()->getLightLineColor(); QColor color = (isMarkSecRow || getViewer()->isMarkRow(r))
painter.setPen(color); ? getViewer()->getMarkerLineColor()
: getViewer()->getLightLineColor();
painter.setPen(
QPen(color, (isMarkSecRow) ? 3. : 1., Qt::SolidLine, Qt::FlatCap));
painter.drawLine(x0, y, x1, y); painter.drawLine(x0, y, x1, y);
} }
// erase the marker interval at upper-end
painter.setPen(getViewer()->getLightLineColor());
painter.drawLine(x0, 0, x1, 0);
} }
} // namespace Spreadsheet } // namespace Spreadsheet
@ -531,6 +527,7 @@ SpreadsheetViewer::SpreadsheetViewer(QWidget *parent)
, m_currentRow(0) , m_currentRow(0)
, m_markRowDistance(6) , m_markRowDistance(6)
, m_markRowOffset(0) , m_markRowOffset(0)
, m_markSecRowDistance(-1)
, m_isComputingSize(false) , m_isComputingSize(false)
, m_frameScroller() { , m_frameScroller() {
// m_orientation = Orientations::topToBottom (); // m_orientation = Orientations::topToBottom ();