diff --git a/UI/mainwidget.cpp b/UI/mainwidget.cpp index f9f3b56..397c16e 100644 --- a/UI/mainwidget.cpp +++ b/UI/mainwidget.cpp @@ -771,6 +771,27 @@ void Widget::allConnect() connect(m_titleBar->searchEdit,&SearchEdit::signalReturnPressed,musicListTable,&TableOne::slotSearchReturnPressed); connect(&playController::getInstance(),&playController::playerStateChange,this,&Widget::slotStateChanged); + + // mini模式快捷键 + connect(m_miniWidget, &miniWidget::playPauseKeySignal,playSongArea,&PlaySongArea::slotPlayClicked); + connect(m_miniWidget, &miniWidget::previousPlayKeySignal, playSongArea,&PlaySongArea::slotPrevious); + connect(m_miniWidget, &miniWidget::nextPlayKeySignal, playSongArea,&PlaySongArea::slotNext); + connect(m_miniWidget, &miniWidget::addVolumeKeySignal, this, &Widget::VolumeUp); + connect(m_miniWidget, &miniWidget::downVolumeKeySignal, this, &Widget::VolumeDown); + connect(m_miniWidget, &miniWidget::miniCompleteSwitchKeySignal, this, &Widget::slotRecoverNormalWidget); + connect(m_miniWidget, &miniWidget::loveSongKeySignal, playSongArea, &PlaySongArea::slotFav); + connect(m_miniWidget, &miniWidget::changePlaybackMode,playSongArea,&PlaySongArea::setPlayMode); + + // 快捷键设置 + connect(m_quitWindow, &QShortcut::activated, this, &Widget::slotClose); + connect(this,&Widget::playPauseKeySignal,playSongArea,&PlaySongArea::slotPlayClicked); + connect(this, &Widget::previousPlayKeySignal, playSongArea,&PlaySongArea::slotPrevious); + connect(this, &Widget::nextPlayKeySignal, playSongArea,&PlaySongArea::slotNext); + connect(this, &Widget::addVolumeKeySignal, this, &Widget::VolumeUp); + connect(this, &Widget::downVolumeKeySignal, this, &Widget::VolumeDown); + connect(this, &Widget::miniCompleteSwitchKeySignal, this,&Widget::slotShowMiniWidget); + connect(this, &Widget::loveSongKeySignal, playSongArea, &PlaySongArea::slotFav); + connect(this, &Widget::changePlaybackMode,playSongArea,&PlaySongArea::setPlayMode); } void Widget::initGSettings()//初始化GSettings @@ -963,12 +984,67 @@ void Widget::keyPressEvent(QKeyEvent *event) if(event->key() == Qt::Key_F1) { Q_EMIT signalShowGuide(); + } else if(event->key() == Qt::Key_Space) { + Q_EMIT playPauseKeySignal(); } - else if(event->key() == Qt::Key_Space) - { - Q_EMIT signalSpaceKey(); + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_Left) { + qDebug() << "ctrl+left"; + Q_EMIT previousPlayKeySignal(); } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_Right) { + qDebug() << "ctrl+right"; + Q_EMIT nextPlayKeySignal(); + } + + if (event->key() == Qt::Key_Up) { + qDebug() << "ctrl+up"; + Q_EMIT addVolumeKeySignal(); + } + + if (event->key() == Qt::Key_Down) { + qDebug() << "ctrl+down"; + Q_EMIT downVolumeKeySignal(); + } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_M) { + qDebug() << "ctrl+m"; + Q_EMIT miniCompleteSwitchKeySignal(); + } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_L) { + qDebug() << "ctrl+l"; + Q_EMIT loveSongKeySignal(); + } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_T){ + qDebug() << "ctrl+t"; + if (m_playbackMode == CurrentItemInLoop){ + Q_EMIT changePlaybackMode(3); + m_playbackMode = Loop; + } + else if (m_playbackMode == Loop){ + Q_EMIT changePlaybackMode(4); + m_playbackMode = Random; + } + else if (m_playbackMode == Random){ + Q_EMIT changePlaybackMode(1); + m_playbackMode = CurrentItemInLoop; + } + } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_E) { + qDebug() << "ctrl+E"; + this->m_titleBar->slotFoucusIn(); + } + QWidget::keyPressEvent(event); + +} +Widget::PlaybackMode Widget::playbackMode() const +{ + return m_playbackMode; } void Widget::mousePressEvent(QMouseEvent *event) diff --git a/UI/mainwidget.h b/UI/mainwidget.h index 754b3da..9ad7b7c 100644 --- a/UI/mainwidget.h +++ b/UI/mainwidget.h @@ -51,6 +51,9 @@ class Widget : public QWidget Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.ukui.kylin_music.play") public: + enum PlaybackMode { CurrentItemOnce=0, CurrentItemInLoop, Sequential, Loop, Random }; //播放循环模式枚举 + PlaybackMode playbackMode() const; //获取播放循环模式 + Widget(QStringList str, QWidget *parent = nullptr); ~Widget(); //计算播放历史 @@ -138,6 +141,23 @@ protected: Q_SIGNALS: //空格键控制播放暂停 void signalSpaceKey(); + // Space 控制播放/暂停 + void playPauseKeySignal(); + // Ctrl+Left 控制上一首 + void previousPlayKeySignal(); + // Ctrl+Right 控制下一首 + void nextPlayKeySignal(); + // Ctrl+Up 控制音量增加 + void addVolumeKeySignal(); + // Ctrl+down 控制音量降低 + void downVolumeKeySignal(); + // Ctrl+M 切换 Mini/完整模式 + void miniCompleteSwitchKeySignal(); + // Ctrl+L 将歌曲添加到喜欢歌单 + void loveSongKeySignal(); + //Ctrl+T 切换播放模式 + void changePlaybackMode(int mode); + private: //初始化dbus void initDbus(); @@ -156,10 +176,11 @@ private: QStringList getPath(QString playListName); //初始化音乐 void initMusic(); + PlaybackMode m_playbackMode = Loop; //当前列表的循环模式 private: QDBusInterface *interface; quint32 m_inhibitValue = 0; // 阻止锁屏cookie - + QFocusEvent::Type type = QEvent::FocusIn; QVBoxLayout *mainVBoxLayout = nullptr; QHBoxLayout *mainHBoxLayout = nullptr; TableOne *musicListTable = nullptr; diff --git a/UI/player/miniwidget.cpp b/UI/player/miniwidget.cpp index 9a6c7b9..48bfdc2 100644 --- a/UI/player/miniwidget.cpp +++ b/UI/player/miniwidget.cpp @@ -112,18 +112,60 @@ void miniWidget::leaveEvent(QEvent *) void miniWidget::keyPressEvent(QKeyEvent *event) { - if(event->key() == Qt::Key_Space) - { - Q_EMIT signalSpaceKey(); + if(event->key() == Qt::Key_Space) { + Q_EMIT playPauseKeySignal(); } - else if(event->key() == Qt::Key_Right) - { + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_Left) { + qDebug() << "ctrl+left"; + Q_EMIT previousPlayKeySignal(); + } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_Right) { + qDebug() << "ctrl+right"; + Q_EMIT nextPlayKeySignal(); + } + + if (event->key() == Qt::Key_Up) { + qDebug() << "ctrl+up"; + Q_EMIT addVolumeKeySignal(); + } + + if (event->key() == Qt::Key_Down) { + qDebug() << "ctrl+down"; + Q_EMIT downVolumeKeySignal(); + } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_M) { + qDebug() << "ctrl+m"; + Q_EMIT miniCompleteSwitchKeySignal(); + } + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_L) { + qDebug() << "ctrl+l"; + Q_EMIT loveSongKeySignal(); + } else if(event->key() == Qt::Key_Right) { + return; + } else if(event->key() == Qt::Key_Left) { return; } - else if(event->key() == Qt::Key_Left) - { - return; + + if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_T){ + qDebug() << "ctrl+t"; + if (m_playbackMode == CurrentItemInLoop){ + Q_EMIT changePlaybackMode(3); + m_playbackMode = Loop; + } + else if (m_playbackMode == Loop){ + Q_EMIT changePlaybackMode(4); + m_playbackMode = Random; + } + else if (m_playbackMode == Random){ + Q_EMIT changePlaybackMode(1); + m_playbackMode = CurrentItemInLoop; + } } + QWidget::keyPressEvent(event); } diff --git a/UI/player/miniwidget.h b/UI/player/miniwidget.h index 54959c8..a8ec188 100644 --- a/UI/player/miniwidget.h +++ b/UI/player/miniwidget.h @@ -42,6 +42,7 @@ class miniWidget : public QFrame { Q_OBJECT public: + enum PlaybackMode { CurrentItemOnce=0, CurrentItemInLoop, Sequential, Loop, Random }; //播放循环模式枚举 explicit miniWidget(QWidget *parent = nullptr); void mousePressEvent(QMouseEvent *); @@ -60,7 +61,25 @@ Q_SIGNALS: void signalRefreshFav(QString listName); //空格键控制播放暂停 void signalSpaceKey(); + // Space 控制播放/暂停 + void playPauseKeySignal(); + // Ctrl+Left 控制上一首 + void previousPlayKeySignal(); + // Ctrl+Right 控制下一首 + void nextPlayKeySignal(); + // Ctrl+Up 控制音量增加 + void addVolumeKeySignal(); + // Ctrl+down 控制音量降低 + void downVolumeKeySignal(); + // Ctrl+M 切换 Mini/完整模式 + void miniCompleteSwitchKeySignal(); + // Ctrl+L 将歌曲添加到喜欢歌单 + void loveSongKeySignal(); + //Ctrl+T 切换播放模式 + void changePlaybackMode(int mode); + private: + PlaybackMode m_playbackMode = Loop; //当前列表的循环模式 void initAction(); void initConnect(); //初始化样式 diff --git a/debian/changelog b/debian/changelog index 50b2e56..4f775f1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +kylin-music (1.1.0.47-ok7) yangtze; urgency=medium + + * BUG: 无 + * 任务号:无 + * 需求号:#22231 【快捷键优化】【音乐】新增快捷键调整需求 + * 其他改动说明:无 + * 其他改动影响域:无 + + -- denghao Thu, 02 Nov 2023 10:09:55 +0800 + kylin-music (1.1.0.47-ok6~0743) yangtze; urgency=medium * [BUG]