grim/guifications3
Clone
Summary
Browse
Changes
Graph
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 "[33m"
#define TMS_ATTR_E "[0m"
#define LVL_ATTR_S "[36;1m"
#define LVL_ATTR_E "[0m"
#define CAT_ATTR_S "[35m"
#define CAT_ATTR_E "[0m"
#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
;
}