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

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

FIX : double World OSB when loading document

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