All Classes Namespaces Functions Variables Enumerations Properties Pages
displayoptionwidget.cpp
1 /*
2 
3 Pencil2D - Traditional Animation Software
4 Copyright (C) 2012-2020 Matthew Chiawen Chang
5 
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; version 2 of the License.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14 
15 */
16 
17 #include "displayoptionwidget.h"
18 #include "ui_displayoption.h"
19 
20 #include <QToolButton>
21 #include <QGridLayout>
22 
23 #include "preferencemanager.h"
24 #include "viewmanager.h"
25 #include "layermanager.h"
26 #include "scribblearea.h"
27 #include "editor.h"
28 #include "util.h"
29 #include "flowlayout.h"
30 
31 
32 DisplayOptionWidget::DisplayOptionWidget(QWidget *parent) :
33  BaseDockWidget(parent),
34  ui(new Ui::DisplayOption)
35 {
36  ui->setupUi(this);
37 }
38 
39 DisplayOptionWidget::~DisplayOptionWidget()
40 {
41  delete ui;
42 }
43 
44 void DisplayOptionWidget::initUI()
45 {
46  updateUI();
47  makeConnections();
48 
51  layout->addWidget(ui->mirrorButton);
52  layout->addWidget(ui->mirrorVButton);
53  layout->addWidget(ui->thinLinesButton);
54  layout->addWidget(ui->outLinesButton);
55  layout->addWidget(ui->overlayCenterButton);
56  layout->addWidget(ui->overlayThirdsButton);
57  layout->addWidget(ui->overlayGoldenRatioButton);
58  layout->addWidget(ui->overlaySafeAreaButton);
59 
60  delete ui->scrollAreaWidgetContents->layout();
61  ui->scrollAreaWidgetContents->setLayout(layout);
62 
63 #ifdef __APPLE__
64  // Mac only style. ToolButtons are naturally borderless on Win/Linux.
65  QString stylesheet =
66  "QToolButton { border: 0px; } "
67  "QToolButton:pressed{ border: 1px solid #FFADAD; border-radius: 2px; background-color: #D5D5D5; }"
68  "QToolButton:checked{ border: 1px solid #ADADAD; border-radius: 2px; background-color: #D5D5D5; }";
69 
70  ui->mirrorButton->setStyleSheet(stylesheet);
71  ui->mirrorVButton->setStyleSheet(stylesheet);
72  ui->thinLinesButton->setStyleSheet(stylesheet);
73  ui->outLinesButton->setStyleSheet(stylesheet);
74  ui->overlayCenterButton->setStyleSheet(stylesheet);
75  ui->overlayThirdsButton->setStyleSheet(stylesheet);
76  ui->overlayGoldenRatioButton->setStyleSheet(stylesheet);
77  ui->overlaySafeAreaButton->setStyleSheet(stylesheet);
78 #endif
79 }
80 
81 void DisplayOptionWidget::makeConnections()
82 {
83  connect(ui->mirrorButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleMirror);
84  connect(ui->mirrorVButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleMirrorV);
85  connect(ui->overlayCenterButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOverlayCenter);
86  connect(ui->overlayThirdsButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOverlayThirds);
87  connect(ui->overlayGoldenRatioButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOverlayGoldenRatio);
88  connect(ui->overlaySafeAreaButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOverlaySafeAreas);
89 
90  PreferenceManager* prefs = editor()->preference();
91  ScribbleArea* pScriArea = editor()->getScribbleArea();
92 
93  connect(ui->thinLinesButton, &QToolButton::clicked, pScriArea, &ScribbleArea::toggleThinLines);
94  connect(ui->outLinesButton, &QToolButton::clicked, pScriArea, &ScribbleArea::toggleOutlines);
95  connect(prefs, &PreferenceManager::optionChanged, this, &DisplayOptionWidget::updateUI);
96 
97  ViewManager* view = editor()->view();
98  connect(view, &ViewManager::viewFlipped, this, &DisplayOptionWidget::updateUI);
99 }
100 
101 void DisplayOptionWidget::updateUI()
102 {
103  PreferenceManager* prefs = editor()->preference();
104 
105  bool canEnableVectorButtons = editor()->layers()->currentLayer()->type() == Layer::VECTOR;
106  ui->thinLinesButton->setEnabled(canEnableVectorButtons);
107  ui->outLinesButton->setEnabled(canEnableVectorButtons);
108 
109  QSignalBlocker b1(ui->thinLinesButton);
110  ui->thinLinesButton->setChecked(prefs->isOn(SETTING::INVISIBLE_LINES));
111 
112  QSignalBlocker b2(ui->outLinesButton);
113  ui->outLinesButton->setChecked(prefs->isOn(SETTING::OUTLINES));
114 
115  QSignalBlocker b9(ui->overlayCenterButton);
116  ui->overlayCenterButton->setChecked(prefs->isOn(SETTING::OVERLAY_CENTER));
117 
118  QSignalBlocker b10(ui->overlayThirdsButton);
119  ui->overlayThirdsButton->setChecked(prefs->isOn(SETTING::OVERLAY_THIRDS));
120 
121  QSignalBlocker b11(ui->overlayGoldenRatioButton);
122  ui->overlayGoldenRatioButton->setChecked(prefs->isOn(SETTING::OVERLAY_GOLDEN));
123 
124  QSignalBlocker b12(ui->overlaySafeAreaButton);
125  ui->overlaySafeAreaButton->setChecked(prefs->isOn(SETTING::OVERLAY_SAFE));
126 
127  bool enableSafeArea = (prefs->isOn(SETTING::ACTION_SAFE_ON) || prefs->isOn(SETTING::TITLE_SAFE_ON));
128  ui->overlaySafeAreaButton->setEnabled(enableSafeArea);
129 
130  const ViewManager* view = editor()->view();
131 
132  QSignalBlocker b3(ui->mirrorButton);
133  ui->mirrorButton->setChecked(view->isFlipHorizontal());
134 
135  QSignalBlocker b4(ui->mirrorVButton);
136  ui->mirrorVButton->setChecked(view->isFlipVertical());
137 }
138 
139 int DisplayOptionWidget::getMinHeightForWidth(int width)
140 {
141  return ui->innerWidget->layout()->heightForWidth(width);
142 }
143 
144 void DisplayOptionWidget::toggleMirror(bool isOn)
145 {
146  editor()->view()->flipHorizontal(isOn);
147 }
148 
149 void DisplayOptionWidget::toggleMirrorV(bool isOn)
150 {
151  editor()->view()->flipVertical(isOn);
152 }
153 
154 void DisplayOptionWidget::toggleOverlayCenter(bool isOn)
155 {
156  editor()->view()->setOverlayCenter(isOn);
157  editor()->preference()->set(SETTING::OVERLAY_CENTER, isOn);
158 }
159 
160 void DisplayOptionWidget::toggleOverlayThirds(bool isOn)
161 {
162  editor()->view()->setOverlayThirds(isOn);
163  editor()->preference()->set(SETTING::OVERLAY_THIRDS, isOn);
164 }
165 
166 void DisplayOptionWidget::toggleOverlayGoldenRatio(bool isOn)
167 {
168  editor()->view()->setOverlayGoldenRatio(isOn);
169  editor()->preference()->set(SETTING::OVERLAY_GOLDEN, isOn);
170 }
171 
172 void DisplayOptionWidget::toggleOverlaySafeAreas(bool isOn)
173 {
174  editor()->view()->setOverlaySafeAreas(isOn);
175  editor()->preference()->set(SETTING::OVERLAY_SAFE, isOn);
176 }
QLayout * layout() const const
void setupUi(QWidget *widget)
AlignHCenter
void clicked(bool checked)
void addWidget(QWidget *w)
bool setAlignment(QWidget *w, Qt::Alignment alignment)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)