Skip to content

Commit

Permalink
src:Add floating window mode and fix tab movement
Browse files Browse the repository at this point in the history
crash.

Signed-off-by: xiaoming <2014500726@smail.xtu.edu.cn>
  • Loading branch information
QQxiaoming committed Nov 8, 2023
1 parent 8742f71 commit b02689a
Show file tree
Hide file tree
Showing 41 changed files with 8,847 additions and 8,576 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## [[Unrelease](https://github.com/QQxiaoming/quardCRT)]

- 增加浮动窗口模式
- 修复移动标签后可能导致的严重崩溃问题
- 增加高级设置选择UI样式为原生风格(单平台用户可能希望使用原生风格,多平台用户可能希望使用统一风格)
- 增加设置中一键清理选择的背景图片功能
- 优化退出应用/关闭会话时的二次确认功能,现在本地Shell会话根据是否有子进程决定是否需要二次确认,其他会话类型不变
Expand Down
481 changes: 243 additions & 238 deletions lang/quardCRT_en_US.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lang/quardCRT_ja_JP.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lang/quardCRT_zh_CN.ts

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions lib/QtFancyTabWidget/fancytabwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ class FancyTabWidget : public QTabWidget
void setAddTabButtonVisible(bool visible) {
addButton->setVisible(visible);
}
void setAddTabButtonHidden(bool hidden) {
addButton->setHidden(hidden);
}

signals:
void tabAddRequested();
Expand Down
481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_arn.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_ast.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_bg.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_ca.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_cs.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_cy.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_da.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_de.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_el.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_es.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_et.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_fr.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_gl.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_he.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_hr.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_hu.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_it.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_ja.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_ko.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_lt.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_nb_NO.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_nl.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_pl.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_pt.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_pt_BR.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_ru.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_si.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_sk.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_tr.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_uk.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_zh_CN.ts

Large diffs are not rendered by default.

481 changes: 243 additions & 238 deletions lib/qtermwidget/translations/qtermwidget_zh_TW.ts

Large diffs are not rendered by default.

