[Merkaartor] Auto-updating merkaartor: Linux/OSX sysadmin input requested
Moritz Barsnick
barsnick at gmx.net
Mon Oct 11 13:34:57 BST 2010
Hi Chris, Merkaartoranians,
On Fri, Oct 08, 2010 at 01:10:14 -0700, Chris Browet wrote:
> Not quite true. As of june 1st, it compiled fine under Qt 4.4.3.
I was the one who had reported success with Qt 4.4.3, and had pointed
out one or two incompatibilites.
> Although I don't have a Qt 4.4.X anymore, I'll keep Merkaartor compatible if
> compatibility problems are reported to me (although 3 majors version has
> passed, now, and 2 majors for all distros).
In the meantime (since 0.16.1), a few 4.5-isms and even 4.6-isms have
crept in. I have attempted to work around them with the attached patch.
It "works for me", again with Qt 4.4.3.
Note that I'm building with something like
qmake Merkaartor.pro PREFIX=${PREFIX} NODEBUG=1 GEOIMAGE=0 GPSD=1 \
GDAL=0 NVIDIA_HACK=1 FORCE_CUSTOM_STYLE=1 USE_BUILTIN_BOOST=1
TRANSDIR_SYSTEM="${QTDIR}/translations"
so many feature paths (covered by gdal, geoimage) are not checked!
One would either need to try to build the full-featured merkaartor on
such a system (I'm not willing to try, due to all the missing libs and
their additional dependencies), or we'd have to review the used Qt
functions piece by piece and check their documentation for "was
introduced in". And even that is not sufficient, see:
http://doc.trolltech.com/4.5/qprintpreviewdialog.html#printer
which was introduced in 4.5, but is not described as such.
Until then, Qt < 4.5 is just "best effort". But you should try to get
rid of the 4.6-isms to increase the number of supported platforms.
Note that in the attached patch, indentation is not fully correct, to
keep the amount of diff low. Furthermore, I did some mimicing to
recreate QUrl::fromUserInput(), but that makes some small assumptions.
Some quessing about the constraints was done from my side. A different
"fix" might be better.
Moritz
-------------- next part --------------
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 33ef2bb..f6d19d8 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -2029,12 +2029,7 @@ void MainWindow::on_roadAddStreetNumbersAction_triggered()
void MainWindow::on_roadSubdivideAction_triggered()
{
- QInputDialog *Dlg = new QInputDialog(this);
- Dlg->setInputMode(QInputDialog::IntInput);
- Dlg->setIntRange(2, 99);
- Dlg->setLabelText(tr("Number of segments to divide into"));
- if (Dlg->exec() == QDialog::Accepted) {
- int divisions = Dlg->intValue();
+ int divisions = QInputDialog::getInteger(this, MainWindow::tr("Number of segments to divide into"), MainWindow::tr("Specify the number of segments"), 2, 99);
CommandList* theList = new CommandList(MainWindow::tr("Subdivide road into %1").arg(divisions), NULL);
subdivideRoad(theDocument, theList, p->theProperties, divisions);
if (theList->empty())
@@ -2043,8 +2038,6 @@ void MainWindow::on_roadSubdivideAction_triggered()
theDocument->addHistory(theList);
invalidateView();
}
- }
- delete Dlg;
}
void MainWindow::on_roadAxisAlignAction_triggered()
@@ -2923,9 +2916,9 @@ void MainWindow::on_editSelectAction_triggered()
terms.append(t);
}
- if (terms.length()) {
- out += terms[terms.length()-1]->asExpression(true);
- for (int i=terms.length()-2; i>=0; --i) {
+ if (terms.count()) {
+ out += terms[terms.count()-1]->asExpression(true);
+ for (int i=terms.count()-2; i>=0; --i) {
out += " and parent(";
out += terms[i]->asExpression(true);
out += ") ";
diff --git a/src/Preferences/MerkaartorPreferences.cpp b/src/Preferences/MerkaartorPreferences.cpp
index 63d0c33..f52a1d9 100644
--- a/src/Preferences/MerkaartorPreferences.cpp
+++ b/src/Preferences/MerkaartorPreferences.cpp
@@ -964,7 +964,26 @@ QString MerkaartorPreferences::getOsmWebsite() const
else
s = "www.openstreetmap.org";
+#if (QT_VERSION >= QT_VERSION_CHECK(4, 6, 0))
QUrl u = QUrl::fromUserInput(s);
+#else
+ // convenience for creating a valid URL
+ // fails miserably if QString s already contains a schema
+ QString h; // intermediate host
+ QString p; // intermediate path
+
+ int slashpos = s.indexOf('/');
+ if (slashpos >= 1) // there's a path element in s
+ {
+ h = s.left(slashpos);
+ p = s.right(s.size() - 1 - slashpos);
+ }
+
+ QUrl u;
+ u.setHost(h);
+ u.setScheme("http");
+ u.setPath(p);
+#endif
if (u.path().isEmpty())
u.setPath("/api/" + apiVersion());
@@ -1298,7 +1317,7 @@ QNetworkProxy MerkaartorPreferences::getProxy(const QUrl & requestUrl)
return theProxy;
}
#endif
-#if QT_VERSION >= 0x040500
+#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
// Ask Qt for the system proxy (Qt >= 4.5.0), libproxy is preferred if available since QNetworkProxyFactory
// doesn't yet support auto-config (PAC) on MacOS or system settings on linux while libproxy does
QList<QNetworkProxy> systemProxies = QNetworkProxyFactory::systemProxyForQuery(
diff --git a/src/Render/NativeRenderDialog.cpp b/src/Render/NativeRenderDialog.cpp
index a75cdc3..a601295 100644
--- a/src/Render/NativeRenderDialog.cpp
+++ b/src/Render/NativeRenderDialog.cpp
@@ -158,7 +158,11 @@ void NativeRenderDialog::exportPDF()
if (s.isNull())
return;
+#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
QPrinter* prt = preview->printer();
+#else
+ QPrinter* prt = thePrinter;
+#endif
prt->setOutputFormat(QPrinter::PdfFormat);
prt->setOutputFileName(s);
print(prt);
@@ -170,7 +174,11 @@ void NativeRenderDialog::exportRaster()
if (s.isNull())
return;
+#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
QRect theR = preview->printer()->pageRect();
+#else
+ QRect theR = thePrinter->pageRect();
+#endif
theR.moveTo(0, 0);
QPixmap pix(theR.size());
@@ -195,11 +203,15 @@ void NativeRenderDialog::exportSVG()
return;
QSvgGenerator svgg;
+#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
QRect theR = preview->printer()->pageRect();
+#else
+ QRect theR = thePrinter->pageRect();
+#endif
theR.moveTo(0, 0);
svgg.setSize(theR.size());
svgg.setFileName(s);
-#if QT_VERSION >= 0x040500
+#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
svgg.setViewBox(theR);
#endif
More information about the Merkaartor
mailing list