117 lines
No EOL
3.6 KiB
C++
117 lines
No EOL
3.6 KiB
C++
#include "locatorpopup.h"
|
|
|
|
// TnzLib includes
|
|
#include "toonz/txshlevelhandle.h"
|
|
#include "toonz/tframehandle.h"
|
|
#include "toonz/preferences.h"
|
|
#include "toonz/stage2.h"
|
|
|
|
// Tnz6 includes
|
|
#include "tapp.h"
|
|
#include "sceneviewer.h"
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
LocatorPopup::LocatorPopup(QWidget *parent)
|
|
: QDialog(parent), m_initialZoom(true) {
|
|
m_viewer = new SceneViewer(NULL);
|
|
m_viewer->setParent(parent);
|
|
m_viewer->setIsLocator();
|
|
|
|
//---- layout
|
|
QVBoxLayout *mainLayout = new QVBoxLayout();
|
|
mainLayout->setMargin(0);
|
|
mainLayout->addWidget(m_viewer, 1);
|
|
setLayout(mainLayout);
|
|
|
|
bool ret = true;
|
|
// When zoom changed, change window title.
|
|
ret = connect(m_viewer, SIGNAL(onZoomChanged()), SLOT(changeWindowTitle()));
|
|
ret = ret &&
|
|
connect(m_viewer, SIGNAL(previewToggled()), SLOT(changeWindowTitle()));
|
|
assert(ret);
|
|
|
|
resize(400, 400);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void LocatorPopup::onChangeViewAff(const TPointD &pos) {
|
|
TAffine curAff = m_viewer->getSceneMatrix();
|
|
TAffine newAff(curAff.a11, 0, -pos.x * curAff.a11, 0, curAff.a22,
|
|
-pos.y * curAff.a22);
|
|
m_viewer->setViewMatrix(newAff, 0);
|
|
m_viewer->setViewMatrix(newAff, 1);
|
|
m_viewer->update();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void LocatorPopup::showEvent(QShowEvent *) {
|
|
// zoom the locator for the first time
|
|
if (m_initialZoom) {
|
|
for (int z = 0; z < 4; z++) m_viewer->zoomQt(true, false);
|
|
m_initialZoom = false;
|
|
}
|
|
|
|
TApp *app = TApp::instance();
|
|
TFrameHandle *frameHandle = app->getCurrentFrame();
|
|
TXshLevelHandle *levelHandle = app->getCurrentLevel();
|
|
|
|
bool ret = true;
|
|
ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this,
|
|
SLOT(changeWindowTitle()));
|
|
ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this,
|
|
SLOT(changeWindowTitle()));
|
|
assert(ret);
|
|
|
|
changeWindowTitle();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void LocatorPopup::hideEvent(QHideEvent *) {
|
|
TApp *app = TApp::instance();
|
|
disconnect(app->getCurrentLevel());
|
|
disconnect(app->getCurrentFrame());
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void LocatorPopup::changeWindowTitle() {
|
|
TApp *app = TApp::instance();
|
|
// put the titlebar texts in this string
|
|
QString name = tr("Locator");
|
|
|
|
bool showZoomFactor = false;
|
|
|
|
// if the frame type is "scene editing"
|
|
if (app->getCurrentFrame()->isEditingScene()) {
|
|
if (m_viewer->isPreviewEnabled()) showZoomFactor = true;
|
|
|
|
// If the current level exists and some option is set in the preference,
|
|
// set the zoom value to the current level's dpi
|
|
else if (Preferences::instance()
|
|
->isActualPixelViewOnSceneEditingModeEnabled() &&
|
|
app->getCurrentLevel()->getSimpleLevel() &&
|
|
!CleanupPreviewCheck::instance()
|
|
->isEnabled() // cleanup preview must be OFF
|
|
&&
|
|
!CameraTestCheck::instance()
|
|
->isEnabled()) // camera test mode must be OFF neither
|
|
showZoomFactor = true;
|
|
}
|
|
// if the frame type is "level editing"
|
|
else {
|
|
TXshLevel *level = app->getCurrentLevel()->getLevel();
|
|
if (level) showZoomFactor = true;
|
|
}
|
|
|
|
if (showZoomFactor) {
|
|
name = name + " Zoom : " +
|
|
QString::number((int)(100.0 * sqrt(m_viewer->getViewMatrix().det()) *
|
|
m_viewer->getDpiFactor())) +
|
|
"%";
|
|
}
|
|
setWindowTitle(name);
|
|
} |