date-chooser: Add the show-selected-week property
If enabled, the selected week will be made visible.
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
7b5a934250
commit
9911386706
@@ -44,6 +44,7 @@ struct _GcalDateChooser
|
|||||||
GtkWidget *cols[COLS];
|
GtkWidget *cols[COLS];
|
||||||
GtkWidget *rows[ROWS];
|
GtkWidget *rows[ROWS];
|
||||||
GtkWidget *days[ROWS][COLS];
|
GtkWidget *days[ROWS][COLS];
|
||||||
|
GtkWidget *week[ROWS];
|
||||||
|
|
||||||
GDateTime *date;
|
GDateTime *date;
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ struct _GcalDateChooser
|
|||||||
gboolean show_heading;
|
gboolean show_heading;
|
||||||
gboolean show_day_names;
|
gboolean show_day_names;
|
||||||
gboolean show_week_numbers;
|
gboolean show_week_numbers;
|
||||||
|
gboolean show_selected_week;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (GcalDateChooser, gcal_date_chooser, ADW_TYPE_BIN)
|
G_DEFINE_TYPE (GcalDateChooser, gcal_date_chooser, ADW_TYPE_BIN)
|
||||||
@@ -70,6 +72,7 @@ enum
|
|||||||
PROP_SHOW_HEADING,
|
PROP_SHOW_HEADING,
|
||||||
PROP_SHOW_DAY_NAMES,
|
PROP_SHOW_DAY_NAMES,
|
||||||
PROP_SHOW_WEEK_NUMBERS,
|
PROP_SHOW_WEEK_NUMBERS,
|
||||||
|
PROP_SHOW_SELECTED_WEEK,
|
||||||
NUM_PROPERTIES
|
NUM_PROPERTIES
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -276,12 +279,20 @@ calendar_update_selected_day_display (GcalDateChooser *self)
|
|||||||
|
|
||||||
for (row = 0; row < ROWS; row++)
|
for (row = 0; row < ROWS; row++)
|
||||||
{
|
{
|
||||||
|
gboolean row_selected = FALSE;
|
||||||
|
|
||||||
for (col = 0; col < COLS; col++)
|
for (col = 0; col < COLS; col++)
|
||||||
{
|
{
|
||||||
|
gboolean day_selected;
|
||||||
|
|
||||||
d = GCAL_DATE_CHOOSER_DAY (self->days[row][col]);
|
d = GCAL_DATE_CHOOSER_DAY (self->days[row][col]);
|
||||||
date = gcal_date_chooser_day_get_date (d);
|
date = gcal_date_chooser_day_get_date (d);
|
||||||
gcal_date_chooser_day_set_selected (d, gcal_date_time_compare_date (date, self->date) == 0);
|
day_selected = gcal_date_time_compare_date (date, self->date) == 0;
|
||||||
|
gcal_date_chooser_day_set_selected (d, day_selected);
|
||||||
|
row_selected |= day_selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gtk_widget_set_visible (self->week[row], row_selected && self->show_selected_week);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,6 +352,10 @@ calendar_set_property (GObject *obj,
|
|||||||
gcal_date_chooser_set_show_week_numbers (self, g_value_get_boolean (value));
|
gcal_date_chooser_set_show_week_numbers (self, g_value_get_boolean (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_SHOW_SELECTED_WEEK:
|
||||||
|
gcal_date_chooser_set_show_selected_week (self, g_value_get_boolean (value));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -373,6 +388,10 @@ calendar_get_property (GObject *obj,
|
|||||||
g_value_set_boolean (value, self->show_week_numbers);
|
g_value_set_boolean (value, self->show_week_numbers);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_SHOW_SELECTED_WEEK:
|
||||||
|
g_value_set_boolean (value, self->show_selected_week);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -484,6 +503,17 @@ gcal_date_chooser_class_init (GcalDateChooserClass *class)
|
|||||||
TRUE,
|
TRUE,
|
||||||
G_PARAM_READWRITE);
|
G_PARAM_READWRITE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GcalDateChooser:show-selected-week:
|
||||||
|
*
|
||||||
|
* Whether the selected week is highlighted or not.
|
||||||
|
*/
|
||||||
|
properties[PROP_SHOW_SELECTED_WEEK] = g_param_spec_boolean ("show-selected-week",
|
||||||
|
"Show Selected Week",
|
||||||
|
"If TRUE, week numbers are displayed",
|
||||||
|
TRUE,
|
||||||
|
G_PARAM_READWRITE);
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
|
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
|
||||||
|
|
||||||
signals[DAY_SELECTED] = g_signal_new ("day-selected",
|
signals[DAY_SELECTED] = g_signal_new ("day-selected",
|
||||||
@@ -504,6 +534,30 @@ gcal_date_chooser_class_init (GcalDateChooserClass *class)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
show_week_number_to_column_cb (GBinding *binding,
|
||||||
|
const GValue *from_value,
|
||||||
|
GValue *to_value,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_value_set_int (to_value, g_value_get_boolean (from_value) ? -1 : 0);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
show_week_number_to_column_span_cb (GBinding *binding,
|
||||||
|
const GValue *from_value,
|
||||||
|
GValue *to_value,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_value_set_int (to_value, g_value_get_boolean (from_value) ? COLS + 1 : COLS);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_date_chooser_init (GcalDateChooser *self)
|
gcal_date_chooser_init (GcalDateChooser *self)
|
||||||
{
|
{
|
||||||
@@ -511,10 +565,12 @@ gcal_date_chooser_init (GcalDateChooser *self)
|
|||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
gint row, col;
|
gint row, col;
|
||||||
gint year, month;
|
gint year, month;
|
||||||
|
GtkLayoutManager *layout_manager;
|
||||||
|
|
||||||
self->show_heading = TRUE;
|
self->show_heading = TRUE;
|
||||||
self->show_day_names = TRUE;
|
self->show_day_names = TRUE;
|
||||||
self->show_week_numbers = TRUE;
|
self->show_week_numbers = TRUE;
|
||||||
|
self->show_selected_week = TRUE;
|
||||||
|
|
||||||
self->date = g_date_time_new_now_local ();
|
self->date = g_date_time_new_now_local ();
|
||||||
g_date_time_get_ymd (self->date, &self->this_year, NULL, NULL);
|
g_date_time_get_ymd (self->date, &self->this_year, NULL, NULL);
|
||||||
@@ -538,8 +594,12 @@ gcal_date_chooser_init (GcalDateChooser *self)
|
|||||||
gtk_grid_attach (GTK_GRID (self->grid), self->cols[col], col, -1, 1, 1);
|
gtk_grid_attach (GTK_GRID (self->grid), self->cols[col], col, -1, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
layout_manager = gtk_widget_get_layout_manager (self->grid);
|
||||||
|
|
||||||
for (row = 0; row < ROWS; row++)
|
for (row = 0; row < ROWS; row++)
|
||||||
{
|
{
|
||||||
|
GtkLayoutChild *layout_child;
|
||||||
|
|
||||||
self->rows[row] = gtk_label_new ("");
|
self->rows[row] = gtk_label_new ("");
|
||||||
|
|
||||||
g_object_bind_property (self,
|
g_object_bind_property (self,
|
||||||
@@ -550,6 +610,33 @@ gcal_date_chooser_init (GcalDateChooser *self)
|
|||||||
|
|
||||||
gtk_widget_add_css_class (self->rows[row], "weeknum");
|
gtk_widget_add_css_class (self->rows[row], "weeknum");
|
||||||
gtk_grid_attach (GTK_GRID (self->grid), self->rows[row], -1, row, 1, 1);
|
gtk_grid_attach (GTK_GRID (self->grid), self->rows[row], -1, row, 1, 1);
|
||||||
|
|
||||||
|
self->week[row] = adw_bin_new ();
|
||||||
|
gtk_widget_hide (self->week[row]);
|
||||||
|
gtk_widget_add_css_class (self->week[row], "current-week");
|
||||||
|
gtk_grid_attach (GTK_GRID (self->grid), self->week[row], -1, row, 8, 1);
|
||||||
|
|
||||||
|
layout_child = gtk_layout_manager_get_layout_child (layout_manager, self->week[row]);
|
||||||
|
|
||||||
|
g_object_bind_property_full (self,
|
||||||
|
"show-week-numbers",
|
||||||
|
layout_child,
|
||||||
|
"column",
|
||||||
|
G_BINDING_SYNC_CREATE,
|
||||||
|
show_week_number_to_column_cb,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_object_bind_property_full (self,
|
||||||
|
"show-week-numbers",
|
||||||
|
layout_child,
|
||||||
|
"column-span",
|
||||||
|
G_BINDING_SYNC_CREATE,
|
||||||
|
show_week_number_to_column_span_cb,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We are using a stack here to keep the week number column from shrinking
|
/* We are using a stack here to keep the week number column from shrinking
|
||||||
@@ -670,6 +757,39 @@ gcal_date_chooser_get_show_week_numbers (GcalDateChooser *self)
|
|||||||
return self->show_week_numbers;
|
return self->show_week_numbers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gcal_date_chooser_set_show_selected_week:
|
||||||
|
* @self: a #GcalDateChooser
|
||||||
|
* @setting: whether the selected week is highlighted or not.
|
||||||
|
*
|
||||||
|
* Sets the selected week is highlighted or not.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gcal_date_chooser_set_show_selected_week (GcalDateChooser *self,
|
||||||
|
gboolean setting)
|
||||||
|
{
|
||||||
|
if (self->show_selected_week == setting)
|
||||||
|
return;
|
||||||
|
|
||||||
|
self->show_selected_week = setting;
|
||||||
|
|
||||||
|
calendar_update_selected_day_display (self);
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_SELECTED_WEEK]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gcal_date_chooser_get_show_selected_week:
|
||||||
|
* @self: a #GcalDateChooser
|
||||||
|
*
|
||||||
|
* Returns: whether the selected week is highlighted or not.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gcal_date_chooser_get_show_selected_week (GcalDateChooser *self)
|
||||||
|
{
|
||||||
|
return self->show_selected_week;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gcal_date_chooser_set_date (GcalDateChooser *self,
|
gcal_date_chooser_set_date (GcalDateChooser *self,
|
||||||
GDateTime *date)
|
GDateTime *date)
|
||||||
|
|||||||
@@ -48,6 +48,11 @@ gboolean gcal_date_chooser_get_show_week_numbers (GcalDateChoose
|
|||||||
void gcal_date_chooser_set_show_week_numbers (GcalDateChooser *self,
|
void gcal_date_chooser_set_show_week_numbers (GcalDateChooser *self,
|
||||||
gboolean setting);
|
gboolean setting);
|
||||||
|
|
||||||
|
gboolean gcal_date_chooser_get_show_selected_week (GcalDateChooser *self);
|
||||||
|
|
||||||
|
void gcal_date_chooser_set_show_selected_week (GcalDateChooser *self,
|
||||||
|
gboolean setting);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GCAL_DATE_CHOOSER_H__ */
|
#endif /* __GCAL_DATE_CHOOSER_H__ */
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<property name="margin-end">12</property>
|
<property name="margin-end">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GcalDateChooser" id="date_chooser">
|
<object class="GcalDateChooser" id="date_chooser">
|
||||||
|
<property name="show_selected_week">False</property>
|
||||||
<property name="show_week_numbers">True</property>
|
<property name="show_week_numbers">True</property>
|
||||||
<signal name="day-selected" handler="calendar_day_selected" object="GcalDateSelector" swapped="yes"/>
|
<signal name="day-selected" handler="calendar_day_selected" object="GcalDateSelector" swapped="yes"/>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
Reference in New Issue
Block a user