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

Last change on this file since 13597 was 13597, checked in by Chris Browet, 11 years ago

ADD : Outline coastlines

File size: 4.4 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        setObjectName("dirtyDock");
31
32        ui.setupUi(getWidget());
33
34        centerAction = new QAction(NULL, this);
35        connect(centerAction, SIGNAL(triggered()), this, SLOT(on_centerAction_triggered()));
36        centerZoomAction = new QAction(NULL, this);
37        connect(centerZoomAction, SIGNAL(triggered()), this, SLOT(on_centerZoomAction_triggered()));
38
39        connect(ui.ChangesList, SIGNAL(itemSelectionChanged()), this, SLOT(on_ChangesList_itemSelectionChanged()));
40        connect(ui.ChangesList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(on_ChangesList_itemDoubleClicked(QListWidgetItem*)));
41        connect(ui.ChangesList, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(on_ChangesList_customContextMenuRequested(const QPoint &)));
42
43        retranslateUi();
44}
45
46
47DirtyDock::~DirtyDock()
48{
49}
50
51
52void DirtyDock::updateList()
53{
54        int dirtyObjects = Main->document()->getDirtyLayer()->size();
55
56        switch (dirtyObjects)
57        {
58                case 0:
59                        ui.label->setText(tr("There is <b>no</b> object in the dirty layer"));
60                        break;
61                case 1:
62                        ui.label->setText(tr("There is <b>one</b> object in the dirty layer"));
63                        break;
64
65                default:
66                        ui.label->setText(tr("There are <b>%n</b> objects in the dirty layer", "", dirtyObjects));
67                        break;
68        }
69
70        ui.ChangesList->clear();
71
72        Main->document()->history().buildUndoList(ui.ChangesList);
73}
74
75void DirtyDock::on_ChangesList_itemSelectionChanged()
76{
77        MapFeature* F;
78
79        if (ui.ChangesList->selectedItems().count() != 0) {
80
81                if (ui.ChangesList->selectedItems().count() == 1) {
82                        F = Main->document()->getFeature(ui.ChangesList->selectedItems()[0]->data(Qt::UserRole).toString());
83                        if (F)
84                                Main->properties()->setSelection(F);
85                } else {
86                        Selection.clear();
87                        for (int i=0; i < ui.ChangesList->selectedItems().count(); ++i) {
88                                F = Main->document()->getFeature(ui.ChangesList->selectedItems()[i]->data(Qt::UserRole).toString());
89                                if (F)
90                                        Selection.push_back(F);
91                        }
92                        Main->properties()->setMultiSelection(Selection);
93                }
94
95        }
96        Main->view()->update();
97}
98
99void DirtyDock::on_ChangesList_itemDoubleClicked(QListWidgetItem* /* item */)
100{
101        on_centerAction_triggered();
102}
103
104void DirtyDock::on_ChangesList_customContextMenuRequested(const QPoint & pos)
105{
106        QListWidgetItem *it = ui.ChangesList->itemAt(pos);
107        if (it) {
108                QMenu menu(ui.ChangesList);
109                menu.addAction(centerAction);
110                menu.addAction(centerZoomAction);
111                menu.exec(ui.ChangesList->mapToGlobal(pos));
112        }
113}
114
115void DirtyDock::on_centerAction_triggered()
116{
117        MapFeature* F;
118        CoordBox cb;
119
120        Main->setUpdatesEnabled(false);
121        for (int i=0; i < ui.ChangesList->selectedItems().count(); ++i) {
122                F = Main->document()->getFeature(ui.ChangesList->selectedItems()[0]->data(Qt::UserRole).toString());
123                if (F) {
124                        if (cb.isNull())
125                                cb = F->boundingBox();
126                        else
127                                cb.merge(F->boundingBox());
128                }
129        }
130        if (!cb.isNull()) {
131                Coord c = cb.center();
132                Main->view()->projection().setCenter(c, Main->view()->rect());
133                Main->invalidateView();
134        }
135        Main->setUpdatesEnabled(true);
136}
137
138void DirtyDock::on_centerZoomAction_triggered()
139{
140        MapFeature* F;
141        CoordBox cb;
142
143        Main->setUpdatesEnabled(false);
144        for (int i=0; i < ui.ChangesList->selectedItems().count(); ++i) {
145                F = Main->document()->getFeature(ui.ChangesList->selectedItems()[0]->data(Qt::UserRole).toString());
146                if (F) {
147                        if (cb.isNull())
148                                cb = F->boundingBox();
149                        else
150                                cb.merge(F->boundingBox());
151                }
152        }
153        if (!cb.isNull()) {
154                CoordBox mini(cb.center()-10, cb.center()+10);
155                cb.merge(mini);
156                cb = cb.zoomed(1.1);
157                Main->view()->projection().setViewport(cb, Main->view()->rect());
158                Main->invalidateView();
159        }
160        Main->setUpdatesEnabled(true);
161}
162
163void DirtyDock::changeEvent(QEvent * event)
164{
165        if (event->type() == QEvent::LanguageChange)
166                retranslateUi();
167        MDockAncestor::changeEvent(event);
168}
169
170void DirtyDock::retranslateUi()
171{
172        setWindowTitle(tr("Undo"));
173        centerAction->setText(tr("Center map"));
174        centerZoomAction->setText(tr("Center && Zoom map"));
175        updateList();
176}
Note: See TracBrowser for help on using the repository browser.