Permalink
Browse files

Port Lumina to DragonFly

  • Loading branch information...
mneumann committed Sep 11, 2014
1 parent 496ffc4 commit edfecb808a099f6e3d69ab6268dadf36271189e3
Showing with 165 additions and 6 deletions.
  1. +158 −0 LuminaOS-DragonFly.cpp
  2. +4 −4 libLumina/LuminaXDG.cpp
  3. +1 −0 libLumina/libLumina.pro
  4. +1 −1 lumina-config/mainUI.cpp
  5. +1 −1 lumina-desktop/SettingsMenu.cpp
View
@@ -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
View
@@ -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,15 +287,15 @@ 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__
QDir base("/usr/share/pixmaps");
#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__
View
@@ -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
View
@@ -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__
@@ -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__

0 comments on commit edfecb8

Please sign in to comment.