changeset 251:0689dada1419

Merge
author Chris Cannam
date Tue, 11 Jan 2011 20:19:19 +0000
parents 0fe81e1b26ce (current diff) be483734bde5 (diff)
children 8730dd806cca
files mainwindow.cpp
diffstat 10 files changed, 404 insertions(+), 409 deletions(-) [+]
line wrap: on
line diff
--- a/changesetitem.cpp	Tue Jan 11 20:18:37 2011 +0000
+++ b/changesetitem.cpp	Tue Jan 11 20:19:19 2011 +0000
@@ -55,7 +55,7 @@
 {
     int w = 100;
     if (m_wide) w = 180;
-    return QRectF(-((w-50)/2 - 1), -30, w - 3, 79);
+    return QRectF(-((w-50)/2 - 1), -30, w - 3, 90);
 }
 
 void
@@ -211,7 +211,10 @@
 	f.setPixelSize(ps);
     }
 
-    if (scale < 0.1) {
+    bool showText = (scale >= 0.2);
+    bool showProperLines = (scale >= 0.1);
+
+    if (!showProperLines) {
 	paint->setPen(QPen(branchColour, 0));
     } else {
 	paint->setPen(QPen(branchColour, 2));
@@ -225,22 +228,54 @@
     if (m_wide) width = 180;
     int x0 = -((width - 50) / 2 - 1);
 
-    int height = 49;
+    int textwid = width - 7;
+
+    QString comment;
+    QStringList lines;
+    int lineCount = 3;
+
+    if (showText) {
+    
+        comment = m_changeset->comment().trimmed();
+        comment = comment.replace("\\n", " ");
+        comment = comment.replace(QRegExp("^\"\\s*\\**\\s*"), "");
+        comment = comment.replace(QRegExp("\"$"), "");
+        comment = comment.replace("\\\"", "\"");
+
+        comment = TextAbbrev::abbreviate(comment, fm, textwid,
+                                         TextAbbrev::ElideEnd, "...", 3);
+        // abbreviate() changes this (ouch!), restore it
+        textwid = width - 5;
+
+        lines = comment.split('\n');
+        lineCount = lines.size();
+
+        if (lineCount < 2) lineCount = 2;
+    }
+
+    int height = (lineCount + 1) * fh + 2;
     QRectF r(x0, 0, width - 3, height);
+
+    if (showProperLines) {
+
+        paint->setBrush(Qt::white);
+
+        if (m_current) {
+            paint->drawRect(QRectF(x0 - 4, -4, width + 5, height + 8));
+        }
+
+        if (m_new) {
+            paint->save();
+            paint->setPen(Qt::yellow);
+            paint->setBrush(Qt::NoBrush);
+            paint->drawRect(QRectF(x0 - 2, -2, width + 1, height + 4));
+            paint->restore();
+        }
+    }
+
     paint->drawRect(r);
 
-    if (m_new) {
-        paint->save();
-        paint->setPen(Qt::yellow);
-        paint->drawRect(QRectF(x0 - 2, -2, width + 1, height + 4));
-        paint->restore();
-    }
-
-    if (m_current) {
-        paint->drawRect(QRectF(x0 - 4, -4, width + 5, height + 8));
-    }
-
-    if (scale < 0.2) {
+    if (!showText) {
 	paint->restore();
 	return;
     }
@@ -250,8 +285,8 @@
 
     paint->setPen(QPen(Qt::white));
 
-    int wid = width - 5;
-    QString person = TextAbbrev::abbreviate(m_changeset->authorName(), fm, wid);
+    QString person = TextAbbrev::abbreviate(m_changeset->authorName(),
+                                            fm, textwid);
     paint->drawText(x0 + 3, fm.ascent(), person);
 
     paint->setPen(QPen(Qt::black));
@@ -293,23 +328,8 @@
         paint->restore();
     }
 
-    fm = QFontMetrics(f);
-    fh = fm.height();
     paint->setFont(f);
 
-    QString comment = m_changeset->comment().trimmed();
-    comment = comment.replace("\\n", " ");
-    comment = comment.replace(QRegExp("^\"\\s*\\**\\s*"), "");
-    comment = comment.replace(QRegExp("\"$"), "");
-    comment = comment.replace("\\\"", "\"");
-
-    wid = width - 5;
-    int nlines = (height / fh) - 1;
-    if (nlines < 1) nlines = 1;
-    comment = TextAbbrev::abbreviate(comment, fm, wid, TextAbbrev::ElideEnd,
-				     "...", nlines);
-
-    QStringList lines = comment.split('\n');
     for (int i = 0; i < lines.size(); ++i) {
 	paint->drawText(x0 + 3, i * fh + fh + fm.ascent(), lines[i].trimmed());
     }
--- a/connectionitem.cpp	Tue Jan 11 20:18:37 2011 +0000
+++ b/connectionitem.cpp	Tue Jan 11 20:19:19 2011 +0000
@@ -89,7 +89,12 @@
     float c_x = xscale * c_col + size/2;
     float p_x = xscale * p_col + size/2;
 
-    p.moveTo(c_x, yscale * c_row + size);
+    // ensure line reaches the box, even if it's in a small height --
+    // doesn't matter if we overshoot as the box is opaque and has a
+    // greater Z value
+    p.moveTo(c_x, yscale * c_row + size - 20);
+
+    p.lineTo(c_x, yscale * c_row + size);
 
     if (p_col == c_col) {
 
Binary file easyhg_en.qm has changed
--- a/easyhg_en.ts	Tue Jan 11 20:18:37 2011 +0000
+++ b/easyhg_en.ts	Tue Jan 11 20:19:19 2011 +0000
@@ -154,37 +154,37 @@
 <context>
     <name>HgRunner</name>
     <message>
-        <location filename="hgrunner.cpp" line="168"/>
+        <location filename="hgrunner.cpp" line="143"/>
         <source>User name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="hgrunner.cpp" line="170"/>
+        <location filename="hgrunner.cpp" line="145"/>
         <source>User name for &quot;%1&quot;:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="hgrunner.cpp" line="174"/>
+        <location filename="hgrunner.cpp" line="149"/>
         <source>Enter user name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="hgrunner.cpp" line="195"/>
+        <location filename="hgrunner.cpp" line="170"/>
         <source>Password:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="hgrunner.cpp" line="198"/>
+        <location filename="hgrunner.cpp" line="173"/>
         <source>Password for &quot;%1&quot; at &quot;%2&quot;:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="hgrunner.cpp" line="201"/>
+        <location filename="hgrunner.cpp" line="176"/>
         <source>Password for user &quot;%1&quot;:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="hgrunner.cpp" line="207"/>
+        <location filename="hgrunner.cpp" line="182"/>
         <source>Enter password</source>
         <translation type="unfinished"></translation>
     </message>
@@ -226,61 +226,61 @@
 <context>
     <name>MainWindow</name>
     <message>
-        <location filename="mainwindow.cpp" line="66"/>
-        <location filename="mainwindow.cpp" line="1188"/>
+        <location filename="mainwindow.cpp" line="64"/>
+        <location filename="mainwindow.cpp" line="1133"/>
         <source>EasyMercurial</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="135"/>
+        <location filename="mainwindow.cpp" line="132"/>
         <source>About EasyMercurial</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="136"/>
+        <location filename="mainwindow.cpp" line="133"/>
         <source>&lt;qt&gt;&lt;h2&gt;About EasyMercurial&lt;/h2&gt;&lt;p&gt;EasyMercurial is a simple user interface for the Mercurial version control system.&lt;/p&gt;&lt;p&gt;EasyMercurial is based on hgExplorer by Jari Korhonen, with thanks.&lt;br&gt;EasyMercurial development carried out by Chris Cannam for soundsoftware.ac.uk at the Centre for Digital Music, Queen Mary, University of London.&lt;ul&gt;&lt;li&gt;Copyright &amp;copy; 2010 Jari Korhonen&lt;/li&gt;&lt;li&gt;Copyright &amp;copy; 2010 Chris Cannam&lt;/li&gt;&lt;li&gt;Copyright &amp;copy; 2010 Queen Mary, University of London&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.  See the file COPYING included with this distribution for more information.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="310"/>
+        <location filename="mainwindow.cpp" line="300"/>
         <source>Commit files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="362"/>
+        <location filename="mainwindow.cpp" line="351"/>
         <source>Tag</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="363"/>
+        <location filename="mainwindow.cpp" line="352"/>
         <source>Enter tag:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="575"/>
+        <location filename="mainwindow.cpp" line="528"/>
         <source>Revert files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="315"/>
-        <location filename="mainwindow.cpp" line="317"/>
-        <location filename="mainwindow.cpp" line="580"/>
-        <location filename="mainwindow.cpp" line="582"/>
+        <location filename="mainwindow.cpp" line="305"/>
+        <location filename="mainwindow.cpp" line="307"/>
+        <location filename="mainwindow.cpp" line="533"/>
+        <location filename="mainwindow.cpp" line="535"/>
         <source>&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="316"/>
+        <location filename="mainwindow.cpp" line="306"/>
         <source>You are about to commit the following files:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="581"/>
+        <location filename="mainwindow.cpp" line="534"/>
         <source>You are about to &lt;b&gt;revert&lt;/b&gt; the following files to their previous committed state.&lt;br&gt;&lt;br&gt;This will &lt;b&gt;throw away any changes&lt;/b&gt; that you have made to these files but have not committed:</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="mainwindow.cpp" line="583"/>
+        <location filename="mainwindow.cpp" line="536"/>
         <source>You are about to &lt;b&gt;revert&lt;/b&gt; %n file(s).&lt;br&gt;&lt;br&gt;This will &lt;b&gt;throw away any changes&lt;/b&gt; that you have made to these files but have not committed.</source>
         <oldsource>You are about to &lt;b&gt;revert&lt;/b&gt; %n files.&lt;br&gt;&lt;br&gt;This will &lt;b&gt;throw away any changes&lt;/b&gt; that you have made to these files but have not committed.</oldsource>
         <translation type="unfinished">
@@ -289,218 +289,200 @@
         </translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="698"/>
+        <location filename="mainwindow.cpp" line="648"/>
         <source>Merge from the default branch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="700"/>
+        <location filename="mainwindow.cpp" line="650"/>
         <source>Merge from branch &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="706"/>
+        <location filename="mainwindow.cpp" line="656"/>
         <source>Merge from %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="755"/>
+        <location filename="mainwindow.cpp" line="705"/>
         <source>Confirm pull</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="756"/>
+        <location filename="mainwindow.cpp" line="706"/>
         <source>Confirm pull from remote repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="757"/>
+        <location filename="mainwindow.cpp" line="707"/>
         <source>You are about to pull from the following remote repository:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="770"/>
+        <location filename="mainwindow.cpp" line="720"/>
         <source>Confirm push</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="771"/>
+        <location filename="mainwindow.cpp" line="721"/>
         <source>Confirm push to remote repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="772"/>
+        <location filename="mainwindow.cpp" line="722"/>
         <source>You are about to push to the following remote repository:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="826"/>
-        <location filename="mainwindow.cpp" line="845"/>
-        <source>Serve</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="826"/>
-        <source>Failed to identify an active IPv4 address</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message numerus="yes">
-        <source>Starting server at %n address(es):</source>
-        <translation type="obsolete">
-            <numerusform>Starting server at this address:</numerusform>
-            <numerusform>Starting server at %n addresses:</numerusform>
-        </translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="863"/>
+        <location filename="mainwindow.cpp" line="802"/>
         <source>Open Repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="864"/>
+        <location filename="mainwindow.cpp" line="803"/>
         <source>&lt;qt&gt;&lt;big&gt;What would you like to open?&lt;/big&gt;&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="868"/>
+        <location filename="mainwindow.cpp" line="807"/>
         <source>&lt;qt&gt;&lt;center&gt;&lt;img src=&quot;:images/browser-64.png&quot;&gt;&lt;br&gt;Remote repository&lt;/center&gt;&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="869"/>
+        <location filename="mainwindow.cpp" line="808"/>
         <source>Open a remote Mercurial repository, by cloning from its URL into a local folder.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="873"/>
+        <location filename="mainwindow.cpp" line="812"/>
         <source>&lt;qt&gt;&lt;center&gt;&lt;img src=&quot;:images/hglogo-64.png&quot;&gt;&lt;br&gt;Local repository&lt;/center&gt;&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="874"/>
+        <location filename="mainwindow.cpp" line="813"/>
         <source>Open an existing local Mercurial repository.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="878"/>
+        <location filename="mainwindow.cpp" line="817"/>
         <source>&lt;qt&gt;&lt;center&gt;&lt;img src=&quot;:images/hdd_unmount-64.png&quot;&gt;&lt;br&gt;File folder&lt;/center&gt;&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="879"/>
+        <location filename="mainwindow.cpp" line="818"/>
         <source>Open a local folder, by creating a Mercurial repository in it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="928"/>
+        <location filename="mainwindow.cpp" line="867"/>
         <source>File chosen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="929"/>
+        <location filename="mainwindow.cpp" line="868"/>
         <source>&lt;qt&gt;&lt;b&gt;Folder required&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open &quot;%1&quot;.&lt;br&gt;This is a file; to open a repository, you need to choose a folder.&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="936"/>
-        <location filename="mainwindow.cpp" line="1006"/>
+        <location filename="mainwindow.cpp" line="875"/>
+        <location filename="mainwindow.cpp" line="945"/>
         <source>Folder does not exist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="937"/>
+        <location filename="mainwindow.cpp" line="876"/>
         <source>&lt;qt&gt;&lt;b&gt;Folder does not exist&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open &quot;%1&quot;.&lt;br&gt;This folder does not exist, and it cannot be created because its parent does not exist either.&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="944"/>
-        <location filename="mainwindow.cpp" line="960"/>
+        <location filename="mainwindow.cpp" line="883"/>
+        <location filename="mainwindow.cpp" line="899"/>
         <source>Path is in existing repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="945"/>
+        <location filename="mainwindow.cpp" line="884"/>
         <source>&lt;qt&gt;&lt;b&gt;Path is in an existing repository&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to initialise a repository at &quot;%1&quot;.&lt;br&gt;This path is already inside an existing repository.&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="952"/>
-        <location filename="mainwindow.cpp" line="968"/>
+        <location filename="mainwindow.cpp" line="891"/>
+        <location filename="mainwindow.cpp" line="907"/>
         <source>Path is a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="953"/>
+        <location filename="mainwindow.cpp" line="892"/>
         <source>&lt;qt&gt;&lt;b&gt;Path is a file&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to initialise a repository at &quot;%1&quot;.&lt;br&gt;This is an existing file; it is only possible to initialise in folders.&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="961"/>
+        <location filename="mainwindow.cpp" line="900"/>
         <source>&lt;qt&gt;&lt;b&gt;Local path is in an existing repository&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open a remote repository by cloning it to the local path &quot;%1&quot;.&lt;br&gt;This path is already inside an existing repository.&lt;br&gt;Please provide a new folder name for the local repository.&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="969"/>
+        <location filename="mainwindow.cpp" line="908"/>
         <source>&lt;qt&gt;&lt;b&gt;Local path is a file&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open a remote repository by cloning it to the local path &quot;%1&quot;.&lt;br&gt;This path is an existing file.&lt;br&gt;Please provide a new folder name for the local repository.&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="976"/>
+        <location filename="mainwindow.cpp" line="915"/>
         <source>Folder exists</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="977"/>
+        <location filename="mainwindow.cpp" line="916"/>
         <source>&lt;qt&gt;&lt;b&gt;Local folder already exists&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open a remote repository by cloning it to the local path &quot;%1&quot;.&lt;br&gt;This is the path of an existing folder.&lt;br&gt;Please provide a new folder name for the local repository.&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="984"/>
+        <location filename="mainwindow.cpp" line="923"/>
         <source>Path is inside a repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="985"/>
+        <location filename="mainwindow.cpp" line="924"/>
         <source>&lt;qt&gt;&lt;b&gt;Open the repository that contains this path?&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open &quot;%1&quot;.&lt;br&gt;This is not the root folder of a repository.&lt;br&gt;But it is inside a repository, whose root is at &quot;%2&quot;. &lt;br&gt;&lt;br&gt;Would you like to open that repository instead?&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="995"/>
+        <location filename="mainwindow.cpp" line="934"/>
         <source>Folder has no repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="996"/>
+        <location filename="mainwindow.cpp" line="935"/>
         <source>&lt;qt&gt;&lt;b&gt;Initialise a repository here?&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open &quot;%1&quot;.&lt;br&gt;This folder does not contain a Mercurial repository.&lt;br&gt;&lt;br&gt;Would you like to initialise a repository here?&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1007"/>
+        <location filename="mainwindow.cpp" line="946"/>
         <source>&lt;qt&gt;&lt;b&gt;Initialise a new repository?&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to open &quot;%1&quot;.&lt;br&gt;This folder does not yet exist.&lt;br&gt;&lt;br&gt;Would you like to create the folder and initialise a new empty repository in it?&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1017"/>
+        <location filename="mainwindow.cpp" line="956"/>
         <source>Repository exists</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1018"/>
+        <location filename="mainwindow.cpp" line="957"/>
         <source>&lt;qt&gt;&lt;b&gt;Open existing repository?&lt;/b&gt;&lt;br&gt;&lt;br&gt;You asked to initialise a new repository at &quot;%1&quot;.&lt;br&gt;This folder already contains a repository.  Would you like to open it?&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1177"/>
+        <location filename="mainwindow.cpp" line="1122"/>
         <source>Ok</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1188"/>
+        <location filename="mainwindow.cpp" line="1133"/>
         <source>Mercurial command did not return any output.</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="mainwindow.cpp" line="1271"/>
+        <location filename="mainwindow.cpp" line="1216"/>
         <source>Pushed %n changeset(s)</source>
         <translation type="unfinished">
             <numerusform>Pushed %n changeset</numerusform>
@@ -508,22 +490,22 @@
         </translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1273"/>
+        <location filename="mainwindow.cpp" line="1218"/>
         <source>No changes to push</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1275"/>
+        <location filename="mainwindow.cpp" line="1220"/>
         <source>Push complete</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1277"/>
+        <location filename="mainwindow.cpp" line="1222"/>
         <source>The push command output was:</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="mainwindow.cpp" line="1287"/>
+        <location filename="mainwindow.cpp" line="1232"/>
         <source>Pulled %n changeset(s)</source>
         <translation type="unfinished">
             <numerusform>Pulled %n changeset</numerusform>
@@ -531,374 +513,383 @@
         </translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1289"/>
+        <location filename="mainwindow.cpp" line="1234"/>
         <source>No changes to pull</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1291"/>
+        <location filename="mainwindow.cpp" line="1236"/>
         <source>Pull complete</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1293"/>
+        <location filename="mainwindow.cpp" line="1238"/>
         <source>The pull command output was:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1324"/>
-        <location filename="mainwindow.cpp" line="1325"/>
-        <location filename="mainwindow.cpp" line="1330"/>
-        <location filename="mainwindow.cpp" line="1331"/>
-        <source>Push failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1326"/>
-        <source>Your local repository could not be pushed to the remote repository.&lt;br&gt;&lt;br&gt;You may need to merge the changes locally first.&lt;br&gt;&lt;br&gt;The output of the push command was:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1332"/>
-        <source>Your local repository could not be pushed to the remote repository.&lt;br&gt;&lt;br&gt;The remote repository may have been changed by someone else since you last pushed. Try pulling and merging their changes into your local repository first.&lt;br&gt;&lt;br&gt;The output of the push command was:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1349"/>
-        <location filename="mainwindow.cpp" line="1350"/>
-        <source>Failed to run Mercurial</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1351"/>
-        <source>The Mercurial program either could not be found or failed to run.&lt;br&gt;This may indicate a problem with the Mercurial installation, or with the EasyHg interaction extension.&lt;br&gt;&lt;br&gt;The test command said:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1388"/>
+        <location filename="mainwindow.cpp" line="1285"/>
         <source>&lt;qt&gt;&lt;h3&gt;Command failed&lt;/h3&gt;&lt;p&gt;The following command failed:&lt;/p&gt;&lt;code&gt;%1&lt;/code&gt;%2&lt;/qt&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1394"/>
+        <location filename="mainwindow.cpp" line="1291"/>
         <source>&lt;p&gt;Its output said:&lt;/p&gt;&lt;code&gt;%1&lt;/code&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1399"/>
+        <location filename="mainwindow.cpp" line="1296"/>
         <source>Command failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1551"/>
+        <location filename="mainwindow.cpp" line="1445"/>
         <source>Change summary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1552"/>
+        <location filename="mainwindow.cpp" line="1446"/>
         <source>Summary of uncommitted changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1565"/>
-        <location filename="mainwindow.cpp" line="1570"/>
-        <location filename="mainwindow.cpp" line="1911"/>
+        <location filename="mainwindow.cpp" line="1459"/>
+        <location filename="mainwindow.cpp" line="1464"/>
+        <location filename="mainwindow.cpp" line="1831"/>
         <source>Update</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1875"/>
-        <source>Open a repository</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1880"/>
-        <source>Quit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1882"/>
-        <source>Quit EasyMercurial</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1886"/>
-        <source>Refresh the window to show the current state of the working folder</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1889"/>
-        <source>See what changes are available in the remote repository waiting to be pulled</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1892"/>
-        <source>Pull changes from the remote repository to the local repository</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1895"/>
-        <source>Push changes from the local repository to the remote repository</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1899"/>
-        <source>See what has changed in the working folder compared with the last committed state</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1902"/>
-        <source>Throw away your changes and return to the last committed state</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1905"/>
-        <source>Mark the selected file(s) to be added on the next commit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1909"/>
-        <source>Mark the selected file(s) to be removed from version control on the next commit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1912"/>
-        <source>Update the working folder to the head of the current repository branch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1916"/>
-        <source>Commit your changes to the local repository</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1919"/>
-        <source>Merge the two independent sets of changes in the local repository into the working folder</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1926"/>
-        <source>Edit .hgignore File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1927"/>
-        <source>Edit the .hgignore file, containing the names of files that should be ignored by Mercurial</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1929"/>
-        <source>Serve via HTTP</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="649"/>
-        <location filename="mainwindow.cpp" line="675"/>
-        <location filename="mainwindow.cpp" line="1918"/>
+        <location filename="mainwindow.cpp" line="601"/>
+        <location filename="mainwindow.cpp" line="626"/>
+        <location filename="mainwindow.cpp" line="1837"/>
         <source>Merge</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1841"/>
+        <location filename="mainwindow.cpp" line="1750"/>
         <source>the default branch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1843"/>
+        <location filename="mainwindow.cpp" line="1752"/>
         <source>branch &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1862"/>
+        <location filename="mainwindow.cpp" line="1771"/>
         <source>On %1. Not at the head of the branch: consider updating</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1851"/>
+        <location filename="mainwindow.cpp" line="1760"/>
         <source>&lt;b&gt;Awaiting merge&lt;/b&gt; on %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="mainwindow.cpp" line="318"/>
+        <location filename="mainwindow.cpp" line="308"/>
         <source>You are about to commit %n file(s).</source>
         <translation type="unfinished">
             <numerusform>You are about to commit %n file.</numerusform>
             <numerusform>You are about to commit %n files.</numerusform>
         </translation>
     </message>
-    <message numerus="yes">
-        <location filename="mainwindow.cpp" line="834"/>
-        <source>Running temporary server at %n address(es):</source>
-        <translation type="unfinished">
-            <numerusform>Running temporary server at this address:</numerusform>
-            <numerusform>Running temporary server at %n addresses:</numerusform>
-        </translation>
-    </message>
     <message>
-        <location filename="mainwindow.cpp" line="838"/>
-        <source>&lt;p&gt;Press Close to stop the server and return.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1565"/>
+        <location filename="mainwindow.cpp" line="1459"/>
         <source>&lt;qt&gt;&lt;h3&gt;Update successful&lt;/h3&gt;&lt;p&gt;%1&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1570"/>
+        <location filename="mainwindow.cpp" line="1464"/>
         <source>&lt;qt&gt;&lt;h3&gt;Merge successful&lt;/h3&gt;&lt;p&gt;%1&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1576"/>
+        <location filename="mainwindow.cpp" line="1470"/>
         <source>Resolved</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1577"/>
+        <location filename="mainwindow.cpp" line="1471"/>
         <source>&lt;qt&gt;&lt;h3&gt;Merge resolved&lt;/h3&gt;&lt;p&gt;Merge resolved successfully.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1847"/>
-        <source>(Examining repository)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="mainwindow.cpp" line="1849"/>
+        <location filename="mainwindow.cpp" line="1758"/>
         <source>Nothing committed to this repository yet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1853"/>
+        <location filename="mainwindow.cpp" line="1762"/>
         <source>Have unresolved files following merge on %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1855"/>
+        <location filename="mainwindow.cpp" line="1764"/>
         <source>Have merged but not yet committed on %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1859"/>
+        <location filename="mainwindow.cpp" line="1768"/>
         <source>On %1. Not at the head of the branch</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="mainwindow.cpp" line="1865"/>
+        <location filename="mainwindow.cpp" line="1774"/>
         <source>At one of %n heads of %1</source>
         <translation type="unfinished">
             <numerusform></numerusform>
+            <numerusform></numerusform>
         </translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1867"/>
+        <location filename="mainwindow.cpp" line="1776"/>
         <source>At the head of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1874"/>
+        <location filename="mainwindow.cpp" line="1783"/>
+        <source>Init local repository</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1784"/>
+        <source>Create an empty local repository in selected folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1786"/>
+        <source>Clone from remote</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1787"/>
+        <source>Clone from remote repository into local repository in selected folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1789"/>
         <source>Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1877"/>
+        <location filename="mainwindow.cpp" line="1790"/>
+        <source>Open repository</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1793"/>
         <source>Settings...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1878"/>
+        <location filename="mainwindow.cpp" line="1794"/>
         <source>View and change application settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1885"/>
+        <location filename="mainwindow.cpp" line="1797"/>
+        <source>Exit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1799"/>
+        <source>Exit application</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1803"/>
         <source>Refresh</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1888"/>
+        <location filename="mainwindow.cpp" line="1804"/>
+        <source>Refresh (info of) status of workfolder files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1806"/>
         <source>Preview</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1891"/>
+        <location filename="mainwindow.cpp" line="1807"/>
+        <source>View info of changesets incoming to us from remote repository (on pull operation)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1809"/>
         <source>Pull</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1894"/>
+        <location filename="mainwindow.cpp" line="1810"/>
+        <source>Pull changesets from remote repository to local repository</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1812"/>
         <source>Push</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1898"/>
+        <location filename="mainwindow.cpp" line="1813"/>
+        <source>Push local changesets to remote repository</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1816"/>
         <source>Diff</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1901"/>
+        <location filename="mainwindow.cpp" line="1817"/>
+        <source>Folderdiff: View all differences between working folder files and local repository files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1819"/>
+        <source>View changesetdiff</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1820"/>
+        <source>Change set diff: View differences between all files of 2 repository changesets</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1822"/>
         <source>Revert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1904"/>
+        <location filename="mainwindow.cpp" line="1823"/>
+        <source>Undo selected working folder file changes (return to local repository version)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1825"/>
         <source>Add</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1908"/>
+        <location filename="mainwindow.cpp" line="1826"/>
+        <source>Add working folder file(s) (selected or all yet untracked) to local repository (on next commit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1828"/>
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1915"/>
+        <location filename="mainwindow.cpp" line="1829"/>
+        <source>Remove selected working folder file from local repository (on next commit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1832"/>
+        <source>Update working folder from local repository</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1834"/>
         <source>Commit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1923"/>
+        <location filename="mainwindow.cpp" line="1835"/>
+        <source>Save selected file(s) or all changed files in working folder (and all subfolders) to local repository</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1838"/>
+        <source>Merge two local repository changesets to working folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1844"/>
         <source>Annotate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1924"/>
+        <location filename="mainwindow.cpp" line="1845"/>
         <source>Show line-by-line version information for selected file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1930"/>
+        <location filename="mainwindow.cpp" line="1847"/>
+        <source>Tag revision</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1848"/>
+        <source>Give decsriptive name (tag) to current workfolder parent revision.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1850"/>
+        <source>Edit .hgignore</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1851"/>
+        <source>Edit .hgignore file (file contains names of files that should be ignored by mercurial)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1853"/>
+        <source>Serve (via http)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1854"/>
         <source>Serve local repository via http for workgroup access</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1933"/>
+        <location filename="mainwindow.cpp" line="1857"/>
         <source>About</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1936"/>
+        <location filename="mainwindow.cpp" line="1858"/>
+        <source>Show the application&apos;s About box</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1860"/>
+        <source>About Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1861"/>
+        <source>Show the Qt library&apos;s About box</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="1864"/>
         <source>Clear selections</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1942"/>
-        <location filename="mainwindow.cpp" line="1961"/>
+        <location filename="mainwindow.cpp" line="1870"/>
+        <location filename="mainwindow.cpp" line="1905"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1949"/>
+        <location filename="mainwindow.cpp" line="1881"/>
         <source>Advanced</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1955"/>
+        <location filename="mainwindow.cpp" line="1898"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="1997"/>
+        <location filename="mainwindow.cpp" line="1942"/>
         <source>Ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -994,98 +985,6 @@
     </message>
 </context>
 <context>
-    <name>SettingsDialog</name>
-    <message>
-        <location filename="settingsdialog.cpp" line="33"/>
-        <source>Settings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="40"/>
-        <source>User details</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="49"/>
-        <source>Name:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="55"/>
-        <source>Email address:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="63"/>
-        <source>System application locations</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="72"/>
-        <source>Mercurial (hg) program:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="78"/>
-        <location filename="settingsdialog.cpp" line="88"/>
-        <location filename="settingsdialog.cpp" line="98"/>
-        <location filename="settingsdialog.cpp" line="108"/>
-        <location filename="settingsdialog.cpp" line="122"/>
-        <source>Browse...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="82"/>
-        <source>External diff program:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="92"/>
-        <source>External file-merge program:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="102"/>
-        <source>External text editor:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="116"/>
-        <source>EasyHg Mercurial extension:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="131"/>
-        <source>Use EasyHg Mercurial extension</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="147"/>
-        <source>Mercurial program</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="153"/>
-        <source>External diff program</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="159"/>
-        <source>External file-merge program</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="165"/>
-        <source>External text editor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="settingsdialog.cpp" line="171"/>
-        <source>EasyHg Mercurial extension</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>StartupDialog</name>
     <message>
         <location filename="startupdialog.cpp" line="29"/>
@@ -1127,8 +1026,7 @@
     </message>
     <message>
         <location filename="uncommitteditem.cpp" line="80"/>
-        <source>Summarise changes</source>
-        <oldsource>Show summary</oldsource>
+        <source>Show summary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
--- a/grapher.cpp	Tue Jan 11 20:18:37 2011 +0000
+++ b/grapher.cpp	Tue Jan 11 20:19:19 2011 +0000
@@ -427,6 +427,7 @@
         ChangesetItem *item = new ChangesetItem(cs);
         item->setX(0);
         item->setY(0);
+        item->setZValue(0);
         m_items[id] = item;
         m_scene->addChangesetItem(item);
     }
@@ -445,6 +446,7 @@
             if (merge) conn->setConnectionType(ConnectionItem::Merge);
             conn->setChild(item);
             conn->setParent(m_items[parentId]);
+            conn->setZValue(-1);
             m_scene->addItem(conn);
         }
     }
@@ -454,12 +456,14 @@
     if (!m_uncommittedParents.empty()) {
         m_uncommitted = new UncommittedItem();
         m_uncommitted->setBranch(uncommittedBranch);
+        m_uncommitted->setZValue(10);
         m_scene->addUncommittedItem(m_uncommitted);
         foreach (QString p, m_uncommittedParents) {
             ConnectionItem *conn = new ConnectionItem();
             conn->setConnectionType(ConnectionItem::Merge);
             conn->setParent(m_items[p]);
             conn->setChild(m_uncommitted);
+            conn->setZValue(0);
             m_scene->addItem(conn);
         }
     }
@@ -583,7 +587,7 @@
                 item->setCols(datemincol, datemaxcol - datemincol + 1);
                 item->setRows(changeRow, n);
                 item->setEven(even);
-                item->setZValue(-1);
+                item->setZValue(-2);
                 m_scene->addDateItem(item);
                 even = !even;
             }
@@ -599,7 +603,7 @@
         item->setCols(datemincol, datemaxcol - datemincol + 1);
         item->setRows(changeRow, n+1);
         item->setEven(even);
-        item->setZValue(-1);
+        item->setZValue(-2);
         m_scene->addDateItem(item);
         even = !even;
     }
