Browse Source

fix tab order and TOC level in edit mode

1. Fix tab order of left and right corner widgets;
2. Insert [EMPTY] header when header level is not continuous in edit mode.
Le Tan 8 years ago
parent
commit
584472f902
3 changed files with 24 additions and 16 deletions
  1. 1 1
      src/vedittab.cpp
  2. 13 13
      src/veditwindow.cpp
  3. 10 2
      src/vmdedit.cpp

+ 1 - 1
src/vedittab.cpp

@@ -423,7 +423,7 @@ void VEditTab::parseTocLi(QXmlStreamReader &xml, QVector<VHeader> &headers, int
             }
         } else if (xml.name() == "ul") {
             // Such as header 3 under header 1 directly
-            VHeader header(level, "[Empty]", "#", -1);
+            VHeader header(level, "[EMPTY]", "#", -1);
             headers.append(header);
             parseTocUl(xml, headers, level + 1);
         } else {

+ 13 - 13
src/veditwindow.cpp

@@ -61,6 +61,19 @@ void VEditWindow::initTabActions()
 
 void VEditWindow::setupCornerWidget()
 {
+    // Left corner button
+    tabListAct = new QActionGroup(this);
+    connect(tabListAct, &QActionGroup::triggered,
+            this, &VEditWindow::tabListJump);
+    leftBtn = new QPushButton(QIcon(":/resources/icons/corner_tablist.svg"),
+                              "", this);
+    leftBtn->setProperty("CornerBtn", true);
+    QMenu *leftMenu = new QMenu(this);
+    leftBtn->setMenu(leftMenu);
+    setCornerWidget(leftBtn, Qt::TopLeftCorner);
+    connect(leftMenu, &QMenu::aboutToShow,
+            this, &VEditWindow::updateTabListMenu);
+
     // Right corner button
     // Actions
     splitAct = new QAction(QIcon(":/resources/icons/split_window.svg"),
@@ -85,19 +98,6 @@ void VEditWindow::setupCornerWidget()
     setCornerWidget(rightBtn, Qt::TopRightCorner);
     connect(rightMenu, &QMenu::aboutToShow,
             this, &VEditWindow::updateSplitMenu);
-
-    // Left corner button
-    tabListAct = new QActionGroup(this);
-    connect(tabListAct, &QActionGroup::triggered,
-            this, &VEditWindow::tabListJump);
-    leftBtn = new QPushButton(QIcon(":/resources/icons/corner_tablist.svg"),
-                              "", this);
-    leftBtn->setProperty("CornerBtn", true);
-    QMenu *leftMenu = new QMenu(this);
-    leftBtn->setMenu(leftMenu);
-    setCornerWidget(leftBtn, Qt::TopLeftCorner);
-    connect(leftMenu, &QMenu::aboutToShow,
-            this, &VEditWindow::updateTabListMenu);
 }
 
 void VEditWindow::splitWindow()

+ 10 - 2
src/vmdedit.cpp

@@ -243,13 +243,21 @@ void VMdEdit::generateEditOutline()
     // Assume that each block contains only one line
     // Only support # syntax for now
     QRegExp headerReg("(#{1,6})\\s*(\\S.*)");  // Need to trim the spaces
+    int lastLevel = 0;
     for (QTextBlock block = doc->begin(); block != doc->end(); block = block.next()) {
         Q_ASSERT(block.lineCount() == 1);
         if ((block.userState() == HighlightBlockState::Normal) &&
             headerReg.exactMatch(block.text())) {
-            VHeader header(headerReg.cap(1).length(),
-                           headerReg.cap(2).trimmed(), "", block.firstLineNumber());
+            int level = headerReg.cap(1).length();
+            VHeader header(level, headerReg.cap(2).trimmed(),
+                           "", block.firstLineNumber());
+            while (level > lastLevel + 1) {
+                // Insert empty level.
+                m_headers.append(VHeader(++lastLevel, "[EMPTY]",
+                                         "", block.firstLineNumber()));
+            }
             m_headers.append(header);
+            lastLevel = level;
         }
     }