1 #include "locatorpopup.h"
2
3 // TnzLib includes
4 #include "toonz/txshlevelhandle.h"
5 #include "toonz/tframehandle.h"
6 #include "toonz/preferences.h"
7 #include "toonz/stage2.h"
8
9 // Tnz6 includes
10 #include "tapp.h"
11 #include "sceneviewer.h"
12
13 #include <QVBoxLayout>
14
LocatorPopup(QWidget * parent)15 LocatorPopup::LocatorPopup(QWidget *parent)
16 : QDialog(parent), m_initialZoom(true) {
17 m_viewer = new SceneViewer(NULL);
18 m_viewer->setParent(parent);
19 m_viewer->setIsLocator();
20
21 //---- layout
22 QVBoxLayout *mainLayout = new QVBoxLayout();
23 mainLayout->setMargin(0);
24 mainLayout->addWidget(m_viewer, 1);
25 setLayout(mainLayout);
26
27 bool ret = true;
28 // When zoom changed, change window title.
29 ret = connect(m_viewer, SIGNAL(onZoomChanged()), SLOT(changeWindowTitle()));
30 ret = ret &&
31 connect(m_viewer, SIGNAL(previewToggled()), SLOT(changeWindowTitle()));
32 assert(ret);
33
34 resize(400, 400);
35 }
36
37 //-----------------------------------------------------------------------------
38
onChangeViewAff(const TPointD & pos)39 void LocatorPopup::onChangeViewAff(const TPointD &pos) {
40 TAffine curAff = m_viewer->getSceneMatrix();
41 TAffine newAff(curAff.a11, 0, -pos.x * curAff.a11, 0, curAff.a22,
42 -pos.y * curAff.a22);
43 m_viewer->setViewMatrix(newAff, 0);
44 m_viewer->setViewMatrix(newAff, 1);
45 m_viewer->update();
46 }
47
48 //-----------------------------------------------------------------------------
49
showEvent(QShowEvent *)50 void LocatorPopup::showEvent(QShowEvent *) {
51 // zoom the locator for the first time
52 if (m_initialZoom) {
53 for (int z = 0; z < 4; z++) m_viewer->zoomQt(true, false);
54 m_initialZoom = false;
55 }
56
57 TApp *app = TApp::instance();
58 TFrameHandle *frameHandle = app->getCurrentFrame();
59 TXshLevelHandle *levelHandle = app->getCurrentLevel();
60
61 bool ret = true;
62 ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this,
63 SLOT(changeWindowTitle()));
64 ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this,
65 SLOT(changeWindowTitle()));
66 assert(ret);
67
68 changeWindowTitle();
69 }
70
71 //-----------------------------------------------------------------------------
72
hideEvent(QHideEvent *)73 void LocatorPopup::hideEvent(QHideEvent *) {
74 TApp *app = TApp::instance();
75 disconnect(app->getCurrentLevel());
76 disconnect(app->getCurrentFrame());
77 }
78
79 //-----------------------------------------------------------------------------
80
changeWindowTitle()81 void LocatorPopup::changeWindowTitle() {
82 TApp *app = TApp::instance();
83 // put the titlebar texts in this string
84 QString name = tr("Locator");
85
86 bool showZoomFactor = false;
87
88 // if the frame type is "scene editing"
89 if (app->getCurrentFrame()->isEditingScene()) {
90 if (m_viewer->isPreviewEnabled()) showZoomFactor = true;
91
92 // If the current level exists and some option is set in the preference,
93 // set the zoom value to the current level's dpi
94 else if (Preferences::instance()
95 ->isActualPixelViewOnSceneEditingModeEnabled() &&
96 app->getCurrentLevel()->getSimpleLevel() &&
97 !CleanupPreviewCheck::instance()
98 ->isEnabled() // cleanup preview must be OFF
99 &&
100 !CameraTestCheck::instance()
101 ->isEnabled()) // camera test mode must be OFF neither
102 showZoomFactor = true;
103 }
104 // if the frame type is "level editing"
105 else {
106 TXshLevel *level = app->getCurrentLevel()->getLevel();
107 if (level) showZoomFactor = true;
108 }
109
110 if (showZoomFactor) {
111 name = name + " Zoom : " +
112 QString::number((int)(100.0 * sqrt(m_viewer->getViewMatrix().det()) *
113 m_viewer->getDpiFactor())) +
114 "%";
115 }
116 setWindowTitle(name);
117 }