--- a/historywidget.cpp	Tue Jan 11 20:18:37 2011 +0000
+++ b/historywidget.cpp	Tue Jan 11 20:19:19 2011 +0000
@@ -36,6 +36,7 @@
     m_panner = new Panner;
 
     m_panned->setDragMode(QGraphicsView::ScrollHandDrag);
+    m_panned->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
 
     QGridLayout *layout = new QGridLayout;
     layout->addWidget(m_panned, 0, 0);
--- a/mainwindow.cpp	Tue Jan 11 20:18:37 2011 +0000
+++ b/mainwindow.cpp	Tue Jan 11 20:19:19 2011 +0000
@@ -124,10 +124,6 @@
     cs->addDefaultName("default");
     cs->addDefaultName(getUserInfo());
 
-    if (workFolderPath == "") {
-        open();
-    }
-
     hgTest();
 }
 
@@ -495,6 +491,16 @@
     
     hgIgnorePath = workFolderPath;
     hgIgnorePath += "/.hgignore";
+
+    if (!QDir(workFolderPath).exists()) return;
+    QFile f(hgIgnorePath);
+    if (!f.exists()) {
+        f.open(QFile::WriteOnly);
+        QTextStream *ts = new QTextStream(&f);
+        *ts << "syntax: glob\n";
+        delete ts;
+        f.close();
+    }
     
     params << hgIgnorePath;
     
