source: subversion/applications/editors/merkaartor/DirtyDock.cpp @ 12032

Last change on this file since 12032 was 12032, checked in by Łukasz Jernaś, 12 years ago

FIX: Pass arguments to recently changed translatable strings.

Definitely closes #1298 and #1306.

File size: 4.2 KB
Line 
1//
2// C++ Implementation: DirtyDock
3//
4// Description:
5//
6//
7// Author: cbro <cbro@semperpax.com>, (C) 2008
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#include "DirtyDock.h"
13#include "PropertiesDock.h"
14#include "MainWindow.h"
15#include "MapView.h"
16#include "Preferences/MerkaartorPreferences.h"
17#include "Map/MapDocument.h"
18#include "Map/MapLayer.h"
19#include "Map/MapFeature.h"
20#include "Map/DownloadOSM.h"
21#include "Command/Command.h"
22#include "Sync/DirtyList.h"
23
24#include <QMessageBox>
25
26DirtyDock::DirtyDock(MainWindow* aParent)
27        : MDockAncestor(aParent), Main(aParent)
28{
29        setMinimumSize(220,100);
30        setWindowTitle(tr("Undo"));
31        setObjectName("dirtyDock");
32
33        ui.setupUi(getWidget());
34
35        centerAction = new QAction(tr("Center map"), this);
36        connect(centerAction, SIGNAL(triggered()), this, SLOT(on_centerAction_triggered()));
37        centerZoomAction = new QAction(tr("Center && Zoom map"), this);
38        connect(centerZoomAction, SIGNAL(triggered()), this, SLOT(on_centerZoomAction_triggered()));
39
40        connect(ui.ChangesList, SIGNAL(itemSelectionChanged()), this, SLOT(on_ChangesList_itemSelectionChanged()));
41        connect(ui.ChangesList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(on_ChangesList_itemDoubleClicked(QListWidgetItem*)));
42        connect(ui.ChangesList, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(on_ChangesList_customContextMenuRequested(const QPoint &)));
43}
44
45
46DirtyDock::~DirtyDock()
47{
48}
49
50
51void DirtyDock::updateList()
52{
53        int dirtyObjects = Main->document()->getDirtyLayer()->size();
54
55        switch (dirtyObjects)
56        {
57                case 0:
58                        ui.label->setText(tr("There is <b>no</b> object in the dirty layer"));
59                        break;
60                case 1:
61                        ui.label->setText(tr("There is <b>one</b> object in the dirty layer"));
62                        break;
63
64                default:
65                        ui.label->setText(tr("There are <b>%n</b> objects in the dirty layer", "", dirtyObjects).arg(dirtyObjects));
66                        break;
67        }
68
69        ui.ChangesList->clear();
70
71        Main->document()->history().buildUndoList(ui.ChangesList);
72}
73
74void DirtyDock::on_ChangesList_itemSelectionChanged()
75{
76        MapFeature* F;
77
78        if (ui.ChangesList->selectedItems().count() != 0) {
79
80                if (ui.ChangesList->selectedItems().count() == 1) {
81                        F = Main->document()->getFeature(ui.ChangesList->selectedItems()[0]->data(Qt::UserRole).toString());
82                        if (F)
83                                Main->properties()->setSelection(F);
84                } else {
85                        Selection.clear();
86                        for (int i=0; i < ui.ChangesList->selectedItems().count(); ++i) {
87                                F = Main->document()->getFeature(ui.ChangesList->selectedItems()[i]->data(Qt::UserRole).toString());
88                                if (F)
89                                        Selection.push_back(F);
90                        }
91                        Main->properties()->setMultiSelection(Selection);
92                }
93
94        }
95        Main->view()->update();
96}
97
98void DirtyDock::on_ChangesList_itemDoubleClicked(QListWidgetItem* /* item */)
99{
100        on_centerAction_triggered();
101}
102
103void DirtyDock::on_ChangesList_customContextMenuRequested(const QPoint & pos)
104{
105        QListWidgetItem *it = ui.ChangesList->itemAt(pos);
106        if (it) {
107                QMenu menu(ui.ChangesList);
108                menu.addAction(centerAction);
109                menu.addAction(centerZoomAction);
110                menu.exec(ui.ChangesList->mapToGlobal(pos));
111        }
112}
113
114void DirtyDock::on_centerAction_triggered()
115{
116        MapFeature* F;
117        CoordBox cb;
118
119        Main->setUpdatesEnabled(false);
120        for (int i=0; i < ui.ChangesList->selectedItems().count(); ++i) {
121                F = Main->document()->getFeature(ui.ChangesList->selectedItems()[0]->data(Qt::UserRole).toString());
122                if (F) {
123                        if (cb.isNull())
124                                cb = F->boundingBox();
125                        else
126                                cb.merge(F->boundingBox());
127                }
128        }
129        if (!cb.isNull()) {
130                Coord c = cb.center();
131                Main->view()->projection().setCenter(c, Main->view()->rect());
132                Main->invalidateView();
133        }
134        Main->setUpdatesEnabled(true);
135}
136
137void DirtyDock::on_centerZoomAction_triggered()
138{
139        MapFeature* F;
140        CoordBox cb;
141
142        Main->setUpdatesEnabled(false);
143        for (int i=0; i < ui.ChangesList->selectedItems().count(); ++i) {
144                F = Main->document()->getFeature(ui.ChangesList->selectedItems()[0]->data(Qt::UserRole).toString());
145                if (F) {
146                        if (cb.isNull())
147                                cb = F->boundingBox();
148                        else
149                                cb.merge(F->boundingBox());
150                }
151        }
152        if (!cb.isNull()) {
153                CoordBox min(cb.center()-10, cb.center()+10);
154                cb.merge(min);
155                cb = cb.zoomed(1.1);
156                Main->view()->projection().setViewport(cb, Main->view()->rect());
157                Main->invalidateView();
158        }
159        Main->setUpdatesEnabled(true);
160}
Note: See TracBrowser for help on using the repository browser.