diff --git a/CHANGELOG.md b/CHANGELOG.md
index c1cea51d..ed0fc4de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,7 @@ The **"Breaking Changes"** listed below are changes that have been made in the d
- All plain text boxes now have a clear button to delete the text.
- The window sizes and positions of the tileset editor, palette editor, and region map editor are now stored in `porymap.cfg`.
- Add ruler tool for measuring metatile distance in events tab (Right-click to turn on/off, left-click to lock in place).
+- Add delete button to wild pokemon encounters tab.
### Changed
- Holding `shift` now toggles "Smart Path" drawing; when the "Smart Paths" checkbox is checked, holding `shift` will temporarily disable it.
diff --git a/docsrc/manual/editing-map-events.rst b/docsrc/manual/editing-map-events.rst
index 4a7ee536..7837d48d 100644
--- a/docsrc/manual/editing-map-events.rst
+++ b/docsrc/manual/editing-map-events.rst
@@ -260,7 +260,7 @@ Shift
Ruler Tool
----------
-The Ruler Tool provides a convenient way to measure distance on the map. This is particularly useful for scripting object movement. With the Pointer Tool selected you can activate the ruler with a Right-click. With the ruler active you can drag the mouse around to extend the ruler. The ruler can be deactivated with another Right-click, or locked in place with a Left-click (Left-click again to unlock the ruler). The dimensions of the ruler are displayed in a tool-tip and in the status bar in the bottom left corner of the widnow.
+The Ruler Tool provides a convenient way to measure distance on the map. This is particularly useful for scripting object movement. With the Pointer Tool selected you can activate the ruler with a Right-click. With the ruler active you can move the mouse around to extend the ruler. The ruler can be deactivated with another Right-click, or locked in place with a Left-click (Left-click again to unlock the ruler).
.. figure:: images/editing-map-events/event-tool-ruler.gif
:alt: Measuring metatile distance with the Ruler Tool
diff --git a/docsrc/manual/images/editing-map-events/event-tool-ruler.gif b/docsrc/manual/images/editing-map-events/event-tool-ruler.gif
index fdbbd12f..707c2037 100644
Binary files a/docsrc/manual/images/editing-map-events/event-tool-ruler.gif and b/docsrc/manual/images/editing-map-events/event-tool-ruler.gif differ
diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui
index f2aa614f..4a844c89 100644
--- a/forms/mainwindow.ui
+++ b/forms/mainwindow.ui
@@ -2527,6 +2527,23 @@
+ -
+
+
+ <html><head/><body><p>Delete a group of wild pokemon data on this map.</p></body></html>
+
+
+
+
+
+
+ :/icons/delete.ico:/icons/delete.ico
+
+
+ true
+
+
+
-
diff --git a/include/editor.h b/include/editor.h
index 8dfa91ae..a8646eb8 100644
--- a/include/editor.h
+++ b/include/editor.h
@@ -83,6 +83,7 @@ public:
void addNewConnection();
void removeCurrentConnection();
void addNewWildMonGroup(QWidget *window);
+ void deleteWildMonGroup();
void updateDiveMap(QString mapName);
void updateEmergeMap(QString mapName);
void setSelectedConnectionFromMap(QString mapName);
@@ -211,7 +212,6 @@ private slots:
void onHoveredMapMovementPermissionCleared();
void onSelectedMetatilesChanged();
void onWheelZoom(int);
- void onMapRulerLengthChanged();
signals:
void objectsChanged();
@@ -220,6 +220,7 @@ signals:
void wildMonDataChanged();
void warpEventDoubleClicked(QString mapName, QString warpNum);
void currentMetatilesSelectionChanged();
+ void mapRulerStatusChanged(const QString &);
};
#endif // EDITOR_H
diff --git a/include/mainwindow.h b/include/mainwindow.h
index 607a713a..2e81721d 100644
--- a/include/mainwindow.h
+++ b/include/mainwindow.h
@@ -127,6 +127,7 @@ private slots:
void openNewMapPopupWindow(int, QVariant);
void onNewMapCreated();
void onMapCacheCleared();
+ void onMapRulerStatusChanged(const QString &);
void on_action_NewMap_triggered();
void on_actionNew_Tileset_triggered();
@@ -205,6 +206,7 @@ private slots:
void on_lineEdit_filterBox_textChanged(const QString &arg1);
+ void moveEvent(QMoveEvent *event);
void closeEvent(QCloseEvent *);
void eventTabChanged(int index);
@@ -220,6 +222,7 @@ private slots:
void on_tableWidget_CustomHeaderFields_cellChanged(int row, int column);
void on_horizontalSlider_MetatileZoom_valueChanged(int value);
void on_pushButton_NewWildMonGroup_clicked();
+ void on_pushButton_DeleteWildMonGroup_clicked();
void on_pushButton_ConfigureEncountersJSON_clicked();
void on_actionRegion_Map_Editor_triggered();
@@ -228,6 +231,7 @@ private slots:
private:
Ui::MainWindow *ui;
+ QLabel *label_MapRulerStatus;
TilesetEditor *tilesetEditor = nullptr;
RegionMapEditor *regionMapEditor = nullptr;
MapImageExporter *mapImageExporter = nullptr;
diff --git a/include/ui/graphicsview.h b/include/ui/graphicsview.h
index 85fb7a73..960f7dc4 100644
--- a/include/ui/graphicsview.h
+++ b/include/ui/graphicsview.h
@@ -22,6 +22,7 @@ protected:
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void drawForeground(QPainter *painter, const QRectF &rect);
+ void moveEvent(QMoveEvent *event);
};
//Q_DECLARE_METATYPE(GraphicsView)
diff --git a/include/ui/mapruler.h b/include/ui/mapruler.h
index 0ee6e698..151492e3 100644
--- a/include/ui/mapruler.h
+++ b/include/ui/mapruler.h
@@ -2,8 +2,7 @@
#define MAPRULER_H
#include
-#include
-#include
+#include
class MapRuler : public QGraphicsObject, private QLine
@@ -11,20 +10,14 @@ class MapRuler : public QGraphicsObject, private QLine
Q_OBJECT
public:
- MapRuler(QColor innerColor = Qt::yellow, QColor borderColor = Qt::black) :
- innerColor(innerColor),
- borderColor(borderColor),
- mapSize(QSize())
- {
- init();
- }
- void init();
+ // thickness is given in scene pixels
+ MapRuler(int thickness, QColor innerColor = Qt::yellow, QColor borderColor = Qt::black);
+
QRectF boundingRect() const override;
QPainterPath shape() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override;
bool eventFilter(QObject *, QEvent *event) override;
- void setEnabled(bool enabled);
bool isAnchored() const { return anchored; }
bool isLocked() const { return locked; }
@@ -45,37 +38,33 @@ public:
// Ruler height in metatiles
int height() const { return qAbs(deltaY()); }
- QString statusMessage;
-
public slots:
void mouseEvent(QGraphicsSceneMouseEvent *event);
void setMapDimensions(const QSize &size);
+signals:
+ void statusChanged(const QString &statusMessage);
+
private:
- QColor innerColor;
- QColor borderColor;
+ const int thickness;
+ const qreal half_thickness;
+ const QColor innerColor;
+ const QColor borderColor;
QSize mapSize;
- QRect xRuler;
- QRect yRuler;
+ QRectF xRuler;
+ QRectF yRuler;
QLineF cornerTick;
bool anchored;
bool locked;
- static int thickness;
-
+ void reset();
+ void setAnchor(const QPointF &scenePos);
+ void setEndPos(const QPointF &scenePos);
QPoint snapToWithinBounds(QPoint pos) const;
- void setAnchor(const QPointF &scenePos, const QPoint &screenPos);
- void endAnchor();
- void setEndPos(const QPointF &scenePos, const QPoint &screenPos);
- void showDimensions(const QPoint &screenPos) const;
- void hideDimensions() const;
void updateGeometry();
+ void updateStatus(Qt::Corner corner);
int pixWidth() const { return width() * 16; }
int pixHeight() const { return height() * 16; }
-
-signals:
- void lengthChanged();
- void deactivated(const QPoint &endPos);
};
#endif // MAPRULER_H
diff --git a/src/editor.cpp b/src/editor.cpp
index 36512679..a83f03d0 100644
--- a/src/editor.cpp
+++ b/src/editor.cpp
@@ -26,9 +26,8 @@ Editor::Editor(Ui::MainWindow* ui)
this->settings = new Settings();
this->playerViewRect = new MovableRect(&this->settings->playerViewRectEnabled, 30 * 8, 20 * 8, qRgb(255, 255, 255));
this->cursorMapTileRect = new CursorTileRect(&this->settings->cursorTileRectEnabled, qRgb(255, 255, 255));
- this->map_ruler = new MapRuler();
- connect(this->map_ruler, &MapRuler::lengthChanged, this, &Editor::onMapRulerLengthChanged);
- connect(this->map_ruler, &MapRuler::deactivated, this, &Editor::onHoveredMapMetatileChanged);
+ this->map_ruler = new MapRuler(4);
+ connect(this->map_ruler, &MapRuler::statusChanged, this, &Editor::mapRulerStatusChanged);
/// Instead of updating the selected events after every single undo action
/// (eg when the user rolls back several at once), only reselect events when
@@ -359,6 +358,44 @@ void Editor::addNewWildMonGroup(QWidget *window) {
}
}
+void Editor::deleteWildMonGroup() {
+ QComboBox *labelCombo = ui->comboBox_EncounterGroupLabel;
+
+ if (labelCombo->count() < 1) {
+ return;
+ }
+
+ QMessageBox msgBox;
+ msgBox.setText("Confirm Delete");
+ msgBox.setInformativeText("Are you sure you want to delete " + labelCombo->currentText() + "?");
+
+ QPushButton *deleteButton = msgBox.addButton("Delete", QMessageBox::DestructiveRole);
+ msgBox.addButton(QMessageBox::Cancel);
+ msgBox.setDefaultButton(QMessageBox::Cancel);
+ msgBox.exec();
+
+ if (msgBox.clickedButton() == deleteButton) {
+ auto it = project->wildMonData.find(map->constantName);
+ if (it == project->wildMonData.end()) {
+ logError(QString("Failed to find data for map %1. Unable to delete").arg(map->constantName));
+ return;
+ }
+
+ int i = project->encounterGroupLabels.indexOf(labelCombo->currentText());
+ if (i < 0) {
+ logError(QString("Failed to find selected wild mon group: %1. Unable to delete")
+ .arg(labelCombo->currentText()));
+ return;
+ }
+
+ it.value().erase(labelCombo->currentText());
+ project->encounterGroupLabels.remove(i);
+
+ displayWildMonTables();
+ emit wildMonDataChanged();
+ }
+}
+
void Editor::configureEncounterJSON(QWidget *window) {
QVector fieldSlots;
@@ -937,24 +974,12 @@ void Editor::onHoveredMapMetatileChanged(const QPoint &pos) {
}
}
-void Editor::onMapRulerLengthChanged() {
- const QPoint pos = map_ruler->endPos();
- ui->statusBar->showMessage(QString("X: %1, Y: %2, Scale = %3x; %4")
- .arg(pos.x())
- .arg(pos.y())
- .arg(QString::number(pow(scale_base, scale_exp), 'g', 2))
- .arg(map_ruler->statusMessage));
-}
-
void Editor::onHoveredMapMetatileCleared() {
this->playerViewRect->setVisible(false);
this->cursorMapTileRect->setVisible(false);
if (map_item->paintingMode == MapPixmapItem::PaintMode::Metatiles
|| map_item->paintingMode == MapPixmapItem::PaintMode::EventObjects) {
this->ui->statusBar->clearMessage();
- if (this->map_ruler->isAnchored()) {
- this->ui->statusBar->showMessage(this->map_ruler->statusMessage);
- }
}
}
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index fe104371..c0713226 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -40,6 +40,7 @@
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
+ label_MapRulerStatus(nullptr),
selectedObject(nullptr),
selectedWarp(nullptr),
selectedTrigger(nullptr),
@@ -65,6 +66,7 @@ MainWindow::MainWindow(QWidget *parent) :
MainWindow::~MainWindow()
{
+ delete label_MapRulerStatus;
delete ui;
}
@@ -140,6 +142,17 @@ void MainWindow::initCustomUI() {
}
delete ui->frame_mapTools->layout();
ui->frame_mapTools->setLayout(flowLayout);
+
+ // Floating QLabel tool-window that displays over the map when the ruler is active
+ label_MapRulerStatus = new QLabel(ui->graphicsView_Map);
+ label_MapRulerStatus->setObjectName("label_MapRulerStatus");
+ label_MapRulerStatus->setWindowFlags(Qt::Tool | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
+ label_MapRulerStatus->setFrameShape(QFrame::Box);
+ label_MapRulerStatus->setMargin(3);
+ label_MapRulerStatus->setPalette(palette());
+ label_MapRulerStatus->setAlignment(Qt::AlignCenter);
+ label_MapRulerStatus->setTextFormat(Qt::PlainText);
+ label_MapRulerStatus->setTextInteractionFlags(Qt::TextSelectableByMouse);
}
void MainWindow::initExtraSignals() {
@@ -155,6 +168,7 @@ void MainWindow::initEditor() {
connect(this->editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString)));
connect(this->editor, SIGNAL(currentMetatilesSelectionChanged()), this, SLOT(currentMetatilesSelectionChanged()));
connect(this->editor, SIGNAL(wildMonDataChanged()), this, SLOT(onWildMonDataChanged()));
+ connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged);
connect(ui->toolButton_Open_Scripts, &QToolButton::clicked, this->editor, &Editor::openMapScripts);
connect(ui->actionOpen_Project_in_Text_Editor, &QAction::triggered, this->editor, &Editor::openProjectInTextEditor);
@@ -2277,6 +2291,23 @@ void MainWindow::onWildMonDataChanged() {
projectHasUnsavedChanges = true;
}
+void MainWindow::onMapRulerStatusChanged(const QString &status) {
+ if (status.isEmpty()) {
+ label_MapRulerStatus->hide();
+ } else if (label_MapRulerStatus->parentWidget()) {
+ label_MapRulerStatus->setText(status);
+ label_MapRulerStatus->adjustSize();
+ label_MapRulerStatus->show();
+ label_MapRulerStatus->move(label_MapRulerStatus->parentWidget()->mapToGlobal(QPoint(6, 6)));
+ }
+}
+
+void MainWindow::moveEvent(QMoveEvent *event) {
+ QMainWindow::moveEvent(event);
+ if (label_MapRulerStatus->isVisible() && label_MapRulerStatus->parentWidget())
+ label_MapRulerStatus->move(label_MapRulerStatus->parentWidget()->mapToGlobal(QPoint(6, 6)));
+}
+
void MainWindow::on_action_Export_Map_Image_triggered() {
showExportMapImageWindow(false);
}
@@ -2334,6 +2365,10 @@ void MainWindow::on_pushButton_NewWildMonGroup_clicked() {
editor->addNewWildMonGroup(this);
}
+void MainWindow::on_pushButton_DeleteWildMonGroup_clicked() {
+ editor->deleteWildMonGroup();
+}
+
void MainWindow::on_pushButton_ConfigureEncountersJSON_clicked() {
editor->configureEncounterJSON(this);
}
diff --git a/src/ui/graphicsview.cpp b/src/ui/graphicsview.cpp
index f0b73aa3..0e518cf7 100644
--- a/src/ui/graphicsview.cpp
+++ b/src/ui/graphicsview.cpp
@@ -21,3 +21,10 @@ void GraphicsView::drawForeground(QPainter *painter, const QRectF&) {
item->render(painter);
}
}
+
+void GraphicsView::moveEvent(QMoveEvent *event) {
+ QGraphicsView::moveEvent(event);
+ QLabel *label_MapRulerStatus = findChild("label_MapRulerStatus", Qt::FindDirectChildrenOnly);
+ if (label_MapRulerStatus && label_MapRulerStatus->isVisible())
+ label_MapRulerStatus->move(mapToGlobal(QPoint(6, 6)));
+}
diff --git a/src/ui/mapruler.cpp b/src/ui/mapruler.cpp
index ed404176..908e0a46 100644
--- a/src/ui/mapruler.cpp
+++ b/src/ui/mapruler.cpp
@@ -1,28 +1,34 @@
#include "mapruler.h"
#include "metatile.h"
-#include
#include
#include
#include
-#include
-
-int MapRuler::thickness = 3;
+#include
-void MapRuler::init() {
- setVisible(false);
- setPoints(QPoint(), QPoint());
- anchored = false;
- locked = false;
- statusMessage = QString("Ruler: 0");
- xRuler = QRect();
- yRuler = QRect();
- cornerTick = QLine();
+MapRuler::MapRuler(int thickness, QColor innerColor, QColor borderColor) :
+ /* The logical representation of rectangles are always one less than
+ * the rendered shape, so we subtract 1 from thickness. */
+ thickness(thickness - 1),
+ half_thickness(qreal(thickness - 1) / 2.0),
+ innerColor(innerColor),
+ borderColor(borderColor),
+ mapSize(QSize()),
+ xRuler(QRectF()),
+ yRuler(QRectF()),
+ cornerTick(QLineF()),
+ anchored(false),
+ locked(false)
+{
+ connect(this, &QGraphicsObject::enabledChanged, [this]() {
+ if (!isEnabled() && anchored)
+ reset();
+ });
}
QRectF MapRuler::boundingRect() const {
- return QRectF(-thickness, -thickness, pixWidth() + thickness * 2, pixHeight() + thickness * 2);
+ return QRectF(-(half_thickness + 1), -(half_thickness + 1), pixWidth() + thickness + 2, pixHeight() + thickness + 2);
}
QPainterPath MapRuler::shape() const {
@@ -31,10 +37,12 @@ QPainterPath MapRuler::shape() const {
ruler.addRect(xRuler);
ruler.addRect(yRuler);
ruler = ruler.simplified();
- for (int x = 17.5; x < pixWidth(); x += 16)
+ for (int x = 16; x < pixWidth(); x += 16)
ruler.addRect(x, xRuler.y(), 0, thickness);
- for (int y = 17.5; y < pixHeight(); y += 16)
+ for (int y = 16; y < pixHeight(); y += 16)
ruler.addRect(yRuler.x(), y, thickness, 0);
+ if (deltaX() && deltaY())
+ ruler.addPolygon(QVector({ cornerTick.p1(), cornerTick.p2() }));
return ruler;
}
@@ -42,20 +50,16 @@ void MapRuler::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidge
painter->setPen(QPen(borderColor));
painter->setBrush(QBrush(innerColor));
painter->drawPath(shape());
- if (deltaX() && deltaY())
- painter->drawLine(cornerTick);
}
-bool MapRuler::eventFilter(QObject*, QEvent *event) {
+bool MapRuler::eventFilter(QObject *, QEvent *event) {
if (!isEnabled() || mapSize.isEmpty())
return false;
if (event->type() == QEvent::GraphicsSceneMousePress || event->type() == QEvent::GraphicsSceneMouseMove) {
- auto mouse_event = static_cast(event);
+ auto *mouse_event = static_cast(event);
if (mouse_event->button() == Qt::RightButton || anchored) {
mouseEvent(mouse_event);
- event->accept();
- return true;
}
}
@@ -64,26 +68,53 @@ bool MapRuler::eventFilter(QObject*, QEvent *event) {
void MapRuler::mouseEvent(QGraphicsSceneMouseEvent *event) {
if (!anchored && event->button() == Qt::RightButton) {
- setAnchor(event->scenePos(), event->screenPos());
+ setAnchor(event->scenePos());
} else if (anchored) {
if (event->button() == Qt::LeftButton)
locked = !locked;
if (event->button() == Qt::RightButton)
- endAnchor();
+ reset();
else
- setEndPos(event->scenePos(), event->screenPos());
+ setEndPos(event->scenePos());
}
}
void MapRuler::setMapDimensions(const QSize &size) {
mapSize = size;
- init();
+ reset();
}
-void MapRuler::setEnabled(bool enabled) {
- QGraphicsItem::setEnabled(enabled);
- if (!enabled && anchored)
- endAnchor();
+void MapRuler::reset() {
+ prepareGeometryChange();
+ hide();
+ setPoints(QPoint(), QPoint());
+ xRuler = QRectF();
+ yRuler = QRectF();
+ cornerTick = QLineF();
+ anchored = false;
+ locked = false;
+ emit statusChanged(QString());
+}
+
+void MapRuler::setAnchor(const QPointF &scenePos) {
+ QPoint pos = Metatile::coordFromPixmapCoord(scenePos);
+ pos = snapToWithinBounds(pos);
+ anchored = true;
+ locked = false;
+ setPoints(pos, pos);
+ updateGeometry();
+ show();
+}
+
+void MapRuler::setEndPos(const QPointF &scenePos) {
+ if (locked)
+ return;
+ QPoint pos = Metatile::coordFromPixmapCoord(scenePos);
+ pos = snapToWithinBounds(pos);
+ const QPoint lastEndPos = endPos();
+ setP2(pos);
+ if (pos != lastEndPos)
+ updateGeometry();
}
QPoint MapRuler::snapToWithinBounds(QPoint pos) const {
@@ -98,80 +129,62 @@ QPoint MapRuler::snapToWithinBounds(QPoint pos) const {
return pos;
}
-void MapRuler::setAnchor(const QPointF &scenePos, const QPoint &screenPos) {
- QPoint pos = Metatile::coordFromPixmapCoord(scenePos);
- pos = snapToWithinBounds(pos);
- anchored = true;
- locked = false;
- setPoints(pos, pos);
- updateGeometry();
- setVisible(true);
- showDimensions(screenPos);
-}
-
-void MapRuler::endAnchor() {
- emit deactivated(endPos());
- hideDimensions();
- prepareGeometryChange();
- init();
-}
-
-void MapRuler::setEndPos(const QPointF &scenePos, const QPoint &screenPos) {
- if (locked)
- return;
- QPoint pos = Metatile::coordFromPixmapCoord(scenePos);
- pos = snapToWithinBounds(pos);
- const QPoint lastEndPos = endPos();
- setP2(pos);
- if (pos != lastEndPos)
- updateGeometry();
- showDimensions(screenPos);
-}
-
-void MapRuler::showDimensions(const QPoint &screenPos) const {
- // This is a hack to make the tool tip follow the cursor since it won't change position if the text is the same.
- QToolTip::showText(screenPos + QPoint(16, -8), statusMessage + ' ');
- QToolTip::showText(screenPos + QPoint(16, -8), statusMessage);
-}
-
-void MapRuler::hideDimensions() const {
- QToolTip::hideText();
-}
-
void MapRuler::updateGeometry() {
prepareGeometryChange();
- setPos(QPoint(left() * 16 + 7, top() * 16 + 7));
+ setPos(QPoint(left() * 16 + 8, top() * 16 + 8));
/* Determine what quadrant the end point is in relative to the anchor point. The anchor
- * point is the top-left corner of the metatile the ruler starts in, so a zero-length(s)
+ * point is the top-left corner of the metatile the ruler starts in, so a zero-length
* ruler is considered to be in the bottom-right quadrant from the anchor point. */
if (deltaX() < 0 && deltaY() < 0) {
// Top-left
- xRuler = QRect(0, pixHeight(), pixWidth() + thickness, thickness);
- yRuler = QRect(0, 0, thickness, pixHeight() + thickness);
+ xRuler = QRectF(-half_thickness, pixHeight() - half_thickness, pixWidth() + thickness, thickness);
+ yRuler = QRectF(-half_thickness, -half_thickness, thickness, pixHeight() + thickness);
cornerTick = QLineF(yRuler.x() + 0.5, xRuler.y() + thickness - 0.5, yRuler.x() + thickness, xRuler.y());
- statusMessage = QString("Ruler: Left %1, Up %2").arg(width()).arg(height());
+ updateStatus(Qt::TopLeftCorner);
} else if (deltaX() < 0) {
// Bottom-left
- xRuler = QRect(0, 0, pixWidth() + thickness, thickness);
- yRuler = QRect(0, 0, thickness, pixHeight() + thickness);
+ xRuler = QRectF(-half_thickness, -half_thickness, pixWidth() + thickness, thickness);
+ yRuler = QRectF(-half_thickness, -half_thickness, thickness, pixHeight() + thickness);
cornerTick = QLineF(xRuler.x() + 0.5, xRuler.y() + 0.5, xRuler.x() + thickness, xRuler.y() + thickness);
+ updateStatus(Qt::BottomLeftCorner);
+ } else if (deltaY() < 0) {
+ // Top-right
+ xRuler = QRectF(-half_thickness, pixHeight() - half_thickness, pixWidth() + thickness, thickness);
+ yRuler = QRectF(pixWidth() - half_thickness, -half_thickness, thickness, pixHeight() + thickness);
+ cornerTick = QLineF(yRuler.x(), xRuler.y(), yRuler.x() + thickness - 0.5, xRuler.y() + thickness - 0.5);
+ updateStatus(Qt::TopRightCorner);
+ } else {
+ // Bottom-right
+ xRuler = QRectF(-half_thickness, -half_thickness, pixWidth() + thickness, thickness);
+ yRuler = QRectF(pixWidth() - half_thickness, -half_thickness, thickness, pixHeight() + thickness);
+ cornerTick = QLineF(yRuler.x(), yRuler.y() + thickness, yRuler.x() + thickness - 0.5, yRuler.y() + 0.5);
+ updateStatus(Qt::BottomRightCorner);
+ }
+}
+
+void MapRuler::updateStatus(Qt::Corner corner) {
+ QString statusMessage;
+ switch (corner)
+ {
+ case Qt::TopLeftCorner:
+ statusMessage = QString("Ruler: Left %1, Up %2\nStart(%3, %4), End(%5, %6)").arg(width()).arg(height())
+ .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y());
+ break;
+ case Qt::BottomLeftCorner:
statusMessage = QString("Ruler: Left %1").arg(width());
if (deltaY())
statusMessage += QString(", Down %1").arg(height());
- } else if (deltaY() < 0) {
- // Top-right
- xRuler = QRect(0, pixHeight(), pixWidth() + thickness, thickness);
- yRuler = QRect(pixWidth(), 0, thickness, pixHeight() + thickness);
- cornerTick = QLineF(yRuler.x(), xRuler.y(), yRuler.x() + thickness - 0.5, xRuler.y() + thickness - 0.5);
+ statusMessage += QString("\nStart(%1, %2), End(%3, %4)")
+ .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y());
+ break;
+ case Qt::TopRightCorner:
statusMessage = QString("Ruler: ");
if (deltaX())
statusMessage += QString("Right %1, ").arg(width());
- statusMessage += QString("Up %1").arg(height());
- } else {
- // Bottom-right
- xRuler = QRect(0, 0, pixWidth() + thickness, thickness);
- yRuler = QRect(pixWidth(), 0, thickness, pixHeight() + thickness);
- cornerTick = QLineF(yRuler.x(), yRuler.y() + thickness, yRuler.x() + thickness - 0.5, yRuler.y() + 0.5);
+ statusMessage += QString("Up %1\nStart(%2, %3), End(%4, %5)").arg(height())
+ .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y());
+ break;
+ case Qt::BottomRightCorner:
statusMessage = QString("Ruler: ");
if (deltaX() || deltaY()) {
if (deltaX())
@@ -181,9 +194,13 @@ void MapRuler::updateGeometry() {
statusMessage += ", ";
statusMessage += QString("Down: %1").arg(height());
}
+ statusMessage += QString("\nStart(%1, %2), End(%3, %4)")
+ .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y());
} else {
- statusMessage += QString("0");
+ statusMessage += QString("0\nStart(%1, %2)")
+ .arg(anchor().x()).arg(anchor().y());
}
+ break;
}
- emit lengthChanged();
+ emit statusChanged(statusMessage);
}