feat: add ProcessDock process and port manager

This commit is contained in:
王鹏
2026-07-17 09:14:45 +08:00
commit 13bb37585f
22 changed files with 2201 additions and 0 deletions

198
processdock/styles.py Normal file
View File

@@ -0,0 +1,198 @@
APP_STYLE = r"""
* {
font-family: "Microsoft YaHei UI";
color: #202534;
}
QMainWindow, QWidget#AppRoot {
background: #F4F6FA;
}
QFrame#HeaderCard, QFrame#TableCard, QFrame#DetailCard, QFrame#SummaryCard {
background: #FFFFFF;
border: 1px solid #E6E9F0;
border-radius: 14px;
}
QLabel#BrandMark {
color: white;
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #6868E8, stop:1 #4C4CC1);
border-radius: 11px;
font-size: 20px;
font-weight: 700;
}
QLabel#BrandTitle {
color: #171B2A;
font-size: 19px;
font-weight: 700;
}
QLabel#BrandSubtitle, QLabel#MutedLabel, QLabel#CardSubtitle, QLabel#DetailKey {
color: #80899A;
}
QLabel#BrandSubtitle { font-size: 10px; }
QLineEdit#SearchBox {
min-height: 38px;
min-width: 260px;
padding: 0 14px;
background: #F7F8FB;
border: 1px solid #DFE3EB;
border-radius: 9px;
selection-background-color: #6464D9;
}
QLineEdit#SearchBox:focus {
background: #FFFFFF;
border: 1px solid #6262D6;
}
QPushButton {
min-height: 36px;
padding: 0 16px;
border-radius: 9px;
font-weight: 600;
}
QPushButton#PrimaryButton {
color: white;
background: #5B5BD6;
border: 1px solid #5B5BD6;
}
QPushButton#PrimaryButton:hover { background: #4F4FC5; }
QPushButton#SecondaryButton {
background: #FFFFFF;
border: 1px solid #DDE1EA;
}
QPushButton#SecondaryButton:hover { background: #F6F7FB; border-color: #C9CEDA; }
QPushButton#DangerButton {
color: white;
background: #C64B59;
border: 1px solid #C64B59;
}
QPushButton#DangerButton:hover { background: #B33D4B; }
QPushButton#SoftDangerButton {
color: #B53C4A;
background: #FFF1F2;
border: 1px solid #F3CDD2;
}
QPushButton#SoftDangerButton:hover { background: #FDE5E8; }
QPushButton:disabled {
color: #A6ADBA;
background: #F2F4F7;
border-color: #E4E7EC;
}
QCheckBox { spacing: 8px; color: #596273; }
QLabel#CardIcon {
min-width: 38px; max-width: 38px;
min-height: 38px; max-height: 38px;
color: #5858CD;
background: #EEEEFF;
border-radius: 10px;
font-size: 15px;
font-weight: 700;
}
QLabel#CardValue {
color: #1C2130;
font-size: 22px;
font-weight: 700;
}
QLabel#CardTitle { color: #687183; font-size: 11px; }
QLabel#WarningBanner {
color: #8B5A10;
background: #FFF7E5;
border: 1px solid #F2D79A;
border-radius: 9px;
padding: 9px 12px;
}
QLabel#SectionTitle {
color: #202534;
font-size: 15px;
font-weight: 700;
}
QTableView {
background: #FFFFFF;
alternate-background-color: #FBFCFE;
border: none;
gridline-color: transparent;
selection-background-color: #EEF0FF;
selection-color: #202534;
outline: none;
}
QTableView::item {
border-bottom: 1px solid #EEF0F4;
padding: 0 10px;
}
QTableView::item:hover { background: #F7F8FF; }
QHeaderView::section {
color: #70798A;
background: #F7F8FB;
border: none;
border-bottom: 1px solid #E8EAF0;
padding: 9px 8px;
font-size: 10px;
font-weight: 700;
}
QScrollBar:vertical { width: 9px; background: transparent; margin: 3px; }
QScrollBar::handle:vertical { min-height: 30px; background: #CFD4DE; border-radius: 4px; }
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; }
QScrollBar:horizontal { height: 9px; background: transparent; margin: 3px; }
QScrollBar::handle:horizontal { min-width: 30px; background: #CFD4DE; border-radius: 4px; }
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; }
QSplitter::handle { background: transparent; width: 12px; }
QLabel#ProcessAvatar {
color: #FFFFFF;
background: #5B5BD6;
border-radius: 12px;
font-size: 20px;
font-weight: 700;
}
QLabel#ProcessName { font-size: 17px; font-weight: 700; color: #1D2230; }
QLabel#PidBadge {
color: #626B7A;
background: #F0F2F6;
border-radius: 7px;
padding: 3px 7px;
font-family: "Cascadia Mono";
font-size: 9px;
}
QLabel#DetailValue {
color: #242A38;
font-size: 11px;
}
QLabel#PortValue {
color: #4E4EC4;
background: #F0F0FF;
border-radius: 7px;
padding: 7px 9px;
font-family: "Cascadia Mono";
}
QTextEdit#CommandBox {
color: #3D4656;
background: #F7F8FB;
border: 1px solid #E4E7ED;
border-radius: 8px;
padding: 7px;
font-family: "Cascadia Mono";
font-size: 9px;
}
QLabel#LimitedBanner {
color: #805C1B;
background: #FFF7E7;
border-radius: 7px;
padding: 7px;
}
QLabel#EmptyIcon {
color: #6868D7;
background: #EEEEFF;
border-radius: 22px;
font-size: 23px;
font-weight: 700;
}
QLabel#EmptyTitle { color: #343A49; font-size: 14px; font-weight: 700; }
QProgressBar#LoadingBar {
min-height: 3px; max-height: 3px;
border: none; background: #EEEFF4;
}
QProgressBar#LoadingBar::chunk { background: #5B5BD6; }
QLabel#FooterStatus { color: #778092; font-size: 10px; }
QToolTip {
color: #FFFFFF;
background: #252A38;
border: none;
padding: 6px;
}
QMessageBox { background: #FFFFFF; }
"""