Browse Source

Added support for naming of fans and saving in KConfig.

Malte Veerman 10 years ago
parent
commit
483336d9a5

+ 1 - 1
CMakeLists.txt

@@ -23,7 +23,7 @@ cmake_policy(SET CMP0037 OLD)
 find_package(ECM REQUIRED)
 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
 
-find_package(KF5 COMPONENTS Auth REQUIRED)
+find_package(KF5 COMPONENTS Auth Config REQUIRED)
 find_package(Qt5DBus)
 
 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)

+ 2 - 1
fancontrol-gui/CMakeLists.txt

@@ -6,7 +6,8 @@ set(Fancontrol-GUI_SRCS src/main.cpp
 set(LIBRARIES ${Qt5Widgets_LIBRARIES}
               ${Qt5Qml_Libraries}
               ${Qt5Quick_LIBRARIES}
-              KF5::Auth)
+              KF5::Auth
+              KF5::ConfigCore)
 
 if(NO_SYSTEMD)
 

+ 3 - 4
fancontrol-gui/src/hwmon.cpp

@@ -22,16 +22,16 @@
 #include <QTextStream>
 #include <QDebug>
 
-Hwmon::Hwmon(const QString &path) : QObject()
+Hwmon::Hwmon(const QString &path, Loader *parent) : QObject(parent)
 {
+    m_parent = parent;
     m_path = path;
     m_index = path.split('/').last().remove("hwmon").toInt();
     QFile nameFile(path + "/name");
     if (nameFile.open(QFile::ReadOnly))
         m_name = QTextStream(&nameFile).readLine();
     else
-        m_name = "Nameless hwmon";
-    emit pathChanged();
+        m_name = path.split('/').last();
 
     QDir dir(m_path);
     QStringList entrys = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
@@ -63,7 +63,6 @@ Hwmon::Hwmon(const QString &path) : QObject()
         if (entry.contains("temp") && entry.contains("input"))
         {
             Temp *newTemp = new Temp(this, index);
-            newTemp->setName(m_name + "/" + newTemp->label());
             connect(this, SIGNAL(sensorsUpdateNeeded()), newTemp, SLOT(update()));
             m_temps << newTemp;
             emit tempsChanged();

+ 7 - 5
fancontrol-gui/src/hwmon.h

@@ -23,17 +23,19 @@
 #include <QObject>
 
 #include "sensors.h"
+#include "loader.h"
 
 class Fan;
 class PwmFan;
 class Temp;
+class Loader;
 
 class Hwmon : public QObject
 {
     Q_OBJECT
-    Q_PROPERTY(QString name READ name NOTIFY pathChanged)
-    Q_PROPERTY(QString path READ path NOTIFY pathChanged)
-    Q_PROPERTY(int index READ index NOTIFY pathChanged)
+    Q_PROPERTY(QString name READ name CONSTANT)
+    Q_PROPERTY(QString path READ path CONSTANT)
+    Q_PROPERTY(int index READ index CONSTANT)
     Q_PROPERTY(QList<QObject *> fans READ fans NOTIFY fansChanged)
     Q_PROPERTY(QList<QObject *> pwmFans READ pwmFans NOTIFY pwmFansChanged)
     Q_PROPERTY(QList<QObject *> temps READ temps NOTIFY tempsChanged)
@@ -41,7 +43,7 @@ class Hwmon : public QObject
 
 public:
 
-    explicit Hwmon(const QString &);
+    explicit Hwmon(const QString &, Loader *parent);
 
     QString name() const { return m_name; }
     QString path() const { return m_path; }
@@ -62,7 +64,6 @@ public slots:
 
 signals:
 
-    void pathChanged();
     void fansChanged();
     void pwmFansChanged();
     void tempsChanged();
@@ -72,6 +73,7 @@ signals:
 
 protected:
 
+    Loader *m_parent;
     QString m_name;
     QString m_path;
     int m_index;

+ 1 - 1
fancontrol-gui/src/loader.cpp

@@ -66,7 +66,7 @@ void Loader::parseHwmons()
 
     foreach (QString hwmonPath, list)
     {
-        Hwmon *hwmon = new Hwmon(QFile::symLinkTarget(hwmonDir.absoluteFilePath(hwmonPath)));
+        Hwmon *hwmon = new Hwmon(QFile::symLinkTarget(hwmonDir.absoluteFilePath(hwmonPath)), this);
         connect(hwmon, SIGNAL(configUpdateNeeded()), this, SLOT(createConfigFile()));
         connect(this, SIGNAL(sensorsUpdateNeeded()), hwmon, SLOT(updateSensors()));
         m_hwmons << hwmon;

+ 1 - 0
fancontrol-gui/src/loader.h

@@ -27,6 +27,7 @@
 
 #include "hwmon.h"
 
+class Hwmon;
 
 class Loader : public QObject
 {

+ 53 - 11
fancontrol-gui/src/sensors.cpp

@@ -20,14 +20,16 @@
 #include "sensors.h"
 #include <QFile>
 #include <QDir>
+#include <KConfigGroup>
 
 Sensor::Sensor(Hwmon *parent, uint index) : QObject(parent)
 {
     m_parent = parent;
     m_index = index;
-    emit indexChanged();
+    m_config = KSharedConfig::openConfig();
 }
 
+
 Fan::Fan(Hwmon *parent, uint index) : Sensor(parent, index)
 {
     if (QDir(parent->path()).isReadable())
@@ -38,7 +40,6 @@ Fan::Fan(Hwmon *parent, uint index) : Sensor(parent, index)
         {
             m_rpmStream.setDevice(rpmFile);
             m_rpmStream >> m_rpm;
-            emit rpmChanged();
 
             setName("fan"+ QString::number(index));
         }
@@ -49,6 +50,27 @@ Fan::Fan(Hwmon *parent, uint index) : Sensor(parent, index)
     }
 }
 
+QString Fan::name() const
+{
+    KConfigGroup names = m_config->group("names");
+    KConfigGroup localNames = names.group(m_parent->name());
+    QString name = localNames.readEntry("fan" + QString::number(m_index), QString());
+    if (name.isEmpty())
+        return "fan" + QString::number(m_index);
+    return name;
+}
+
+void Fan::setName(const QString &name)
+{
+    KConfigGroup names = m_config->group("names");
+    KConfigGroup localNames = names.group(m_parent->name());
+    if (name != localNames.readEntry("fan" + QString::number(m_index), QString()))
+    {
+        localNames.writeEntry("fan" + QString::number(m_index), name);
+        emit nameChanged();
+    }
+}
+
 void Fan::update()
 {
     m_rpmStream.seek(0);
@@ -57,7 +79,6 @@ void Fan::update()
 }
 
 
-
 PwmFan::PwmFan(Hwmon *parent, uint index) : Fan(parent, index)
 {
     m_temp = nullptr;
@@ -86,7 +107,6 @@ PwmFan::PwmFan(Hwmon *parent, uint index) : Fan(parent, index)
         {
             m_pwmStream.setDevice(pwmFile);
             m_pwmStream >> m_pwm;
-            emit pwmChanged();
         }
         else
         {
@@ -103,10 +123,10 @@ void PwmFan::update()
     emit pwmChanged();
 }
 
-void PwmFan::writePwm()
-{
-    m_pwmStream << m_pwm;
-}
+//void PwmFan::writePwm()
+//{
+//    m_pwmStream << m_pwm;
+//}
 
 void PwmFan::reset()
 {
@@ -132,7 +152,6 @@ Temp::Temp(Hwmon *parent, uint index) : Sensor(parent, index)
             m_valueStream.setDevice(valueFile);
             m_valueStream >> m_value;
             m_value /= 1000;
-            emit valueChanged();
         }
         else
             qDebug() << "Can't open valueFile " << parent->path() + "/temp" + QString::number(index) + "_input";
@@ -143,10 +162,33 @@ Temp::Temp(Hwmon *parent, uint index) : Sensor(parent, index)
         }
         else
         {
-            m_label = "temp" + QString::number(index);
             qDebug() << "Can't open labelFile " << parent->path() + "/temp" + QString::number(index) + "_label";
         }
-        emit labelChanged();
+    }
+}
+
+QString Temp::name() const
+{
+    KConfigGroup names = m_config->group("names");
+    KConfigGroup localNames = names.group(m_parent->name());
+    QString name = localNames.readEntry("temp" + QString::number(m_index), QString());
+    if (name.isEmpty())
+    {
+        if (m_label.isEmpty())
+            return "temp" + QString::number(m_index);
+        return m_label;
+    }
+    return name;
+}
+
+void Temp::setName(const QString &name)
+{
+    KConfigGroup names = m_config->group("names");
+    KConfigGroup localNames = names.group(m_parent->name());
+    if (name != localNames.readEntry("temp" + QString::number(m_index), QString()))
+    {
+        localNames.writeEntry(m_parent->name() + "temp" + QString::number(m_index), name);
+        emit nameChanged();
     }
 }
 

+ 13 - 9
fancontrol-gui/src/sensors.h

@@ -23,6 +23,7 @@
 #include <QObject>
 #include <QTextStream>
 #include <QDebug>
+#include <KSharedConfig>
 
 #include "hwmon.h"
 
@@ -31,7 +32,7 @@ class Hwmon;
 class Sensor : public QObject
 {
     Q_OBJECT
-    Q_PROPERTY(uint index READ index NOTIFY indexChanged)
+    Q_PROPERTY(uint index READ index CONSTANT)
     Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
     Q_PROPERTY(Hwmon * parent READ parent CONSTANT)
 
@@ -39,8 +40,8 @@ public:
 
     explicit Sensor(Hwmon *parent, uint index);
 
-    QString name() const { return m_name; }
-    void setName(const QString &name) { if (name != m_name) { m_name = name; emit nameChanged(); } }
+    virtual QString name() const = 0;
+    virtual void setName(const QString &name) = 0;
     Hwmon * parent() const { return m_parent; }
     uint index() const { return m_index; }
 
@@ -53,14 +54,13 @@ public slots:
 signals:
 
     void nameChanged();
-    void indexChanged();
 
 
 protected:
 
-    QString m_name;
     Hwmon *m_parent;
     uint m_index;
+    KSharedConfigPtr m_config;
 };
 
 
@@ -76,6 +76,8 @@ public:
 
     QString label() const { return m_label; }
     int value() const { return m_value; }
+    QString name() const;
+    void setName(const QString &name);
 
 
 public slots:
@@ -107,6 +109,8 @@ public:
     explicit Fan(Hwmon *parent, uint index);
 
     int rpm() const { return m_rpm; }
+    QString name() const;
+    void setName(const QString &name);
 
     virtual int pwm() const { return 0; }
     virtual void setPwm(int) { qDebug() << "setPwm(int) is not implemented in standard Fan"; }
@@ -132,7 +136,7 @@ protected:
 class PwmFan : public Fan
 {
     Q_OBJECT
-    Q_PROPERTY(int pwm READ pwm WRITE setPwm NOTIFY pwmChanged)
+    //Q_PROPERTY(int pwm READ pwm WRITE setPwm NOTIFY pwmChanged)
     Q_PROPERTY(Temp * temp READ temp WRITE setTemp NOTIFY tempChanged)
     Q_PROPERTY(bool hasTemp READ hasTemp WRITE setHasTemp NOTIFY hasTempChanged)
     Q_PROPERTY(int minTemp READ minTemp WRITE setMinTemp NOTIFY minTempChanged)
@@ -146,8 +150,8 @@ public:
 
     explicit PwmFan(Hwmon *parent, uint index);
 
-    int pwm() const { return m_pwm; }
-    void setPwm(int pwm) { if (pwm != m_pwm) { m_pwm = pwm; emit pwmChanged(); writePwm(); } }
+//    int pwm() const { return m_pwm; }
+//    void setPwm(int pwm) { if (pwm != m_pwm) { m_pwm = pwm; emit pwmChanged(); writePwm(); } }
     Temp * temp() const { return m_temp; }
     bool hasTemp() const { return m_hasTemp; }
     int minTemp() const { return m_minTemp; }
@@ -183,7 +187,7 @@ signals:
 protected slots:
 
     void update();
-    void writePwm();
+//    void writePwm();
 
 
 protected:

+ 1 - 1
share/qml/PwmFan.qml

@@ -359,7 +359,7 @@ Rectangle {
             ComboBox {
                 id: tempBox
                 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
-                model: ArrayFunctions.labels(hwmonBox.hwmon.temps)
+                model: ArrayFunctions.names(hwmonBox.hwmon.temps)
                 enabled: hasTempCheckBox.checked
                 onCurrentIndexChanged: { 
                     if (hasTempCheckBox.checked)