RSS

(root)/eeecamtray : 1 : EeeCamTray.cpp

Ā« back to all changes in this revision

Viewing changes to EeeCamTray.cpp

Berkus
2007-11-09 04:10:24
Revision ID: berkus@madfire.net-20071109041024-iq0oo6bacq7y3rz5
InitialĀ checkin.

Show diffs side-by-side

added added

removed removed

 
1
#include "EeeCamTray.h"
 
2
#include <QApplication>
 
3
#include <QtDebug>
 
4
#include <QFile>
 
5
#include <QTimer>
 
6
#include <QMenu>
 
7
 
 
8
EeeCamTray::EeeCamTray()
 
9
        : QSystemTrayIcon()
 
10
{
 
11
        enableAct = new QAction(QIcon(":/CameraOn.png"), tr("Enable camera"), this);
 
12
        connect(enableAct, SIGNAL(triggered()), this, SLOT(enableCamera()));
 
13
        disableAct = new QAction(QIcon(":/CameraOff.png"), tr("Disable camera"), this);
 
14
        connect(disableAct, SIGNAL(triggered()), this, SLOT(disableCamera()));
 
15
        quitAct = new QAction(QIcon(":/Quit.png"), tr("Quit"), this);
 
16
        quitAct->setShortcut(tr("Ctrl+Q"));
 
17
        connect(quitAct, SIGNAL(triggered()), qApp, SLOT(quit()));
 
18
        setContextMenu(new QMenu()); // checkStatus() will fill it in.
 
19
 
 
20
        checkStatus();
 
21
        QTimer *timer = new QTimer(this);
 
22
        connect(timer, SIGNAL(timeout()), this, SLOT(checkStatus()));
 
23
        timer->start(60*1000); // 60 seconds
 
24
}
 
25
 
 
26
/* once-a-minute slot */
 
27
void EeeCamTray::checkStatus()
 
28
{
 
29
        if (cameraIsEnabled())
 
30
        {
 
31
                setIcon(QIcon(":/CameraOn.png"));
 
32
                setToolTip(tr("Eee camera is enabled."));
 
33
                QMenu *menu = contextMenu();
 
34
                menu->clear();
 
35
                menu->addAction(disableAct);
 
36
                menu->addSeparator();
 
37
                menu->addAction(quitAct);
 
38
        }
 
39
        else
 
40
        {
 
41
                setIcon(QIcon(":/CameraOff.png"));
 
42
                setToolTip(tr("Eee camera is disabled."));
 
43
                QMenu *menu = contextMenu();
 
44
                menu->clear();
 
45
                menu->addAction(enableAct);
 
46
                menu->addSeparator();
 
47
                menu->addAction(quitAct);
 
48
        }
 
49
}
 
50
 
 
51
bool EeeCamTray::cameraIsEnabled()
 
52
{
 
53
        qDebug() << "Trying to read camera status.";
 
54
        QFile ioctl("/proc/acpi/asus/camera");
 
55
        if (ioctl.open(QIODevice::ReadOnly|QIODevice::Text|QIODevice::Unbuffered))
 
56
        {
 
57
                char c;
 
58
                if (ioctl.getChar(&c))
 
59
                        return c == '1' ? true : false;
 
60
                else
 
61
                        qDebug() << "** enabling write failed.";
 
62
                ioctl.close();
 
63
        }
 
64
        else
 
65
                qDebug() << "** failed to open control file.";
 
66
        return false; // Can't tell, assume worst.
 
67
}
 
68
 
 
69
void EeeCamTray::enableCamera()
 
70
{
 
71
        qDebug() << "Trying to enable camera input.";
 
72
        QFile ioctl("/proc/acpi/asus/camera");
 
73
        if (ioctl.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Unbuffered))
 
74
        {
 
75
                if (ioctl.putChar('1'))
 
76
                        qDebug() << "** enabling write successful.";
 
77
                else
 
78
                        qDebug() << "** enabling write failed.";
 
79
                ioctl.close();
 
80
        }
 
81
        else
 
82
                qDebug() << "** failed to open control file.";
 
83
 
 
84
        checkStatus();
 
85
}
 
86
 
 
87
void EeeCamTray::disableCamera()
 
88
{
 
89
        qDebug() << "Trying to disable camera input.";
 
90
        QFile ioctl("/proc/acpi/asus/camera");
 
91
        if (ioctl.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Unbuffered))
 
92
        {
 
93
                if (ioctl.putChar('0'))
 
94
                        qDebug() << "** disabling write successful.";
 
95
                else
 
96
                        qDebug() << "** disabling write failed.";
 
97
                ioctl.close();
 
98
        }
 
99
        else
 
100
                qDebug() << "** failed to open control file.";
 
101
 
 
102
        checkStatus();
 
103
}

Loggerhead 1.17 is a web-based interface for Bazaar branches