auto judge 0 width/height splitter after changing panel view

This commit is contained in:
Le Tan 2018-04-27 20:36:10 +08:00
parent 960426579b
commit 9c80a9dcae
2 changed files with 98 additions and 5 deletions

View File

@ -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);
}
}

View File

@ -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;