@@ -973,11 +979,22 @@
                      tr("Open a local folder, by creating a Mercurial repository in it."),
                      MultiChoiceDialog::DirectoryArg);
 
-        d->setCurrentChoice("local");
+        QSettings settings;
+        settings.beginGroup("General");
+        QString lastChoice = settings.value("lastopentype", "local").toString();
+        if (lastChoice != "local" &&
+            lastChoice != "remote" &&
+            lastChoice != "init") {
+            lastChoice = "local";
+        }
+
+        d->setCurrentChoice(lastChoice);
 
         if (d->exec() == QDialog::Accepted) {
 
             QString choice = d->getCurrentChoice();
+            settings.setValue("lastopentype", choice);
+
             QString arg = d->getArgument().trimmed();
 
             bool result = false;
@@ -1070,6 +1087,28 @@
     return false;
 }
 
+bool MainWindow::askAboutUnknownFolder(QString arg)
+{    
+    bool result = (QMessageBox::question
+                   (this, tr("Path does not exist"),
+                    tr("<qt><b>Path does not exist: create it?</b><br><br>You asked to open a remote repository by cloning it to \"%1\". This folder does not exist, and neither does its parent.<br><br>Would you like to create the parent folder as well?</qt>").arg(xmlEncode(arg)),
+                    QMessageBox::Ok | QMessageBox::Cancel,
+                    QMessageBox::Cancel)
+                   == QMessageBox::Ok);
+    if (result) {
+        QDir dir(arg);
+        dir.cdUp();
+        if (!dir.mkpath(dir.absolutePath())) {
+            QMessageBox::critical
+                (this, tr("Failed to create folder"),
+                 tr("<qt><b>Failed to create folder</b><br><br>Sorry, the path for the parent folder \"%1\" could not be created.</qt>").arg(dir.absolutePath()));
+            return false;
+        }
+        return true;
+    }
+    return false;
+}
+
 bool MainWindow::complainAboutUnknownFolder(QString arg)
 {    
     QMessageBox::critical
@@ -1265,7 +1304,9 @@
     }
 
     if (status == FolderUnknown) {
-        return complainAboutUnknownFolder(local);
+        if (!askAboutUnknownFolder(local)) {
+            return false;
+        }
     }
 
     if (status == FolderExists) {
@@ -1902,11 +1943,25 @@
     switch (action) {
 
     case ACT_TEST_HG:
-        hgTestExtension();
+    {
+        QSettings settings;
+        settings.beginGroup("General");
+        if (settings.value("useextension", true).toBool()) {
+            hgTestExtension();
+        } else if (workFolderPath == "") {
+            open();
+        } else {
+            hgQueryPaths();
+        }
         break;
+    }
         
     case ACT_TEST_HG_EXT:
-        hgQueryPaths();
+        if (workFolderPath == "") {
+            open();
+        } else{
+            hgQueryPaths();
+        }
         break;
         
     case ACT_QUERY_PATHS:
@@ -2055,7 +2110,7 @@
         workFolderExist = false;
     }
 
-    if (!workFolderDir.exists(workFolderPath)) {
+    if (workFolderPath == "" || !workFolderDir.exists(workFolderPath)) {
         localRepoActionsEnabled = false;
         workFolderExist = false;
     } else {
@@ -2177,7 +2232,11 @@
     }
 
     if (stateUnknown) {
-        hgTabs->setState(tr("(Examining repository)"));
+        if (workFolderPath == "") {
+            hgTabs->setState(tr("No repository open"));
+        } else {
+            hgTabs->setState(tr("(Examining repository)"));
+        }
     } else if (emptyRepo) {
         hgTabs->setState(tr("Nothing committed to this repository yet"));
     } else if (noWorkingCopy) {
--- a/mainwindow.h	Tue Jan 11 20:18:37 2011 +0000
+++ b/mainwindow.h	Tue Jan 11 20:19:19 2011 +0000
@@ -144,6 +144,7 @@
     bool complainAboutCloneToFile(QString);
     QString complainAboutCloneToExistingFolder(QString local, QString remote); // returns new location, or empty string for cancel
 
+    bool askAboutUnknownFolder(QString);
     bool askToInitExisting(QString);
     bool askToInitNew(QString);
     bool askToOpenParentRepo(QString, QString);
--- a/panner.cpp	Tue Jan 11 20:18:37 2011 +0000
+++ b/panner.cpp	Tue Jan 11 20:19:19 2011 +0000
@@ -110,6 +110,7 @@
 void
 Panner::resizeEvent(QResizeEvent *)
 {
+    DEBUG << "Panner::resizeEvent" << endl;
     if (scene()) fit(sceneRect());
     m_cache = QPixmap();
 }
@@ -117,6 +118,7 @@
 void
 Panner::slotSceneRectChanged(const QRectF &newRect)
 {
+    DEBUG << "Panner::slotSceneRectChanged" << endl;
     if (!scene()) return; // spurious
     fit(newRect);
     m_cache = QPixmap();
@@ -126,6 +128,7 @@
 void
 Panner::slotSceneChanged(const QList<QRectF> &)
 {
+    DEBUG << "Panner::slotSceneChanged" << endl;
     if (!scene()) return; // spurious
     m_cache = QPixmap();
     viewport()->update();
@@ -163,7 +166,8 @@
 void
 Panner::updateScene(const QList<QRectF> &rects)
 {
-    if (!m_cache.isNull()) m_cache = QPixmap();
+    DEBUG << "Panner::updateScene" << endl;
+//    if (!m_cache.isNull()) m_cache = QPixmap();
     QGraphicsView::updateScene(rects);
 }
 
@@ -187,6 +191,8 @@
         cachePainter.setTransform(viewportTransform());
         ps->drawItems(&cachePainter, numItems, items, options);
         cachePainter.end();
+
+        DEBUG << "done" << endl;
     }
 
     painter->save();
--- a/uncommitteditem.cpp	Tue Jan 11 20:18:37 2011 +0000
+++ b/uncommitteditem.cpp	Tue Jan 11 20:19:19 2011 +0000
@@ -127,6 +127,7 @@
 
     int height = 49;
     QRectF r(x0, 0, width - 3, height);
+    paint->setBrush(Qt::white);
     paint->drawRect(r);
 
     if (m_wide) {