diff options
-rw-r--r-- | LuminaOS-DragonFly.cpp | 158 | ||||
-rw-r--r-- | libLumina/LuminaXDG.cpp | 8 | ||||
-rw-r--r-- | libLumina/libLumina.pro | 1 | ||||
-rw-r--r-- | lumina-config/mainUI.cpp | 2 | ||||
-rw-r--r-- | lumina-desktop/SettingsMenu.cpp | 2 |
5 files changed, 165 insertions, 6 deletions
diff --git a/LuminaOS-DragonFly.cpp b/LuminaOS-DragonFly.cpp new file mode 100644 index 00000000..39ff21dc --- /dev/null +++ b/LuminaOS-DragonFly.cpp @@ -0,0 +1,158 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifdef __DragonFly__ +#include "LuminaOS.h" +#include <unistd.h> + +//can't read xbrightness settings - assume invalid until set +static int screenbrightness = -1; + +// ==== ExternalDevicePaths() ==== +QStringList LOS::ExternalDevicePaths(){ + //Returns: QStringList[<type>::::<filesystem>::::<path>] + //Note: <type> = [USB, HDRIVE, DVD, SDCARD, UNKNOWN] + QStringList devs = LUtils::getCmdOutput("mount"); + //Now check the output + for(int i=0; i<devs.length(); i++){ + if(devs[i].startsWith("/dev/")){ + QString type = devs[i].section(" on ",0,0); + type.remove("/dev/"); + //Determine the type of hardware device based on the dev node + if(type.startsWith("da")){ type = "USB"; } + else if(type.startsWith("ada")){ type = "HDRIVE"; } + else if(type.startsWith("mmsd")){ type = "SDCARD"; } + else if(type.startsWith("cd")||type.startsWith("acd")){ type="DVD"; } + else{ type = "UNKNOWN"; } + //Now put the device in the proper output format + devs[i] = type+"::::"+devs[i].section("(",1,1).section(",",0,0)+"::::"+devs[i].section(" on ",1,50).section("(",0,0).simplified(); + }else{ + //invalid device - remove it from the list + devs.removeAt(i); + i--; + } + } + return devs; +} + +//Read screen brightness information +int LOS::ScreenBrightness(){ + //Returns: Screen Brightness as a percentage (0-100, with -1 for errors) + if(screenbrightness==-1){ + if(QFile::exists(QDir::homePath()+"/.lumina/.currentxbrightness")){ + int val = LUtils::readFile(QDir::homePath()+"/.lumina/.currentxbrightness").join("").simplified().toInt(); + screenbrightness = val; + } + } + return screenbrightness; +} + +//Set screen brightness +void LOS::setScreenBrightness(int percent){ + //ensure bounds + if(percent<0){percent=0;} + else if(percent>100){ percent=100; } + float pf = percent/100.0; //convert to a decimel + //Run the command + QString cmd = "xbrightness %1"; + cmd = cmd.arg( QString::number( int(65535*pf) ) ); + int ret = LUtils::runCmd(cmd); + //Save the result for later + if(ret!=0){ screenbrightness = -1; } + else{ screenbrightness = percent; } + LUtils::writeFile(QDir::homePath()+"/.lumina/.currentxbrightness", QStringList() << QString::number(screenbrightness), true); +} + +//Read the current volume +int LOS::audioVolume(){ //Returns: audio volume as a percentage (0-100, with -1 for errors) + QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines + int out = -1; + if(!info.isEmpty()){ + int L = info.section(":",1,1).toInt(); + int R = info.section(":",2,2).toInt(); + if(L>R){ out = L; } + else{ out = R; } + } + return out; +} + +//Set the current volume +void LOS::setAudioVolume(int percent){ + if(percent<0){percent=0;} + else if(percent>100){percent=100;} + QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines + if(!info.isEmpty()){ + int L = info.section(":",1,1).toInt(); + int R = info.section(":",2,2).toInt(); + int diff = L-R; + if(diff<0){ R=percent; L=percent+diff; } //R Greater + else{ L=percent; R=percent-diff; } //L Greater or equal + //Check bounds + if(L<0){L=0;}else if(L>100){L=100;} + if(R<0){R=0;}else if(R>100){R=100;} + //Run Command + LUtils::runCmd("mixer vol "+QString::number(L)+":"+QString::number(R)); + } +} + +//Change the current volume a set amount (+ or -) +void LOS::changeAudioVolume(int percentdiff){ + QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines + if(!info.isEmpty()){ + int L = info.section(":",1,1).toInt() + percentdiff; + int R = info.section(":",2,2).toInt() + percentdiff; + //Check bounds + if(L<0){L=0;}else if(L>100){L=100;} + if(R<0){R=0;}else if(R>100){R=100;} + //Run Command + LUtils::runCmd("mixer vol "+QString::number(L)+":"+QString::number(R)); + } +} + +//Check if a graphical audio mixer is installed +bool LOS::hasMixerUtility(){ + return QFile::exists("/usr/local/bin/pc-mixer"); +} + +//Launch the graphical audio mixer utility +void LOS::startMixerUtility(){ + QProcess::startDetached("pc-mixer -notray"); +} + +//System Shutdown +void LOS::systemShutdown(){ //start poweroff sequence + QProcess::startDetached("shutdown -p now"); +} + +//System Restart +void LOS::systemRestart(){ //start reboot sequence + QProcess::startDetached("shutdown -r now"); +} + +//Battery Availability +bool LOS::hasBattery(){ + int val = LUtils::getCmdOutput("apm -l").join("").toInt(); + return (val >= 0 && val <= 100); +} + +//Battery Charge Level +int LOS::batteryCharge(){ //Returns: percent charge (0-100), anything outside that range is counted as an error + int charge = LUtils::getCmdOutput("apm -l").join("").toInt(); + if(charge > 100){ charge = -1; } //invalid charge + return charge; +} + +//Battery Charging State +bool LOS::batteryIsCharging(){ + return (LUtils::getCmdOutput("apm -a").join("").simplified() == "1"); +} + +//Battery Time Remaining +int LOS::batterySecondsLeft(){ //Returns: estimated number of seconds remaining + return LUtils::getCmdOutput("apm -t").join("").toInt(); +} + +#endif diff --git a/libLumina/LuminaXDG.cpp b/libLumina/LuminaXDG.cpp index 8a9696de..e325329e 100644 --- a/libLumina/LuminaXDG.cpp +++ b/libLumina/LuminaXDG.cpp @@ -269,7 +269,7 @@ QIcon LXDG::findIcon(QString iconName, QString fallback){ for(int i=0; i<xdd.length(); i++){ paths << xdd[i]+"/icons"; } - #ifdef __FreeBSD__ + #if defined(__FreeBSD__) || defined(__DragonFly__) paths << "/usr/local/share/pixmaps"; #endif #ifdef __linux__ @@ -287,7 +287,7 @@ QIcon LXDG::findIcon(QString iconName, QString fallback){ //Try to load the icon from /usr/local/share/pixmaps if( ico.isNull() ){ //qDebug() << "Could not find icon:" << iconName; - #ifdef __FreeBSD__ + #if defined(__FreeBSD__) || defined(__DragonFly__) QDir base("/usr/local/share/pixmaps"); #endif #ifdef __linux__ @@ -295,7 +295,7 @@ QIcon LXDG::findIcon(QString iconName, QString fallback){ #endif QStringList matches = base.entryList(QStringList() << "*"+iconName+"*", QDir::Files | QDir::NoDotAndDotDot, QDir::Name); if( !matches.isEmpty() ){ - #ifdef __FreeBSD__ + #if defined(__FreeBSD__) || defined(__DragonFly__) ico = QIcon("/usr/local/share/pixmaps/"+matches[0]); //just use the first match #endif #ifdef __linux__ @@ -305,7 +305,7 @@ QIcon LXDG::findIcon(QString iconName, QString fallback){ //Fallback on a manual search over the default theme directories (hicolor, then oxygen) if( QDir::searchPaths("fallbackicons").isEmpty() ){ //Set the fallback search paths - #ifdef __FreeBSD__ + #if defined(__FreeBSD__) || defined(__DragonFly__) QString base = "/usr/local/share/icons/"; #endif #ifdef __linux__ diff --git a/libLumina/libLumina.pro b/libLumina/libLumina.pro index 9de16637..245fe922 100644 --- a/libLumina/libLumina.pro +++ b/libLumina/libLumina.pro @@ -19,6 +19,7 @@ SOURCES += LuminaXDG.cpp \ LuminaUtils.cpp \ LuminaX11.cpp \ LuminaOS-FreeBSD.cpp \ + LuminaOS-DragonFly.cpp \ LuminaOS-Linux.cpp # new OS support can be added here diff --git a/lumina-config/mainUI.cpp b/lumina-config/mainUI.cpp index 52361ae5..b773925c 100644 --- a/lumina-config/mainUI.cpp +++ b/lumina-config/mainUI.cpp @@ -224,7 +224,7 @@ void MainUI::setupMenus(){ ui->combo_session_wloc->addItem( tr("Cascade"), "CascadePlacement"); ui->combo_session_wloc->addItem( tr("Underneath Mouse"), "UnderMousePlacement"); ui->combo_session_wtheme->clear(); - #ifdef __FreeBSD__ + #if defined(__FreeBSD__) || defined(__DragonFly__) QDir fbdir("/usr/local/share/fluxbox/styles"); #endif #ifdef __linux__ diff --git a/lumina-desktop/SettingsMenu.cpp b/lumina-desktop/SettingsMenu.cpp index 1ff5fe92..6a24764c 100644 --- a/lumina-desktop/SettingsMenu.cpp +++ b/lumina-desktop/SettingsMenu.cpp @@ -18,7 +18,7 @@ SettingsMenu::SettingsMenu() : QMenu(){ act = new QAction( LXDG::findIcon("preferences-desktop",""), tr("Desktop"), this); act->setWhatsThis("lumina-config"); this->addAction(act); - #ifdef __FreeBSD__ + #if defined(__FreeBSD__) || defined(__DragonFly__) if(QFile::exists("/usr/local/bin/qtconfig-qt4")){ #endif #ifdef __linux__ |