1 #pragma once
2 
3 #ifndef XSHEETVIEWER_H
4 #define XSHEETVIEWER_H
5 
6 #include <QFrame>
7 #include <QScrollArea>
8 #include <QKeyEvent>
9 #include "xshcellviewer.h"
10 #include "xshcolumnviewer.h"
11 #include "xshrowviewer.h"
12 #include "xshnoteviewer.h"
13 #include "xshtoolbar.h"
14 #include "layerfooterpanel.h"
15 #include "cellkeyframeselection.h"
16 #include "saveloadqsettings.h"
17 #include "toonzqt/spreadsheetviewer.h"
18 #include "orientation.h"
19 #include <boost/optional.hpp>
20 
21 using boost::optional;
22 
23 #define XSHEET_FONT_PX_SIZE 12
24 #define H_ADJUST 2
25 
26 // forward declaration
27 class TXsheet;
28 class TCellSelection;
29 class TKeyframeSelection;
30 class TColumnSelection;
31 class TSelection;
32 class TXshCell;
33 class TStageObjectId;
34 
35 enum TXshButtonType {
36   PREVIEW_ON_XSHBUTTON = 1,
37   PREVIEW_OFF_XSHBUTTON,
38   CAMSTAND_ON_XSHBUTTON,
39   CAMSTAND_OFF_XSHBUTTON,
40   CAMSTAND_TRANSP_XSHBUTTON,
41   LOCK_ON_XSHBUTTON,
42   LOCK_OFF_XSHBUTTON,
43   CONFIG_XSHBUTTON
44 };
45 
46 namespace XsheetGUI {
47 
48 //=============================================================================
49 // Constant definition
50 //-----------------------------------------------------------------------------
51 
52 extern const int ColumnWidth;
53 extern const int RowHeight;
54 
55 const int NoteWidth  = 70;
56 const int NoteHeight = 18;
57 
58 // TZP column
59 const QColor LevelColumnColor(127, 219, 127);
60 const QColor LevelColumnBorderColor(47, 82, 47);
61 const QColor SelectedLevelColumnColor(191, 237, 191);
62 
63 // PLI column
64 const QColor VectorColumnColor(212, 212, 133);
65 const QColor VectorColumnBorderColor(79, 79, 49);
66 const QColor SelectedVectorColumnColor(234, 234, 194);
67 
68 // SubXsheet column
69 const QColor ChildColumnColor(214, 154, 219);
70 const QColor ChildColumnBorderColor(80, 57, 82);
71 const QColor SelectedChildColumnColor(235, 205, 237);
72 
73 // Raster image column
74 const QColor FullcolorColumnColor(154, 214, 219);
75 const QColor FullcolorColumnBorderColor(57, 80, 82);
76 const QColor SelectedFullcolorColumnColor(205, 235, 237);
77 
78 // Palette column
79 const QColor PaletteColumnColor(42, 171, 154);
80 const QColor PaletteColumnBorderColor(15, 62, 56);
81 const QColor SelectedPaletteColumnColor(146, 221, 202);
82 
83 // Fx column
84 const QColor FxColumnColor(130, 129, 93);
85 const QColor FxColumnBorderColor(48, 48, 35);
86 const QColor SelectedFxColumnColor(193, 192, 174);
87 
88 // Reference column
89 const QColor ReferenceColumnColor(171, 171, 171);
90 const QColor ReferenceColumnBorderColor(62, 62, 62);
91 const QColor SelectedReferenceColumnColor(213, 213, 213);
92 
93 // Sound column
94 const QColor SoundColumnColor(175, 185, 115);
95 const QColor SoundColumnBorderColor(110, 130, 90);
96 const QColor SelectedSoundColumnColor(215, 215, 180);
97 
98 const QColor SoundColumnHlColor(245, 255, 230);
99 const QColor SoundColumnTrackColor(90, 100, 45);
100 
101 const QColor SoundColumnExtenderColor(235, 255, 115);
102 
103 const QColor EmptySoundColumnColor(240, 255, 240);
104 
105 const QColor ColorSelection(190, 210, 240, 170);
106 
107 const QColor SoundTextColumnColor(200, 200, 200);
108 const QColor SoundTextColumnBorderColor(140, 140, 140);
109 
110 const QColor MeshColumnColor(200, 130, 255);
111 const QColor MeshColumnBorderColor(105, 70, 135);
112 const QColor SelectedMeshColumnColor(216, 180, 245);
113 
114 // Empty column
115 const QColor EmptyColumnColor(124, 124, 124);
116 // Occupied column
117 const QColor NotEmptyColumnColor(164, 164, 164);
118 
119 const QColor SelectedEmptyCellColor(210, 210, 210);
120 const QColor SmartTabColor(255, 255, 255, 150);
121 
122 const QColor XsheetBGColor(212, 208, 200);
123 // Xsheet horizontal lines
124 const QColor NormalHLineColor(146, 144, 146);
125 const QColor IntervalHLineColor(0, 255, 246);
126 
127 // column header
128 const QColor EmptyColumnHeadColor(200, 200, 200);
129 const QColor MaskColumnHeadColor(233, 118, 116);
130 // const QColor PreviewVisibleColor(200, 200, 100);
131 // const QColor CamStandVisibleColor(235, 144, 107);
132 
133 const QColor XsheetColumnNameBgColor(255, 255, 255, 90);
134 const QColor XsheetDragBarHighlightColor(255, 255, 187, 255);
135 
136 const QColor XsheetPreviewButtonBgOnColor(200, 200, 100, 255);
137 const QColor XsheetPreviewButtonBgOffColor(255, 255, 255, 0);
138 
139 const QColor XsheetCamstandButtonBgOnColor(235, 144, 107, 255);
140 const QColor XsheetCamstandButtonBgOffColor(255, 255, 255, 0);
141 
142 const QColor XsheetLockButtonBgOnColor(255, 255, 255, 0);
143 const QColor XsheetLockButtonBgOffColor(255, 255, 255, 0);
144 
145 const QColor XsheetConfigButtonBgColor(255, 255, 255, 0);
146 
147 const QColor TimelineButtonBgOnColor(255, 255, 255, 0);
148 const QColor TimelineButtonBgOffColor(255, 255, 255, 0);
149 
150 const QColor TimelineConfigButtonBgColor(255, 255, 255, 0);
151 
152 // RowArea
153 const QColor RowAreaBGColor(164, 164, 164);
154 const QColor CurrentFrameBGColor(210, 210, 210);
155 
156 }  // namespace XsheetGUI
157 
158 //=============================================================================
159 // XsheetScrollArea
160 //-----------------------------------------------------------------------------
161 
162 class XsheetScrollArea final : public QScrollArea {
163   Q_OBJECT
164 
165 public:
166 #if QT_VERSION >= 0x050500
167   XsheetScrollArea(QWidget *parent = 0, Qt::WindowFlags flags = 0)
168 #else
169   XsheetScrollArea(QWidget *parent = 0, Qt::WFlags flags = 0)
170 #endif
QScrollArea(parent)171       : QScrollArea(parent) {
172     setObjectName("xsheetScrollArea");
173     setFrameStyle(QFrame::StyledPanel);
174   }
~XsheetScrollArea()175   ~XsheetScrollArea() {}
176 
177 protected:
keyPressEvent(QKeyEvent * event)178   void keyPressEvent(QKeyEvent *event) override { event->ignore(); }
wheelEvent(QWheelEvent * event)179   void wheelEvent(QWheelEvent *event) override { event->ignore(); }
180 };
181 
182 //=============================================================================
183 // XsheetViewer
184 //-----------------------------------------------------------------------------
185 
186 //! Note: some refactoring is needed. XsheetViewer is going to derive from
187 //! SpreadsheetViewer.
188 
189 class XsheetViewer final : public QFrame, public SaveLoadQSettings {
190   Q_OBJECT
191 
192   QColor m_lightLightBgColor;
193   QColor m_lightBgColor;
194   QColor m_bgColor;  // row area backgroound
195   QColor m_darkBgColor;
196   QColor m_lightLineColor;  // horizontal lines (146,144,146)
197   QColor m_darkLineColor;
198   QColor m_columnIconLineColor;
199   QColor m_timelineIconLineColor;
200 
201   Q_PROPERTY(QColor LightLightBGColor READ getLightLightBGColor WRITE
202                  setLightLightBGColor)
203   Q_PROPERTY(QColor LightBGColor READ getLightBGColor WRITE setLightBGColor)
204   Q_PROPERTY(QColor BGColor READ getBGColor WRITE setBGColor)
205   Q_PROPERTY(QColor DarkBGColor READ getDarkBGColor WRITE setDarkBGColor)
206   Q_PROPERTY(
207       QColor LightLineColor READ getLightLineColor WRITE setLightLineColor)
208   Q_PROPERTY(QColor DarkLineColor READ getDarkLineColor WRITE setDarkLineColor)
209   Q_PROPERTY(QColor ColumnIconLineColor READ getColumnIconLineColor WRITE
210                  setColumnIconLineColor)
211   Q_PROPERTY(QColor TimelineIconLineColor READ getTimelineIconLineColor WRITE
212                  setTimelineIconLineColor)
213 
214   // Row
215   QColor m_currentRowBgColor;      // current frame / column (210,210,210)
216   QColor m_markerLineColor;        // marker lines (0, 255, 246)
217   QColor m_verticalLineColor;      // vertical lines
218   QColor m_verticalLineHeadColor;  // vertical lines in column head
219   QColor m_textColor;              // text color (black)
220   QColor m_errorTextColor;         // error text color (red, probably)
221   QColor m_previewFrameTextColor;  // frame number in preview range (blue)
222   QColor m_onionSkinAreaBgColor;
223   QColor m_frameRangeMarkerLineColor;  // timeline frame markers
224   Q_PROPERTY(QColor CurrentRowBgColor READ getCurrentRowBgColor WRITE
225                  setCurrentRowBgColor)
226   Q_PROPERTY(
227       QColor MarkerLineColor READ getMarkerLineColor WRITE setMarkerLineColor)
228   Q_PROPERTY(QColor VerticalLineColor READ getVerticalLineColor WRITE
229                  setVerticalLineColor)
230   Q_PROPERTY(QColor VerticalLineHeadColor READ getVerticalLineHeadColor WRITE
231                  setVerticalLineHeadColor)
232   Q_PROPERTY(QColor TextColor READ getTextColor WRITE setTextColor)
233   Q_PROPERTY(
234       QColor ErrorTextColor READ getErrorTextColor WRITE setErrorTextColor)
235   Q_PROPERTY(QColor PreviewFrameTextColor READ getPreviewFrameTextColor WRITE
236                  setPreviewFrameTextColor)
237   Q_PROPERTY(QColor OnionSkinAreaBgColor READ getOnionSkinAreaBgColor WRITE
238                  setOnionSkinAreaBgColor)
239   Q_PROPERTY(QColor FrameRangeMarkerLineColor READ getFrameRangeMarkerLineColor
240                  WRITE setFrameRangeMarkerLineColor)
241   // Column
242   QColor m_emptyColumnHeadColor;  // empty column header (200,200,200)
243   Q_PROPERTY(QColor EmptyColumnHeadColor READ getEmptyColumnHeadColor WRITE
244                  setEmptyColumnHeadColor)
245 
246   // Cell
247   QColor m_emptyCellColor;          // empty cell (124,124,124)
248   QColor m_notEmptyColumnColor;     // occupied column (164,164,164)
249   QColor m_selectedEmptyCellColor;  // selected empty cell (210,210,210)
250   Q_PROPERTY(
251       QColor EmptyCellColor READ getEmptyCellColor WRITE setEmptyCellColor)
252   Q_PROPERTY(QColor NotEmptyColumnColor READ getNotEmptyColumnColor WRITE
253                  setNotEmptyColumnColor)
254   Q_PROPERTY(QColor SelectedEmptyCellColor READ getSelectedEmptyCellColor WRITE
255                  setSelectedEmptyCellColor)
256 
257   // Cell focus
258   QColor m_cellFocusColor;
259   Q_PROPERTY(
260       QColor CellFocusColor READ getCellFocusColor WRITE setCellFocusColor)
261 
262   // Play range
263   QColor m_playRangeColor;
264   Q_PROPERTY(
265       QColor PlayRangeColor READ getPlayRangeColor WRITE setPlayRangeColor)
266 
267   // TZP column
268   QColor m_levelColumnColor;          //(127,219,127)
269   QColor m_levelColumnBorderColor;    //(47,82,47)
270   QColor m_selectedLevelColumnColor;  //(191,237,191)
271   Q_PROPERTY(QColor LevelColumnColor READ getLevelColumnColor WRITE
272                  setLevelColumnColor)
273   Q_PROPERTY(QColor LevelColumnBorderColor READ getLevelColumnBorderColor WRITE
274                  setLevelColumnBorderColor)
275   Q_PROPERTY(QColor SelectedLevelColumnColor READ getSelectedLevelColumnColor
276                  WRITE setSelectedLevelColumnColor)
277   // PLI column
278   QColor m_vectorColumnColor;          //(212,212,133)
279   QColor m_vectorColumnBorderColor;    //(79,79,49)
280   QColor m_selectedVectorColumnColor;  //(234,234,194)
281   Q_PROPERTY(QColor VectorColumnColor READ getVectorColumnColor WRITE
282                  setVectorColumnColor)
283   Q_PROPERTY(QColor VectorColumnBorderColor READ getVectorColumnBorderColor
284                  WRITE setVectorColumnBorderColor)
285   Q_PROPERTY(QColor SelectedVectorColumnColor READ getSelectedVectorColumnColor
286                  WRITE setSelectedVectorColumnColor)
287   // subXsheet column
288   QColor m_childColumnColor;          //(214,154,219)
289   QColor m_childColumnBorderColor;    //(80,57,82)
290   QColor m_selectedChildColumnColor;  //(235,205,237)
291   Q_PROPERTY(QColor ChildColumnColor READ getChildColumnColor WRITE
292                  setChildColumnColor)
293   Q_PROPERTY(QColor ChildColumnBorderColor READ getChildColumnBorderColor WRITE
294                  setChildColumnBorderColor)
295   Q_PROPERTY(QColor SelectedChildColumnColor READ getSelectedChildColumnColor
296                  WRITE setSelectedChildColumnColor)
297   // Raster image column
298   QColor m_fullcolorColumnColor;          //(154,214,219)
299   QColor m_fullcolorColumnBorderColor;    //(57,80,82)
300   QColor m_selectedFullcolorColumnColor;  //(205,235,237)
301   Q_PROPERTY(QColor FullcolorColumnColor READ getFullcolorColumnColor WRITE
302                  setFullcolorColumnColor)
303   Q_PROPERTY(
304       QColor FullcolorColumnBorderColor READ getFullcolorColumnBorderColor WRITE
305           setFullcolorColumnBorderColor)
306   Q_PROPERTY(
307       QColor SelectedFullcolorColumnColor READ getSelectedFullcolorColumnColor
308           WRITE setSelectedFullcolorColumnColor)
309   // Fx column
310   QColor m_fxColumnColor;          //(130,129,93)
311   QColor m_fxColumnBorderColor;    //(48,48,35)
312   QColor m_selectedFxColumnColor;  //(193,192,174)
313   Q_PROPERTY(QColor FxColumnColor READ getFxColumnColor WRITE setFxColumnColor)
314   Q_PROPERTY(QColor FxColumnBorderColor READ getFxColumnBorderColor WRITE
315                  setFxColumnBorderColor)
316   Q_PROPERTY(QColor SelectedFxColumnColor READ getSelectedFxColumnColor WRITE
317                  setSelectedFxColumnColor)
318   // Reference column
319   QColor m_referenceColumnColor;          //(171,171,171)
320   QColor m_referenceColumnBorderColor;    //(62,62,62)
321   QColor m_selectedReferenceColumnColor;  //(213,213,213)
322   Q_PROPERTY(QColor ReferenceColumnColor READ getReferenceColumnColor WRITE
323                  setReferenceColumnColor)
324   Q_PROPERTY(
325       QColor ReferenceColumnBorderColor READ getReferenceColumnBorderColor WRITE
326           setReferenceColumnBorderColor)
327   Q_PROPERTY(
328       QColor SelectedReferenceColumnColor READ getSelectedReferenceColumnColor
329           WRITE setSelectedReferenceColumnColor)
330   // Palette column
331   QColor m_paletteColumnColor;          //(42,171,154)
332   QColor m_paletteColumnBorderColor;    //(15,62,56)
333   QColor m_selectedPaletteColumnColor;  //(146,221,202)
334   Q_PROPERTY(QColor PaletteColumnColor READ getPaletteColumnColor WRITE
335                  setPaletteColumnColor)
336   Q_PROPERTY(QColor PaletteColumnBorderColor READ getPaletteColumnBorderColor
337                  WRITE setPaletteColumnBorderColor)
338   Q_PROPERTY(
339       QColor SelectedPaletteColumnColor READ getSelectedPaletteColumnColor WRITE
340           setSelectedPaletteColumnColor)
341   // Mesh column
342   QColor m_meshColumnColor;
343   QColor m_meshColumnBorderColor;
344   QColor m_selectedMeshColumnColor;
345   Q_PROPERTY(
346       QColor MeshColumnColor READ getMeshColumnColor WRITE setMeshColumnColor)
347   Q_PROPERTY(QColor MeshColumnBorderColor READ getMeshColumnBorderColor WRITE
348                  setMeshColumnBorderColor)
349   Q_PROPERTY(QColor SelectedMeshColumnColor READ getSelectedMeshColumnColor
350                  WRITE setSelectedMeshColumnColor)
351   // SoundText column
352   QColor m_soundTextColumnColor;
353   QColor m_soundTextColumnBorderColor;
354   QColor m_selectedSoundTextColumnColor;
355   Q_PROPERTY(QColor SoundTextColumnColor READ getSoundTextColumnColor WRITE
356                  setSoundTextColumnColor)
357   Q_PROPERTY(
358       QColor SoundTextColumnBorderColor READ getSoundTextColumnBorderColor WRITE
359           setSoundTextColumnBorderColor)
360   Q_PROPERTY(
361       QColor SelectedSoundTextColumnColor READ getSelectedSoundTextColumnColor
362           WRITE setSelectedSoundTextColumnColor)
363   // Sound column
364   QColor m_soundColumnColor;
365   QColor m_soundColumnBorderColor;
366   QColor m_selectedSoundColumnColor;
367   QColor m_soundColumnHlColor;
368   QColor m_soundColumnTrackColor;
369   Q_PROPERTY(QColor SoundColumnColor MEMBER m_soundColumnColor)
370   Q_PROPERTY(QColor SoundColumnBorderColor MEMBER m_soundColumnBorderColor)
371   Q_PROPERTY(QColor SelectedSoundColumnColor MEMBER m_selectedSoundColumnColor)
372   Q_PROPERTY(QColor SoundColumnHlColor MEMBER m_soundColumnHlColor)
373   Q_PROPERTY(QColor SoundColumnTrackColor MEMBER m_soundColumnTrackColor)
374 
375   // for making the column head lighter (255,255,255,50);
376   QColor m_columnHeadPastelizer;
377   Q_PROPERTY(QColor ColumnHeadPastelizer READ getColumnHeadPastelizer WRITE
378                  setColumnHeadPastelizer)
379   // selected column head (190,210,240,170);
380   QColor m_selectedColumnHead;
381   Q_PROPERTY(QColor SelectedColumnHead READ getSelectedColumnHead WRITE
382                  setSelectedColumnHead)
383 
384   // For folded column
385   QColor m_foldedColumnBGColor;
386   QColor m_foldedColumnLineColor;
387   Q_PROPERTY(QColor FoldedColumnBGColor READ getFoldedColumnBGColor WRITE
388                  setFoldedColumnBGColor)
389   Q_PROPERTY(QColor FoldedColumnLineColor READ getFoldedColumnLineColor WRITE
390                  setFoldedColumnLineColor)
391 
392   // Xsheet Column name/Drag bar colors
393   QColor m_xsheetColumnNameBgColor;
394   QColor m_xsheetDragBarHighlightColor;
395   Q_PROPERTY(QColor XsheetColumnNameBgColor READ getXsheetColumnNameBgColor
396                  WRITE setXsheetColumnNameBgColor)
397   Q_PROPERTY(
398       QColor XsheetDragBarHighlightColor READ getXsheetDragBarHighlightColor
399           WRITE setXsheetDragBarHighlightColor)
400 
401   // Xsheet Active Camera color
402   QColor m_ActiveCameraColor;
403   QColor m_SelectedActiveCameraColor;
404   Q_PROPERTY(QColor ActiveCameraColor READ getActiveCameraColor WRITE
405                  setActiveCameraColor)
406   Q_PROPERTY(QColor SelectedActiveCameraColor READ getSelectedActiveCameraColor
407                  WRITE setSelectedActiveCameraColor)
408   // Xsheet Other Camera color
409   QColor m_OtherCameraColor;
410   QColor m_SelectedOtherCameraColor;
411   Q_PROPERTY(QColor OtherCameraColor READ getOtherCameraColor WRITE
412                  setOtherCameraColor)
413   Q_PROPERTY(QColor SelectedOtherCameraColor READ getSelectedOtherCameraColor
414                  WRITE setSelectedOtherCameraColor)
415 
416   // Xsheet Preview Button
417   QColor m_xsheetPreviewButtonBgOnColor;
418   QImage m_xsheetPreviewButtonOnImage;
419   QColor m_xsheetPreviewButtonBgOffColor;
420   QImage m_xsheetPreviewButtonOffImage;
421   Q_PROPERTY(
422       QColor XsheetPreviewButtonBgOnColor READ getXsheetPreviewButtonBgOnColor
423           WRITE setXsheetPreviewButtonBgOnColor)
424   Q_PROPERTY(
425       QImage XsheetPreviewButtonOnImage READ getXsheetPreviewButtonOnImage WRITE
426           setXsheetPreviewButtonOnImage)
427   Q_PROPERTY(
428       QColor XsheetPreviewButtonBgOffColor READ getXsheetPreviewButtonBgOffColor
429           WRITE setXsheetPreviewButtonBgOffColor)
430   Q_PROPERTY(
431       QImage XsheetPreviewButtonOffImage READ getXsheetPreviewButtonOffImage
432           WRITE setXsheetPreviewButtonOffImage)
433   // Xsheet Camstand Button
434   QColor m_xsheetCamstandButtonBgOnColor;
435   QImage m_xsheetCamstandButtonOnImage;
436   QImage m_xsheetCamstandButtonTranspImage;
437   QColor m_xsheetCamstandButtonBgOffColor;
438   QImage m_xsheetCamstandButtonOffImage;
439   Q_PROPERTY(
440       QColor XsheetCamstandButtonBgOnColor READ getXsheetCamstandButtonBgOnColor
441           WRITE setXsheetCamstandButtonBgOnColor)
442   Q_PROPERTY(
443       QImage XsheetCamstandButtonOnImage READ getXsheetCamstandButtonOnImage
444           WRITE setXsheetCamstandButtonOnImage)
445   Q_PROPERTY(QImage XsheetCamstandButtonTranspImage READ
446                  getXsheetCamstandButtonTranspImage WRITE
447                      setXsheetCamstandButtonTranspImage)
448   Q_PROPERTY(QColor XsheetCamstandButtonBgOffColor READ
449                  getXsheetCamstandButtonBgOffColor WRITE
450                      setXsheetCamstandButtonBgOffColor)
451   Q_PROPERTY(
452       QImage XsheetCamstandButtonOffImage READ getXsheetCamstandButtonOffImage
453           WRITE setXsheetCamstandButtonOffImage)
454   // Xsheet Lock Button
455   QColor m_xsheetLockButtonBgOnColor;
456   QImage m_xsheetLockButtonOnImage;
457   QColor m_xsheetLockButtonBgOffColor;
458   QImage m_xsheetLockButtonOffImage;
459   Q_PROPERTY(QColor XsheetLockButtonBgOnColor READ getXsheetLockButtonBgOnColor
460                  WRITE setXsheetLockButtonBgOnColor)
461   Q_PROPERTY(QImage XsheetLockButtonOnImage READ getXsheetLockButtonOnImage
462                  WRITE setXsheetLockButtonOnImage)
463   Q_PROPERTY(
464       QColor XsheetLockButtonBgOffColor READ getXsheetLockButtonBgOffColor WRITE
465           setXsheetLockButtonBgOffColor)
466   Q_PROPERTY(QImage XsheetLockButtonOffImage READ getXsheetLockButtonOffImage
467                  WRITE setXsheetLockButtonOffImage)
468   // Xsheet Config Button
469   QColor m_xsheetConfigButtonBgColor;
470   QImage m_xsheetConfigButtonImage;
471   Q_PROPERTY(QColor XsheetConfigButtonBgColor READ getXsheetConfigButtonBgColor
472                  WRITE setXsheetConfigButtonBgColor)
473   Q_PROPERTY(QImage XsheetConfigButtonImage READ getXsheetConfigButtonImage
474                  WRITE setXsheetConfigButtonImage)
475   // Timeline Preview Button
476   QColor m_timelinePreviewButtonBgOnColor;
477   QImage m_timelinePreviewButtonOnImage;
478   QColor m_timelinePreviewButtonBgOffColor;
479   QImage m_timelinePreviewButtonOffImage;
480   Q_PROPERTY(QColor TimelinePreviewButtonBgOnColor READ
481                  getTimelinePreviewButtonBgOnColor WRITE
482                      setTimelinePreviewButtonBgOnColor)
483   Q_PROPERTY(
484       QImage TimelinePreviewButtonOnImage READ getTimelinePreviewButtonOnImage
485           WRITE setTimelinePreviewButtonOnImage)
486   Q_PROPERTY(QColor TimelinePreviewButtonBgOffColor READ
487                  getTimelinePreviewButtonBgOffColor WRITE
488                      setTimelinePreviewButtonBgOffColor)
489   Q_PROPERTY(
490       QImage TimelinePreviewButtonOffImage READ getTimelinePreviewButtonOffImage
491           WRITE setTimelinePreviewButtonOffImage)
492   // Timeline Camstand Button
493   QColor m_timelineCamstandButtonBgOnColor;
494   QImage m_timelineCamstandButtonOnImage;
495   QImage m_timelineCamstandButtonTranspImage;
496   QColor m_timelineCamstandButtonBgOffColor;
497   QImage m_timelineCamstandButtonOffImage;
498   Q_PROPERTY(QColor TimelineCamstandButtonBgOnColor READ
499                  getTimelineCamstandButtonBgOnColor WRITE
500                      setTimelineCamstandButtonBgOnColor)
501   Q_PROPERTY(
502       QImage TimelineCamstandButtonOnImage READ getTimelineCamstandButtonOnImage
503           WRITE setTimelineCamstandButtonOnImage)
504   Q_PROPERTY(QImage TimelineCamstandButtonTranspImage READ
505                  getTimelineCamstandButtonTranspImage WRITE
506                      setTimelineCamstandButtonTranspImage)
507   Q_PROPERTY(QColor TimelineCamstandButtonBgOffColor READ
508                  getTimelineCamstandButtonBgOffColor WRITE
509                      setTimelineCamstandButtonBgOffColor)
510   Q_PROPERTY(QImage TimelineCamstandButtonOffImage READ
511                  getTimelineCamstandButtonOffImage WRITE
512                      setTimelineCamstandButtonOffImage)
513   // Timeline Lock Button
514   QColor m_timelineLockButtonBgOnColor;
515   QImage m_timelineLockButtonOnImage;
516   QColor m_timelineLockButtonBgOffColor;
517   QImage m_timelineLockButtonOffImage;
518   Q_PROPERTY(
519       QColor TimelineLockButtonBgOnColor READ getTimelineLockButtonBgOnColor
520           WRITE setTimelineLockButtonBgOnColor)
521   Q_PROPERTY(QImage TimelineLockButtonOnImage READ getTimelineLockButtonOnImage
522                  WRITE setTimelineLockButtonOnImage)
523   Q_PROPERTY(
524       QColor TimelineLockButtonBgOffColor READ getTimelineLockButtonBgOffColor
525           WRITE setTimelineLockButtonBgOffColor)
526   Q_PROPERTY(
527       QImage TimelineLockButtonOffImage READ getTimelineLockButtonOffImage WRITE
528           setTimelineLockButtonOffImage)
529   // Timeline Config Button
530   QColor m_timelineConfigButtonBgColor;
531   QImage m_timelineConfigButtonImage;
532   Q_PROPERTY(
533       QColor TimelineConfigButtonBgColor READ getTimelineConfigButtonBgColor
534           WRITE setTimelineConfigButtonBgColor)
535   Q_PROPERTY(QImage TimelineConfigButtonImage READ getTimelineConfigButtonImage
536                  WRITE setTimelineConfigButtonImage)
537   // Layer Header icons
538   QImage m_layerHeaderPreviewImage;
539   QImage m_layerHeaderPreviewOverImage;
540   QImage m_layerHeaderCamstandImage;
541   QImage m_layerHeaderCamstandOverImage;
542   QImage m_layerHeaderLockImage;
543   QImage m_layerHeaderLockOverImage;
544   Q_PROPERTY(QImage LayerHeaderPreviewImage READ getLayerHeaderPreviewImage
545                  WRITE setLayerHeaderPreviewImage)
546   Q_PROPERTY(
547       QImage LayerHeaderPreviewOverImage READ getLayerHeaderPreviewOverImage
548           WRITE setLayerHeaderPreviewOverImage)
549   Q_PROPERTY(QImage LayerHeaderCamstandImage READ getLayerHeaderCamstandImage
550                  WRITE setLayerHeaderCamstandImage)
551   Q_PROPERTY(
552       QImage LayerHeaderCamstandOverImage READ getLayerHeaderCamstandOverImage
553           WRITE setLayerHeaderCamstandOverImage)
554   Q_PROPERTY(QImage LayerHeaderLockImage READ getLayerHeaderLockImage WRITE
555                  setLayerHeaderLockImage)
556   Q_PROPERTY(QImage LayerHeaderLockOverImage READ getLayerHeaderLockOverImage
557                  WRITE setLayerHeaderLockOverImage)
558 
559   XsheetScrollArea *m_cellScrollArea;
560   XsheetScrollArea *m_columnScrollArea;
561   XsheetScrollArea *m_rowScrollArea;
562   XsheetScrollArea *m_noteScrollArea;
563   XsheetScrollArea *m_toolbarScrollArea;
564 
565   XsheetGUI::ColumnArea *m_columnArea;
566   XsheetGUI::RowArea *m_rowArea;
567   XsheetGUI::CellArea *m_cellArea;
568   XsheetGUI::NoteArea *m_noteArea;
569   XsheetGUI::XSheetToolbar *m_toolbar;
570   LayerFooterPanel *m_layerFooterPanel;
571 
572   Spreadsheet::FrameScroller m_frameScroller;
573 
574   int m_timerId;
575   QPoint m_autoPanSpeed;
576   QPoint m_lastAutoPanPos;
577 
578   TColumnSelection *m_columnSelection;
579   TCellKeyframeSelection *m_cellKeyframeSelection;
580 
581   int m_scrubCol, m_scrubRow0, m_scrubRow1;
582 
583   bool m_isCurrentFrameSwitched;
584   bool m_isCurrentColumnSwitched;
585 
586   XsheetGUI::DragTool *m_dragTool;
587 
588   bool m_isComputingSize;
589 
590   QList<XsheetGUI::NoteWidget *> m_noteWidgets;
591   int m_currentNoteIndex;
592 
593   Qt::KeyboardModifiers m_qtModifiers;
594 
595   const Orientation *m_orientation;
596 
597   QString m_xsheetLayout;
598 
599   int m_frameZoomFactor;
600 
601 public:
602   enum FrameDisplayStyle { Frame = 0, SecAndFrame, SixSecSheet, ThreeSecSheet };
603 
604 private:
605   FrameDisplayStyle m_frameDisplayStyle;
606 
to_enum(int n)607   FrameDisplayStyle to_enum(int n) {
608     switch (n) {
609     case 0:
610       return Frame;
611     case 1:
612       return SecAndFrame;
613     case 2:
614       return SixSecSheet;
615     default:
616       return ThreeSecSheet;
617     }
618   }
619 
620 public:
621 #if QT_VERSION >= 0x050500
622   XsheetViewer(QWidget *parent = 0, Qt::WindowFlags flags = 0);
623 #else
624   XsheetViewer(QWidget *parent = 0, Qt::WFlags flags = 0);
625 #endif
626   ~XsheetViewer();
627 
getColumnSelection()628   TColumnSelection *getColumnSelection() const { return m_columnSelection; }
getCellSelection()629   TCellSelection *getCellSelection() const {
630     return m_cellKeyframeSelection->getCellSelection();
631   }
getKeyframeSelection()632   TKeyframeSelection *getKeyframeSelection() const {
633     return m_cellKeyframeSelection->getKeyframeSelection();
634   }
getCellKeyframeSelection()635   TCellKeyframeSelection *getCellKeyframeSelection() const {
636     return m_cellKeyframeSelection;
637   }
638 
639   bool areCellsSelectedEmpty();
640   /*! Return true if selection contain only sound cell.*/
641   bool areSoundCellsSelected();
642   bool areSoundTextCellsSelected();
643   bool areCameraCellsSelected();
644 
getDragTool()645   XsheetGUI::DragTool *getDragTool() const { return m_dragTool; };
646   void setDragTool(XsheetGUI::DragTool *dragTool);
647 
648   void dragToolClick(QMouseEvent *);
649   void dragToolDrag(QMouseEvent *);
650   void dragToolRelease(QMouseEvent *);  // n.b. cancella il dragtool
651 
652   void dragToolLeave(QEvent *);  // n.b. cancella il dragtool
653 
654   void dragToolClick(QDropEvent *);
655   void dragToolDrag(QDropEvent *);
656   void dragToolRelease(QDropEvent *);  // n.b. cancella il dragtool
657 
setQtModifiers(Qt::KeyboardModifiers value)658   void setQtModifiers(Qt::KeyboardModifiers value) { m_qtModifiers = value; }
659 
660   void setScrubHighlight(int row, int starRow, int col);
661   void resetScrubHighlight();
662   void getScrubHeighlight(int &R0, int &R1);
663   bool isScrubHighlighted(int row, int col);
664 
665   TXsheet *getXsheet() const;
666   int getCurrentColumn() const;
667   int getCurrentRow() const;
668   //! Restituisce la \b objectId corrispondente alla colonna \b col
669   TStageObjectId getObjectId(int col) const;
670 
671   void setCurrentColumn(int col);
672   void setCurrentRow(int row);
673 
674   void scroll(QPoint delta);
675 
676   void setAutoPanSpeed(const QPoint &speed);
677   void setAutoPanSpeed(const QRect &widgetBounds, const QPoint &mousePos);
stopAutoPan()678   void stopAutoPan() { setAutoPanSpeed(QPoint()); }
isAutoPanning()679   bool isAutoPanning() const {
680     return m_autoPanSpeed.x() != 0 || m_autoPanSpeed.y() != 0;
681   }
682 
683   //-------
684   const Orientation *orientation() const;
685   void flipOrientation();
686 
687   CellPosition xyToPosition(const QPoint &point) const;
688   CellPosition xyToPosition(const TPoint &point) const;
689   CellPosition xyToPosition(const TPointD &point) const;
690   QPoint positionToXY(const CellPosition &pos) const;
691 
692   int colToTimelineLayerAxis(int layer) const;
693 
694   int columnToLayerAxis(int layer) const;
695   int rowToFrameAxis(int frame) const;
696 
697   CellRange xyRectToRange(const QRect &rect) const;
698   QRect rangeToXYRect(const CellRange &range) const;
699 
700   void drawPredefinedPath(QPainter &p, PredefinedPath which,
701                           const CellPosition &pos, optional<QColor> fill,
702                           optional<QColor> outline) const;
703 
704   void drawPredefinedPath(QPainter &p, PredefinedPath which, QPoint xy,
705                           optional<QColor> fill,
706                           optional<QColor> outline) const;
707 
708   //---------
709 
updateCells()710   void updateCells() { m_cellArea->update(m_cellArea->visibleRegion()); }
updateRows()711   void updateRows() { m_rowArea->update(m_rowArea->visibleRegion()); }
updateColumns()712   void updateColumns() { m_columnArea->update(m_columnArea->visibleRegion()); }
713   bool refreshContentSize(int scrollDx, int scrollDy);
714 
715   void updateAreeSize();
716 
717   QList<XsheetGUI::NoteWidget *> getNotesWidget() const;
718   void addNoteWidget(XsheetGUI::NoteWidget *w);
719   int getCurrentNoteIndex() const;
720   //! Clear notes widgets std::vector.
721   void clearNoteWidgets();
722   //! Update notes widgets and update cell.
723   void updateNoteWidgets();
724   //! Discard Note Widget
725   void discardNoteWidget();
726 
727   void setCurrentNoteIndex(int currentNoteIndex);
728 
729   // scroll the cell area to make a cell at (row,col) visible
730   void scrollTo(int row, int col);
731 
732   // QProperty
setLightLightBGColor(const QColor & color)733   void setLightLightBGColor(const QColor &color) {
734     m_lightLightBgColor = color;
735   }
getLightLightBGColor()736   QColor getLightLightBGColor() const { return m_lightLightBgColor; }
setLightBGColor(const QColor & color)737   void setLightBGColor(const QColor &color) { m_lightBgColor = color; }
getLightBGColor()738   QColor getLightBGColor() const { return m_lightBgColor; }
setBGColor(const QColor & color)739   void setBGColor(const QColor &color) { m_bgColor = color; }
getBGColor()740   QColor getBGColor() const { return m_bgColor; }
setDarkBGColor(const QColor & color)741   void setDarkBGColor(const QColor &color) { m_darkBgColor = color; }
getDarkBGColor()742   QColor getDarkBGColor() const { return m_darkBgColor; }
setLightLineColor(const QColor & color)743   void setLightLineColor(const QColor &color) { m_lightLineColor = color; }
getLightLineColor()744   QColor getLightLineColor() const { return m_lightLineColor; }
setDarkLineColor(const QColor & color)745   void setDarkLineColor(const QColor &color) { m_darkLineColor = color; }
getDarkLineColor()746   QColor getDarkLineColor() const { return m_darkLineColor; }
747 
getColumnIconLineColor()748   QColor getColumnIconLineColor() const { return m_columnIconLineColor; }
setColumnIconLineColor(const QColor & color)749   void setColumnIconLineColor(const QColor &color) {
750     m_columnIconLineColor = color;
751   }
getTimelineIconLineColor()752   QColor getTimelineIconLineColor() const { return m_timelineIconLineColor; }
setTimelineIconLineColor(const QColor & color)753   void setTimelineIconLineColor(const QColor &color) {
754     m_timelineIconLineColor = color;
755   }
getFrameRangeMarkerLineColor()756   QColor getFrameRangeMarkerLineColor() const {
757     return m_frameRangeMarkerLineColor;
758   }
setFrameRangeMarkerLineColor(const QColor & color)759   void setFrameRangeMarkerLineColor(const QColor &color) {
760     m_frameRangeMarkerLineColor = color;
761   }
762 
763   // Row
setCurrentRowBgColor(const QColor & color)764   void setCurrentRowBgColor(const QColor &color) {
765     m_currentRowBgColor = color;
766   }
getCurrentRowBgColor()767   QColor getCurrentRowBgColor() const { return m_currentRowBgColor; }
setMarkerLineColor(const QColor & color)768   void setMarkerLineColor(const QColor &color) { m_markerLineColor = color; }
getMarkerLineColor()769   QColor getMarkerLineColor() const { return m_markerLineColor; }
setVerticalLineColor(const QColor & color)770   void setVerticalLineColor(const QColor &color) {
771     m_verticalLineColor = color;
772   }
getVerticalLineColor()773   QColor getVerticalLineColor() const { return m_verticalLineColor; }
setVerticalLineHeadColor(const QColor & color)774   void setVerticalLineHeadColor(const QColor &color) {
775     m_verticalLineHeadColor = color;
776   }
getVerticalLineHeadColor()777   QColor getVerticalLineHeadColor() const { return m_verticalLineHeadColor; }
setTextColor(const QColor & color)778   void setTextColor(const QColor &color) { m_textColor = color; }
getTextColor()779   QColor getTextColor() const { return m_textColor; }
setErrorTextColor(const QColor & color)780   void setErrorTextColor(const QColor &color) { m_errorTextColor = color; }
getErrorTextColor()781   QColor getErrorTextColor() const { return m_errorTextColor; }
setPreviewFrameTextColor(const QColor & color)782   void setPreviewFrameTextColor(const QColor &color) {
783     m_previewFrameTextColor = color;
784   }
getPreviewFrameTextColor()785   QColor getPreviewFrameTextColor() const { return m_previewFrameTextColor; }
setOnionSkinAreaBgColor(const QColor & color)786   void setOnionSkinAreaBgColor(const QColor &color) {
787     m_onionSkinAreaBgColor = color;
788   }
getOnionSkinAreaBgColor()789   QColor getOnionSkinAreaBgColor() const { return m_onionSkinAreaBgColor; }
790 
791   // Column
setEmptyColumnHeadColor(const QColor & color)792   void setEmptyColumnHeadColor(const QColor &color) {
793     m_emptyColumnHeadColor = color;
794   }
getEmptyColumnHeadColor()795   QColor getEmptyColumnHeadColor() const { return m_emptyColumnHeadColor; }
796 
797   // specified by preferences
798   QColor getSelectedColumnTextColor() const;
799 
800   // Cell
setEmptyCellColor(const QColor & color)801   void setEmptyCellColor(const QColor &color) { m_emptyCellColor = color; }
getEmptyCellColor()802   QColor getEmptyCellColor() const { return m_emptyCellColor; }
setNotEmptyColumnColor(const QColor & color)803   void setNotEmptyColumnColor(const QColor &color) {
804     m_notEmptyColumnColor = color;
805   }
getNotEmptyColumnColor()806   QColor getNotEmptyColumnColor() const { return m_notEmptyColumnColor; }
setSelectedEmptyCellColor(const QColor & color)807   void setSelectedEmptyCellColor(const QColor &color) {
808     m_selectedEmptyCellColor = color;
809   }
getSelectedEmptyCellColor()810   QColor getSelectedEmptyCellColor() const { return m_selectedEmptyCellColor; }
811 
812   // Cell focus
setCellFocusColor(const QColor & color)813   void setCellFocusColor(const QColor &color) { m_cellFocusColor = color; }
getCellFocusColor()814   QColor getCellFocusColor() const { return m_cellFocusColor; }
815 
816   // Play range
getPlayRangeColor()817   QColor getPlayRangeColor() const { return m_playRangeColor; }
setPlayRangeColor(const QColor & color)818   void setPlayRangeColor(const QColor &color) { m_playRangeColor = color; }
819 
820   // TZP column
setLevelColumnColor(const QColor & color)821   void setLevelColumnColor(const QColor &color) { m_levelColumnColor = color; }
setLevelColumnBorderColor(const QColor & color)822   void setLevelColumnBorderColor(const QColor &color) {
823     m_levelColumnBorderColor = color;
824   }
setSelectedLevelColumnColor(const QColor & color)825   void setSelectedLevelColumnColor(const QColor &color) {
826     m_selectedLevelColumnColor = color;
827   }
getLevelColumnColor()828   QColor getLevelColumnColor() const { return m_levelColumnColor; }
getLevelColumnBorderColor()829   QColor getLevelColumnBorderColor() const { return m_levelColumnBorderColor; }
getSelectedLevelColumnColor()830   QColor getSelectedLevelColumnColor() const {
831     return m_selectedLevelColumnColor;
832   }
833   // PLI column
setVectorColumnColor(const QColor & color)834   void setVectorColumnColor(const QColor &color) {
835     m_vectorColumnColor = color;
836   }
setVectorColumnBorderColor(const QColor & color)837   void setVectorColumnBorderColor(const QColor &color) {
838     m_vectorColumnBorderColor = color;
839   }
setSelectedVectorColumnColor(const QColor & color)840   void setSelectedVectorColumnColor(const QColor &color) {
841     m_selectedVectorColumnColor = color;
842   }
getVectorColumnColor()843   QColor getVectorColumnColor() const { return m_vectorColumnColor; }
getVectorColumnBorderColor()844   QColor getVectorColumnBorderColor() const {
845     return m_vectorColumnBorderColor;
846   }
getSelectedVectorColumnColor()847   QColor getSelectedVectorColumnColor() const {
848     return m_selectedVectorColumnColor;
849   }
850   // subXsheet column
setChildColumnColor(const QColor & color)851   void setChildColumnColor(const QColor &color) { m_childColumnColor = color; }
setChildColumnBorderColor(const QColor & color)852   void setChildColumnBorderColor(const QColor &color) {
853     m_childColumnBorderColor = color;
854   }
setSelectedChildColumnColor(const QColor & color)855   void setSelectedChildColumnColor(const QColor &color) {
856     m_selectedChildColumnColor = color;
857   }
getChildColumnColor()858   QColor getChildColumnColor() const { return m_childColumnColor; }
getChildColumnBorderColor()859   QColor getChildColumnBorderColor() const { return m_childColumnBorderColor; }
getSelectedChildColumnColor()860   QColor getSelectedChildColumnColor() const {
861     return m_selectedChildColumnColor;
862   }
863   // Raster image column
setFullcolorColumnColor(const QColor & color)864   void setFullcolorColumnColor(const QColor &color) {
865     m_fullcolorColumnColor = color;
866   }
setFullcolorColumnBorderColor(const QColor & color)867   void setFullcolorColumnBorderColor(const QColor &color) {
868     m_fullcolorColumnBorderColor = color;
869   }
setSelectedFullcolorColumnColor(const QColor & color)870   void setSelectedFullcolorColumnColor(const QColor &color) {
871     m_selectedFullcolorColumnColor = color;
872   }
getFullcolorColumnColor()873   QColor getFullcolorColumnColor() const { return m_fullcolorColumnColor; }
getFullcolorColumnBorderColor()874   QColor getFullcolorColumnBorderColor() const {
875     return m_fullcolorColumnBorderColor;
876   }
getSelectedFullcolorColumnColor()877   QColor getSelectedFullcolorColumnColor() const {
878     return m_selectedFullcolorColumnColor;
879   }
880   // Fx column
setFxColumnColor(const QColor & color)881   void setFxColumnColor(const QColor &color) { m_fxColumnColor = color; }
setFxColumnBorderColor(const QColor & color)882   void setFxColumnBorderColor(const QColor &color) {
883     m_fxColumnBorderColor = color;
884   }
setSelectedFxColumnColor(const QColor & color)885   void setSelectedFxColumnColor(const QColor &color) {
886     m_selectedFxColumnColor = color;
887   }
getFxColumnColor()888   QColor getFxColumnColor() const { return m_fxColumnColor; }
getFxColumnBorderColor()889   QColor getFxColumnBorderColor() const { return m_fxColumnBorderColor; }
getSelectedFxColumnColor()890   QColor getSelectedFxColumnColor() const { return m_selectedFxColumnColor; }
891   // Reference column
setReferenceColumnColor(const QColor & color)892   void setReferenceColumnColor(const QColor &color) {
893     m_referenceColumnColor = color;
894   }
setReferenceColumnBorderColor(const QColor & color)895   void setReferenceColumnBorderColor(const QColor &color) {
896     m_referenceColumnBorderColor = color;
897   }
setSelectedReferenceColumnColor(const QColor & color)898   void setSelectedReferenceColumnColor(const QColor &color) {
899     m_selectedReferenceColumnColor = color;
900   }
getReferenceColumnColor()901   QColor getReferenceColumnColor() const { return m_referenceColumnColor; }
getReferenceColumnBorderColor()902   QColor getReferenceColumnBorderColor() const {
903     return m_referenceColumnBorderColor;
904   }
getSelectedReferenceColumnColor()905   QColor getSelectedReferenceColumnColor() const {
906     return m_selectedReferenceColumnColor;
907   }
908   // Palette column
setPaletteColumnColor(const QColor & color)909   void setPaletteColumnColor(const QColor &color) {
910     m_paletteColumnColor = color;
911   }
setPaletteColumnBorderColor(const QColor & color)912   void setPaletteColumnBorderColor(const QColor &color) {
913     m_paletteColumnBorderColor = color;
914   }
setSelectedPaletteColumnColor(const QColor & color)915   void setSelectedPaletteColumnColor(const QColor &color) {
916     m_selectedPaletteColumnColor = color;
917   }
getPaletteColumnColor()918   QColor getPaletteColumnColor() const { return m_paletteColumnColor; }
getPaletteColumnBorderColor()919   QColor getPaletteColumnBorderColor() const {
920     return m_paletteColumnBorderColor;
921   }
getSelectedPaletteColumnColor()922   QColor getSelectedPaletteColumnColor() const {
923     return m_selectedPaletteColumnColor;
924   }
925   // Mesh column
setMeshColumnColor(const QColor & color)926   void setMeshColumnColor(const QColor &color) { m_meshColumnColor = color; }
setMeshColumnBorderColor(const QColor & color)927   void setMeshColumnBorderColor(const QColor &color) {
928     m_meshColumnBorderColor = color;
929   }
setSelectedMeshColumnColor(const QColor & color)930   void setSelectedMeshColumnColor(const QColor &color) {
931     m_selectedMeshColumnColor = color;
932   }
getMeshColumnColor()933   QColor getMeshColumnColor() const { return m_meshColumnColor; }
getMeshColumnBorderColor()934   QColor getMeshColumnBorderColor() const { return m_meshColumnBorderColor; }
getSelectedMeshColumnColor()935   QColor getSelectedMeshColumnColor() const {
936     return m_selectedMeshColumnColor;
937   }
938   // SoundText column
setSoundTextColumnColor(const QColor & color)939   void setSoundTextColumnColor(const QColor &color) {
940     m_soundTextColumnColor = color;
941   }
setSoundTextColumnBorderColor(const QColor & color)942   void setSoundTextColumnBorderColor(const QColor &color) {
943     m_soundTextColumnBorderColor = color;
944   }
setSelectedSoundTextColumnColor(const QColor & color)945   void setSelectedSoundTextColumnColor(const QColor &color) {
946     m_selectedSoundTextColumnColor = color;
947   }
getSoundTextColumnColor()948   QColor getSoundTextColumnColor() const { return m_soundTextColumnColor; }
getSoundTextColumnBorderColor()949   QColor getSoundTextColumnBorderColor() const {
950     return m_soundTextColumnBorderColor;
951   }
getSelectedSoundTextColumnColor()952   QColor getSelectedSoundTextColumnColor() const {
953     return m_selectedSoundTextColumnColor;
954   }
955   // Sound column
getSoundColumnHlColor()956   QColor getSoundColumnHlColor() const { return m_soundColumnHlColor; }
getSoundColumnTrackColor()957   QColor getSoundColumnTrackColor() const { return m_soundColumnTrackColor; }
958 
setColumnHeadPastelizer(const QColor & color)959   void setColumnHeadPastelizer(const QColor &color) {
960     m_columnHeadPastelizer = color;
961   }
getColumnHeadPastelizer()962   QColor getColumnHeadPastelizer() const { return m_columnHeadPastelizer; }
setSelectedColumnHead(const QColor & color)963   void setSelectedColumnHead(const QColor &color) {
964     m_selectedColumnHead = color;
965   }
getSelectedColumnHead()966   QColor getSelectedColumnHead() const { return m_selectedColumnHead; }
967 
968   void getCellTypeAndColors(int &ltype, QColor &cellColor, QColor &sideColor,
969                             const TXshCell &cell, bool isSelected = false);
970   void getColumnColor(QColor &color, QColor &sidecolor, int index,
971                       TXsheet *xsh);
972 
973   // For folded column
getFoldedColumnBGColor()974   QColor getFoldedColumnBGColor() const { return m_foldedColumnBGColor; }
getFoldedColumnLineColor()975   QColor getFoldedColumnLineColor() const { return m_foldedColumnLineColor; }
setFoldedColumnBGColor(const QColor & color)976   void setFoldedColumnBGColor(const QColor &color) {
977     m_foldedColumnBGColor = color;
978   }
setFoldedColumnLineColor(const QColor & color)979   void setFoldedColumnLineColor(const QColor &color) {
980     m_foldedColumnLineColor = color;
981   }
982   // Xsheet Column Name/Drag Bar
setXsheetColumnNameBgColor(const QColor & color)983   void setXsheetColumnNameBgColor(const QColor &color) {
984     m_xsheetColumnNameBgColor = color;
985   }
setXsheetDragBarHighlightColor(const QColor & color)986   void setXsheetDragBarHighlightColor(const QColor &color) {
987     m_xsheetDragBarHighlightColor = color;
988   }
getXsheetColumnNameBgColor()989   QColor getXsheetColumnNameBgColor() const {
990     return m_xsheetColumnNameBgColor;
991   }
getXsheetDragBarHighlightColor()992   QColor getXsheetDragBarHighlightColor() const {
993     return m_xsheetDragBarHighlightColor;
994   }
995 
996   // Xsheet Active Camera Color
setActiveCameraColor(const QColor & color)997   void setActiveCameraColor(const QColor &color) {
998     m_ActiveCameraColor = color;
999   }
setSelectedActiveCameraColor(const QColor & color)1000   void setSelectedActiveCameraColor(const QColor &color) {
1001     m_SelectedActiveCameraColor = color;
1002   }
getActiveCameraColor()1003   QColor getActiveCameraColor() const { return m_ActiveCameraColor; }
getSelectedActiveCameraColor()1004   QColor getSelectedActiveCameraColor() const {
1005     return m_SelectedActiveCameraColor;
1006   }
1007   // Xsheet Other Camera Color
setOtherCameraColor(const QColor & color)1008   void setOtherCameraColor(const QColor &color) { m_OtherCameraColor = color; }
setSelectedOtherCameraColor(const QColor & color)1009   void setSelectedOtherCameraColor(const QColor &color) {
1010     m_SelectedOtherCameraColor = color;
1011   }
getOtherCameraColor()1012   QColor getOtherCameraColor() const { return m_OtherCameraColor; }
getSelectedOtherCameraColor()1013   QColor getSelectedOtherCameraColor() const {
1014     return m_SelectedOtherCameraColor;
1015   }
1016 
1017   // Xsheet Preview Button
setXsheetPreviewButtonBgOnColor(const QColor & color)1018   void setXsheetPreviewButtonBgOnColor(const QColor &color) {
1019     m_xsheetPreviewButtonBgOnColor = color;
1020   }
setXsheetPreviewButtonOnImage(const QImage & image)1021   void setXsheetPreviewButtonOnImage(const QImage &image) {
1022     m_xsheetPreviewButtonOnImage = image;
1023   }
setXsheetPreviewButtonBgOffColor(const QColor & color)1024   void setXsheetPreviewButtonBgOffColor(const QColor &color) {
1025     m_xsheetPreviewButtonBgOffColor = color;
1026   }
setXsheetPreviewButtonOffImage(const QImage & image)1027   void setXsheetPreviewButtonOffImage(const QImage &image) {
1028     m_xsheetPreviewButtonOffImage = image;
1029   }
getXsheetPreviewButtonBgOnColor()1030   QColor getXsheetPreviewButtonBgOnColor() const {
1031     return m_xsheetPreviewButtonBgOnColor;
1032   }
getXsheetPreviewButtonOnImage()1033   QImage getXsheetPreviewButtonOnImage() const {
1034     return m_xsheetPreviewButtonOnImage;
1035   }
getXsheetPreviewButtonBgOffColor()1036   QColor getXsheetPreviewButtonBgOffColor() const {
1037     return m_xsheetPreviewButtonBgOffColor;
1038   }
getXsheetPreviewButtonOffImage()1039   QImage getXsheetPreviewButtonOffImage() const {
1040     return m_xsheetPreviewButtonOffImage;
1041   }
1042   // Xsheet Camstand Button
setXsheetCamstandButtonBgOnColor(const QColor & color)1043   void setXsheetCamstandButtonBgOnColor(const QColor &color) {
1044     m_xsheetCamstandButtonBgOnColor = color;
1045   }
setXsheetCamstandButtonOnImage(const QImage & image)1046   void setXsheetCamstandButtonOnImage(const QImage &image) {
1047     m_xsheetCamstandButtonOnImage = image;
1048   }
setXsheetCamstandButtonTranspImage(const QImage & image)1049   void setXsheetCamstandButtonTranspImage(const QImage &image) {
1050     m_xsheetCamstandButtonTranspImage = image;
1051   }
setXsheetCamstandButtonBgOffColor(const QColor & color)1052   void setXsheetCamstandButtonBgOffColor(const QColor &color) {
1053     m_xsheetCamstandButtonBgOffColor = color;
1054   }
setXsheetCamstandButtonOffImage(const QImage & image)1055   void setXsheetCamstandButtonOffImage(const QImage &image) {
1056     m_xsheetCamstandButtonOffImage = image;
1057   }
getXsheetCamstandButtonBgOnColor()1058   QColor getXsheetCamstandButtonBgOnColor() const {
1059     return m_xsheetCamstandButtonBgOnColor;
1060   }
getXsheetCamstandButtonOnImage()1061   QImage getXsheetCamstandButtonOnImage() const {
1062     return m_xsheetCamstandButtonOnImage;
1063   }
getXsheetCamstandButtonTranspImage()1064   QImage getXsheetCamstandButtonTranspImage() const {
1065     return m_xsheetCamstandButtonTranspImage;
1066   }
getXsheetCamstandButtonBgOffColor()1067   QColor getXsheetCamstandButtonBgOffColor() const {
1068     return m_xsheetCamstandButtonBgOffColor;
1069   }
getXsheetCamstandButtonOffImage()1070   QImage getXsheetCamstandButtonOffImage() const {
1071     return m_xsheetCamstandButtonOffImage;
1072   }
1073   // XsheetLock Button
setXsheetLockButtonBgOnColor(const QColor & color)1074   void setXsheetLockButtonBgOnColor(const QColor &color) {
1075     m_xsheetLockButtonBgOnColor = color;
1076   }
setXsheetLockButtonOnImage(const QImage & image)1077   void setXsheetLockButtonOnImage(const QImage &image) {
1078     m_xsheetLockButtonOnImage = image;
1079   }
setXsheetLockButtonBgOffColor(const QColor & color)1080   void setXsheetLockButtonBgOffColor(const QColor &color) {
1081     m_xsheetLockButtonBgOffColor = color;
1082   }
setXsheetLockButtonOffImage(const QImage & image)1083   void setXsheetLockButtonOffImage(const QImage &image) {
1084     m_xsheetLockButtonOffImage = image;
1085   }
getXsheetLockButtonBgOnColor()1086   QColor getXsheetLockButtonBgOnColor() const {
1087     return m_xsheetLockButtonBgOnColor;
1088   }
getXsheetLockButtonOnImage()1089   QImage getXsheetLockButtonOnImage() const {
1090     return m_xsheetLockButtonOnImage;
1091   }
getXsheetLockButtonBgOffColor()1092   QColor getXsheetLockButtonBgOffColor() const {
1093     return m_xsheetLockButtonBgOffColor;
1094   }
getXsheetLockButtonOffImage()1095   QImage getXsheetLockButtonOffImage() const {
1096     return m_xsheetLockButtonOffImage;
1097   }
1098   // Xsheet Config Button
setXsheetConfigButtonBgColor(const QColor & color)1099   void setXsheetConfigButtonBgColor(const QColor &color) {
1100     m_xsheetConfigButtonBgColor = color;
1101   }
setXsheetConfigButtonImage(const QImage & image)1102   void setXsheetConfigButtonImage(const QImage &image) {
1103     m_xsheetConfigButtonImage = image;
1104   }
getXsheetConfigButtonBgColor()1105   QColor getXsheetConfigButtonBgColor() const {
1106     return m_xsheetConfigButtonBgColor;
1107   }
getXsheetConfigButtonImage()1108   QImage getXsheetConfigButtonImage() const {
1109     return m_xsheetConfigButtonImage;
1110   }
1111   // Timeline Preview Button
setTimelinePreviewButtonBgOnColor(const QColor & color)1112   void setTimelinePreviewButtonBgOnColor(const QColor &color) {
1113     m_timelinePreviewButtonBgOnColor = color;
1114   }
setTimelinePreviewButtonOnImage(const QImage & image)1115   void setTimelinePreviewButtonOnImage(const QImage &image) {
1116     m_timelinePreviewButtonOnImage = image;
1117   }
setTimelinePreviewButtonBgOffColor(const QColor & color)1118   void setTimelinePreviewButtonBgOffColor(const QColor &color) {
1119     m_timelinePreviewButtonBgOffColor = color;
1120   }
setTimelinePreviewButtonOffImage(const QImage & image)1121   void setTimelinePreviewButtonOffImage(const QImage &image) {
1122     m_timelinePreviewButtonOffImage = image;
1123   }
getTimelinePreviewButtonBgOnColor()1124   QColor getTimelinePreviewButtonBgOnColor() const {
1125     return m_timelinePreviewButtonBgOnColor;
1126   }
getTimelinePreviewButtonOnImage()1127   QImage getTimelinePreviewButtonOnImage() const {
1128     return m_timelinePreviewButtonOnImage;
1129   }
getTimelinePreviewButtonBgOffColor()1130   QColor getTimelinePreviewButtonBgOffColor() const {
1131     return m_timelinePreviewButtonBgOffColor;
1132   }
getTimelinePreviewButtonOffImage()1133   QImage getTimelinePreviewButtonOffImage() const {
1134     return m_timelinePreviewButtonOffImage;
1135   }
1136   // Timeline Camstand Button
setTimelineCamstandButtonBgOnColor(const QColor & color)1137   void setTimelineCamstandButtonBgOnColor(const QColor &color) {
1138     m_timelineCamstandButtonBgOnColor = color;
1139   }
setTimelineCamstandButtonOnImage(const QImage & image)1140   void setTimelineCamstandButtonOnImage(const QImage &image) {
1141     m_timelineCamstandButtonOnImage = image;
1142   }
setTimelineCamstandButtonTranspImage(const QImage & image)1143   void setTimelineCamstandButtonTranspImage(const QImage &image) {
1144     m_timelineCamstandButtonTranspImage = image;
1145   }
setTimelineCamstandButtonBgOffColor(const QColor & color)1146   void setTimelineCamstandButtonBgOffColor(const QColor &color) {
1147     m_timelineCamstandButtonBgOffColor = color;
1148   }
setTimelineCamstandButtonOffImage(const QImage & image)1149   void setTimelineCamstandButtonOffImage(const QImage &image) {
1150     m_timelineCamstandButtonOffImage = image;
1151   }
getTimelineCamstandButtonBgOnColor()1152   QColor getTimelineCamstandButtonBgOnColor() const {
1153     return m_timelineCamstandButtonBgOnColor;
1154   }
getTimelineCamstandButtonOnImage()1155   QImage getTimelineCamstandButtonOnImage() const {
1156     return m_timelineCamstandButtonOnImage;
1157   }
getTimelineCamstandButtonTranspImage()1158   QImage getTimelineCamstandButtonTranspImage() const {
1159     return m_timelineCamstandButtonTranspImage;
1160   }
getTimelineCamstandButtonBgOffColor()1161   QColor getTimelineCamstandButtonBgOffColor() const {
1162     return m_timelineCamstandButtonBgOffColor;
1163   }
getTimelineCamstandButtonOffImage()1164   QImage getTimelineCamstandButtonOffImage() const {
1165     return m_timelineCamstandButtonOffImage;
1166   }
1167   // Timeline Lock Button
setTimelineLockButtonBgOnColor(const QColor & color)1168   void setTimelineLockButtonBgOnColor(const QColor &color) {
1169     m_timelineLockButtonBgOnColor = color;
1170   }
setTimelineLockButtonOnImage(const QImage & image)1171   void setTimelineLockButtonOnImage(const QImage &image) {
1172     m_timelineLockButtonOnImage = image;
1173   }
setTimelineLockButtonBgOffColor(const QColor & color)1174   void setTimelineLockButtonBgOffColor(const QColor &color) {
1175     m_timelineLockButtonBgOffColor = color;
1176   }
setTimelineLockButtonOffImage(const QImage & image)1177   void setTimelineLockButtonOffImage(const QImage &image) {
1178     m_timelineLockButtonOffImage = image;
1179   }
getTimelineLockButtonBgOnColor()1180   QColor getTimelineLockButtonBgOnColor() const {
1181     return m_timelineLockButtonBgOnColor;
1182   }
getTimelineLockButtonOnImage()1183   QImage getTimelineLockButtonOnImage() const {
1184     return m_timelineLockButtonOnImage;
1185   }
getTimelineLockButtonBgOffColor()1186   QColor getTimelineLockButtonBgOffColor() const {
1187     return m_timelineLockButtonBgOffColor;
1188   }
getTimelineLockButtonOffImage()1189   QImage getTimelineLockButtonOffImage() const {
1190     return m_timelineLockButtonOffImage;
1191   }
1192   // Timeline Config Button
setTimelineConfigButtonBgColor(const QColor & color)1193   void setTimelineConfigButtonBgColor(const QColor &color) {
1194     m_timelineConfigButtonBgColor = color;
1195   }
setTimelineConfigButtonImage(const QImage & image)1196   void setTimelineConfigButtonImage(const QImage &image) {
1197     m_timelineConfigButtonImage = image;
1198   }
getTimelineConfigButtonBgColor()1199   QColor getTimelineConfigButtonBgColor() const {
1200     return m_timelineConfigButtonBgColor;
1201   }
getTimelineConfigButtonImage()1202   QImage getTimelineConfigButtonImage() const {
1203     return m_timelineConfigButtonImage;
1204   }
1205   // Layer Header icons
setLayerHeaderPreviewImage(const QImage & image)1206   void setLayerHeaderPreviewImage(const QImage &image) {
1207     m_layerHeaderPreviewImage = image;
1208   }
setLayerHeaderPreviewOverImage(const QImage & image)1209   void setLayerHeaderPreviewOverImage(const QImage &image) {
1210     m_layerHeaderPreviewOverImage = image;
1211   }
setLayerHeaderCamstandImage(const QImage & image)1212   void setLayerHeaderCamstandImage(const QImage &image) {
1213     m_layerHeaderCamstandImage = image;
1214   }
setLayerHeaderCamstandOverImage(const QImage & image)1215   void setLayerHeaderCamstandOverImage(const QImage &image) {
1216     m_layerHeaderCamstandOverImage = image;
1217   }
setLayerHeaderLockImage(const QImage & image)1218   void setLayerHeaderLockImage(const QImage &image) {
1219     m_layerHeaderLockImage = image;
1220   }
setLayerHeaderLockOverImage(const QImage & image)1221   void setLayerHeaderLockOverImage(const QImage &image) {
1222     m_layerHeaderLockOverImage = image;
1223   }
getLayerHeaderPreviewImage()1224   QImage getLayerHeaderPreviewImage() const {
1225     return m_layerHeaderPreviewImage;
1226   }
getLayerHeaderPreviewOverImage()1227   QImage getLayerHeaderPreviewOverImage() const {
1228     return m_layerHeaderPreviewOverImage;
1229   }
getLayerHeaderCamstandImage()1230   QImage getLayerHeaderCamstandImage() const {
1231     return m_layerHeaderCamstandImage;
1232   }
getLayerHeaderCamstandOverImage()1233   QImage getLayerHeaderCamstandOverImage() const {
1234     return m_layerHeaderCamstandOverImage;
1235   }
getLayerHeaderLockImage()1236   QImage getLayerHeaderLockImage() const { return m_layerHeaderLockImage; }
getLayerHeaderLockOverImage()1237   QImage getLayerHeaderLockOverImage() const {
1238     return m_layerHeaderLockOverImage;
1239   }
1240 
1241   void getButton(int &btype, QColor &bgColor, QImage &iconImage,
1242                  bool isTimeline = false);
1243 
1244   // convert the last one digit of the frame number to alphabet
1245   // Ex.  12 -> 1B    21 -> 2A   30 -> 3
1246   QString getFrameNumberWithLetters(int frame);
1247 
1248   void setFrameDisplayStyle(FrameDisplayStyle style);
getFrameDisplayStyle()1249   FrameDisplayStyle getFrameDisplayStyle() { return m_frameDisplayStyle; }
1250 
1251   // SaveLoadQSettings
1252   virtual void save(QSettings &settings) const override;
1253   virtual void load(QSettings &settings) override;
1254 
getXsheetLayout()1255   QString getXsheetLayout() const { return m_xsheetLayout; }
1256 
1257 protected:
1258   void scrollToColumn(int col);
1259   void scrollToHorizontalRange(int x0, int x1);
1260   void scrollToRow(int row);
1261   void scrollToVerticalRange(int y0, int y1);
1262 
1263   void showEvent(QShowEvent *) override;
1264   void hideEvent(QHideEvent *) override;
1265   void resizeEvent(QResizeEvent *event) override;
1266   void keyPressEvent(QKeyEvent *event) override;
1267   // display the upper-directional smart tab only when the ctrl key is pressed
1268   void keyReleaseEvent(QKeyEvent *event) override;
1269   void enterEvent(QEvent *) override;
1270   void wheelEvent(QWheelEvent *event) override;
1271   void timerEvent(QTimerEvent *) override;
1272 
1273   void disconnectScrollBars();
1274   void connectScrollBars();
1275   void connectOrDisconnectScrollBars(bool toConnect);
1276   void connectOrDisconnect(bool toConnect, QWidget *sender, const char *signal,
1277                            QWidget *receiver, const char *slot);
1278 signals:
1279   void orientationChanged(const Orientation *newOrientation);
1280 
1281 public slots:
1282   void positionSections();
1283   void onSceneSwitched();
1284   void onXsheetChanged();
1285   void onCurrentFrameSwitched();
1286   void onPlayingStatusChanged();
1287   void onCurrentColumnSwitched();
1288   void onSelectionSwitched(TSelection *oldSelection, TSelection *newSelection);
1289 
1290   void onSelectionChanged(TSelection *selection);
1291 
1292   void updateAllAree(bool isDragging = false);
1293   void updateColumnArea();
1294   void updateCellColumnAree();
1295   void updateCellRowAree();
1296 
1297   void onScrubStopped();
1298   void onPreferenceChanged(const QString &prefName);
1299   //! Aggiorna il "titolo" del widget.
1300   void changeWindowTitle();
1301 
1302   void resetXsheetNotes();
1303 
1304   void onOrientationChanged(const Orientation *newOrientation);
1305   void onPrepareToScrollOffset(const QPoint &offset);
1306   void onZoomScrollAdjust(QPoint &offset, bool toZoom);
1307 
setFrameZoomFactor(int f)1308   void setFrameZoomFactor(int f) { m_frameZoomFactor = f; }
1309   int getFrameZoomFactor() const;
1310   int getFrameZoomAdjustment();
1311 
1312   void zoomOnFrame(int frame, int factor);
1313 };
1314 
1315 #endif  // XSHEETVIEWER_H
1316