diff --git a/src/qgisapp.cpp b/src/qgisapp.cpp index 90d7acf47b2..fe9a1d6bb62 100644 --- a/src/qgisapp.cpp +++ b/src/qgisapp.cpp @@ -37,187 +37,213 @@ #include "qgisapp.h" #include "xpm/qgis.xpm" -QgisApp::QgisApp(QWidget *parent, const char * name, WFlags fl ) : QgisAppBase(parent, name, fl ){ +QgisApp::QgisApp (QWidget * parent, const char *name, WFlags fl): +QgisAppBase (parent, name, fl) +{ QPixmap icon; - icon = QPixmap(qgis_xpm); - setIcon(icon); - QGridLayout *FrameLayout = new QGridLayout( frameMain, 1, 2, 4, 6, "mainFrameLayout"); - QSplitter *split = new QSplitter(frameMain); - mapToc = new QWidget(split);//frameMain); + icon = QPixmap (qgis_xpm); + setIcon (icon); + QGridLayout *FrameLayout = + new QGridLayout (frameMain, 1, 2, 4, 6, "mainFrameLayout"); + QSplitter *split = new QSplitter (frameMain); + mapToc = new QWidget (split); //frameMain); //add a canvas - mapCanvas = new QgsMapCanvas(split); + mapCanvas = new QgsMapCanvas (split); // resize it to fit in the frame - // QRect r = frmCanvas->rect(); - // canvas->resize(r.width(), r.height()); - mapCanvas->setBackgroundColor(QColor(220,235,255)); - mapCanvas->setMinimumWidth(400); + // QRect r = frmCanvas->rect(); + // canvas->resize(r.width(), r.height()); + mapCanvas->setBackgroundColor (QColor (220, 235, 255)); + mapCanvas->setMinimumWidth (400); - - - - - FrameLayout->addWidget( split, 0, 0 ); - mapToc->setBackgroundColor(QColor(192,192,192)); - + + + + + FrameLayout->addWidget (split, 0, 0); + mapToc->setBackgroundColor (QColor (192, 192, 192)); + } -QgisApp::~QgisApp(){ + +QgisApp::~QgisApp () +{ } -void QgisApp::addLayer(){ +void +QgisApp::addLayer () +{ // only supports postgis layers at present // show the postgis dialog - QgsDbSourceSelect *dbs = new QgsDbSourceSelect(); - if(dbs->exec()){ - // add files to the map canvas - QStringList tables = dbs->selectedTables(); - QString connInfo = dbs->connInfo(); - // for each selected table, connect to the datbase, parse the WKT geometry, - // and build a cavnasitem for it - // readWKB(connInfo,tables); - QStringList::Iterator it = tables.begin(); - while( it != tables.end() ) { - - // create the layer - QgsDatabaseLayer *lyr = new QgsDatabaseLayer(connInfo, *it); - // add it to the mapcanvas collection - mapCanvas->addLayer(lyr); - // no drawing done -- need to pass the layer collection - // to the rendering engine (yet to be written) - ++it; + QgsDbSourceSelect *dbs = new QgsDbSourceSelect (); + if (dbs->exec ()) + { + // add files to the map canvas + QStringList tables = dbs->selectedTables (); + QString connInfo = dbs->connInfo (); + // for each selected table, connect to the datbase, parse the WKT geometry, + // and build a cavnasitem for it + // readWKB(connInfo,tables); + QStringList::Iterator it = tables.begin (); + while (it != tables.end ()) + { + + // create the layer + QgsDatabaseLayer *lyr = new QgsDatabaseLayer (connInfo, *it); + // add it to the mapcanvas collection + mapCanvas->addLayer (lyr); + // no drawing done -- need to pass the layer collection + // to the rendering engine (yet to be written) + ++it; + } + } - - } } -void QgisApp::fileExit(){ - QApplication::exit(); +void +QgisApp::fileExit () +{ + QApplication::exit (); } -void QgisApp::zoomIn(){ + +void +QgisApp::zoomIn () +{ /* QWMatrix m = mapCanvas->worldMatrix(); - m.scale( 2.0, 2.0 ); - mapCanvas->setWorldMatrix( m ); - */ - + m.scale( 2.0, 2.0 ); + mapCanvas->setWorldMatrix( m ); + */ + } -void QgisApp::zoomOut() +void +QgisApp::zoomOut () { /* QWMatrix m = mapCanvas->worldMatrix(); - m.scale( 0.5, 0.5 ); - mapCanvas->setWorldMatrix( m ); - */ - + m.scale( 0.5, 0.5 ); + mapCanvas->setWorldMatrix( m ); + */ + } -void QgisApp::readWKB(const char *connInfo, QStringList tables){ - PgCursor pgc(connInfo, "testcursor"); +void +QgisApp::readWKB (const char *connInfo, QStringList tables) +{ + PgCursor pgc (connInfo, "testcursor"); // get "endianness" char *chkEndian = new char[4]; - memset(chkEndian,'\0',4); + memset (chkEndian, '\0', 4); chkEndian[0] = 0xE8; - int *ce = (int *)chkEndian; + int *ce = (int *) chkEndian; bool isNDR = (232 == *ce); /* if(*ce != 232) - cout << "Big endian" << endl; - else - cout << "Little endian" << endl; - */ - QStringList::Iterator it = tables.begin(); - while( it != tables.end() ) { - - // get the extent of the layer - QString esql = "select extent(the_geom) from " + *it; - PgDatabase *pd = new PgDatabase(connInfo); - int result = pd->ExecTuplesOk((const char *)esql); - QString extent = pd->GetValue(0,0); - // parse out the x and y values - extent = extent.right(extent.length() - extent.find("BOX3D(")- 6); - QStringList coordPairs = QStringList::split(",", extent); - QStringList x1y1 = QStringList::split(" ", coordPairs[0]); - QStringList x2y2 = QStringList::split(" ", coordPairs[1]); - double x1 = x1y1[0].toDouble(); - double y1 = x1y1[1].toDouble(); - double x2 = x2y2[0].toDouble(); - double y2 = x2y2[1].toDouble(); - double xMu = x2 - x1; - double yMu = y2 - y1; - int subordinantAxisLength; + cout << "Big endian" << endl; + else + cout << "Little endian" << endl; + */ + QStringList::Iterator it = tables.begin (); + while (it != tables.end ()) + { - - // determine the dominate direction for the mapcanvas - if(mapCanvas->width() > mapCanvas->height()){ - subordinantAxisLength = mapCanvas->height(); - scaleFactor = yMu/subordinantAxisLength; - mapWindow = new QRect(x1,y1, xMu, xMu); - } else{ - subordinantAxisLength = mapCanvas->width(); - scaleFactor = xMu/subordinantAxisLength; - mapWindow = new QRect(x1,y1, yMu, yMu); - } - - const char * xtent = (const char *)extent; - string sql = "select asbinary(the_geom,"; - if(isNDR) - sql += "'NDR'"; - else - sql += "'XDR'"; - sql += ") as features from "; - sql += *it++; - cout << sql.c_str() << endl; - pgc.Declare(sql.c_str(), true); - int res = pgc.Fetch(); - cout << "Number of binary records: " << pgc.Tuples() << endl; - bool setExtent = true; - // process each record - QPainter paint; - - paint.begin(mapCanvas); - paint.setWindow(*mapWindow); - QRect v = paint.viewport(); - int d = QMIN( v.width(), v.height() ); - paint.setViewport( v.left() + (v.width()-d)/2, - v.top() + (v.height()-d)/2, d, d ); + // get the extent of the layer + QString esql = "select extent(the_geom) from " + *it; + PgDatabase *pd = new PgDatabase (connInfo); + int result = pd->ExecTuplesOk ((const char *) esql); + QString extent = pd->GetValue (0, 0); + // parse out the x and y values + extent = extent.right (extent.length () - extent.find ("BOX3D(") - 6); + QStringList coordPairs = QStringList::split (",", extent); + QStringList x1y1 = QStringList::split (" ", coordPairs[0]); + QStringList x2y2 = QStringList::split (" ", coordPairs[1]); + double x1 = x1y1[0].toDouble (); + double y1 = x1y1[1].toDouble (); + double x2 = x2y2[0].toDouble (); + double y2 = x2y2[1].toDouble (); + double xMu = x2 - x1; + double yMu = y2 - y1; + int subordinantAxisLength; - paint.setPen(Qt::red); - - for(int idx = 0; idx < pgc.Tuples(); idx++){ - cout << "Size of this record: " << pgc.GetLength(idx,0) << endl; - // allocate memory for the item - char *feature = new char[pgc.GetLength(idx,0) +1]; - memset(feature,'\0',pgc.GetLength(idx,0) +1); - memcpy(feature,pgc.GetValue(idx,0),pgc.GetLength(idx,0) ); - + // determine the dominate direction for the mapcanvas + if (mapCanvas->width () > mapCanvas->height ()) + { + subordinantAxisLength = mapCanvas->height (); + scaleFactor = yMu / subordinantAxisLength; + mapWindow = new QRect (x1, y1, xMu, xMu); + } + else + { + subordinantAxisLength = mapCanvas->width (); + scaleFactor = xMu / subordinantAxisLength; + mapWindow = new QRect (x1, y1, yMu, yMu); + } - cout << "Endian is: " << (int)feature[0] << endl; - cout << "Geometry type is: " << (int)feature[1] << endl; - // print the x,y coordinates - double *x = (double *)(feature+5); - double *y = (double*)(feature+5 + sizeof(double)); - cout << "x,y: " << setprecision(16) << *x << ", " << *y << endl; - QPoint pt = paint.xForm(QPoint((int)*x, (int) *y)); - cout << "Plotting " << *x << ", " << *y << " at " << pt.x() << ", " << pt.y() << endl; - paint.drawRect((int)*x, mapWindow->bottom()-(int)*y,15000,15000); - // free it - delete[] feature; - } - paint.end(); - } + const char *xtent = (const char *) extent; + string sql = "select asbinary(the_geom,"; + if (isNDR) + sql += "'NDR'"; + else + sql += "'XDR'"; + sql += ") as features from "; + sql += *it++; + cout << sql.c_str () << endl; + pgc.Declare (sql.c_str (), true); + int res = pgc.Fetch (); + cout << "Number of binary records: " << pgc.Tuples () << endl; + bool setExtent = true; + // process each record + QPainter paint; + + paint.begin (mapCanvas); + paint.setWindow (*mapWindow); + QRect v = paint.viewport (); + int d = QMIN (v.width (), v.height ()); + paint.setViewport (v.left () + (v.width () - d) / 2, + v.top () + (v.height () - d) / 2, d, d); + + + paint.setPen (Qt::red); + + for (int idx = 0; idx < pgc.Tuples (); idx++) + { + cout << "Size of this record: " << pgc.GetLength (idx, 0) << endl; + // allocate memory for the item + char *feature = new char[pgc.GetLength (idx, 0) + 1]; + memset (feature, '\0', pgc.GetLength (idx, 0) + 1); + memcpy (feature, pgc.GetValue (idx, 0), pgc.GetLength (idx, 0)); + + + cout << "Endian is: " << (int) feature[0] << endl; + cout << "Geometry type is: " << (int) feature[1] << endl; + // print the x,y coordinates + double *x = (double *) (feature + 5); + double *y = (double *) (feature + 5 + sizeof (double)); + cout << "x,y: " << setprecision (16) << *x << ", " << *y << endl; + QPoint pt = paint.xForm (QPoint ((int) *x, (int) *y)); + cout << "Plotting " << *x << ", " << *y << " at " << pt. + x () << ", " << pt.y () << endl; + paint.drawRect ((int) *x, mapWindow->bottom () - (int) *y, 15000, + 15000); + // free it + delete[]feature; + } + paint.end (); + } } -void QgisApp::drawPoint(double x,double y){ +void +QgisApp::drawPoint (double x, double y) +{ QPainter paint; - QWMatrix mat(scaleFactor,0,0,scaleFactor,0,0); - paint.begin(mapCanvas); + QWMatrix mat (scaleFactor, 0, 0, scaleFactor, 0, 0); + paint.begin (mapCanvas); // paint.setWorldMatrix(mat); - paint.setWindow(*mapWindow); - - paint.setPen(Qt::blue); - paint.drawPoint(x,y); - paint.end(); + paint.setWindow (*mapWindow); + + paint.setPen (Qt::blue); + paint.drawPoint (x, y); + paint.end (); } diff --git a/src/qgsdatabaselayer.cpp b/src/qgsdatabaselayer.cpp index 20db683bb69..33ddcc3aa82 100644 --- a/src/qgsdatabaselayer.cpp +++ b/src/qgsdatabaselayer.cpp @@ -1,9 +1,14 @@ #include +#include #include "qgsdatabaselayer.h" QgsDatabaseLayer::QgsDatabaseLayer(const char *conninfo, QString table) : QgsMapLayer(QgsMapLayer::DATABASE, table), tableName(table){ dataSource = conninfo; + // set the extent of the layer + layerExtent.setTop(0); } QgsDatabaseLayer::~QgsDatabaseLayer(){ } +void QgsDatabaseLayer::calculateExtent(){ +} diff --git a/src/qgsdatabaselayer.h b/src/qgsdatabaselayer.h index af11f9b6cd3..b4b52e5c4b3 100644 --- a/src/qgsdatabaselayer.h +++ b/src/qgsdatabaselayer.h @@ -29,12 +29,13 @@ public: QgsDatabaseLayer(const char *conninfo=0, QString table=QString::null); ~QgsDatabaseLayer(); private: - + void calculateExtent(); QString type; // maps to one of the OGIS Simple geometry types QString database; QString tableName; QString geometryColumn; + }; #endif diff --git a/src/qgsmapcanvas.cpp b/src/qgsmapcanvas.cpp index 8c3f00f39e5..e73bad70da5 100644 --- a/src/qgsmapcanvas.cpp +++ b/src/qgsmapcanvas.cpp @@ -24,4 +24,10 @@ QgsMapCanvas::~QgsMapCanvas(){ } void QgsMapCanvas::addLayer(QgsMapLayer *lyr){ layers[lyr->name()] = *lyr; + // set zpos to something... + //lyr->zpos = 0; +} +void QgsMapCanvas::render(){ + // render all layers in the stack, starting at the base + } diff --git a/src/qgsmapcanvas.h b/src/qgsmapcanvas.h index d4dbdbd9b7c..8b7998882a6 100644 --- a/src/qgsmapcanvas.h +++ b/src/qgsmapcanvas.h @@ -32,6 +32,7 @@ public: QgsMapCanvas(QWidget *parent=0, const char *name=0); ~QgsMapCanvas(); void addLayer(QgsMapLayer *lyr); + void render(); private: //! map containing the layers by name map layers; diff --git a/src/qgsmaplayer.cpp b/src/qgsmaplayer.cpp index 17ab1b151a3..424aa0fb9c5 100644 --- a/src/qgsmaplayer.cpp +++ b/src/qgsmaplayer.cpp @@ -34,4 +34,5 @@ void QgsMapLayer::setlayerName( const QString& _newVal){ const QString QgsMapLayer::name(){ return layerName; } - +void QgsMapLayer::calculateExtent(){ +} diff --git a/src/qgsmaplayer.h b/src/qgsmaplayer.h index a4271b83fba..5bfb470618d 100644 --- a/src/qgsmaplayer.h +++ b/src/qgsmaplayer.h @@ -23,7 +23,7 @@ /** *@author Gary E.Sherman */ - +class QRect; class QgsMapLayer : public QgsDataSource { public: @@ -35,6 +35,8 @@ class QgsMapLayer : public QgsDataSource { void setlayerName( const QString& _newVal); /** Read property of QString layerName. */ const QString name(); + virtual void calculateExtent(); + const QRect extent(); public: // Public attributes @@ -43,14 +45,16 @@ enum LAYERS { RASTER, DATABASE } ; - + protected: + QRect layerExtent; + //! Position in the map stack + int zpos; private: // Private attributes /** Name of the layer - used for display */ QString layerName; /** Type of the layer (eg. vector, raster, database */ int layerType; - //! Position in the map stack - int zpos; + //! Tag for embedding additional information QString tag; diff --git a/src/xpm/point_layer.xpm b/src/xpm/point_layer.xpm index 140f4ab04d5..c9fe20be089 100644 --- a/src/xpm/point_layer.xpm +++ b/src/xpm/point_layer.xpm @@ -1,24 +1,22 @@ /* XPM */ static const char *point_layer_xpm[]={ -"16 16 6 1", +"16 16 4 1", ". c None", -"c c #008000", -"b c #54d10c", -"d c #5fee0e", -"# c #60ee0e", -"a c #60ef0e", +"b c #008080", +"a c #00c0c0", +"# c #00ffff", "................", "................", "................", "................", "................", -"......#ab.......", -".....aaabc......", -"....aaaabcc.....", -"....aaaabbc.....", -"....dd#abcc.....", -".....bcbcc......", -"......ccc.......", +"......#aa.......", +".....###ab......", +"....####abb.....", +"....####aab.....", +"....####abb.....", +".....ababb......", +"......bbb.......", "................", "................", "................",