1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
* vi:set noexpandtab tabstop=8 shiftwidth=8:
*
* Copyright (C) 2021 Matthew Leeds <mwleeds@endlessos.org>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include "config.h"
#include <glib/gi18n.h>
#include "gs-app-version-history-row.h"
#include "gs-common.h"
struct _GsAppVersionHistoryRow
{
GtkListBoxRow parent_instance;
GtkWidget *version_number_label;
GtkWidget *version_date_label;
GtkWidget *version_description_label;
};
G_DEFINE_TYPE (GsAppVersionHistoryRow, gs_app_version_history_row, GTK_TYPE_LIST_BOX_ROW)
static void
gs_app_version_history_row_class_init (GsAppVersionHistoryRowClass *klass)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-app-version-history-row.ui");
gtk_widget_class_bind_template_child (widget_class, GsAppVersionHistoryRow, version_number_label);
gtk_widget_class_bind_template_child (widget_class, GsAppVersionHistoryRow, version_date_label);
gtk_widget_class_bind_template_child (widget_class, GsAppVersionHistoryRow, version_description_label);
}
static void
gs_app_version_history_row_init (GsAppVersionHistoryRow *row)
{
gtk_widget_init_template (GTK_WIDGET (row));
}
/**
* gs_app_version_history_row_set_info:
* @row: a #GsAppVersionHistoryRow
* @version_number: (nullable): version number of the release, or %NULL if unknown
* @version_date: release date of the version, as seconds since the Unix epoch,
* or `0` if unknown
* @version_description: (nullable): Pango Markup for the full human readable
* description of the release, or %NULL if unknown
*
* Set information about the release represented by this version history row.
*/
void
gs_app_version_history_row_set_info (GsAppVersionHistoryRow *row,
const char *version_number,
guint64 version_date,
const char *version_description)
{
g_autofree char *version_date_string = NULL;
g_autofree char *version_date_string_tooltip = NULL;
if (version_number == NULL || *version_number == '\0')
return;
if (version_description != NULL && *version_description != '\0') {
g_autofree char *version_tmp = NULL;
version_tmp = g_strdup_printf (_("New in Version %s"), version_number);
gtk_label_set_label (GTK_LABEL (row->version_number_label), version_tmp);
gtk_label_set_markup (GTK_LABEL (row->version_description_label), version_description);
gtk_style_context_remove_class (gtk_widget_get_style_context (row->version_description_label), "dim-label");
} else {
g_autofree char *version_tmp = NULL;
const gchar *version_description_fallback;
version_tmp = g_strdup_printf (_("Version %s"), version_number);
gtk_label_set_label (GTK_LABEL (row->version_number_label), version_tmp);
version_description_fallback = _("No details for this release");
gtk_label_set_label (GTK_LABEL (row->version_description_label), version_description_fallback);
gtk_style_context_add_class (gtk_widget_get_style_context (row->version_description_label), "dim-label");
}
if (version_date != 0) {
g_autoptr(GDateTime) date_time = NULL;
const gchar *format_string;
/* this is the date in the form of "x weeks ago" or "y months ago" */
version_date_string = gs_utils_time_to_string ((gint64) version_date);
/* TRANSLATORS: This is the date string with: day number, month name, year.
i.e. "25 May 2012" */
format_string = _("%e %B %Y");
date_time = g_date_time_new_from_unix_local (version_date);
version_date_string_tooltip = g_date_time_format (date_time, format_string);
}
if (version_date_string == NULL)
gtk_widget_set_visible (row->version_date_label, FALSE);
else
gtk_label_set_label (GTK_LABEL (row->version_date_label), version_date_string);
if (version_date_string_tooltip != NULL)
gtk_widget_set_tooltip_text (row->version_date_label, version_date_string_tooltip);
}
GtkWidget *
gs_app_version_history_row_new (void)
{
GsAppVersionHistoryRow *row;
row = g_object_new (GS_TYPE_APP_VERSION_HISTORY_ROW, NULL);
return GTK_WIDGET (row);
}
|