1 #include "EngaugeAssert.h"
10 #include "StatusBar.h"
11 #include "ZoomFactor.h"
13 const QString LABEL_COORDS_SCREEN (
"Coordinates (pixels):");
14 const QString LABEL_COORDS_GRAPH (
"Coordinates (graph):");
15 const QString LABEL_RESOLUTION_GRAPH (
"Resolution (graph):");
17 const QString LABEL_ZOOM_16_TO_1 (
"16:1");
18 const QString LABEL_ZOOM_8_TO_1 (
"8:1");
19 const QString LABEL_ZOOM_4_TO_1 (
"4:1");
20 const QString LABEL_ZOOM_2_TO_1 (
"2:1");
21 const QString LABEL_ZOOM_1_TO_1 (
"1:1");
22 const QString LABEL_ZOOM_1_TO_2 (
"1:2");
23 const QString LABEL_ZOOM_1_TO_4 (
"1:4");
24 const QString LABEL_ZOOM_1_TO_8 (
"1:8");
25 const QString LABEL_ZOOM_1_TO_16 (
"1:16");
26 const QString LABEL_ZOOM_FILL (
"Fill");
28 const int TEMPORARY_MESSAGE_LIFETIME = 5000;
30 const int MIN_WIDTH_COMBO_UNITS = 160;
31 const int MAX_WIDTH_GROUP_UNITS = 400;
32 const int MAX_SIZE_EDIT_COORDS = 550;
33 const int MAX_HEIGHT_EDIT_COORDS = 24;
36 m_statusBar (statusBar),
37 m_statusBarMode (STATUS_BAR_MODE_ALWAYS),
43 connect (&m_statusBar, SIGNAL (messageChanged (
const QString &)),
this, SLOT (slotStatusBarChanged (
const QString &)));
45 m_statusBar.setMaximumHeight (60);
49 StatusBar::~StatusBar ()
57 void StatusBar::createGroupUnits ()
59 m_comboUnits =
new QComboBox;
60 m_comboUnits->setEnabled (
false);
61 m_comboUnits->addItem (LABEL_COORDS_SCREEN, QVariant (STATUS_BAR_UNITS_COORDS_SCREEN));
62 m_comboUnits->addItem (LABEL_COORDS_GRAPH, QVariant (STATUS_BAR_UNITS_COORDS_GRAPH));
63 m_comboUnits->addItem (LABEL_RESOLUTION_GRAPH, QVariant (STATUS_BAR_UNITS_RESOLUTION_GRAPH));
64 m_comboUnits->setCurrentText (LABEL_COORDS_GRAPH);
65 m_comboUnits->setMaximumWidth (MIN_WIDTH_COMBO_UNITS);
66 m_comboUnits->setToolTip (tr (
"Select cursor coordinate values to display."));
67 m_comboUnits->setWhatsThis (tr(
"Select Cursor Coordinate Values\n\n"
68 "Values at cursor coordinates to display. Coordinates are in screen (pixels) or "
69 "graph units. Resolution (which is the number of graph units per pixel) is "
70 "in graph units. Graph units are only available after axis points have been defined."));
71 connect (m_comboUnits, SIGNAL (activated(
const QString &)),
this, SLOT (slotComboUnits (
const QString &)));
73 m_editCoords =
new QTextEdit;
74 m_editCoords->setEnabled (
false);
75 m_editCoords->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
76 m_editCoords->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
77 m_editCoords->setMinimumSize (MAX_SIZE_EDIT_COORDS, MAX_HEIGHT_EDIT_COORDS);
78 m_editCoords->setMaximumSize (MAX_SIZE_EDIT_COORDS, MAX_HEIGHT_EDIT_COORDS);
79 m_editCoords->setReadOnly(
true);
80 m_editCoords->setToolTip (tr (
"Cursor coordinate values."));
81 m_editCoords->setWhatsThis (tr (
"Cursor Coordinate Values\n\n"
82 "Values at cursor coordinates. Coordinates are in screen (pixels) or "
83 "graph units. Resolution (which is the number of graph units per pixel) is "
84 "in graph units. Graph units are only available after axis points have been defined."));
86 m_groupUnits =
new QFrame;
87 m_groupUnits->setFrameStyle (QFrame::Box);
88 QPalette *palette =
new QPalette;
89 palette->setColor (QPalette::Foreground, Qt::gray);
90 m_groupUnits->setPalette (*palette);
91 m_groupUnits->setMaximumWidth (MAX_WIDTH_GROUP_UNITS);
93 QHBoxLayout *groupLayout =
new QHBoxLayout;
94 m_groupUnits->setLayout (groupLayout);
95 groupLayout->setContentsMargins (0, 0, 0, 0);
96 groupLayout->addWidget (m_comboUnits);
97 groupLayout->addWidget (m_editCoords);
98 groupLayout->setMargin (2);
100 m_statusBar.addPermanentWidget (m_groupUnits);
103 void StatusBar::createZoom ()
105 m_comboZoom =
new QComboBox ();
106 m_comboZoom->setEnabled (
false);
107 m_comboZoom->addItem (LABEL_ZOOM_16_TO_1);
108 m_comboZoom->addItem (LABEL_ZOOM_8_TO_1);
109 m_comboZoom->addItem (LABEL_ZOOM_4_TO_1);
110 m_comboZoom->addItem (LABEL_ZOOM_2_TO_1);
111 m_comboZoom->addItem (LABEL_ZOOM_1_TO_1);
112 m_comboZoom->addItem (LABEL_ZOOM_1_TO_2);
113 m_comboZoom->addItem (LABEL_ZOOM_1_TO_4);
114 m_comboZoom->addItem (LABEL_ZOOM_1_TO_8);
115 m_comboZoom->addItem (LABEL_ZOOM_1_TO_16);
116 m_comboZoom->addItem (LABEL_ZOOM_FILL);
117 m_comboZoom->setCurrentText (LABEL_ZOOM_1_TO_1);
118 m_comboZoom->setMaximumWidth (80);
119 m_comboZoom->setToolTip (tr (
"Select zoom."));
120 m_comboZoom->setWhatsThis (tr(
"Select Zoom\n\n"
121 "Points can be more accurately placed by zooming in."));
123 connect (m_comboZoom, SIGNAL (currentTextChanged(
const QString &)),
this, SLOT (slotComboZoom (
const QString &)));
125 m_statusBar.addPermanentWidget (m_comboZoom);
129 const QString &coordsGraph,
130 const QString &resolutionGraph)
137 if (m_comboUnits->isEnabled ()) {
139 m_coordsScreen = coordsScreen;
140 m_coordsGraph = coordsGraph;
141 m_resolutionGraph = resolutionGraph;
150 if (m_statusBarMode == STATUS_BAR_MODE_ALWAYS) {
159 LOG4CPP_DEBUG_S ((*mainCat)) <<
"StatusBar::showTemporaryMessage message=" << message.toLatin1 ().data ();
161 if (m_statusBarMode != STATUS_BAR_MODE_NEVER) {
162 if (m_statusBarMode == STATUS_BAR_MODE_TEMPORARY) {
165 m_timer =
new QTimer;
166 connect (m_timer, SIGNAL (timeout ()),
this, SLOT (slotTimeout()));
167 m_timer->setSingleShot(
true);
170 m_statusBar.showMessage (message, TEMPORARY_MESSAGE_LIFETIME);
174 void StatusBar::slotComboUnits (
const QString &text)
176 LOG4CPP_DEBUG_S ((*mainCat)) <<
"StatusBar::slotComboUnits text=" << text.toLatin1 ().data ();
181 void StatusBar::slotComboZoom (
const QString &text)
183 LOG4CPP_DEBUG_S ((*mainCat)) <<
"StatusBar::slotComboZoom text=" << text.toLatin1 ().data ();
185 if (text == LABEL_ZOOM_16_TO_1) {
187 }
else if (text == LABEL_ZOOM_8_TO_1) {
189 }
else if (text == LABEL_ZOOM_4_TO_1) {
191 }
else if (text == LABEL_ZOOM_2_TO_1) {
193 }
else if (text == LABEL_ZOOM_1_TO_1) {
195 }
else if (text == LABEL_ZOOM_1_TO_2) {
197 }
else if (text == LABEL_ZOOM_1_TO_4) {
199 }
else if (text == LABEL_ZOOM_1_TO_8) {
201 }
else if (text == LABEL_ZOOM_1_TO_16) {
203 }
else if (text == LABEL_ZOOM_FILL) {
206 ENGAUGE_ASSERT (
false);
210 void StatusBar::slotStatusBarChanged(
const QString &message)
212 LOG4CPP_DEBUG_S ((*mainCat)) <<
"StatusBar::slotStatusBarChanged message=" << message.toLatin1 ().data ();
214 if (m_statusBarMode == STATUS_BAR_MODE_TEMPORARY) {
219 void StatusBar::slotTimeout()
221 LOG4CPP_INFO_S ((*mainCat)) <<
"StatusBar::slotTimeout";
231 LOG4CPP_INFO_S ((*mainCat)) <<
"StatusBar::slotZoom zoom=" << zoom;
234 switch ((ZoomFactor) zoom) {
236 m_comboZoom->setCurrentText (LABEL_ZOOM_16_TO_1);
239 m_comboZoom->setCurrentText (LABEL_ZOOM_8_TO_1);
242 m_comboZoom->setCurrentText (LABEL_ZOOM_4_TO_1);
245 m_comboZoom->setCurrentText (LABEL_ZOOM_2_TO_1);
248 m_comboZoom->setCurrentText (LABEL_ZOOM_1_TO_1);
251 m_comboZoom->setCurrentText (LABEL_ZOOM_1_TO_2);
254 m_comboZoom->setCurrentText (LABEL_ZOOM_1_TO_4);
257 m_comboZoom->setCurrentText (LABEL_ZOOM_1_TO_8);
260 m_comboZoom->setCurrentText (LABEL_ZOOM_1_TO_16);
263 m_comboZoom->setCurrentText (LABEL_ZOOM_FILL);
267 void StatusBar::updateCoordsText()
269 if (m_comboUnits->currentText() == LABEL_COORDS_SCREEN) {
270 m_editCoords->setText (m_coordsScreen);
271 }
else if (m_comboUnits->currentText() == LABEL_COORDS_GRAPH) {
272 m_editCoords->setText (m_coordsGraph);
274 m_editCoords->setText (m_resolutionGraph);
280 if (!m_comboUnits->isEnabled ()) {
283 m_comboZoom->setEnabled (
true);
284 m_comboUnits->setEnabled (
true);
285 m_editCoords->setEnabled (
true);
void setStatusBarMode(StatusBarMode statusBarMode)
Set the status bar visibility mode.
StatusBar(QStatusBar &statusBar)
Single constructor that accepts the previously-constructed standard QStatusBar.
void setCoordinates(const QString &coordsScreen, const QString &coordsGraph, const QString &resolutionGraph)
Populate the coordinates fields. Unavailable values are empty. Html-encoding to highlight with colors...
void slotZoom(int)
Receive zoom selection from MainWindow.
void wakeUp()
Enable all widgets in the status bar. This is called just after a Document becomes active...
void signalZoom(int)
Send zoom factor, that was just selected in the status bar, to MainWindow.
StatusBarMode statusBarMode() const
Current mode for status bar visibility. This is tracked locally so this class knows when to hide/show...
void showTemporaryMessage(const QString &message)
Show temporary message in status bar. After a short interval the message will disappear.