#include "filemanagewin.h" #include #include #include #include const int ICON_SIZE = 16; const int BTN_SIZE = 40; const int SEARCHLINE_WIDTH = 200; FileManageWin::FileManageWin(QWidget *parent) : QWidget(parent) { setProperty("setWidth", 0); setAutoFillBackground(true); setBackgroundRole(QPalette::Base); m_retreatBtn = new kdk::KToolButton(this); connect(m_retreatBtn, &kdk::KToolButton::clicked, this, &FileManageWin::slotKdkBtnClicked); m_retreatBtn->setIcon(QIcon::fromTheme("go-next-rtl-symbolic")); m_retreatBtn->setFixedSize(BTN_SIZE, BTN_SIZE); m_retreatBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); m_retreatBtn->setToolTip(tr("Go Back")); m_retreatBtn->setType(kdk::KToolButtonType::Flat); m_retreatBtn->setCursor(Qt::PointingHandCursor); m_retreatBtn->setFocusPolicy(Qt::NoFocus); m_retreatBtn->setEnabled(false); m_retreatBtn->hide(); m_forwardBtn = new kdk::KToolButton(this); connect(m_forwardBtn, &kdk::KToolButton::clicked, this, &FileManageWin::slotKdkBtnClicked); m_forwardBtn->setIcon(QIcon::fromTheme("go-next-symbolic")); m_forwardBtn->setFixedSize(BTN_SIZE, BTN_SIZE); m_forwardBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); m_forwardBtn->setToolTip(tr("Go Forward")); m_forwardBtn->setType(kdk::KToolButtonType::Flat); m_forwardBtn->setCursor(Qt::PointingHandCursor); m_forwardBtn->setFocusPolicy(Qt::NoFocus); m_forwardBtn->setEnabled(false); m_forwardBtn->hide(); QFont font; font.setBold(true); //面包屑 m_crumb = new kdk::KBreadCrumb(this); connect(m_crumb, &kdk::KBreadCrumb::currentChanged, this, &FileManageWin::slotCrumbIndexChange); m_crumb->setFont(font); m_crumb->setFlat(true); m_crumb->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); m_searchBtn = new kdk::KToolButton(this); connect(m_searchBtn, &kdk::KToolButton::clicked, this, &FileManageWin::slotKdkBtnClicked); m_searchBtn->setIcon(QIcon::fromTheme("system-search-symbolic")); m_searchBtn->setFixedSize(BTN_SIZE, BTN_SIZE); m_searchBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); m_searchBtn->setToolTip(tr("Search File")); m_searchBtn->setType(kdk::KToolButtonType::Flat); m_searchBtn->setFocusPolicy(Qt::NoFocus); m_searchBtn->setCursor(Qt::PointingHandCursor); m_searchBtn->hide(); m_searchLine = new kdk::KSearchLineEdit(this); connect(m_searchLine, &kdk::KSearchLineEdit::textChanged, this, &FileManageWin::slotSearchTextChanged); m_searchLine->setFixedHeight(BTN_SIZE); m_searchLine->setFixedWidth(0); m_searchLine->setFocusPolicy(Qt::NoFocus); m_searchLine->setClearButtonEnabled(true); m_searchLine->setContextMenuPolicy(Qt::DefaultContextMenu); m_searchLine->installEventFilter(this); m_searchLine->hide(); m_searchLineAnimation = new QPropertyAnimation(this, "setWidth"); connect(m_searchLineAnimation, &QPropertyAnimation::valueChanged, this, &FileManageWin::slotAnimationValueChanged); // 设置动画时长; m_searchLineAnimation->setDuration(200); // 设置动画变化类型; m_searchLineAnimation->setEasingCurve(QEasingCurve::OutQuad); m_editBtn = new kdk::KToolButton(this); connect(m_editBtn, &kdk::KToolButton::clicked, this, &FileManageWin::slotKdkBtnClicked); m_editBtn->setIcon(QIcon::fromTheme("document-edit-symbolic")); m_editBtn->setFixedSize(BTN_SIZE, BTN_SIZE); m_editBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); m_editBtn->setToolTip(tr("Select")); m_editBtn->setType(kdk::KToolButtonType::Flat); m_editBtn->setFocusPolicy(Qt::NoFocus); m_editBtn->setCursor(Qt::PointingHandCursor); m_editBtn->hide(); m_verticalLine = new QFrame(this); m_verticalLine->setLineWidth(1); m_verticalLine->setFixedHeight(16); m_verticalLine->setFrameShape(QFrame::VLine); m_verticalLine->setFrameShadow(QFrame::Raised); m_verticalLine->setFocusPolicy(Qt::NoFocus); m_verticalLine->hide(); //模式 m_modeBtn = new kdk::KToolButton(this); connect(m_modeBtn, &kdk::KToolButton::clicked, this, &FileManageWin::slotKdkBtnClicked); m_modeBtn->setIcon(QIcon::fromTheme("view-grid-symbolic")); m_modeBtn->setFixedSize(BTN_SIZE, BTN_SIZE); m_modeBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); m_modeBtn->setType(kdk::KToolButtonType::Flat); m_modeBtn->setToolTip(tr("List Mode")); m_modeBtn->setFocusPolicy(Qt::NoFocus); m_modeBtn->setCursor(Qt::PointingHandCursor); m_modeBtn->hide(); //刷新 m_refreshBtn = new kdk::KToolButton(this); connect(m_refreshBtn, &kdk::KToolButton::clicked, this, &FileManageWin::slotKdkBtnClicked); m_refreshBtn->setIcon(QIcon::fromTheme("view-refresh-symbolic")); m_refreshBtn->setFixedSize(BTN_SIZE, BTN_SIZE); m_refreshBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); m_refreshBtn->setType(kdk::KToolButtonType::Flat); m_refreshBtn->setToolTip(tr("Refresh")); m_refreshBtn->setFocusPolicy(Qt::NoFocus); m_refreshBtn->setCursor(Qt::PointingHandCursor); m_refreshBtn->hide(); m_statusLab = new QLabel(this); m_statusLab->setText(tr("Select File")); m_statusLab->setFont(font); m_statusLab->setContentsMargins(8, 0, 0, 0); m_statusLab->setFixedHeight(BTN_SIZE); m_statusLab->setFocusPolicy(Qt::NoFocus); m_statusLab->hide(); m_selectBtn = new ClickLabel(this); connect(m_selectBtn, &ClickLabel::clicked, this, &FileManageWin::slotBtnClicked); m_selectBtn->setText(tr("Select All")); m_selectBtn->setStyleSheet("color:#3790FA;"); m_selectBtn->setCursor(Qt::PointingHandCursor); m_selectBtn->setFixedHeight(BTN_SIZE); m_selectBtn->setFocusPolicy(Qt::NoFocus); m_selectBtn->hide(); m_finishBtn = new ClickLabel(this); connect(m_finishBtn, &ClickLabel::clicked, this, &FileManageWin::slotBtnClicked); m_finishBtn->setText(tr("Finish")); m_finishBtn->setStyleSheet("color:#3790FA;"); m_finishBtn->setCursor(Qt::PointingHandCursor); m_finishBtn->setFixedHeight(BTN_SIZE); m_finishBtn->setFocusPolicy(Qt::NoFocus); m_finishBtn->hide(); m_lab1 = new QLabel(this); m_lab1->setFixedSize(16, BTN_SIZE); m_lab1->setStyleSheet("background:transparent"); m_lab2 = new QLabel(this); m_lab2->setFixedSize(28, BTN_SIZE); m_lab2->setStyleSheet("background:transparent"); m_lab3 = new QLabel(this); m_lab3->setFixedSize(12, BTN_SIZE); m_lab3->setStyleSheet("background:transparent"); m_lab4 = new QLabel(this); m_lab4->setFixedSize(12, BTN_SIZE); m_lab4->setStyleSheet("background:transparent"); m_lab5 = new QLabel(this); m_lab5->setFixedSize(12, BTN_SIZE); m_lab5->setStyleSheet("background:transparent"); m_lab6 = new QLabel(this); m_lab6->setFixedSize(12, BTN_SIZE); m_lab6->setStyleSheet("background:transparent"); QHBoxLayout *hLayout = new QHBoxLayout; hLayout->setMargin(0); hLayout->setSpacing(0); hLayout->setAlignment(Qt::AlignBottom); hLayout->addWidget(m_retreatBtn); hLayout->addWidget(m_lab1); hLayout->addWidget(m_forwardBtn); hLayout->addWidget(m_statusLab); hLayout->addWidget(m_lab2); hLayout->addWidget(m_crumb); hLayout->addStretch(); hLayout->addWidget(m_searchBtn); hLayout->addWidget(m_searchLine); hLayout->addWidget(m_lab3); hLayout->addWidget(m_editBtn); hLayout->addWidget(m_selectBtn); hLayout->addWidget(m_lab4); hLayout->addWidget(m_verticalLine); hLayout->addWidget(m_lab5); hLayout->addWidget(m_finishBtn); hLayout->addWidget(m_modeBtn); hLayout->addWidget(m_lab6); hLayout->addWidget(m_refreshBtn); m_loadAnimation = new LoadAnimation(this); m_stackedWin = new QStackedWidget(this); m_stackedWin->setContentsMargins(0, 0, 0, 0); m_stackedWin->addWidget(m_loadAnimation); m_stackedWin->setCurrentIndex(FileManageWin::PageIndex::LoadPage); QVBoxLayout *vLayout = new QVBoxLayout; vLayout->setMargin(0); vLayout->setSpacing(0); vLayout->addLayout(hLayout); vLayout->addWidget(m_stackedWin); setLayout(vLayout); } void FileManageWin::setEditType(bool isSelectAll) { if (isSelectAll) { m_selectBtn->setText(tr("Deselect All")); } else { m_selectBtn->setText(tr("Select All")); } changeTabMode(FileManageWin::TabType::Edit); } void FileManageWin::setWidget(QWidget *win, FileManageWin::TabType type) { m_type = type; changeTabMode(m_type); if (m_stackedWin->count() > 1) { m_stackedWin->removeWidget(m_stackedWin->widget(FileManageWin::PageIndex::InfoPage)); } win->setAcceptDrops(true); m_stackedWin->addWidget(win); m_stackedWin->setCurrentIndex(FileManageWin::PageIndex::InfoPage); } void FileManageWin::pushCrumb(QString str) { m_crumb->addTab(str); m_crumb->setCurrentIndex(m_crumb->count() - 1); } void FileManageWin::clearCrumb() { for (int i = m_crumb->count() - 1; i >= 0; i--) { m_crumb->removeTab(i); } } void FileManageWin::load() { if (m_searchLine->isHidden()) { changeTabMode(FileManageWin::TabType::Load); } m_stackedWin->setCurrentIndex(FileManageWin::PageIndex::LoadPage); if (m_stackedWin->count() > 1) { m_stackedWin->removeWidget(m_stackedWin->widget(FileManageWin::PageIndex::InfoPage)); } } void FileManageWin::setGoBackEnabled(bool isEnabled) { m_retreatBtn->setEnabled(isEnabled); m_retreatBtn->update(); } void FileManageWin::setGoForwardEnabled(bool isEnabled) { m_forwardBtn->setEnabled(isEnabled); m_forwardBtn->update(); } QStringList FileManageWin::getPathList() { QStringList pathList; for (int i = 0; i < m_crumb->count(); i++) { pathList.append(m_crumb->tabText(i)); } return pathList; } QString FileManageWin::crumbText(CrumbTag type) { switch (type) { case CrumbTag::FileList: return m_fileListTag; case CrumbTag::Picture: return m_pictureTag; case CrumbTag::Video: return m_videoTag; case CrumbTag::Music: return m_musicTag; case CrumbTag::Doc: return m_docTag; case CrumbTag::QQ: return m_qqTag; case CrumbTag::WeChat: return m_wechatTag; case CrumbTag::Storage: return m_storageTag; } return ""; } void FileManageWin::changeFontSize(double fontSize) { QFont font; font.setPointSizeF(fontSize); m_selectBtn->setFont(font); m_finishBtn->setFont(font); font.setBold(true); m_statusLab->setFont(font); m_crumb->setFont(font); update(); } bool FileManageWin::eventFilter(QObject *obj, QEvent *event) { if (obj == m_searchLine) { if (m_searchLine->text().isEmpty() && event->type() == QEvent::FocusOut) { m_isSearchLineHiddenIn = true; m_searchLine->clear(); m_searchLineAnimation->setStartValue(SEARCHLINE_WIDTH); m_searchLineAnimation->setEndValue(0); m_searchLineAnimation->start(); } } return QWidget::eventFilter(obj, event); } void FileManageWin::mousePressEvent(QMouseEvent *event) { hideSearchLine(); } void FileManageWin::changeTabMode(FileManageWin::TabType type) { qInfo() << "ChangeTabMode ------------ " << type; // m_retreatBtn->hide(); // m_lab1->hide(); // m_forwardBtn->hide(); // m_statusLab->hide(); // m_lab2->hide(); // m_crumb->hide(); // m_searchBtn->hide(); // m_lab3->hide(); // m_editBtn->hide(); // m_selectBtn->hide(); // m_lab4->hide(); // m_verticalLine->hide(); // m_lab5->hide(); // m_finishBtn->hide(); // m_modeBtn->hide(); // m_lab6->hide(); // m_refreshBtn->hide(); switch (type) { case FileManageWin::TabType::Default: { m_retreatBtn->show(); m_lab1->show(); m_forwardBtn->show(); m_statusLab->hide(); m_lab2->show(); m_crumb->show(); if (m_searchLine->isHidden()) { m_searchBtn->show(); } m_lab3->show(); m_editBtn->show(); m_selectBtn->hide(); m_lab4->show(); m_verticalLine->show(); m_lab5->show(); m_finishBtn->hide(); m_modeBtn->show(); m_lab6->show(); m_refreshBtn->show(); } break; case FileManageWin::TabType::AndroidHomePage: { m_statusLab->setText(crumbText(CrumbTag::FileList)); m_retreatBtn->hide(); m_lab1->show(); m_forwardBtn->hide(); m_statusLab->show(); m_lab2->hide(); m_crumb->hide(); if (m_searchLine->isHidden()) { m_searchBtn->show(); } m_lab3->hide(); m_editBtn->hide(); m_selectBtn->hide(); m_lab4->show(); m_verticalLine->hide(); m_lab5->hide(); m_finishBtn->hide(); m_modeBtn->hide(); m_lab6->hide(); m_refreshBtn->hide(); } break; case FileManageWin::TabType::AppHomePage: { m_retreatBtn->show(); m_lab1->show(); m_forwardBtn->show(); m_statusLab->hide(); m_lab2->show(); m_crumb->show(); if (m_searchLine->isHidden()) { m_searchBtn->show(); } m_lab3->hide(); m_editBtn->hide(); m_selectBtn->hide(); m_lab4->show(); m_verticalLine->hide(); m_lab5->hide(); m_finishBtn->hide(); m_modeBtn->hide(); m_lab6->hide(); m_refreshBtn->hide(); } break; case FileManageWin::TabType::SearchResultsPage: { m_retreatBtn->setEnabled(true); m_retreatBtn->show(); m_lab1->hide(); m_forwardBtn->hide(); m_statusLab->setText(tr("Search File")); m_statusLab->show(); m_lab2->hide(); m_crumb->hide(); if (m_searchLine->isHidden()) { m_searchBtn->show(); } m_lab3->show(); m_editBtn->show(); m_selectBtn->hide(); m_lab4->show(); m_verticalLine->show(); m_lab5->show(); m_finishBtn->hide(); m_modeBtn->show(); m_lab6->show(); m_refreshBtn->show(); m_isSearch = true; } break; case FileManageWin::TabType::Load: { } break; case FileManageWin::TabType::Edit: { m_retreatBtn->hide(); m_lab1->hide(); m_forwardBtn->hide(); m_statusLab->setText(tr("Select File")); m_statusLab->show(); m_lab2->hide(); m_crumb->hide(); m_searchBtn->hide(); m_lab3->show(); m_editBtn->hide(); m_selectBtn->show(); m_lab4->hide(); m_verticalLine->hide(); m_lab5->show(); m_finishBtn->show(); m_modeBtn->hide(); m_lab6->hide(); m_refreshBtn->hide(); } break; } update(); } void FileManageWin::hideSearchLine() { if (m_searchLine->text().isEmpty()) { setFocus(); m_searchLine->setFocusPolicy(Qt::ClickFocus); } } void FileManageWin::slotCrumbIndexChange(int index) { if (index == m_crumb->count() - 1) { return; } hideSearchLine(); load(); QStringList list = getPathList(); for (int i = m_crumb->count() - 1; i > index; i--) { m_crumb->removeTab(i); } Q_EMIT sigCrumbIndexChange(m_crumb->tabText(index), list); } void FileManageWin::slotKdkBtnClicked() { hideSearchLine(); kdk::KToolButton *btn = qobject_cast(sender()); if (btn == m_retreatBtn) { load(); if (m_isSearch) { m_isSearch = false; m_searchLine->clear(); m_isSearchLineHiddenIn = true; m_searchLineAnimation->setStartValue(SEARCHLINE_WIDTH); m_searchLineAnimation->setEndValue(0); m_searchLineAnimation->start(); } else { Q_EMIT sigBtnCliked(FileManageWin::BtnType::GoBacktBtn); } } else if (btn == m_forwardBtn) { load(); Q_EMIT sigBtnCliked(FileManageWin::BtnType::GoForwardBtn); } else if (btn == m_searchBtn) { m_searchBtn->hide(); m_searchLine->show(); m_searchLineAnimation->setStartValue(0); m_searchLineAnimation->setEndValue(SEARCHLINE_WIDTH); m_searchLineAnimation->start(); } else if (btn == m_editBtn) { Q_EMIT sigBtnCliked(FileManageWin::BtnType::EditBtn); changeTabMode(FileManageWin::TabType::Edit); } else if (btn == m_modeBtn) { if (m_isListMode) { Q_EMIT sigBtnCliked(FileManageWin::BtnType::IconModeBtn); m_modeBtn->setIcon(QIcon::fromTheme("view-grid-symbolic")); m_modeBtn->setToolTip(tr("List Mode")); m_isListMode = false; } else { Q_EMIT sigBtnCliked(FileManageWin::BtnType::ListModeBtn); m_modeBtn->setIcon(QIcon::fromTheme("view-list-symbolic")); m_modeBtn->setToolTip(tr("Icon Mode")); m_isListMode = true; } } else if (btn == m_refreshBtn) { if (m_type != FileManageWin::TabType::SearchResultsPage) { Q_EMIT sigBtnCliked(FileManageWin::BtnType::RefreshBtn); } } } void FileManageWin::slotBtnClicked() { hideSearchLine(); ClickLabel *btn = qobject_cast(sender()); if (btn == m_selectBtn) { if (m_selectBtn->text() == tr("Select All")) { m_selectBtn->setText(tr("Deselect All")); Q_EMIT sigBtnCliked(FileManageWin::BtnType::SelectBtn); } else if (m_selectBtn->text() == tr("Deselect All")) { m_selectBtn->setText(tr("Select All")); Q_EMIT sigBtnCliked(FileManageWin::BtnType::CancelSelectBtn); } } else if (btn == m_finishBtn) { Q_EMIT sigBtnCliked(FileManageWin::BtnType::EditFinishBtn); m_selectBtn->hide(); m_finishBtn->hide(); if (m_selectBtn->text() == tr("Deselect All")) { m_selectBtn->setText(tr("Select All")); Q_EMIT sigBtnCliked(FileManageWin::BtnType::CancelSelectBtn); } changeTabMode(m_type); } } void FileManageWin::slotAnimationValueChanged(const QVariant &value) { m_searchLine->setFixedWidth(value.toInt()); if (m_isSearchLineHiddenIn && value.toInt() == 0) { m_searchLine->hide(); changeTabMode(m_type); m_isSearchLineHiddenIn = false; } else if (!m_isSearchLineHiddenIn && value.toInt() == SEARCHLINE_WIDTH) { m_searchLine->setFocus(); } } void FileManageWin::slotSearchTextChanged() { if (m_isSearchLineHiddenIn) { return; } load(); if (m_searchLine->text().isEmpty()) { m_isSearch = false; Q_EMIT sigBtnCliked(FileManageWin::BtnType::ReturnBtn); return; } Q_EMIT sigSearchTextChanged(m_searchLine->text()); }