97 changes: 89 additions & 8 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,6 @@ MainWindow::MainWindow(QString dir, StartupUIMode mode, QLocale::Language lang,
} else {
QAction *moveToAnotherTabAction = new QAction(tr("Move to another Tab"),this);
menu->addAction(moveToAnotherTabAction);
menu->addSeparator();
connect(moveToAnotherTabAction,&QAction::triggered,this,[=](){
auto moveToAnotherTab = [&](int src,int dst, int index) {
mainWidgetGroupList.at(dst)->sessionTab->addTab(
Expand All @@ -234,6 +233,46 @@ MainWindow::MainWindow(QString dir, StartupUIMode mode, QLocale::Language lang,
moveToAnotherTab(1,0,index);
}
});
QAction *floatAction = new QAction(tr("Floating Window"),this);
menu->addAction(floatAction);
menu->addSeparator();
connect(floatAction,&QAction::triggered,this,[=](){
auto moveToAnotherTab = [&](int src,int dst, int index) {
mainWidgetGroupList.at(dst)->sessionTab->addTab(
mainWidgetGroupList.at(src)->sessionTab->widget(index),
mainWidgetGroupList.at(src)->sessionTab->tabText(index));
mainWidgetGroupList.at(src)->sessionTab->removeTab(index);
mainWidgetGroupList.at(dst)->sessionTab->setCurrentIndex(
mainWidgetGroupList.at(dst)->sessionTab->count()-1);
mainWidgetGroupList.at(src)->sessionTab->setCurrentIndex(
mainWidgetGroupList.at(src)->sessionTab->count()-1);
};
QDialog *dialog = new QDialog(this);
dialog->setWindowFlags(Qt::Tool);
dialog->setLayout(new QVBoxLayout);
MainWidgetGroup *group = new MainWidgetGroup(dialog);
mainWidgetGroupList.append(group);
int newGroup = mainWidgetGroupList.count()-1;
if(mainWidgetGroup == mainWidgetGroupList.at(0)) {
moveToAnotherTab(0,newGroup,index);
} else {
moveToAnotherTab(1,newGroup,index);
}
dialog->layout()->addWidget(group->splitter);
group->sessionTab->setTabBarHidden(true);
group->sessionTab->setAddTabButtonHidden(true);
dialog->setWindowTitle(group->sessionTab->tabTitle(1));
connect(group->sessionTab,&SessionTab::tabTextSet,this,[=](int index, const QString &text){
if(index) dialog->setWindowTitle(text);
});
connect(dialog, &QDialog::finished, this, [=](int result){
MainWidgetGroup *group = mainWidgetGroupList.at(newGroup);
stopSession(group,1,true);
mainWidgetGroupList.removeAt(newGroup);
delete dialog;
});
dialog->show();
});
QAction *copyPathAction = new QAction(tr("Copy Path"),this);
menu->addAction(copyPathAction);
connect(copyPathAction,&QAction::triggered,this,[=](){
Expand Down Expand Up @@ -2097,7 +2136,13 @@ QString MainWindow::startTelnetSession(MainWidgetGroup *group, QString hostname,
if(title == 0 || title == 2) {
sessionsWindow->setLongTitle(newTitle);
sessionsWindow->setShortTitle(newTitle);
group->sessionTab->setTabText(group->sessionTab->indexOf(sessionsWindow->getTermWidget()), sessionsWindow->getTitle());
foreach(MainWidgetGroup *mainWidgetGroup, mainWidgetGroupList) {
int index = mainWidgetGroup->sessionTab->indexOf(sessionsWindow->getTermWidget());
if(index >= 0) {
mainWidgetGroup->sessionTab->setTabText(index, sessionsWindow->getTitle());
break;
}
}
}
});
group->sessionTab->setCurrentIndex(group->sessionTab->count()-1);
Expand All @@ -2124,7 +2169,13 @@ QString MainWindow::startSerialSession(MainWidgetGroup *group, QString portName,
if(title == 0 || title == 2) {
sessionsWindow->setLongTitle(newTitle);
sessionsWindow->setShortTitle(newTitle);
group->sessionTab->setTabText(group->sessionTab->indexOf(sessionsWindow->getTermWidget()), sessionsWindow->getTitle());
foreach(MainWidgetGroup *mainWidgetGroup, mainWidgetGroupList) {
int index = mainWidgetGroup->sessionTab->indexOf(sessionsWindow->getTermWidget());
if(index >= 0) {
mainWidgetGroup->sessionTab->setTabText(index, sessionsWindow->getTitle());
break;
}
}
}
});
group->sessionTab->setCurrentIndex(group->sessionTab->count()-1);
Expand All @@ -2150,7 +2201,13 @@ QString MainWindow::startRawSocketSession(MainWidgetGroup *group, QString hostna
if(title == 0 || title == 2) {
sessionsWindow->setLongTitle(newTitle);
sessionsWindow->setShortTitle(newTitle);
group->sessionTab->setTabText(group->sessionTab->indexOf(sessionsWindow->getTermWidget()), sessionsWindow->getTitle());
foreach(MainWidgetGroup *mainWidgetGroup, mainWidgetGroupList) {
int index = mainWidgetGroup->sessionTab->indexOf(sessionsWindow->getTermWidget());
if(index >= 0) {
mainWidgetGroup->sessionTab->setTabText(index, sessionsWindow->getTitle());
break;
}
}
}
});
group->sessionTab->setCurrentIndex(group->sessionTab->count()-1);
Expand All @@ -2176,7 +2233,13 @@ QString MainWindow::startNamePipeSession(MainWidgetGroup *group, QString pipeNam
if(title == 0 || title == 2) {
sessionsWindow->setLongTitle(newTitle);
sessionsWindow->setShortTitle(newTitle);
group->sessionTab->setTabText(group->sessionTab->indexOf(sessionsWindow->getTermWidget()), sessionsWindow->getTitle());
foreach(MainWidgetGroup *mainWidgetGroup, mainWidgetGroupList) {
int index = mainWidgetGroup->sessionTab->indexOf(sessionsWindow->getTermWidget());
if(index >= 0) {
mainWidgetGroup->sessionTab->setTabText(index, sessionsWindow->getTitle());
break;
}
}
}
});
group->sessionTab->setCurrentIndex(group->sessionTab->count()-1);
Expand Down Expand Up @@ -2253,7 +2316,13 @@ QString MainWindow::startLocalShellSession(MainWidgetGroup *group, const QString
} else {
sessionsWindow->setShortTitle(newTitle);
}
group->sessionTab->setTabText(group->sessionTab->indexOf(sessionsWindow->getTermWidget()), sessionsWindow->getTitle());
foreach(MainWidgetGroup *mainWidgetGroup, mainWidgetGroupList) {
int index = mainWidgetGroup->sessionTab->indexOf(sessionsWindow->getTermWidget());
if(index >= 0) {
mainWidgetGroup->sessionTab->setTabText(index, sessionsWindow->getTitle());
break;
}
}
}
});
group->sessionTab->setCurrentIndex(group->sessionTab->count()-1);
Expand Down Expand Up @@ -2282,7 +2351,13 @@ QString MainWindow::startSSH2Session(MainWidgetGroup *group,
if(title == 0 || title == 2) {
sessionsWindow->setLongTitle(newTitle);
sessionsWindow->setShortTitle(newTitle);
group->sessionTab->setTabText(group->sessionTab->indexOf(sessionsWindow->getTermWidget()), sessionsWindow->getTitle());
foreach(MainWidgetGroup *mainWidgetGroup, mainWidgetGroupList) {
int index = mainWidgetGroup->sessionTab->indexOf(sessionsWindow->getTermWidget());
if(index >= 0) {
mainWidgetGroup->sessionTab->setTabText(index, sessionsWindow->getTitle());
break;
}
}
}
});
group->sessionTab->setCurrentIndex(group->sessionTab->count()-1);
Expand Down Expand Up @@ -2366,7 +2441,13 @@ int MainWindow::cloneCurrentSession(MainWidgetGroup *group, QString name)
} else {
sessionsWindowClone->setShortTitle(newTitle);
}
group->sessionTab->setTabText(group->sessionTab->indexOf(sessionsWindowClone->getTermWidget()), sessionsWindowClone->getTitle());
foreach(MainWidgetGroup *mainWidgetGroup, mainWidgetGroupList) {
int index = mainWidgetGroup->sessionTab->indexOf(sessionsWindowClone->getTermWidget());
if(index >= 0) {
mainWidgetGroup->sessionTab->setTabText(index, sessionsWindowClone->getTitle());
break;
}
}
}
});
group->sessionTab->setCurrentIndex(group->sessionTab->count()-1);
Expand Down
1 change: 1 addition & 0 deletions src/sessiontab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ void SessionTab::setTabText(int index, const QString &text) {
tabTexts.replace(index,text);
titleScrollPos.replace(index,0);
FancyTabWidget::setTabToolTip(index,text);
emit tabTextSet(index, title);
if(titleScrollTimer->isActive()) {
refreshTabText();
} else {
Expand Down
4 changes: 4 additions & 0 deletions src/sessiontab.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include <QVBoxLayout>
#include <QTimer>
#include <QList>
#include <QTabBar>
#include "fancytabwidget.h"

class EmptyTabWidget : public QWidget {
Expand Down Expand Up @@ -64,9 +65,12 @@ class SessionTab : public FancyTabWidget {
int getScrollTitleMode(void) { return scrollTitleMode; }
void setTitleWidth(int width) { titleWidth = width; setScrollTitleMode(scrollTitleMode); }
int getTitleWidth(void) { return titleWidth; }
void setTabBarHidden(bool hide) { tabBar()->setHidden(hide); }
QString tabTitle(int index) { return tabTexts[index]; }

signals:
void showContextMenu(int index, const QPoint& position);
void tabTextSet(int index, const QString &text);

private:
int stringWidth(const QString &string);
Expand Down

0 comments on commit b02689a

Please sign in to comment.