Browse Source

auto judge 0 width/height splitter after changing panel view

Le Tan 7 years ago
parent
commit
9c80a9dcae
2 changed files with 98 additions and 5 deletions
  1. 91 4
      src/vmainwindow.cpp
  2. 7 1
      src/vmainwindow.h

+ 91 - 4
src/vmainwindow.cpp

@@ -91,6 +91,12 @@ VMainWindow::VMainWindow(VSingleInstanceGuard *p_guard, QWidget *p_parent)
         m_panelViewState = PanelViewState::TwoPanels;
     }
 
+    m_panelViewTimer = new QTimer(this);
+    m_panelViewTimer->setSingleShot(true);
+    m_panelViewTimer->setInterval(500);
+    connect(m_panelViewTimer, &QTimer::timeout,
+            this, &VMainWindow::postChangePanelView);
+
     initCaptain();
 
     setupUI();
@@ -2036,21 +2042,21 @@ void VMainWindow::onePanelView()
 {
     m_panelViewState = PanelViewState::SinglePanel;
     g_config->setEnableCompactMode(false);
-    changePanelView(m_panelViewState);
+    changePanelView(m_panelViewState, true);
 }
 
 void VMainWindow::twoPanelView()
 {
     m_panelViewState = PanelViewState::TwoPanels;
     g_config->setEnableCompactMode(false);
-    changePanelView(m_panelViewState);
+    changePanelView(m_panelViewState, true);
 }
 
 void VMainWindow::compactModeView()
 {
     m_panelViewState = PanelViewState::CompactMode;
     g_config->setEnableCompactMode(true);
-    changePanelView(m_panelViewState);
+    changePanelView(m_panelViewState, true);
 }
 
 void VMainWindow::enableCompactMode(bool p_enabled)
@@ -2099,7 +2105,7 @@ void VMainWindow::enableCompactMode(bool p_enabled)
     setTabOrder(directoryTree, m_fileList->getContentWidget());
 }
 
-void VMainWindow::changePanelView(PanelViewState p_state)
+void VMainWindow::changePanelView(PanelViewState p_state, bool p_postCheck)
 {
     switch (p_state) {
     case PanelViewState::ExpandMode:
@@ -2149,6 +2155,10 @@ void VMainWindow::changePanelView(PanelViewState p_state)
     if (p_state != PanelViewState::ExpandMode) {
         expandViewAct->setChecked(false);
     }
+
+    if (p_postCheck) {
+        m_panelViewTimer->start();
+    }
 }
 
 void VMainWindow::updateWindowTitle(const QString &str)
@@ -3285,3 +3295,80 @@ void VMainWindow::setMenuBarVisible(bool p_visible)
         menuBar()->setFixedHeight(0);
     }
 }
+
+void VMainWindow::postChangePanelView()
+{
+    const int minVal = 10;
+    bool needUpdate = false;
+    QList<int> sizes = m_mainSplitter->sizes();
+    switch (m_panelViewState) {
+    case PanelViewState::SinglePanel:
+        if (sizes[1] == 0) {
+            sizes[1] = minVal;
+            needUpdate = true;
+        }
+
+        if (sizes[2] == 0) {
+            sizes[2] = minVal;
+            needUpdate = true;
+        }
+
+        break;
+
+    case PanelViewState::TwoPanels:
+        if (sizes[0] == 0) {
+            sizes[0] = minVal;
+            needUpdate = true;
+        }
+
+        if (sizes[1] == 0) {
+            sizes[1] = minVal;
+            needUpdate = true;
+        }
+
+        if (sizes[2] == 0) {
+            sizes[2] = minVal;
+            needUpdate = true;
+        }
+
+        break;
+
+    case PanelViewState::CompactMode:
+    {
+        if (sizes[0] == 0) {
+            sizes[0] = minVal;
+            needUpdate = true;
+        }
+
+        if (sizes[2] == 0) {
+            sizes[2] = minVal;
+            needUpdate = true;
+        }
+
+        bool naviUpdate = false;
+        QList<int> naviSizes = m_naviSplitter->sizes();
+        if (naviSizes[0] == 0) {
+            naviSizes[0] = minVal;
+            naviUpdate = true;
+        }
+
+        if (naviSizes[1] == 0) {
+            naviSizes[1] = minVal;
+            naviUpdate = true;
+        }
+
+        if (naviUpdate) {
+            m_naviSplitter->setSizes(naviSizes);
+        }
+
+        break;
+    }
+
+    default:
+        break;
+    }
+
+    if (needUpdate) {
+        m_mainSplitter->setSizes(sizes);
+    }
+}

+ 7 - 1
src/vmainwindow.h

@@ -189,6 +189,9 @@ private slots:
     // Activate Universal Entry.
     void activateUniversalEntry();
 
+    // Make sure width of the panel is not zero after changePanelView().
+    void postChangePanelView();
+
 protected:
     void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
 
@@ -271,7 +274,7 @@ private:
 
     // Change the panel view according to @p_state.
     // Will not change m_panelViewState.
-    void changePanelView(PanelViewState p_state);
+    void changePanelView(PanelViewState p_state, bool p_postCheck = false);
 
     // Whether heading sequence is applicable to current tab.
     // Only available for writable Markdown file.
@@ -430,6 +433,9 @@ private:
     // Timer to check the shared memory between instances of VNote.
     QTimer *m_sharedMemTimer;
 
+    // Timer to check the panel size.
+    QTimer *m_panelViewTimer;
+
     // Tray icon.
     QSystemTrayIcon *m_trayIcon;