mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-gtk: always show time for start column
But allow hiding it for the duration column.
This commit is contained in:
@ -66,6 +66,7 @@
|
||||
<template class="GtkListItem">
|
||||
<property name="child">
|
||||
<object class="SysprofTimeLabel">
|
||||
<property name="show-zero">false</property>
|
||||
<binding name="duration">
|
||||
<lookup name="duration" type="SysprofDocumentMark">
|
||||
<lookup name="item">GtkListItem</lookup>
|
||||
|
||||
@ -29,6 +29,9 @@ G_BEGIN_DECLS
|
||||
G_DECLARE_FINAL_TYPE (SysprofTimeLabel, sysprof_time_label, SYSPROF, TIME_LABEL, GtkWidget)
|
||||
|
||||
GtkWidget *sysprof_time_label_new (void);
|
||||
gboolean sysprof_time_label_get_show_zero (SysprofTimeLabel *self);
|
||||
void sysprof_time_label_set_show_zero (SysprofTimeLabel *self,
|
||||
gboolean show_zero);
|
||||
gint64 sysprof_time_label_get_duration (SysprofTimeLabel *self);
|
||||
void sysprof_time_label_set_duration (SysprofTimeLabel *self,
|
||||
gint64 duration);
|
||||
|
||||
@ -30,12 +30,14 @@ struct _SysprofTimeLabel
|
||||
GtkLabel *label;
|
||||
gint64 t;
|
||||
guint mode : 1;
|
||||
guint show_zero : 1;
|
||||
};
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_TIME_OFFSET,
|
||||
PROP_DURATION,
|
||||
PROP_TIME_OFFSET,
|
||||
PROP_SHOW_ZERO,
|
||||
N_PROPS
|
||||
};
|
||||
|
||||
@ -76,6 +78,10 @@ sysprof_time_label_get_property (GObject *object,
|
||||
g_value_set_int64 (value, sysprof_time_label_get_duration (self));
|
||||
break;
|
||||
|
||||
case PROP_SHOW_ZERO:
|
||||
g_value_set_boolean (value, sysprof_time_label_get_show_zero (self));
|
||||
break;
|
||||
|
||||
case PROP_TIME_OFFSET:
|
||||
g_value_set_int64 (value, sysprof_time_label_get_time_offset (self));
|
||||
break;
|
||||
@ -99,6 +105,10 @@ sysprof_time_label_set_property (GObject *object,
|
||||
sysprof_time_label_set_duration (self, g_value_get_int64 (value));
|
||||
break;
|
||||
|
||||
case PROP_SHOW_ZERO:
|
||||
sysprof_time_label_set_show_zero (self, g_value_get_boolean (value));
|
||||
break;
|
||||
|
||||
case PROP_TIME_OFFSET:
|
||||
sysprof_time_label_set_time_offset (self, g_value_get_int64 (value));
|
||||
break;
|
||||
@ -123,6 +133,11 @@ sysprof_time_label_class_init (SysprofTimeLabelClass *klass)
|
||||
G_MININT64, G_MAXINT64, 0,
|
||||
(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
properties[PROP_SHOW_ZERO] =
|
||||
g_param_spec_boolean ("show-zero", NULL, NULL,
|
||||
TRUE,
|
||||
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
properties [PROP_TIME_OFFSET] =
|
||||
g_param_spec_int64 ("time-offset", NULL, NULL,
|
||||
G_MININT64, G_MAXINT64, 0,
|
||||
@ -138,11 +153,17 @@ static void
|
||||
sysprof_time_label_init (SysprofTimeLabel *self)
|
||||
{
|
||||
static const char *css_classes[] = {"numeric", NULL};
|
||||
char str[32];
|
||||
|
||||
self->show_zero = TRUE;
|
||||
|
||||
g_snprintf (str, sizeof str, "%.3lfs", .0);
|
||||
|
||||
self->label = g_object_new (GTK_TYPE_LABEL,
|
||||
"css-classes", css_classes,
|
||||
"xalign", 1.f,
|
||||
"single-line-mode", TRUE,
|
||||
"label", str,
|
||||
NULL);
|
||||
gtk_widget_set_parent (GTK_WIDGET (self->label), GTK_WIDGET (self));
|
||||
}
|
||||
@ -164,8 +185,10 @@ sysprof_time_label_set_internal (SysprofTimeLabel *self,
|
||||
{
|
||||
char str[32];
|
||||
|
||||
if (t == 0)
|
||||
if (t == 0 && !self->show_zero)
|
||||
str[0] = 0;
|
||||
else if (t == 0)
|
||||
g_snprintf (str, sizeof str, "%.3lfs", .0);
|
||||
else if (t < 1000000)
|
||||
g_snprintf (str, sizeof str, "%.3lfμs", t/1000.);
|
||||
else if (t < SYSPROF_NSEC_PER_SEC)
|
||||
@ -215,3 +238,39 @@ sysprof_time_label_set_time_offset (SysprofTimeLabel *self,
|
||||
{
|
||||
sysprof_time_label_set_internal (self, time_offset, MODE_TIME_OFFSET);
|
||||
}
|
||||
|
||||
gboolean
|
||||
sysprof_time_label_get_show_zero (SysprofTimeLabel *self)
|
||||
{
|
||||
g_return_val_if_fail (SYSPROF_IS_TIME_LABEL (self), FALSE);
|
||||
|
||||
return self->show_zero;
|
||||
}
|
||||
|
||||
void
|
||||
sysprof_time_label_set_show_zero (SysprofTimeLabel *self,
|
||||
gboolean show_zero)
|
||||
{
|
||||
g_return_if_fail (SYSPROF_IS_TIME_LABEL (self));
|
||||
|
||||
show_zero = !!show_zero;
|
||||
|
||||
if (self->show_zero != show_zero)
|
||||
{
|
||||
self->show_zero = show_zero;
|
||||
|
||||
if (self->t == 0)
|
||||
{
|
||||
char str[32];
|
||||
|
||||
g_snprintf (str, sizeof str, "%0.3lfs", .0);
|
||||
|
||||
if (show_zero)
|
||||
gtk_label_set_label (self->label, str);
|
||||
else
|
||||
gtk_label_set_label (self->label, NULL);
|
||||
}
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_ZERO]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user