mirror of
https://gitlab.gnome.org/GNOME/gitg
synced 2024-11-04 23:34:39 +00:00
customizable datetime format
This commit is contained in:
parent
2164c6359d
commit
ce7b4b2d78
4 changed files with 252 additions and 4 deletions
|
@ -242,6 +242,27 @@
|
|||
<summary>Maximum number of days to store previous commit messages</summary>
|
||||
<description>Maximum number of days to store previous commit messages for commit message history.</description>
|
||||
</key>
|
||||
<key name="datetime-selection" type="s">
|
||||
<default>'predefined'</default>
|
||||
<summary>Type of datetime format selected.</summary>
|
||||
<description>
|
||||
Type of datetime format selected.
|
||||
</description>
|
||||
</key>
|
||||
<key name="predefined-datetime" type="s">
|
||||
<default>'%Y-%m-%dT%R%z'</default>
|
||||
<summary>Prefered Datatime format of the user.</summary>
|
||||
<description>
|
||||
The datetime format to be used in commit-diff.
|
||||
</description>
|
||||
</key>
|
||||
<key name="custom-datetime" type="s">
|
||||
<default>''</default>
|
||||
<summary>Custom datetime format.</summary>
|
||||
<description>
|
||||
Custom datetime format.
|
||||
</description>
|
||||
</key>
|
||||
</schema>
|
||||
<schema gettext-domain="@GETTEXT_PACKAGE@" id="@APPLICATION_ID@.preferences.diff" path="@SCHEMA_PATH@/preferences/diff/">
|
||||
<key name="patience" type="b">
|
||||
|
|
|
@ -59,6 +59,18 @@ public class PreferencesCommit : Gtk.Grid, GitgExt.Preferences
|
|||
[GtkChild (name = "spin_button_max_num_days_commit_messages")]
|
||||
private unowned Gtk.SpinButton d_spin_button_max_num_days_commit_messages;
|
||||
|
||||
[GtkChild (name = "radiobutton_predefined_datetime" )]
|
||||
private unowned Gtk.RadioButton d_predefined_datetime;
|
||||
|
||||
[GtkChild (name = "radiobutton_custom_datetime" )]
|
||||
private unowned Gtk.RadioButton d_custom_datetime;
|
||||
|
||||
[GtkChild (name = "combobox_predefined_datetime")]
|
||||
private unowned Gtk.ComboBox d_predefined_datetime_combo;
|
||||
|
||||
[GtkChild (name = "custom_datetime")]
|
||||
private unowned Gtk.Entry d_custom_datetime_entry;
|
||||
|
||||
construct
|
||||
{
|
||||
var settings = new Settings(Gitg.Config.APPLICATION_ID + ".preferences.commit.message");
|
||||
|
@ -122,6 +134,32 @@ public class PreferencesCommit : Gtk.Grid, GitgExt.Preferences
|
|||
"value",
|
||||
SettingsBindFlags.GET | SettingsBindFlags.SET);
|
||||
|
||||
settings.bind("predefined-datetime",
|
||||
d_predefined_datetime_combo,
|
||||
"active-id",
|
||||
SettingsBindFlags.GET | SettingsBindFlags.SET);
|
||||
|
||||
settings.bind("custom-datetime",
|
||||
d_custom_datetime_entry,
|
||||
"text",
|
||||
SettingsBindFlags.GET | SettingsBindFlags.SET);
|
||||
|
||||
settings.bind("datetime-selection",
|
||||
this,
|
||||
"datetime-selection",
|
||||
SettingsBindFlags.GET | SettingsBindFlags.SET);
|
||||
|
||||
d_predefined_datetime.notify["active"].connect(() => {
|
||||
if (d_predefined_datetime.active) {
|
||||
notify_property("datetime-selection");
|
||||
}
|
||||
});
|
||||
|
||||
d_custom_datetime.notify["active"].connect(() => {
|
||||
if (d_custom_datetime.active) {
|
||||
notify_property("datetime-selection");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Gtk.Widget widget
|
||||
|
@ -141,6 +179,25 @@ public class PreferencesCommit : Gtk.Grid, GitgExt.Preferences
|
|||
{
|
||||
owned get { return C_("Preferences", "Commit"); }
|
||||
}
|
||||
|
||||
public string datetime_selection
|
||||
{
|
||||
get
|
||||
{
|
||||
return d_custom_datetime.active ? "custom" : "predefined";
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (value == "custom"){
|
||||
d_custom_datetime.active = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
d_predefined_datetime.active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -358,5 +358,116 @@
|
|||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid" id="grid_datetime">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="datetime_preference_top_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes">Datetime format</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid" id="grid_prefered_datetime_default">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="combobox_predefined_datetime">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="active">0</property>
|
||||
<property name="active_id">0</property>
|
||||
<items>
|
||||
<item id="%Y-%m">%Y-%m</item>
|
||||
<item id="%Y-%m-%d">%Y-%m-%d</item>
|
||||
<item id="%Y-%m-%dT%R%z">%Y-%m-%dT%R%z</item>
|
||||
<item id="%Y-%m-%dT%T%z">%Y-%m-%dT%T%z</item>
|
||||
<item id="%Y">%Y</item>
|
||||
<item id="%Y-%d-%m">%Y-%d-%m</item>
|
||||
<item id="%Y-%d-%mT%R%z">%Y-%d-%mT%R%z</item>
|
||||
<item id="%Y-%d-%mT%T%z">%Y-%d-%mT%T%z</item>
|
||||
</items>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton_predefined_datetime">
|
||||
<property name="label" translatable="yes">Predefined:</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">radiobutton_custom_datetime</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton_custom_datetime">
|
||||
<property name="label" translatable="yes">Custom:</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">radiobutton_predefined_datetime</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="custom_datetime">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="secondary_icon_stock">gtk-help</property>
|
||||
<property name="secondary_icon_sensitive">False</property>
|
||||
<property name="secondary_icon_tooltip_markup" translatable="yes">Check in vala documentation for datetime to write your own format.</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</template>
|
||||
</interface>
|
||||
|
|
|
@ -53,6 +53,8 @@ class Gitg.DiffViewCommitDetails : Gtk.Grid
|
|||
[GtkChild( name = "label_expand_collapse_files" )]
|
||||
private unowned Gtk.Label d_label_expand_collapse_files;
|
||||
|
||||
private Settings d_settings;
|
||||
|
||||
public bool expanded
|
||||
{
|
||||
get { return d_expander_files.expanded; }
|
||||
|
@ -131,14 +133,39 @@ class Gitg.DiffViewCommitDetails : Gtk.Grid
|
|||
|
||||
public Gitg.Repository? repository {get; set; }
|
||||
|
||||
private string d_datetime_format;
|
||||
|
||||
private string datetime_format
|
||||
{
|
||||
get {
|
||||
return d_datetime_format;
|
||||
}
|
||||
set {
|
||||
d_datetime_format = value;
|
||||
update_datetime();
|
||||
}
|
||||
}
|
||||
|
||||
private Gee.HashMap<Ggit.OId, Gtk.RadioButton> d_parents_map;
|
||||
|
||||
private GLib.Regex regex_url = /\w+:(\/?\/?)[^\s]+/;
|
||||
private Ggit.Config config {get; set;}
|
||||
private GLib.Regex regex_custom_links = /gitg\.custom-link\.(.+)\.regex/;
|
||||
|
||||
private void on_change_datetime(Settings settings, string key) {
|
||||
datetime_format = settings.get_string("datetime-selection") == "custom"
|
||||
? settings.get_string("custom-datetime")
|
||||
: settings.get_string("predefined-datetime");
|
||||
}
|
||||
|
||||
construct
|
||||
{
|
||||
d_settings = new Settings(Gitg.Config.APPLICATION_ID + ".preferences.commit.message");
|
||||
d_settings.changed["datetime-selection"].connect(on_change_datetime);
|
||||
d_settings.changed["custom-datetime"].connect(on_change_datetime);
|
||||
d_settings.changed["predefined-datetime"].connect(on_change_datetime);
|
||||
on_change_datetime(d_settings, "");
|
||||
|
||||
d_expander_files.notify["expanded"].connect(() => {
|
||||
if (d_expander_files.expanded)
|
||||
{
|
||||
|
@ -151,11 +178,19 @@ class Gitg.DiffViewCommitDetails : Gtk.Grid
|
|||
|
||||
notify_property("expanded");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
protected override void dispose()
|
||||
{
|
||||
|
||||
if (d_settings != null)
|
||||
{
|
||||
d_settings.changed["datetime-selection"].disconnect(on_change_datetime);
|
||||
d_settings.changed["custom-datetime"].disconnect(on_change_datetime);
|
||||
d_settings.changed["predefined-datetime"].disconnect(on_change_datetime);
|
||||
d_settings = null;
|
||||
}
|
||||
|
||||
if (d_avatar_cancel != null)
|
||||
{
|
||||
d_avatar_cancel.cancel();
|
||||
|
@ -192,7 +227,6 @@ class Gitg.DiffViewCommitDetails : Gtk.Grid
|
|||
var author = commit.get_author();
|
||||
|
||||
d_label_author.label = author_to_markup(author);
|
||||
d_label_author_date.label = author.get_time().to_timezone(author.get_time_zone()).format("%x %X %z");
|
||||
|
||||
var committer = commit.get_committer();
|
||||
|
||||
|
@ -201,14 +235,14 @@ class Gitg.DiffViewCommitDetails : Gtk.Grid
|
|||
committer.get_time().compare(author.get_time()) != 0)
|
||||
{
|
||||
d_label_committer.label = _("Committed by %s").printf(author_to_markup(committer));
|
||||
d_label_committer_date.label = committer.get_time().to_timezone(committer.get_time_zone()).format("%x %X %z");
|
||||
}
|
||||
else
|
||||
{
|
||||
d_label_committer.label = "";
|
||||
d_label_committer_date.label = "";
|
||||
}
|
||||
|
||||
update_datetime();
|
||||
|
||||
var parents = commit.get_parents();
|
||||
var first_parent = parents.size == 0 ? null : parents.get(0);
|
||||
|
||||
|
@ -257,6 +291,31 @@ class Gitg.DiffViewCommitDetails : Gtk.Grid
|
|||
update_avatar();
|
||||
}
|
||||
|
||||
private void update_datetime()
|
||||
{
|
||||
if (commit == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var author = commit.get_author();
|
||||
|
||||
d_label_author_date.label = author.get_time().to_timezone(author.get_time_zone()).format(datetime_format);
|
||||
|
||||
var committer = commit.get_committer();
|
||||
|
||||
if (committer.get_name() != author.get_name() ||
|
||||
committer.get_email() != author.get_email() ||
|
||||
committer.get_time().compare(author.get_time()) != 0)
|
||||
{
|
||||
d_label_committer_date.label = committer.get_time().to_timezone(committer.get_time_zone()).format(datetime_format);
|
||||
}
|
||||
else
|
||||
{
|
||||
d_label_committer_date.label = "";
|
||||
}
|
||||
}
|
||||
|
||||
private string subject_to_markup(string subject_text)
|
||||
{
|
||||
return parse_links_on_subject(subject_text);
|
||||
|
|
Loading…
Reference in a new issue