/*
* Copyright (C) 2005 Alex Murray <pragmatine@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef SENSORS_APPLET_H
#define SENSORS_APPLET_H
#include <gtk/gtk.h>
#include <panel-applet.h>
typedef struct _SensorsApplet SensorsApplet;
typedef struct _ActiveSensor ActiveSensor;
#include "prefs-dialog.h"
#define SENSORS_APPLET_ICON PIXMAPS_DIR "sensors-applet-icon.png"
/* device icons */
#define CPU_ICON PIXMAPS_DIR "cpu-icon.png"
#define HDD_ICON PIXMAPS_DIR "hdd-icon.png"
#define BATTERY_ICON PIXMAPS_DIR "battery-icon.png"
#define MEM_ICON PIXMAPS_DIR "memory-icon.png"
#define GPU_ICON PIXMAPS_DIR "gpu-icon.png"
#define GENERIC_ICON PIXMAPS_DIR "generic-icon.png"
#define FAN_ICON PIXMAPS_DIR "fan-icon.png"
#define CASE_ICON PIXMAPS_DIR "case-icon.png"
#define VOLTAGE_ICON NULL
#define DEFAULT_ICON_SIZE 24
typedef enum {
UNUSED = 0, /* as a flag to test against later */
LIBSENSORS,
MBMON,
SMARTCTL,
N_SENSOR_INTERFACES
} SensorInterface;
static const gchar *sensor_interface[] = {
"unused",
"libsensors",
"mbmon",
"smartctl"
};
/* enumeration used to identify columns in the GtkTreeStore data
* structure and to access specific gconf keys too.
*/
enum {
PATH_COLUMN = 0,
ID_COLUMN,
LABEL_COLUMN,
INTERFACE_COLUMN,
SENSOR_TYPE_COLUMN,
ENABLE_COLUMN,
VISIBLE_COLUMN,
ALARM_VALUE_COLUMN,
ALARM_TYPE_COLUMN,
ALARM_ENABLE_COLUMN,
ALARM_COMMAND_COLUMN,
ALARM_TIMEOUT_COLUMN,
MULTIPLIER_COLUMN,
OFFSET_COLUMN,
ICON_FILENAME_COLUMN,
ICON_PIXBUF_COLUMN,
N_COLUMNS
};
typedef enum {
CURRENT_SENSOR = 0,
FAN_SENSOR,
TEMP_SENSOR,
VOLTAGE_SENSOR
} SensorType;
/* for display mode */
typedef enum {
DISPLAY_NONE = 0,
DISPLAY_LABEL,
DISPLAY_ICON,
} DisplayMode;
/* alarm types */
typedef enum {
ALARM_WHEN_VALUE_GREATER_THAN_THRESHOLD = 0,
ALARM_WHEN_VALUE_LESS_THAN_THRESHOLD
} AlarmType;
/* for identifying font sizes */
typedef enum {
XX_LARGE = 0,
X_LARGE,
LARGE,
MEDIUM,
SMALL,
X_SMALL,
XX_SMALL
} FontSize;
/* constants for scaling icons as font size changes */
typedef enum {
XX_SMALL_ICON_SIZE = 12,
X_SMALL_ICON_SIZE = 16,
SMALL_ICON_SIZE = 20,
MEDIUM_ICON_SIZE = 24,
LARGE_ICON_SIZE = 28,
X_LARGE_ICON_SIZE = 32,
XX_LARGE_ICON_SIZE = 36
} IconSize;
/* should always return the value in degrees celcius, revolutions per
* minute, volts, amps, etc */
typedef gdouble (*GetSensorValueFunction)(const gchar *path,
const gchar *id,
SensorType type,
GError **error);
struct _SensorsApplet {
/* the actual applet for this instance */
PanelApplet* applet;
GtkTreeStore *sensors;
GtkTreeSelection *selection;
GetSensorValueFunction get_sensor_value[N_SENSOR_INTERFACES];
guint timeout_id;
/* preferences and about windows (if Gtk < 2.6)*/
#ifndef HAVE_GTK_26
GtkWidget *about_dialog;
#endif
GtkDialog *prefs_dialog;
/* primary table to contain the panel dispay - we pack the
* list of labels and sensor values into this container */
GtkWidget *table;
GList *active_sensors;
GtkTooltips *tooltips;
/* list of gchar* to the alarm commands, which have been
* allocated for each active alarm - these are then freed when
* the alarm is turned off */
GSList *alarm_commands;
};
#define XX_LARGE_TEXT "xx-large"
#define X_LARGE_TEXT "x-large"
#define LARGE_TEXT "large"
#define MEDIUM_TEXT "medium"
#define SMALL_TEXT "small"
#define X_SMALL_TEXT "x-small"
#define XX_SMALL_TEXT "xx-small"
/* non-static function prototypes */
void sensors_applet_init(SensorsApplet *sensors_applet);
void sensors_applet_sensor_enabled(SensorsApplet *sensors_applet,
GtkTreePath *path);
void sensors_applet_sensor_disabled(SensorsApplet *sensors_applet,
GtkTreePath *path);
void sensors_applet_update_active_sensors(SensorsApplet *sensors_applet);
void sensors_applet_register_sensors_interface(SensorsApplet *sensors_applet,
SensorInterface interface,
GetSensorValueFunction get_sensor_value_function);
gboolean sensors_applet_add_sensor_full_details(SensorsApplet *sensors_applet,
const gchar *path,
const gchar *id,
const gchar *label,
SensorInterface interface,
SensorType type,
gboolean enable,
gdouble alarm_value,
AlarmType alarm_type,
gboolean alarm_enable,
const gchar *alarm_command,
gint alarm_timeout,
gdouble multiplier,
gdouble offset,
const gchar *icon_filename);
gboolean sensors_applet_add_sensor(SensorsApplet *sensors_applet,
const gchar *path,
const gchar *id,
const gchar *label,
SensorInterface interface,
gboolean enable,
SensorType type,
const gchar *icon_filename);
/**
* to be called by things like prefs dialog to turn off a sensor alarm
*/
void sensors_applet_alarm_off(SensorsApplet *sensors_applet, GtkTreePath *path);
void sensors_applet_update_sensor(SensorsApplet *sensors_applet,
GtkTreePath *path);
void sensors_applet_display_layout_changed(SensorsApplet *sensors_applet);
void sensors_applet_icon_changed(SensorsApplet *sensors_applet,
GtkTreePath *path);
#endif /* SENSORS_APPLET_H */
syntax highlighted by Code2HTML, v. 0.9.1