From 084e08663582960e3cdd1785074b2f37b93592ef Mon Sep 17 00:00:00 2001 From: Hualet Wang Date: Mon, 2 Sep 2024 23:13:16 +0800 Subject: [PATCH] chore: some code refactory - change CanSplit to a public funtion of TermWidget - change MIN_WIDTH and MIN_HEIGHT of TermWidget to private --- src/main/mainwindow.cpp | 4 ++-- src/views/termwidget.cpp | 36 ++++++++++++++++++++++++++++++++++-- src/views/termwidget.h | 40 ++++++---------------------------------- 3 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/main/mainwindow.cpp b/src/main/mainwindow.cpp index a5dd7308c..0a2bdd79f 100644 --- a/src/main/mainwindow.cpp +++ b/src/main/mainwindow.cpp @@ -1131,7 +1131,7 @@ inline void MainWindow::slotShortcutHorizonzalSplit() // 判读数量是否允许分屏 if (Service::instance()->isCountEnable()) { TermWidgetPage *page = currentPage(); - if (page && CanSplit(page->currentTerminal(), Qt::Vertical)) { + if (page && page->currentTerminal()->canSplit(Qt::Vertical)) { page->split(Qt::Horizontal); return ; } @@ -1144,7 +1144,7 @@ inline void MainWindow::slotShortcutVerticalSplit() // 判读数量是否允许分屏 if (Service::instance()->isCountEnable()) { TermWidgetPage *page = currentPage(); - if (page && CanSplit(page->currentTerminal(), Qt::Horizontal)) { + if (page && page->currentTerminal()->canSplit(Qt::Horizontal)) { page->split(Qt::Vertical); return ; } diff --git a/src/views/termwidget.cpp b/src/views/termwidget.cpp index bdd9d259c..6828439bf 100644 --- a/src/views/termwidget.cpp +++ b/src/views/termwidget.cpp @@ -479,9 +479,9 @@ void TermWidget::addMenuActions(const QPoint &pos) QAction *action = 0; action = m_menu->addAction(tr("Horizontal split"), this, &TermWidget::onHorizontalSplit); - action->setEnabled(CanSplit(this, Qt::Vertical)); + action->setEnabled(canSplit(Qt::Vertical)); action = m_menu->addAction(tr("Vertical split"), this, &TermWidget::onVerticalSplit); - action->setEnabled(CanSplit(this, Qt::Horizontal)); + action->setEnabled(canSplit(Qt::Horizontal)); /******** Modify by n014361 wangpeili 2020-02-21: 增加关闭窗口和关闭其它窗口菜单 ****************/ m_menu->addAction(QObject::tr("Close workspace"), this, &TermWidget::onCloseCurrWorkSpace); @@ -1011,6 +1011,38 @@ bool TermWidget::isInRemoteServer() return false; } +bool TermWidget::canSplit(Qt::Orientation ori) { + qDebug() << "CanSplit:" << ori; + QSplitter *splitter = qobject_cast(this->parentWidget()); + int minimumSize = ori == Qt::Horizontal ? TermWidget::MIN_WIDTH : TermWidget::MIN_HEIGHT; + if (splitter) { + if (splitter->orientation() == ori) { + QList sizes = splitter->sizes(); + // new term has same size portion as the current one. + sizes.append(sizes.at(splitter->indexOf(this))); + + double sum = 0; + for (int i = 0; i < sizes.count(); i++) { + sum += sizes.at(i); + } + + for(int i = 0; i < sizes.count(); i++) { + int totalSize = ori == Qt::Horizontal ? splitter->width() : splitter->height(); + int actualSize = (totalSize) * (sizes.at(i) / sum); + if (actualSize < minimumSize) + return false; + } + } else { + int splitterSize = ori == Qt::Horizontal ? splitter->width() : splitter->height(); + if (splitterSize / 2.0 < minimumSize) + return false; + } + } + + return true; +} + + void TermWidget::setTermOpacity(qreal opacity) { //这里再次判断一遍,因为刚启动时,还是需要判断一次当前是否开启了窗口特效 diff --git a/src/views/termwidget.h b/src/views/termwidget.h index 86ca80450..60831bca3 100644 --- a/src/views/termwidget.h +++ b/src/views/termwidget.h @@ -65,9 +65,7 @@ class TermWidget : public QTermWidget { Q_OBJECT public: - // 9:6 - static const int MIN_WIDTH = 180; - static const int MIN_HEIGHT = 120; + bool canSplit(Qt::Orientation ori); TermWidget(const TermProperties &properties, QWidget *parent = nullptr); ~TermWidget(); @@ -83,6 +81,7 @@ class TermWidget : public QTermWidget * @return */ bool isInRemoteServer(); + public: /** * @brief 设置不透明度 @@ -462,37 +461,10 @@ private slots: QString m_remotePassword; //是否准备远程 bool m_remotePasswordIsReady = false; -}; -static bool CanSplit(TermWidget *term, Qt::Orientation ori) { - qDebug() << "CanSplit:" << term << ori; - QSplitter *splitter = qobject_cast(term->parentWidget()); - int minimumSize = ori == Qt::Horizontal ? TermWidget::MIN_WIDTH : TermWidget::MIN_HEIGHT; - if (splitter) { - if (splitter->orientation() == ori) { - QList sizes = splitter->sizes(); - // new term has same size portion as the current one. - sizes.append(sizes.at(splitter->indexOf(term))); - - double sum = 0; - for (int i = 0; i < sizes.count(); i++) { - sum += sizes.at(i); - } - - for(int i = 0; i < sizes.count(); i++) { - int totalSize = ori == Qt::Horizontal ? splitter->width() : splitter->height(); - int actualSize = (totalSize) * (sizes.at(i) / sum); - if (actualSize < minimumSize) - return false; - } - } else { - int splitterSize = ori == Qt::Horizontal ? splitter->width() : splitter->height(); - if (splitterSize / 2.0 < minimumSize) - return false; - } - } - - return true; -} + // 9:6 + static const int MIN_WIDTH = 180; + static const int MIN_HEIGHT = 120; +}; #endif // TERMWIDGET_H