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 }