diff --git a/src/qgis.dtd b/src/qgis.dtd
deleted file mode 100644
index 811b9dee305..00000000000
--- a/src/qgis.dtd
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/qgisapp.cpp b/src/qgisapp.cpp
index 9d6413e5f42..7fe740c8875 100644
--- a/src/qgisapp.cpp
+++ b/src/qgisapp.cpp
@@ -199,9 +199,9 @@ void QgisApp::about()
abt->setURLs(urls);
QString watsNew = "Version ";
watsNew += qgisVersion;
- watsNew += "\n*During repaint, the data store is only accessed if map state or extent has changed\n"
- "*Changes to layer properites aren't effective until the Layer Properties dialog is closed\n"
- "*Cancelling the Layer Propeties dialog cancels changes";
+ watsNew += "\n*Preliminary project save/open support\n"
+ "*Streamlined build system\n";
+
abt->setWhatsNew(watsNew);
abt->exec();
@@ -312,11 +312,21 @@ void QgisApp::fileExit()
QApplication::exit();
}
+void QgisApp::fileNew(){
+ mapCanvas->removeAll();
+ setCaption("Quantum GIS -- Untitled");
+ mapCanvas->clear();
+ mapLegend->update();
+ fullPath = "";
+}
void QgisApp::fileOpen(){
mapCanvas->freeze(true);
QgsProjectIo *pio = new QgsProjectIo(mapCanvas, QgsProjectIo::OPEN);
- pio->read();
+ if(pio->read()){
+ setCaption("Quantum GIS -- " + pio->baseName());
+ fullPath = pio->fullPathName();
+ }
delete pio;
mapLegend->update();
@@ -324,11 +334,21 @@ void QgisApp::fileOpen(){
}
void QgisApp::fileSave(){
QgsProjectIo *pio = new QgsProjectIo(mapCanvas, QgsProjectIo::SAVE);
- pio->write();
+ pio->setFileName(fullPath);
+ if(pio->write()){
+ setCaption("Quantum GIS -- " + pio->baseName());
+ statusBar()->message("Saved map to: " + pio->fullPathName());
+ }
delete pio;
}
void QgisApp::fileSaveAs(){
+ QgsProjectIo *pio = new QgsProjectIo(mapCanvas, QgsProjectIo::SAVEAS);
+ if(pio->write()){
+ setCaption("Quantum GIS -- " + pio->baseName());
+ statusBar()->message("Saved map to: " + pio->fullPathName());
+ }
+ delete pio;
}
void QgisApp::zoomIn()
diff --git a/src/qgisapp.h b/src/qgisapp.h
index 3d507c4e992..813cffe59c6 100644
--- a/src/qgisapp.h
+++ b/src/qgisapp.h
@@ -102,6 +102,8 @@ class QgisApp:public QgisAppBase
void fileSaveAs();
//! Open a project
void fileOpen();
+ //! Create a new project
+ void fileNew();
private:
//! Popup menu
QPopupMenu * popMenu;
@@ -120,6 +122,8 @@ class QgisApp:public QgisAppBase
int mapTool;
QCursor *cursorZoomIn;
QString startupPath;
+ //! full path name of the current map file (if it has been saved or loaded)
+ QString fullPath;
};
#endif
diff --git a/src/qgisappbase.ui b/src/qgisappbase.ui
index a51612ab012..e5309dacc13 100644
--- a/src/qgisappbase.ui
+++ b/src/qgisappbase.ui
@@ -89,6 +89,7 @@
File Management Toolbar
+
@@ -372,6 +373,17 @@
Save Project As...
+
+
+ actionFileNew
+
+
+ image14
+
+
+ Action
+
+
@@ -416,6 +428,9 @@
789cb597496fe3461085effe15c2d46d10d488149b2211e430de3df2a6f1ee20871249495e246f5a2c0ff2df53ec7acdb11320c825d343c09febf5ebaa6ab2497ff9dcba3c3e687dfeb2f63293d94dd12ac6f2dcfa5cce2793d5ef7ffcf663ed531cb7f47fe4d256fce997b54ffd59ab681d3e4cab1aa854a0288bdb71ee39ab5929eb189f79ce3b6d27354b1138f566b45f7327ea64a98fd3025c743b35f38371d23696b1e73cc465651ce2948213c4df1a1ef8b8ab3989920cfa5363d7b638b73d4b922596efc0d8b9ccfc5ec1655ef8f9d39a5d9c2449e4e77f3776ceeaa59e711a995e4660077e0c2c899fbfed5952ac475be01cf139b834a64ecd699c64e8ffa6b16b5b3e34073be7fbcd7bc6a9b37ef3109ce7e65f824b70d5b0d57b60dc8d2c4e55c33eceb3c0627adf8f54fbd7b1fe14c68d9ec0e807fb7e773bddd00f01a37e61cf03e7da99f7cf03a3de6fc66969fbc7afc65dd4234fc6593930ffad864bcf7e7ed649da71dbfb25c619facd53e33c323d8dc10ef397810be7f9daf320dc1f42c6c18f6e8c839e5ec139fcf2c0888fc025d8f7536f6fe42b62acf32ddf0c0cbd2c1bb6fcc112c1efbc618b0fc1a19eb461cbcf3f5f9a5c69cf3b3f1aa711f663659cbbcc3f5fb23096a834bf2e187e320f6c7162b060bd045c213fbf9e24b9c379d1371687fbef045ca1be8786cdcf05463ec7c68318fdef04b6b860bede60e6e7f753b43e3bcf6466ac7a7f3e7204869e4fc0028e1bf67a9982910ff9f903ad07e7c58b71a37f0e5ca5deaf07aeb0fe8671817c6418d8f434f15ca6919d1f7c689ce379e22363b5b7f363653c10dc0febc6c19f6fc129f825b0ad2758af08f9df0546fefe79285c60a9c0a8476e03237fdfefa24c1df2bf3016b1f34d4ae332d4db06231ff2fd295d982ff7c64dfc1a8c7ce8d2b36603be6ad8de8747c6556ccce7e074687a7f7f56699ae3bcde0b6ce723ed180f62f01b58c04fc6458ae7eb162ce00be366fd03b0607d7f3e545519e37cbc04a7783f9c1937fa2e18f5c94d608bf37dc343afdf361ec688ef36ece3eccfcb61da49504f6c5c56763ed0a1f110fbc593c098bf03463f79d1b0c54fc102f6e7e570a8eb59bfd78df57eb7f3fd1eecc02f0ddbfdf404c67ef17360bccfbe1a7783feca3877586f602c95f597ee8c0729be0fe037a8c0f02b04df47bbc6658cefa363e3aac2f7cabe7153ff2638d48ff5ea7f35f7674c2c7a0df4222efc5570e9afca5fc3fe4c55231edbfb996ff896eff89e273aeefe31a63a1ef8919ff8d9ded7aa7ed1dfcf78aed7dfd50b5eaafe9557fcc65fe1bfce1b1a99ebac8d0fda4dbfe2166ff30eeff21e7fb3ef03ee79dd0ceb04edbe6a77f9800ff9888fb9cfdffb33fbde50fd89c637df399f6a1e675ad1395ff0255ff135b7eb9a914fc431777424ec38e52e673a72629e1291d0809fa8a032e8a952bdaaeb66d290531ae918d38d57dfd21dddd384a6b53af8d343edad7e5d75f7de3aa6f4484ff44c2f34a3392d7eead53f81ba4b4bcee8557319d38adee82badd3066dd2d67bbdfa6b26bedabae6052f689b27b443bbeabd47df54dda3fd77fe079af35295a7501ff23d1dd1b17af7e93b9dd0a98eb377fe052de99c37e9822ee98aae75b429a258d51d4a74384a3fe82bcd7904efaedfa103ca281716d2cf68a153d157c9077fad50b5f0163d7875a74f746897652823eac9f89dbed46e8c6b775ec84d9dbbdcca9dde193d1db10c553dfad09f42d5cbda5feed57ba2de3d998aee89ee8bd39f1fb53feff5254fe5499ee54587fe7da41ac75d99d3b92c64a9e3957afcf053df9fc94adefefd3275d0fff7f1bfebfffc75ed2f4cf55fda
+
+ 789c85d7d96ee3ca1106e0fb790a63ea6e10f41129912211e4c2922daf92257977908b2a92b2e4458b2d5b4b90774fabeb6f0e9de383a087b63f7417bb7a23397ffcdabbeb77f77efdf1e37dc9cb49b6978df96def57fef1fabaf9e7bffef1ef1f3fc3c6deee5f3ddd0b7ffeedc74f33ddcbf67ab369e1205550155915a30a06cb6a4d5105579157f15ac54b05fce56ecf553c55d1ad6258c5a48ac32a1eab185731ab40dad5742eaba85740ef55bc55eff650ad595431aff6b34b87ea69bd510f5cd841e9d4d5b7e004f5e7a5b57ed727358230a9d59c2fd5bebd9c95d6f6399cc173676ed4d43c84d13f87de0ded3f2ecdaefe1d4e50df8433d477768e425f4f019ca96558dab537913aaa456e6372e15cde8f66eaa8061fc311e24fbc35de0ce034d2fa1b3887939de3304a11ffe18df8169cc39fa5b5fdbd3397f54b751ca0decd4fb31ea7b1d637d4cda0597776ebd79466a0f5e2fa4fea5114e87a8ee0b496383f3b4b54d3f5360b75338d753eb4bd2441535cfbdd79a1b4e1e3f90eceb15f96ea3808d52f708efd41ea04f999b9b7e6cf2d3855cb18ced3866bdf56a7915a8c731647c8a709e718df44ddccb17f9ed509e6533adec8a70763bda850fbfef8054e91cf59e9ccb577fb811b71aaf3c1fb30f2e158dd0ce053ef40f35dc011e247b08f37ea24c0fe9faad31cfd5f3b67f6fe1a9f94d6fb17b0bfffbddac733a9d91e1167777ea4ec9faed449a0fb896e61ccaf1ca939d0fbc93b8cf933fb6a0959f365e79cfd7a5cc0acfdcb275ca849ef9ffb7876f9645182fd486b18fb911bde9aafb954a7b93ecf68e3adeb2d3db5c4b8ff2bcca2f9877021b9f3a93a0bb3c8b577e72dcb539c373e2aadf93dc1297ce9ade7854218f9d2d01be769a0e620d1f3710a47899ecf7d98713e667001f7d5767c3a9f3518e3131d6f9e853a3e6638d6f1992dcc998eff0e2ed49cee6c1f66182f9f7823ff4c2d21f65b00231f3e84b1fe3c28adeddfe042f3e55c6df3d5fc119fc59a3fbdc2acf94b172eb05e67a5753c1b751ee7ae9edc7ae605e3fc9800f6cf9bad77e89e6ff40833d697bcb1be4bb8407bc467858ecf5ca8f310fbffdc5bf3a31c467e6605dbe2ecd6b388b9c079a87b633f9da92544bdf1467e3d38c6fbfa11669c97ae37decf57de78bf7eaab310e789d53e5f398059f3e5295c603cc7a5753cb7de45ecbc5617217c0dc76a72f3551412637e4f60c6784fbdf13c48e142c74b137516e279b685b13fe5a4b43ebf2e60d6f7a56cbcb13f8fe102f5e28dfd8afa1ccf0f59c1386fd48219fb79df1bfbb70d63bee8455d8430fab3f3a3f3d987193e820b35bbf91ed9f5d3f5e61b18fb41a630f2a7b13a0ff579440d38c6fb7bed8de749cd1bf9f7613f9e83d2da7e01fbe7cb85b7ee17eea9ed7875be3aa575fc0f708cfd26deba5fb80bfbfd78ee8dfdd486fdfeabab47e148e3ddf37c34ca433d0fbc29addf1b1338c6f958c3febcac4aebf756d35bbf47680017f0aab4deffda5be79b527511e27e89b7c6f3b8b4c6cfbd319f198cf9a21866ac6fbfb47bdff08337e66fe68df9fb84fdfbfbde1bf577a5b5bf483df2df0787dea83f80639d7f7a8619ce4a8fdc7a75e0917ab03464582ffbb7d82bdb5dd6fa3bb757f1fbb7bb8798918d18b988473336135b9e6c79b6e5c596575ba6b668a49eab69a5ccccdc96852d6fb6bcdbb2b4e5c37cfe6ef3a798898d589975796dccd6ec9b96699b83bf8c39b43dac4da7528eccb13931a7e6cc9cff454cd7f4ccc597988ee99b81bdb636eae0db98a1b93457e6fa7fa26eccadfd7967a3eebf897930351398d0d4bfc4344c6462d3b4e34abe8949c91011935463283375caa9a0919dc13fc5d0238d69424f666bdb55a39ee9855e694a331f43735ad01bbdd3923ee89356b4a60d6d699f5ad446c4011d52878ee85863e8844ee98ccea94b3dbaa03e0dec5f43baa42bbaa61bba357d1b7147f7f440350aca7e42aa538322db3eb611036a5242a9bdc30d1b26fb9d2bbb08fbc56dbfd17e8f8747f4c18f3cde45f0c49627dbcf0d3ff30bbff294673662ce0b7ee3f7ea1cf0923ff893c7bce2356f78cbfbdca2a9eda3ed22321b71c087dcf93a6f7cc4c7da872d277c4a059ff139dd71d746f4f882fb3ce0e1977e2ef98aaf7963473fe41bbee53bbee7361df2832d3ddb4b9f6b1c70f825a6ce0d9ad8c75ccc4d4e38152324ecb2b211b4cf3511c924ff1263ffdf60bff446f2286399c8933ccb8bbcdaf6bb3e6a2e622a33997f898964216ff6f7d0eefb637997a57cc8a7ac78212b59db888d6c655f5ad5186963f7ccc4adb91c4a478ee4b8ece3c4965339fb668f4ee958ce6de9da989e5c889d2be9db71cc6c1fa73290c76f6366b60432e40e7764cea1cc6dc96d69c9a51debb731ffbffcfccfdf7ffc17b9ebca7e
+
@@ -526,6 +541,12 @@
QgisAppBase
fileSaveAs()
+
+ actionFileNew
+ activated()
+ QgisAppBase
+ fileNew()
+
qgisappbase.ui.h
@@ -551,6 +572,7 @@
options()
fileSave()
fileSaveAs()
+ fileNew()
diff --git a/src/qgisappbase.ui.h b/src/qgisappbase.ui.h
index c58c31a0b00..0c26463191d 100644
--- a/src/qgisappbase.ui.h
+++ b/src/qgisappbase.ui.h
@@ -122,3 +122,9 @@ void QgisAppBase::fileSaveAs()
{
}
+
+
+void QgisAppBase::fileNew()
+{
+
+}
diff --git a/src/qgsmapcanvas.cpp b/src/qgsmapcanvas.cpp
index 131f48318ab..b4b079a7e11 100644
--- a/src/qgsmapcanvas.cpp
+++ b/src/qgsmapcanvas.cpp
@@ -577,3 +577,7 @@ void QgsMapCanvas::remove(QString key)
delete l;
zOrder.remove(key);
}
+void QgsMapCanvas::removeAll(){
+ layers.clear();
+ zOrder.clear();
+}
\ No newline at end of file
diff --git a/src/qgsmapcanvas.h b/src/qgsmapcanvas.h
index 24fc61babc3..7140548b134 100644
--- a/src/qgsmapcanvas.h
+++ b/src/qgsmapcanvas.h
@@ -75,6 +75,8 @@ public:
void freeze(bool frz=true);
//! remove the layer defined by key
void remove(QString key);
+ //! remove all layers from the map
+ void removeAll();
void setDirty(bool _dirty);
friend class QgsLegend;
public slots:
diff --git a/src/qgsprojectio.cpp b/src/qgsprojectio.cpp
index 18a0f8a34f5..ecd5a9f309e 100644
--- a/src/qgsprojectio.cpp
+++ b/src/qgsprojectio.cpp
@@ -14,6 +14,7 @@
#include
#include
#include
+ #include
#include
#include
#include
@@ -23,6 +24,7 @@
#endif
#include "qgsshapefilelayer.h"
#include "qgsmapcanvas.h"
+#include "qgsrect.h"
#include "qgsprojectio.h"
@@ -35,32 +37,42 @@ QgsProjectIo::QgsProjectIo(QgsMapCanvas *_map, int _action) : map(_map), action(
QgsProjectIo::~QgsProjectIo()
{
}
-void QgsProjectIo::write(){
- selectFileName();
+QString QgsProjectIo::baseName(){
+QFileInfo fi(fullPath);
+return fi.baseName(true);
+}
+bool QgsProjectIo::write(){
+ if(fullPath.isEmpty()){
+ selectFileName();
+ }
//QMessageBox::information(0,"Full Path",fullPath);
int okToSave = 0;
- if(QFile::exists(fullPath)){
+ if(QFile::exists(fullPath) && (action == SAVEAS)){
okToSave = QMessageBox::warning(0,"Overwrite File?",fullPath + " exists. \nDo you want to overwrite it?", "Yes", "No");
}
if(okToSave == 0){
// write the project information to the selected file
- writeXML();
- }
+ writeXML();
+ return true;
+ }else{
+ return false;
+ }
}
-void QgsProjectIo::read(){
+bool QgsProjectIo::read(){
QString path = selectFileName();
QDomDocument *doc;
if(!path.isEmpty()){
doc = new QDomDocument( "qgisdocument" );
QFile file( path );
if ( !file.open( IO_ReadOnly ) )
- return;
+ return false;
if ( !doc->setContent( &file ) ) {
file.close();
- return;
+ return false;
}
file.close();
-
+ // clear the map canvas
+ map->removeAll();
QDomNodeList nl = doc->elementsByTagName("maplayer");
QString layerCount;
layerCount = layerCount.setNum(nl.count());
@@ -149,6 +161,7 @@ void QgsProjectIo::read(){
}
}
+ return true;
}
QString QgsProjectIo::selectFileName(){
if(action == SAVE && fullPath.isEmpty()){
@@ -165,6 +178,12 @@ switch(action){
}
return fullPath;
}
+void QgsProjectIo::setFileName(QString fn){
+ fullPath = fn;
+ }
+QString QgsProjectIo::fullPathName(){
+ return fullPath;
+ }
void QgsProjectIo::writeXML(){
std::ofstream xml(fullPath);
if(!xml.fail()){
@@ -172,6 +191,16 @@ void QgsProjectIo::writeXML(){
xml << "" << std::endl;
xml << "\n";
xml << "QGis Project File\n";
+
+ xml << "\n";
+ QgsRect extent = map->extent();
+
+ xml << "\t" << extent.xMin() << "\n";
+ xml << "\t" << extent.yMin() << "\n";
+ xml << "\t" << extent.xMax() << "\n";
+ xml << "\t" << extent.yMax() << "\n";
+ xml << "\n";
+
xml << "layerCount() << "\"> \n";
// write the layers
for(int i = 0; i < map->layerCount(); i++){
diff --git a/src/qgsprojectio.h b/src/qgsprojectio.h
index 827c96f7e1c..da45edd5573 100644
--- a/src/qgsprojectio.h
+++ b/src/qgsprojectio.h
@@ -25,10 +25,19 @@ class QgsProjectIo
public:
QgsProjectIo(QgsMapCanvas *map=0, int action=SAVE);
~QgsProjectIo();
- void read();
- void write();
+ //! Read the file and create the map
+ bool read();
+ //! Write the contents of the map to a file
+ bool write();
void setMapCanvas(QgsMapCanvas *map);
+ //! Open a file dialog, the type determined by action (SAVE AS or OPEN)
QString selectFileName();
+ //! get the basename of the file (no path, just the file name)
+ QString baseName();
+ //! get the full path name of the map file
+ QString fullPathName();
+ //! Set the full path to the file
+ void setFileName(QString filename);
enum ACTION {
SAVE,
SAVEAS,