#include #include #include "mainwidget.h" #include "UI/base/xatom-helper.h" #include "ukuistylehelper/ukuistylehelper.h" #include "windowmanager/windowmanager.h" #include "kwindoweffects.h" #include #include "UI/globalsignal.h" #include "UIControl/global/global.h" #include #define UKUI_FONT_SIZE "systemFontSize" Widget *Widget::mutual = nullptr; Widget::Widget(QStringList str, QWidget *parent) : QWidget(parent) { mutual = this; if(QString(qgetenv("XDG_SESSION_TYPE")) == "wayland") { WidgetStyle::isWayland = true; } //单例 Single(str); stateMusicFile(str); int res; res = g_db->initDataBase(); if(res != DB_OP_SUCC) { qDebug() << "数据库加载失败" <<__FILE__<< ","<<__FUNCTION__<<","<<__LINE__; } qDebug() << "数据库加载成功"; initAllComponent(); initGSettings(); allConnect(); //初始化dbus initDbus(); initStyle(); if(!argName.isEmpty()) { int num = argName.size(); switch (num) { case 1: kylin_music_play_request(argName[0]); break; default: break; } } isFirstObject = false; //命令行删除到回收站 process = new QProcess; m_initFinish = true; } Widget::~Widget() { m_miniWidget->deleteLater(); } void Widget::Single(QStringList path) //单例 { QString str; if(path.size() > 1) { str = path[1]; } QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); QString lockPath = homePath.at(0) + "/.config/kylin-music-lock"; int fd = open(lockPath.toUtf8().data(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); if(fd < 0) { exit(1); } if (lockf(fd, F_TLOCK, 0)) { QDBusInterface interface( "org.ukui.kylin_music", "/org/ukui/kylin_music","org.ukui.kylin_music.play", QDBusConnection::sessionBus()); if(path.size() == 1) { interface.call( "kylin_music_play_request", str); } else if(path.size() == 2) { if(str == "-sta" || str == "-state") { QDBusMessage play = interface.call("getState"); if (play.type() == QDBusMessage::ReplyMessage) { QString playStr = play.arguments().takeFirst().toString(); printf("当前播放状态 :%s\n", (playStr.toStdString()).data()); fflush(stdout); } } if(str == "-t" || str == "-title") { QDBusMessage replay = interface.call("getTitle"); if (replay.type() == QDBusMessage::ReplyMessage) { QString replayStr = replay.arguments().takeFirst().toString(); printf("当前播放的歌曲名 :%s\n", (replayStr.toStdString()).data()); fflush(stdout); } } interface.call( "kylin_music_play_request", str); } else if(path.size() == 4) { interface.call( "kylin_music_play_request", str, path[2], path[3]); } exit(0); } isFirstObject = true;//我是首个对象 argName << str; } void Widget::stateMusicFile(QStringList args) { if(args.length() != 2) { return; } QString file = args.at(1); if(!QFileInfo::exists(file)) { return; } QFileInfo files(file); QString type = files.suffix().toLower(); if(MusicFileInformation::getInstance().getMusicType().contains("*." + type)) { playController::getInstance().setPlayListName(ALLMUSIC); } } void Widget::initDbus()//初始化dbus { interface = new QDBusInterface("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", QDBusConnection::sessionBus()); QDBusConnection sessionBus = QDBusConnection::sessionBus(); if(sessionBus.registerService("org.ukui.kylin_music")) { sessionBus.registerObject("/org/ukui/kylin_music",this, QDBusConnection::ExportAllContents); qDebug()<<"初始化DBUS成功"; } else { qDebug()<<"初始化DBUS失败"; } //S3 S4策略 QDBusConnection::systemBus().connect(QString("org.freedesktop.login1"), QString("/org/freedesktop/login1"), QString("org.freedesktop.login1.Manager"), QString("PrepareForShutdown"), this, SLOT(onPrepareForShutdown(bool))); QDBusConnection::systemBus().connect(QString("org.freedesktop.login1"), QString("/org/freedesktop/login1"), QString("org.freedesktop.login1.Manager"), QString("PrepareForSleep"), this, SLOT(onPrepareForSleep(bool))); // 锁屏 QDBusConnection::sessionBus().connect(QString("org.ukui.ScreenSaver"), QString("/"), QString("org.ukui.ScreenSaver"), QString("lock"), this, SLOT(onScreenLock())); QDBusConnection::sessionBus().connect(QString("org.ukui.ScreenSaver"), QString("/"), QString("org.ukui.ScreenSaver"), QString("unlock"), this, SLOT(onScreenUnlock())); //蓝牙控 QDBusConnection::systemBus().connect(QString(), QString("/"), "com.monitorkey.interface", "monitorkey", this, SLOT(client_get(QString))); //插拔 QDBusConnection::sessionBus().connect(QString(), QString( "/"), "org.ukui.media", "sinkPortChanged",this, SLOT(inputDevice_get(QString))); //切换用户 QDBusConnection::sessionBus().connect(QString("org.gnome.SessionManager"), QString("/org/gnome/SessionManager"), QString("org.gnome.SessionManager"), QString("PrepareForSwitchuser"), this, SLOT(slotPrepareForSwitchuser())); DbusAdapter *dbs_adapter = new DbusAdapter; } void Widget::initStyle() { //不接受焦点。解决程序初始化时,空格键控制 播放/暂停 获取不到(Qt::Key_Space)事件 QList list = this->findChildren(); for(QPushButton *btn :list) btn->setFocusPolicy(Qt::NoFocus); QList lists = this->findChildren(); for(QToolButton *btn :lists) btn->setFocusPolicy(Qt::NoFocus); } void Widget::onPrepareForShutdown(bool Shutdown) { // 休眠 KyInfo()<<"onPrepareForShutdown"<slotPlayClicked(); // playController::getInstance().play(); } else if(s == "2" || key == "163") { playController::getInstance().onNextSong(); } else if(s == "3" || key == "165") { playController::getInstance().onPreviousSong(); } } void Widget::inputDevice_get(QString str) { if(playController::getInstance().getState() == playController::PLAY_STATE) { playController::getInstance().pause(); } } void Widget::slotPrepareForSwitchuser() { if(playController::getInstance().getState() == playController::PLAY_STATE) { playController::getInstance().pause(); } } void Widget::changeEvent(QEvent *event) { QWidget::changeEvent(event); // 主窗口需要先获取焦点,否则按键事件(键盘按下、松开)会捕捉不到 if (historyListTable && historyListTable->isHidden()) { this->setFocus(); } if (sideBarWid) { // fix #160022, 在音乐软件打开进行打开文件等操作,软件侧边栏显示异常 sideBarWid->sidecolor(); } } int Widget::kylin_music_play_request(QString cmd1, QString cmd2, QString cmd3) { //无参数,单例触发 if(!this->isActiveWindow()) { KWindowSystem::forceActiveWindow(this->winId()); } if(!m_miniWidget->isActiveWindow()) { KWindowSystem::forceActiveWindow(m_miniWidget->winId()); } if(isFirstObject&&!QFileInfo::exists(cmd1)) { if(cmd1=="-c"||cmd1=="-close") { //------窗口关闭------ this->close(); exit(0); } isFirstObject = false; return 0; } //下一首 if(cmd1 == "-n" || cmd1 == "-next") { //------下一首------- playController::getInstance().onNextSong(); return 0; } //上一首 if(cmd1 == "-b" || cmd1 == "-back") { //-------上一首------ playController::getInstance().onPreviousSong(); return 0; } //暂停 if(cmd1 == "-p" || cmd1 == "-pause") { //------暂停------ playController::getInstance().play(); return 0; } //播放 if(cmd1 == "-s" || cmd1 == "-start") { //------播放------ playController::getInstance().play(); return 0; } if(cmd1=="-i"||cmd1=="-increase") { //------调高音量------ playSongArea->volumeIncrease(); return 0; } if(cmd1=="-r"||cmd1=="-reduce") { //------减少音量------ playSongArea->volumeReduce(); return 0; } if(cmd1=="-sta"||cmd1=="-state") { //------检测当前播放状态 // getState(); return 0; } if(cmd1=="-init"||cmd1=="-initialization") { //------初始化音乐 initMusic(); return 0; } if(cmd1=="-t"||cmd1=="-title") { //------当前播放歌曲名 getTitle(); return 0; } // if(cmd1=="-S"||cmd1=="-Sequential") // { // //------顺序播放------ // playController::getInstance().getPlaylist()->setPlaybackMode(MMediaPlaylist::Sequential); // return 0; // } if(cmd1=="-C"||cmd1=="-CurrentItemInLoop") { //------单曲循环------ playController::getInstance().getPlaylist()->setPlaybackMode(MMediaPlaylist::CurrentItemInLoop); return 0; } if(cmd1=="-L"||cmd1=="-Loop") { //------列表循环------ playController::getInstance().getPlaylist()->setPlaybackMode(MMediaPlaylist::Loop); return 0; } if(cmd1=="-R"||cmd1=="-Random") { //------随机播放------ playController::getInstance().getPlaylist()->setPlaybackMode(MMediaPlaylist::Random); return 0; } if(cmd1=="-m"||cmd1=="-move") { if(cmd2!=""&&cmd3!="") { //------窗口移动------ moveWidget(cmd2, cmd3); return 0; } } if(cmd1=="-c"||cmd1=="-close") { //------窗口关闭------ this->close(); return 0; } QStringList list; list << cmd1; if(list.isEmpty()) { return 0; } importFile(list); playController::getInstance().delayMsecondSetVolume(); return 0; } void Widget::slotText(QString btnText) { listName = btnText; } void Widget::importFile(QStringList list) { // MusicFileInformation::getInstance().addFile(list); // sideBarWid->playListBtn->click(); // playController::getInstance().setPlayListName(ALLMUSIC); if (m_initFinish) { sideBarWid->playListBtn->click(); } musicListTable->addMusicToDatebase(list); QList resList; resList = MusicFileInformation::getInstance().resList; int ret; foreach (const musicDataStruct date, resList) { ret = g_db->addMusicToLocalMusic(date); if(ret == DB_OP_SUCC) { playController::getInstance().addSongToCurList(ALLMUSIC,date.filepath); // musicListTable->selectListChanged(tr("Song List")); if(listName == ALLMUSIC) { Q_EMIT signalRefreshList(ALLMUSIC); } QStringList pathList = getPath(ALLMUSIC); playController::getInstance().setCurPlaylist(ALLMUSIC,pathList); int index = MusicFileInformation::getInstance().findIndexFromPlayList(ALLMUSIC,date.filepath); playController::getInstance().play(ALLMUSIC,index); } } int ref; if(resList.size() > 0) { ref = g_db->getSongInfoListFromDB(resList,ALLMUSIC); if(ref == DB_OP_SUCC) { for(int i = 0;i < list.size();i++) { if(resList.at(i).filepath == list.at(i)) { QStringList pathList = getPath(ALLMUSIC); playController::getInstance().setCurPlaylist(ALLMUSIC,pathList); if(listName == ALLMUSIC) { Q_EMIT signalRefreshList(ALLMUSIC); } int index = MusicFileInformation::getInstance().findIndexFromPlayList(ALLMUSIC,resList.at(i).filepath); if(index == -1) { return; } playController::getInstance().play(ALLMUSIC,index); } } } } } QStringList Widget::getPath(QString playListName) { QStringList path; int ret; QList resList; ret = g_db->getSongInfoListFromDB(resList,playListName); foreach (const musicDataStruct date, resList) { path.append(date.filepath); } return path; } QString Widget::getState() { QString state; if(playController::getInstance().getState() == playController::PlayState::PLAY_STATE) { state = "播放"; } else if(playController::getInstance().getState() == playController::PlayState::PAUSED_STATE) { state = "暂停"; } else if(playController::getInstance().getState() == playController::PlayState::STOP_STATE) { state = "停止"; } return state; } void Widget::slotStateChanged(playController::PlayState state) { // 如果正在播放,阻止锁屏 if(!interface->isValid()) { return; } if(state == playController::PlayState::PLAY_STATE) { QDBusMessage reply = interface->call(QDBus::Block, "Inhibit", "kylin-music", (quint32)0, "music is playing", (quint32)8); m_inhibitValue = reply.arguments().takeFirst().toUInt(); } else { interface->call("Uninhibit", m_inhibitValue); } } void Widget::onScreenLock() { KyInfo() << "getState = " << playController::getInstance().getState(); // 锁屏 if(playController::getInstance().getState() == playController::PLAY_STATE) { KyInfo() << "screenlock pause"; playController::getInstance().pauseOnly(); } } void Widget::onScreenUnlock() { KyInfo() << "getState = " << playController::getInstance().getState(); // 锁屏解锁 #if 0 if(playController::getInstance().getState() == playController::STOP_STATE || playController::getInstance().getState() == playController::PAUSED_STATE) { KyInfo() << "screenunlock play"; playController::getInstance().play(); } #endif } void Widget::initMusic() { QStringList playListName; g_db->getPlayList(playListName); for(auto listName : playListName) { if(listName == FAV) { continue; } sideBarWid->removePlayList(listName); } QList retList; int sef = g_db->getSongInfoListFromDB(retList,FAV); if(sef == DB_OP_SUCC) { for(int i = 0;i < retList.size();i++) { int set = g_db->delMusicFromPlayList(retList.at(i).filepath,FAV); if(set == DB_OP_SUCC) { for(int i = 0; i < retList.size(); i++) { playController::getInstance().removeSongFromCurList(FAV, 0); } } } } QList resList; int ret = g_db->getSongInfoListFromDB(resList,ALLMUSIC); if(ret == DB_OP_SUCC) { for(int i = 0;i < resList.size();i++) { int ref = g_db->delSongFromEveryWhere(resList.at(i).filepath); if(ref == DB_OP_SUCC) { for(int i = 0; i < resList.size(); i++) { playController::getInstance().removeSongFromCurList(ALLMUSIC, 0); } } } } sideBarWid->playListBtn->click(); historyListTable->refreshHistoryTable(); } void Widget::initAllComponent() { // this->setProperty("useSystemStyleBlur", true); this->setAttribute(Qt::WA_TranslucentBackground, true); // this->setWindowFlag(Qt::FramelessWindowHint); setMinimumSize(960,640); this->setWindowTitle(tr("Music Player")); // this->setObjectName("mainWidget"); // this->setWindowIcon(QIcon(":/img/kylin-music.png")); //窗体显示在中间 QRect availableGeometry = qApp->primaryScreen()->availableGeometry(); this->move((availableGeometry.width() - this->width())/2, (availableGeometry.height() - this->height())/2); mainVBoxLayout = new QVBoxLayout(); // musicListTable = new TableBaseView(); QStringList lists; QString playlistName; int res = g_db->getPlayList(lists); if(res == DB_OP_SUCC) { playlistName = playController::getInstance().getPlayListName(); if(playlistName == HISTORY) { playlistName = ALLMUSIC; } if(playlistName == SEARCH) { playlistName = ALLMUSIC; } if(lists.indexOf(playlistName) == -1) { playlistName = ALLMUSIC; } } musicListTable = new TableOne(playlistName,this); playSongArea = new PlaySongArea(this); m_titleBar = new TitleBar(this); m_miniWidget = new miniWidget(); if (Global::isWayland) { kdk::UkuiStyleHelper::self()->removeHeader(this); } else { // 去掉标题栏 MotifWmHints hintt; hintt.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS; hintt.functions = MWM_FUNC_ALL; hintt.decorations = MWM_DECOR_BORDER; KWindowEffects::enableBlurBehind(this->winId(), true); //毛玻璃 XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hintt); // 去掉mini标题栏 MotifWmHints hints; hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS; hints.functions = MWM_FUNC_ALL; hints.decorations = MWM_DECOR_BORDER; XAtomHelper::getInstance()->setWindowMotifHint(m_miniWidget->winId(), hints); } rightVWidget = new QWidget(this); rightVWidget->setLayout(mainVBoxLayout); mainVBoxLayout->addWidget(m_titleBar); // mainVBoxLayout->addSpacing(6); mainVBoxLayout->addWidget(musicListTable); mainVBoxLayout->addWidget(playSongArea,0,Qt::AlignBottom); mainHBoxLayout = new QHBoxLayout(); sideBarWid = new SideBarWidget(this); sideBarWid->setFixedWidth(210); mainHBoxLayout->addWidget(sideBarWid); mainHBoxLayout->addWidget(rightVWidget); mainHBoxLayout->setSpacing(0); mainHBoxLayout->setMargin(0); mainVBoxLayout->setSpacing(0); mainVBoxLayout->setMargin(0); this->resize(960,640); this->setLayout(mainHBoxLayout); historyListTable = new TableHistory((QWidget *)parent()); if (Global::isWayland) { kdk::UkuiStyleHelper::self()->removeHeader(this); } else { MotifWmHints hint; hint.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS; hint.functions = MWM_FUNC_ALL; hint.decorations = MWM_DECOR_BORDER; XAtomHelper::getInstance()->setWindowMotifHint(historyListTable->winId(), hint); } historyListTable->hide(); this->setAutoFillBackground(true); m_quitWindow = new QShortcut(QKeySequence("Ctrl+Q"), this); m_quitWindow->setContext(Qt::WindowShortcut); } void Widget::allConnect() { connect(sideBarWid,&SideBarWidget::playListBtnCliced,musicListTable,&TableOne::selectListChanged); connect(playSongArea,&PlaySongArea::showHistoryListBtnClicked,historyListTable,&TableHistory::showHistroryPlayList); connect(historyListTable,&TableHistory::signalHistoryBtnChecked,playSongArea,&PlaySongArea::slotHistoryBtnChecked); connect(musicListTable,&TableOne::refreshHistoryListSignal,historyListTable,&TableHistory::refreshHistoryTable); connect(sideBarWid,&SideBarWidget::playListRenamed,musicListTable,&TableOne::playListRenamed); connect(sideBarWid,&SideBarWidget::signalPlayAll,musicListTable,&TableOne::playAll); connect(sideBarWid,&SideBarWidget::playListBtnCliced,playSongArea,&PlaySongArea::slotText); connect(m_titleBar->miniBtn,&QPushButton::clicked,this,&Widget::slotShowMiniWidget); connect(m_titleBar->closeBtn,&QPushButton::clicked,this,&Widget::slotClose); connect(g_user_signal, &GlobalUserSignal::sigExit, this, &Widget::slotClose); connect(m_quitWindow, &QShortcut::activated, this, &Widget::slotClose); connect(m_titleBar->minimumBtn,&QPushButton::clicked,this,&Widget::slotShowMinimized); connect(m_titleBar->maximumBtn,&QPushButton::clicked,this,&Widget::slotShowMaximized); //迷你模式槽函数绑定 connect(m_miniWidget->m_recoveryWinBtn,&QPushButton::clicked,this,&Widget::slotRecoverNormalWidget); // connect(m_miniWidget->m_nextBtn,&QPushButton::clicked,this,&Widget::slotPlayNext); // connect(m_miniWidget->m_playStateBtn,&QPushButton::clicked,this,&Widget::slotPlaySong); // connect(m_miniWidget->m_preBtn,&QPushButton::clicked,this,&Widget::slotPlayPre); // connect(m_miniWidget->m_orderBtn,&QPushButton::clicked,this,&Widget::slotPlayModeChanged); connect(m_miniWidget->m_closeBtn,&QPushButton::clicked,this,&Widget::slotCloseMiniWidget); // connect(m_miniWidget->m_loveBtn,&QPushButton::clicked,this,&Widget::slotAddLike); connect(sideBarWid,&SideBarWidget::playListBtnCliced,this,&Widget::slotText); connect(this,&Widget::signalRefreshList,musicListTable,&TableOne::selectListChanged); connect(musicListTable,&TableOne::addILoveFilepathSignal,playSongArea,&PlaySongArea::slotFavIsExixts); connect(musicListTable,&TableOne::removeILoveFilepathSignal,playSongArea,&PlaySongArea::slotFavIsExixts); // connect(playSongArea,&PlaySongArea::signalAddFromFavButton,musicListTable,&TableOne::selectListChanged); // connect(playSongArea,&PlaySongArea::signalDelFromFavButton,musicListTable,&TableOne::selectListChanged); connect(m_miniWidget->m_preBtn,&QPushButton::clicked,playSongArea,&PlaySongArea::slotPrevious); connect(m_miniWidget->m_playStateBtn,&QPushButton::clicked,playSongArea,&PlaySongArea::slotPlayClicked); connect(m_miniWidget->m_nextBtn,&QPushButton::clicked,playSongArea,&PlaySongArea::slotNext); connect(musicListTable,&TableOne::addILoveFilepathSignal,m_miniWidget,&miniWidget::slotFavIsExixts); connect(musicListTable,&TableOne::removeILoveFilepathSignal,m_miniWidget,&miniWidget::slotFavIsExixts); connect(m_miniWidget,&miniWidget::signalFavBtnChange,playSongArea,&PlaySongArea::slotFavBtnChange); connect(playSongArea,&PlaySongArea::signalFavBtnChange,m_miniWidget,&miniWidget::slotFavBtnChange); connect(playSongArea,&PlaySongArea::signalPlayingLab,m_miniWidget,&miniWidget::slotPlayingLab); connect(playSongArea,&PlaySongArea::signalTimeLab,m_miniWidget,&miniWidget::slotTimeLab); connect(playSongArea,&PlaySongArea::signalRefreshFav,musicListTable,&TableOne::selectListChanged); connect(m_miniWidget,&miniWidget::signalRefreshFav,musicListTable,&TableOne::selectListChanged); connect(sideBarWid,&SideBarWidget::playListBtnCliced,m_miniWidget,&miniWidget::slotText); connect(playSongArea,&PlaySongArea::signalPlayingLab,this,&Widget::slotPlayingTitle); connect(m_miniWidget,&miniWidget::signalSpaceKey,playSongArea,&PlaySongArea::slotPlayClicked); connect(this,&Widget::signalSpaceKey,playSongArea,&PlaySongArea::slotPlayClicked); connect(m_titleBar->searchEdit,&SearchEdit::signalReturnPressed,musicListTable,&TableOne::selectListChanged); connect(m_titleBar->searchEdit,&SearchEdit::signalReturnPressed,playSongArea,&PlaySongArea::slotText); connect(m_titleBar->searchEdit,&SearchEdit::signalReturnPressed,this,&Widget::slotText); connect(m_titleBar->searchEdit,&SearchEdit::signalReturnPressed,m_miniWidget,&miniWidget::slotText); connect(musicListTable,&TableOne::signalListSearch,sideBarWid,&SideBarWidget::slotListSearch); connect(m_titleBar->searchEdit,&SearchEdit::signalReturnText,musicListTable,&TableOne::slotReturnText); connect(m_titleBar->searchEdit->m_result->m_MusicView,&MusicSearchListview::signalSearchTexts,musicListTable,&TableOne::slotSearchTexts); connect(m_titleBar->searchEdit->m_result,&SearchResult::signalFilePath,musicListTable,&TableOne::slotFilePath); connect(m_titleBar->searchEdit->m_result,&SearchResult::signalSongListBySinger,musicListTable,&TableOne::slotSongListBySinger); connect(m_titleBar->searchEdit->m_result,&SearchResult::signalSongListByAlbum,musicListTable,&TableOne::slotSongListByAlbum); connect(musicListTable,&TableOne::signalSongListHigh,sideBarWid,&SideBarWidget::slotSongListHigh); connect(m_titleBar->searchEdit,&SearchEdit::signalReturnPressed,musicListTable,&TableOne::slotSearchReturnPressed); connect(&playController::getInstance(),&playController::playerStateChange,this,&Widget::slotStateChanged); } void Widget::initGSettings()//初始化GSettings { //只有非标准字号的控件才需要绑定 connect(this,&Widget::signalSetFontSize,musicListTable,&TableOne::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,playSongArea,&PlaySongArea::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,m_miniWidget,&miniWidget::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,historyListTable,&TableHistory::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,m_titleBar->menumodule,&menuModule::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,sideBarWid->newSonglistPup,&AllPupWindow::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,sideBarWid->newSonglistPup->enterLineEdit,&LabEdit::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,sideBarWid->renameSongListPup,&AllPupWindow::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,sideBarWid->renameSongListPup->enterLineEdit,&LabEdit::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,m_titleBar->searchEdit->m_result,&SearchResult::slotLableSetFontSize); connect(this,&Widget::signalSetFontSize,musicListTable->infoDialog,&MusicInfoDialog::slotLableSetFontSize); if (QGSettings::isSchemaInstalled(FITCONTROLTRANS)) { m_transparencyGSettings = new QGSettings(FITCONTROLTRANS); } if (m_transparencyGSettings != nullptr) { connect(m_transparencyGSettings, &QGSettings::changed, this, [=](const QString &key) { if (key == "transparency") { transparencyChange(); } }); transparencyChange(); } if(QGSettings::isSchemaInstalled(FITTHEMEWINDOWS)) { themeData = new QGSettings(FITTHEMEWINDOWS); if(themeData->get("style-name").toString() == "ukui-dark" || themeData->get("style-name").toString() == "ukui-black"){ WidgetStyle::themeColor = 1; changeDarkTheme(); } else { WidgetStyle::themeColor = 0; changeLightTheme(); } connect(themeData,&QGSettings::changed,this,[=]() { if(themeData->get("style-name").toString() == "ukui-dark" || themeData->get("style-name").toString() == "ukui-black"){ WidgetStyle::themeColor = 1; changeDarkTheme(); } else { WidgetStyle::themeColor = 0; changeLightTheme(); } }); connect(themeData,&QGSettings::changed,this,[=] (const QString &key) { if(key == UKUI_FONT_SIZE) { //获取字号的值 int fontSizeKey = themeData->get(UKUI_FONT_SIZE).toString().toInt(); //发送改变信号 if (fontSizeKey > 0) { Q_EMIT signalSetFontSize(fontSizeKey); } } }); } //启动时设置字号 int fontSizeKey = 11;//系统默认字号,魔鬼数字,自行处理 if (themeData != nullptr) { int fontSizeKeyTmp = themeData->get(UKUI_FONT_SIZE).toString().toInt(); if (fontSizeKeyTmp > 0) { fontSizeKey = fontSizeKeyTmp; } } Q_EMIT signalSetFontSize(fontSizeKey); qDebug()<<"初始化GSettings成功"; } void Widget::resizeEvent(QResizeEvent *event) { int max_w = qApp->primaryScreen()->size().width(); //qApp->primaryScreen()->size().height() - this->height() [计算底边栏的高度] int max_h = qApp->primaryScreen()->size().height() - (qApp->primaryScreen()->size().height() - this->height()); movePlayHistoryWid(); if(this->width() >= max_w && this->height()>= max_h) { m_titleBar->maximumBtn->setIcon(QIcon::fromTheme("window-restore-symbolic")); Minimize = true; m_titleBar->maximumBtn->setToolTip(tr("reduction")); } else if(this->isMaximized() == false || (this->width() < (max_w-20)) || this->height() < (max_h-20)) { Minimize = false; m_titleBar->maximumBtn->setIcon(QIcon::fromTheme("window-maximize-symbolic")); m_titleBar->maximumBtn->setToolTip(tr("maximize")); } QWidget::resizeEvent(event); } void Widget::movePlayHistoryWid() { historyListTable->setFixedSize(320,this->height() - playSongArea->height()); QPoint historyPos = playSongArea->listBtn->mapToGlobal(playSongArea->listBtn->rect().topRight()); QSize size = historyListTable->size(); historyPos.setX(historyPos.x() + 26 - size.width()); historyPos.setY(historyPos.y() - 25 - size.height()); QSize historySize = playSongArea->listBtn->size(); int newPosX = historyPos.x() - 26 + size.width(); int newPosY = historyPos.y() + 30 + size.height(); historyListTable->changePlayHistoryPos(newPosX, newPosY, historySize.width(), historySize.height()); historyListTable->move(historyPos); } void Widget::showMyWindow() { kdk::UkuiStyleHelper::self()->removeHeader(this); show(); // kdk::WindowManager::setGeometry(this->windowHandle(), QRect(0, 0, 960, 640)); } #if 0 void Widget::paintEvent(QPaintEvent *event) { // return QWidget::paintEvent(event); Q_UNUSED(event); QPainter p(this); p.setRenderHint(QPainter::Antialiasing); QPainterPath rectPath; rectPath.addRoundedRect(this->rect(), 0, 0); QStyleOption opt; opt.init(this); QColor mainColor; // KyInfo() << opt.palette.color(QPalette::Base); if (QColor(255,255,255) == opt.palette.color(QPalette::Base) || QColor(248,248,248) == opt.palette.color(QPalette::Base) || QColor(245, 245, 245) == opt.palette.color(QPalette::Base)) { mainColor = QColor(242, 242, 242, m_transparency); } else { mainColor = QColor(20, 20, 20, m_transparency); } p.fillPath(rectPath,QBrush(mainColor)); #if 0 QStyleOption opt; opt.init(this); QPainter p(this); p.setPen(Qt::NoPen); // KyInfo() << "transparency = " << m_transparencyGSettings->get("transparency").toDouble() // << "m_transparency = " << m_transparency; QColor color; color = palette().color(QPalette::Window); color.setAlpha(m_transparency); QPalette pal(this->palette()); pal.setColor(QPalette::Window,QColor(color)); this->setPalette(pal); QBrush brush =QBrush(color); p.setBrush(brush); p.drawRoundedRect(opt.rect,0,0); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); return QWidget::paintEvent(event); #endif } #endif void Widget::transparencyChange() { m_transparency = m_transparencyGSettings->get("transparency").toDouble() * 255; this->update(); } //键盘F1响应唤出用户手册 void Widget::keyPressEvent(QKeyEvent *event) { if(event->key() == Qt::Key_F1) { Q_EMIT signalShowGuide(); } else if(event->key() == Qt::Key_Space) { Q_EMIT signalSpaceKey(); } QWidget::keyPressEvent(event); } void Widget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->setFocus(); } // return Widget::mousePressEvent(event); } void Widget::slotShowMiniWidget() { // 添加过渡动画 QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity"); animation->setDuration(200); animation->setStartValue(1); animation->setEndValue(0); connect(animation, &QPropertyAnimation::valueChanged, [&](QVariant value){ update(); }); connect(animation, &QPropertyAnimation::finished, [&](){ hide(); setWindowOpacity(1); }); QPropertyAnimation *animation_mini = new QPropertyAnimation(m_miniWidget, "windowOpacity"); animation_mini->setDuration(200); animation_mini->setStartValue(0); animation_mini->setEndValue(1); connect(animation_mini, &QPropertyAnimation::valueChanged, [&](QVariant value){ m_miniWidget->update(); }); if (Global::isWayland) { kdk::UkuiStyleHelper::self()->removeHeader(this); kdk::UkuiStyleHelper::self()->removeHeader((QWidget *)m_miniWidget); } m_miniWidget->setWindowOpacity(0); m_miniWidget->showNormal(); m_miniWidget->activateWindow(); animation->start(QAbstractAnimation::DeleteWhenStopped); animation_mini->start(QAbstractAnimation::DeleteWhenStopped); } void Widget::moveWidget(QString newWidth, QString newHeight) { int newX = newWidth.toInt(); int newY = newHeight.toInt(); this->move(newX, newY); } void Widget::slotClose() { interface->call("Uninhibit", m_inhibitValue); this->close(); } void Widget::slotShowMinimized() { if (Global::isWayland) { kdk::UkuiStyleHelper::self()->removeHeader(this); kdk::UkuiStyleHelper::self()->removeHeader((QWidget *)m_miniWidget); } this->showMinimized(); if(Minimize == true) { this->showMaximized(); } else { this->showNormal(); } } void Widget::slotShowMaximized() { if (Global::isWayland) { kdk::UkuiStyleHelper::self()->removeHeader(this); kdk::UkuiStyleHelper::self()->removeHeader(m_miniWidget); } if(Minimize) { showNormal(); Minimize = false; m_titleBar->maximumBtn->setIcon(QIcon::fromTheme("window-maximize-symbolic")); m_titleBar->maximumBtn->setToolTip(tr("maximize")); m_titleBar->maximumBtn->setProperty("isWindowButton", 0x1); m_titleBar->maximumBtn->setProperty("useIconHighlightEffect", 0x2); m_titleBar->maximumBtn->setFlat(true); } else { showMaximized(); Minimize = true; m_titleBar->maximumBtn->setIcon(QIcon::fromTheme("window-restore-symbolic")); m_titleBar->maximumBtn->setToolTip(tr("reduction")); m_titleBar->maximumBtn->setProperty("isWindowButton", 0x1); m_titleBar->maximumBtn->setProperty("useIconHighlightEffect", 0x2); m_titleBar->maximumBtn->setFlat(true); } } /** * @brief Widget::Stop * 如果播放已停止,则不起作用; * 在此之后调用播放应会导致播放从曲目的开头重新开始 */ void Widget::Stop() const { playController::getInstance().stop(); } /** * @brief Widget::VolumeUp * 音量增加 */ void Widget::VolumeUp() const { playSongArea->volumeIncrease(); } /** * @brief Widget::VolumeDown * 音量降低 */ void Widget::VolumeDown() const { playSongArea->volumeReduce(); } /** * @brief Widget::Next * 跳转到曲目列表的下一首曲目。 * 如果没有下一首曲目(并且循环播放和列表播放都关闭),则停止播放。 * 如果播放已暂停或停止,则保持原样。 */ void Widget::Next() const { playController::getInstance().onNextSong(); } /** * 跳转到曲目列表的上一首曲目。 * 如果没有上一首曲目(并且循环播放和列表播放都关闭),则停止播放。 * 如果播放已暂停或停止,则保持原样。 */ void Widget::Previous() const { playController::getInstance().onPreviousSong(); } void Widget::Play() const { playController::getInstance().play(); } /** * @brief Widget::Pause * 如果播放已暫停,则不起作用。 * */ void Widget::Pause() const { playController::getInstance().pauseOnly(); } /** * @brief Widget::PlayPause * 如果播放已暫停,则恢复播放; * 如果播放停止,则开始播放。 */ void Widget::PlayPause() const { if (playController::getInstance().getState() == playController::PlayState::PLAY_STATE) { this->Pause(); } else if (playController::getInstance().getState() == playController::PlayState::PAUSED_STATE) { this->Play(); } } void Widget::slotRecoverNormalWidget() { if (Global::isWayland) { kdk::UkuiStyleHelper::self()->removeHeader(this); } if(Minimize == true) { this->showMaximized(); } else { this->showNormal(); } m_miniWidget->hide(); } void Widget::slotCloseMiniWidget() { this->close(); } void Widget::slotPlayingTitle(QString title) { m_playTitle = title; } QString Widget::getTitle() { qDebug() << "m_playTitle" << m_playTitle; return m_playTitle; } void Widget::slotReturnPressed() { } void Widget::creartFinish() { if (m_creatFinishEnum == MESSAGE) { if (m_creatFinishMsg.isEmpty()) { return; } QMessageBox *warn = new QMessageBox(QMessageBox::Warning,tr("Prompt information"),m_creatFinishMsg.toLocal8Bit().data(),QMessageBox::Yes,Widget::mutual); warn->button(QMessageBox::Yes)->setText("确定"); warn->exec(); } } void Widget::setCreatFinishMsg(QString msg) { m_creatFinishEnum = MESSAGE; m_creatFinishMsg = msg; //如果界面已经显示,调用弹窗 if (!this->isHidden()) { creartFinish(); } } //切换深色主题 void Widget::changeDarkTheme() { sideBarWid->newSonglistPup->dlgcolor(); sideBarWid->renameSongListPup->dlgcolor(); sideBarWid->sidecolor(); playSongArea->playcolor(); m_miniWidget->minicolor(); m_titleBar->titlecolor(); musicListTable->initTableViewStyle(); musicListTable->setHightLightAndSelect(); musicListTable->initStyle(); historyListTable->initStyle(); // historyListTable->noRefreshHistory(); musicListTable->tableView->setAlternatingRowColors(false); musicListTable->tableView->setShowGrid(false); playSongArea->m_volSliderWid->initColor(); playSongArea->m_playBackModeWid->playModecolor(); historyListTable->initStyle(); historyListTable->noRefreshHistory(); } //切换浅色主题 void Widget::changeLightTheme() { sideBarWid->newSonglistPup->dlgcolor(); sideBarWid->renameSongListPup->dlgcolor(); sideBarWid->sidecolor(); playSongArea->playcolor(); m_miniWidget->minicolor(); m_titleBar->titlecolor(); musicListTable->initTableViewStyle(); musicListTable->setHightLightAndSelect(); musicListTable->initStyle(); musicListTable->tableView->setAlternatingRowColors(false); musicListTable->tableView->setShowGrid(false); playSongArea->m_volSliderWid->initColor(); playSongArea->m_playBackModeWid->playModecolor(); historyListTable->initStyle(); historyListTable->noRefreshHistory(); }