source: subversion/applications/editors/osm-editor/qt3/MainWindow2.h @ 16590

Last change on this file since 16590 was 1158, checked in by nick, 13 years ago

moved current version to qt3 directory in preparation for qt4

File size: 7.0 KB
Line 
1/*
2    Copyright (C) 2005 Nick Whitelegg, Hogweed Software, nick@hogweed.org
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
17
18 */
19
20
21#ifndef MAINWINDOW_H
22#define MAINWINDOW_H
23
24#include "functions.h"
25#include "GPSDevice2.h"
26#include "Components2.h"
27#include "Map.h"
28#include "LandsatManager2.h"
29#include "SRTMGeneral.h"
30#include "HTTPHandler.h"
31#include "NodeHandler.h"
32#include "Way.h"
33#include "SegSplitter.h"
34#include "BatchUploader.h"
35#include <map>
36#include <vector>
37
38#include <qmainwindow.h>
39#include <qfont.h>
40#include <qcolor.h>
41#include <qpixmap.h>
42#include <qpen.h>
43#include <qevent.h>
44#include <qcombobox.h>
45#include <qtoolbutton.h>
46#include <qstatusbar.h>
47#include <qcstring.h>
48
49#include <qhttp.h>
50
51using std::vector;
52
53// Mouse action modes
54// These need to match the order that the toolbar buttons are added
55// N_ACTIONS should always be the last
56enum { ACTION_NODE, ACTION_MOVE_NODE, ACTION_DELETE_NODE,
57                ACTION_SEL_SEG, ACTION_SEL_WAY, ACTION_NEW_SEG, ACTION_BREAK_SEG,
58                ACTION_SEL_TRACK, N_ACTIONS };
59
60namespace OpenStreetMap
61{
62
63
64struct ImgLabelData
65{
66        QFont font;
67        QColor colour;
68
69        ImgLabelData(const char* f, int s,QColor c) :font(f,s){ colour=c; }
70};
71
72struct SegData
73{
74        QString segtype;
75        QPen pen;
76
77        SegData(){}
78        SegData(const QString &st, const QPen& p) { segtype=st; pen=p; }
79};
80
81struct PolyData
82{
83        QString polytype;
84        QColor colour;
85
86        PolyData(){}
87        PolyData(const QString& pt,     const QColor& c) { polytype=pt; colour=c; }
88};
89
90class WaypointRep
91{
92private:
93        QPixmap image; 
94        ImgLabelData * labelData; // pointer so we can use NULL for no label
95
96public:
97        WaypointRep(const QString& imagefile) : image(imagefile)
98                {  labelData=NULL;  }
99        WaypointRep(const QString& imagefile,const char* f,int s,
100                                        QColor c) :
101                        image(imagefile)
102            { labelData=new ImgLabelData(f,s,c);  }
103        WaypointRep(const char* f,int s,QColor c)
104                {  labelData=new ImgLabelData(f,s,c);  }
105        ~WaypointRep() 
106                { if(labelData)delete labelData; }
107        void draw(QPainter&,int x,int y,const QString& label=""); 
108        const QPixmap& getImage(){ return image; }
109};
110
111struct SegPen
112{
113        QPen pen;
114        bool casing;
115
116        SegPen() { casing=false; }
117        SegPen(const QPen& p, bool c) { pen=p; casing=c; }
118};
119
120class MainWindow2 : public QMainWindow, public DrawSurface
121{
122
123Q_OBJECT
124
125private:
126        //GridRef topleft;
127        //double scale;
128        Map map;
129
130        double LIMIT;
131
132        // key data
133        Components2 * components;
134        Components2 * osmtracks;
135
136        // on-screen data representations
137        std::map<QString,WaypointRep*> nodeReps; 
138        std::map<QString,SegPen> segpens;
139        std::map<QString,QPen> areapens;
140
141        // currently selected trackpoints
142
143        // selected segment(s)
144        vector<Segment*> selSeg;
145        int segCount;
146
147        Way *selWay;
148
149        // current mouse action mode
150        int actionMode;
151
152        // other stuff
153        QString curSegType; 
154        bool trackpoints, contours, displayOSM, displayGPX, showSegmentColours;
155        QString curFilename; 
156        bool mouseDown;
157
158        QToolButton* modeButtons[N_ACTIONS]; 
159        QToolButton *wayButton, *landsatButton, *osmButton, *gpxButton,
160                                                *contoursButton, *showSegmentColoursButton;
161
162        QComboBox * modes;
163
164        QPixmap landsatPixmap;
165
166
167        void saveFile(const QString&);
168
169        LandsatManager2 landsatManager;
170
171        Node *pts[2];
172        int tpts[2];
173        vector<Node*> ptsv[2];
174        vector<Node*> movingNodes;
175        int nSelectedPoints, nSelectedTrackPoints;
176
177        QPainter *curPainter;
178
179        bool wptSaved;
180
181        double nameAngle;
182        bool doingName;
183        ScreenPos namePos, curNamePos;
184        QString trackName;
185
186
187        QString username, password;
188        bool liveUpdate;
189
190        HTTPHandler osmhttp;
191        NodeHandler nodeHandler;
192
193        Node *newUploadedNode, *movingNode;
194        vector<Segment*> movingNodeSegs;
195        Segment *newUploadedSegment;
196        Way *newUploadedWay;
197        QPixmap savedPixmap;
198
199        SegSplitter *splitter;
200        BatchUploader *uploader;
201
202        bool makingWay;
203
204        QString serialPort;
205
206        QPixmap tpPixmap;
207
208        void clearSegments()
209        {
210                selSeg.clear();
211                //selSeg.push_back(NULL);
212                //segCount = 0;
213        }
214
215        vector<Node*> gpxNodes;
216
217public:
218        MainWindow2 (double=51.0,double=-1.0,double=4000,
219                                        double=640,double=480);
220        ~MainWindow2();
221        Components2 * doOpen(const QString&);
222
223
224        void paintEvent(QPaintEvent*);
225        void mousePressEvent(QMouseEvent*);
226        void mouseReleaseEvent(QMouseEvent*);
227        void mouseMoveEvent(QMouseEvent*);
228        void resizeEvent(QResizeEvent * ev);
229        void keyPressEvent(QKeyEvent*);
230        void drawLandsat(QPainter&);
231        void drawContours();
232        void rescale(double);
233
234        void updateWithLandsatCheck();
235        Map getMap() { return map; }
236
237        void drawContour(int,int,int,int,int,int,int);
238        void drawAngleText(int,double,int,int,int,int,int,char*);
239        void heightShading(int x1,int y1,int x2,int y2,int x3,int y3,
240                                                        int x4,int y4,int r,int g,int b);
241
242        void doDrawAngleText(QPainter *p,int originX,int originY,int x,int y,
243                                        double angle, const char * text);
244        void showPosition();
245        void drawGPX(QPainter&);
246        void drawSegments(QPainter&);
247        void drawSegment(QPainter&,Segment*);
248        void drawNodes(QPainter&);
249        void drawNode(QPainter&,Node*);
250        void drawAreas(QPainter&);
251        void drawArea(QPainter&,Area*);
252        void drawTrackPoints(QPainter &p,Components2*,QColor,bool);
253        void drawTrackPoint(QPainter &p,TrackPoint *tp);
254        void drawMoving(QPainter&);
255        void editNode(int,int,int);
256        void nameTrackOn();
257        Node * doAddNewNode(double lat,double lon,const QString &name,
258                                                                        const QString& type);
259
260public slots:
261        void open();
262        void save();
263        void saveAs();
264        void saveGPX();
265        void readGPS();
266        void quit();
267        void toggleLandsat();
268        void toggleContours();
269        void toggleOSM();
270        void toggleGPX();
271        void undo();
272        void setMode(int);
273        //void setSegType(const QString&);
274        void toggleNodes();
275        void grabLandsat();
276        void up();
277        void down();
278        void left();
279        void right();
280        void magnify();
281        void screenUp();
282        void screenDown();
283        void screenLeft();
284        void screenRight();
285        void shrink();
286        void loginToLiveUpdate();
287        void grabOSMFromNet();
288        void uploadOSM();
289        void logoutFromLiveUpdate();
290        void removeTrackPoints();
291        void newSegmentAdded(const QByteArray& array,void*);
292        void newWayAdded(const QByteArray& array,void*);
293        void loadComponents(const QByteArray&,void*);
294        void deleteSelectedSeg();
295        void handleHttpError(int,const QString&);
296        void handleNetCommError(const QString& error);
297        void toggleWays();
298        void uploadWay();
299        void doaddseg(void*);
300        void changeSerialPort();
301        void uploadNewWaypoints();
302        void grabGPXFromNet();
303        void loadOSMTracks(const QByteArray& array,void*);
304        void splitterDone();
305        void changeWayDetails();
306        void batchUpload();
307        void batchUploadDone();
308        void batchUploadError(const QString& error);
309        void segSplitterError(const QString& error);
310        void toggleSegmentColours();
311
312signals:
313        void newNodeAddedSig();
314};
315
316}
317#endif // MAINWINDOW_H
Note: See TracBrowser for help on using the repository browser.