Switch to side-by-side view

--- a/dirbrowser/cdbrowser.cpp
+++ b/dirbrowser/cdbrowser.cpp
@@ -160,6 +160,8 @@
 
 void CDBrowser::runJS(const QString& js)
 {
+    qDebug() << "CDBrowser::runJS: " << js;
+
 #ifdef USING_WEBENGINE
     page()->runJavaScript(js, [] (QVariant res) {
             Q_UNUSED(res);
@@ -303,7 +305,7 @@
 
     case 'a':
     {
-        string initial = scurl.substr(1,1);
+        char initial = scurl[1];
         auto it = m_alphamap.find(initial);
         if (it != m_alphamap.end()) {
             m_browsers->doSearch(u8s2qs(it->second), false);
@@ -346,7 +348,6 @@
     case 'C':
     {
         // Directory listing container link clicked: browse subdir.
-        m_curinitial = 0;
 #ifdef USING_WEBENGINE
 #warning tobedone
 #else
@@ -535,12 +536,32 @@
     qApp->processEvents();
 }
 
-void CDBrowser::updateAlphamap(const string& tt)
+void CDBrowser::updateAlphamap(char& curinitial, const string& tt)
 {
     char ninit = ::toupper(tt[0]);
-    if (ninit != m_curinitial) {
-        m_alphamap[string(1, ninit)] = CTTitleStartMarker + tt;
-        m_curinitial = ninit;
+    if (ninit != curinitial && ninit >= 'A' && ninit <= 'Z') {
+        m_alphamap[ninit] = CTTitleStartMarker + tt;
+        curinitial = ninit;
+    }
+}
+
+void CDBrowser::maybeShowAlphamap(unsigned int nct)
+{
+    if (nct >= 40 && m_alphamap.size() > 1) {
+        string initials;
+        for (auto& ent: m_alphamap) {
+            if  (ent.first >= 'A' && ent.first <= 'Z') {
+                initials += ent.first;
+            }
+        }
+        runJS("document.getElementById('alphalist').style.visibility = "
+              "'visible';");
+        qDebug() << "SETTING ALPHABET:" << initials.c_str();
+        runJS(QString("document.getElementById('alphalist').innerHTML = \"") +
+              alphalinks(initials) + QString("\";"));
+    } else {
+        runJS("document.getElementById('alphalist').style.visibility = "
+              "'hidden';");
     }
 }
 
@@ -560,14 +581,8 @@
 
     for (auto& entry: dc->m_containers) {
         //qDebug() << "Container: " << it->dump().c_str();;
-        updateAlphamap(entry.m_title);
         m_entries.push_back(entry);
         html += CTToHtml(m_entries.size()-1, entry);
-    }
-    if (m_entries.size() < 40) {
-        runJS("document.getElementById('alphalist').style.visibility = 'hidden';");
-    } else {
-        runJS("document.getElementById('alphalist').style.visibility = 'visible';");
     }
     QSettings settings;
     int maxartlen = 0;
@@ -666,12 +681,9 @@
             sortcrits.push_back(qs2utf8s(qcrits[i]));
         }
     }
-    if (m_entries.size() < 40) {
-        runJS("document.getElementById('alphalist').style.visibility = 'hidden';");
-    } else {
-        runJS("document.getElementById('alphalist').style.visibility = 'visible';");
-    }
-
+    int nct = 0;
+    char curinitial = 0;
+    m_alphamap.clear();
     if (!sortcrits.empty()) {
         DirObjCmp cmpo(sortcrits);
 
@@ -683,17 +695,25 @@
         if (settings.value("truncateartistindir").toBool()) {
             maxartlen = settings.value("truncateartistlen").toInt();
         }
-        m_curinitial = 0;
         for (unsigned i = 0; i < m_entries.size(); i++) {
             if (m_entries[i].m_type == UPnPDirObject::container) {
-                updateAlphamap(m_entries[i].m_title);
+                updateAlphamap(curinitial, m_entries[i].m_title);
                 html += CTToHtml(i, m_entries[i]);
+                nct++;
             } else {
                 html += ItemToHtml(i, m_entries[i], maxartlen);
             }
         }
         appendHtml("entrylist", html);
-    }
+    } else {
+        for (unsigned i = 0; i < m_entries.size(); i++) {
+            if (m_entries[i].m_type == UPnPDirObject::container) {
+                updateAlphamap(curinitial, m_entries[i].m_title);
+                nct++;
+            }
+        }
+    }
+    maybeShowAlphamap(nct);
 
     m_reader->wait();
 #ifdef USING_WEBENGINE