grim/guifications3

moved gflib-gtk to the new cmake module
cmake
2010-12-15, Gary Kramlich
b6418db658c1
moved gflib-gtk to the new cmake module
/*
* Guifications - The end-all, be-all notification framework
* Copyright (C) 2003-2009 Gary Kramlich <grim@reaperworld.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 3 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, see <http://www.gnu.org/licenses/>.
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif /* HAVE_CONFIG_H */
#include <stdio.h>
#include <time.h>
#include <gflib/gf_intl.h>
#include <gflib/gf_console_logger.h>
#define GF_CONSOLE_LOGGER_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), GF_TYPE_CONSOLE_LOGGER, GfConsoleLoggerPrivate))
/******************************************************************************
* Constants
*****************************************************************************/
#define TMS_ATTR_S ""
#define TMS_ATTR_E ""
#define LVL_ATTR_S ""
#define LVL_ATTR_E ""
#define CAT_ATTR_S ""
#define CAT_ATTR_E ""
#define MSG_ATTR_S ""
#define MSG_ATTR_E ""
/******************************************************************************
* Enums
*****************************************************************************/
enum {
PROP_ZERO,
PROP_ANSI_COLOR,
PROP_LAST,
};
/******************************************************************************
* Structs
*****************************************************************************/
typedef struct {
gboolean ansi_color;
} GfConsoleLoggerPrivate;
/******************************************************************************
* Globals
*****************************************************************************/
/******************************************************************************
* Log Stuff
*****************************************************************************/
static void
gf_console_logger_write(GfLogger *logger, GfLogLevel level,
const gchar *category, const gchar *format, va_list args)
{
GfConsoleLoggerPrivate *priv = GF_CONSOLE_LOGGER_GET_PRIVATE(logger);
const gchar *lvl = gf_log_level_to_string(level, FALSE);
if(gf_logger_show_timestamps(logger)) {
const gchar *ts_format;
if((ts_format = gf_logger_get_timestamp_format(logger))) {
gchar t_buff[64];
time_t t;
t = time(NULL);
strftime(t_buff, sizeof(t_buff), ts_format, localtime(&t));
if(priv->ansi_color)
printf("%s%s%s ", TMS_ATTR_S, t_buff, TMS_ATTR_E);
else
printf("%s ", t_buff);
}
}
if(priv->ansi_color)
printf("%s%s%s: ", LVL_ATTR_S, lvl, LVL_ATTR_E);
else
printf("%s", lvl);
if(category) {
if(priv->ansi_color)
printf("%s%s%s: ", CAT_ATTR_S, category, CAT_ATTR_E);
else
printf("%s: ", category);
}
vprintf(format, args);
}
/******************************************************************************
* Object Stuff
*****************************************************************************/
static void
gf_console_logger_get_property(GObject *obj, guint param_id, GValue *value,
GParamSpec *pspec)
{
GfConsoleLogger *logger = GF_CONSOLE_LOGGER(obj);
switch(param_id) {
case PROP_ANSI_COLOR:
g_value_set_boolean(value, gf_console_logger_get_use_ansi_color(logger));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
}
}
static void
gf_console_logger_set_property(GObject *obj, guint param_id,
const GValue *value, GParamSpec *pspec)
{
GfConsoleLogger *logger = GF_CONSOLE_LOGGER(obj);
switch(param_id) {
case PROP_ANSI_COLOR:
gf_console_logger_set_use_ansi_color(logger, g_value_get_boolean(value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
}
}
static void
gf_console_logger_class_init(GfLoggerClass *klass) {
GfLoggerClass *logger_class = GF_LOGGER_CLASS(klass);
GObjectClass *obj_class = G_OBJECT_CLASS(klass);
g_type_class_add_private(klass, sizeof(GfConsoleLoggerPrivate));
obj_class->get_property = gf_console_logger_get_property;
obj_class->set_property = gf_console_logger_set_property;
logger_class->write = gf_console_logger_write;
g_object_class_install_property(
obj_class,
PROP_ANSI_COLOR,
g_param_spec_boolean(
"ansicolor",
P_("ANSI Color"),
P_("Whether or not to use ANSI color."),
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
}
/******************************************************************************
* GfLog API
*****************************************************************************/
GType
gf_console_logger_get_type(void) {
static GType type = 0;
if(type == 0) {
static const GTypeInfo info = {
sizeof(GfConsoleLoggerClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc)gf_console_logger_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof(GfConsoleLogger),
0, /* n_preallocs */
NULL, /* instance_init */
};
type = g_type_register_static(GF_TYPE_LOGGER,
"GfConsoleLogger",
&info, 0);
}
return type;
}
/**
* gf_console_logger_new:
*
* Creates a new #GfConsoleLogger instance.
*
* Return Value: The new #GfConsoleLogger instance.
*/
GfLogger *
gf_console_logger_new(void) {
return g_object_new(GF_TYPE_CONSOLE_LOGGER, NULL);
}
/**
* gf_console_logger_set_use_ansi_color:
* @logger: The #GfConsoleLogger.
* @use_color: TRUE to use color, FALSE otherwise.
*
* Sets whether or not @logger will use color in it's output.
*/
void
gf_console_logger_set_use_ansi_color(GfConsoleLogger *logger, gboolean use_color) {
GfConsoleLoggerPrivate *priv = NULL;
g_return_if_fail(GF_IS_CONSOLE_LOGGER(logger));
priv = GF_CONSOLE_LOGGER_GET_PRIVATE(logger);
if(priv->ansi_color == use_color)
return;
priv->ansi_color = use_color;
g_object_notify(G_OBJECT(logger), "ansicolor");
}
/**
* gf_console_logger_get_use_ansi_color:
* @logger: The #GfConsoleLogger.
*
* Get's whether or not @logger is displaying it's output in color.
*
* Return Value: TRUE if @logger is displaying in color, FALSE otherwise.
*/
gboolean
gf_console_logger_get_use_ansi_color(const GfConsoleLogger *logger) {
GfConsoleLoggerPrivate *priv = NULL;
g_return_val_if_fail(GF_IS_CONSOLE_LOGGER(logger), FALSE);
priv = GF_CONSOLE_LOGGER_GET_PRIVATE(logger);
return priv->ansi_color;
}