add time columns

This commit is contained in:
yggverse 2025-02-15 01:11:17 +02:00
parent 2933e5b0d6
commit b44c5c34da
2 changed files with 72 additions and 4 deletions

View file

@ -16,7 +16,7 @@ impl Directory {
// Init model
const ATTRIBUTES: &str =
"standard::type,standard::display-name,standard::symbolic-icon,standard::size,standard::content-type,standard::modification-date-time";
"standard::type,standard::display-name,standard::symbolic-icon,standard::size,standard::content-type,time::modified,time::created,time::access";
let directory_list = gtk::DirectoryList::builder()
.file(file)
@ -40,13 +40,17 @@ impl Directory {
let name = Column::name(360);
let size = Column::size(120);
let content_type = Column::content_type(180);
//let modification_date_time = Column::modification_date_time();
let creation_date_time = Column::creation_date_time(220);
let modification_date_time = Column::modification_date_time(220);
let access_date_time = Column::access_date_time(220);
column_view.append_column(&icon);
column_view.append_column(&name);
column_view.append_column(&size);
column_view.append_column(&content_type);
//column_view.append_column(&modification_date_time);
column_view.append_column(&size);
column_view.append_column(&creation_date_time);
column_view.append_column(&modification_date_time);
column_view.append_column(&access_date_time);
column_view.sort_by_column(Some(&name), gtk::SortType::Ascending);
column_view

View file

@ -5,7 +5,9 @@ pub trait Column {
fn name(width: i32) -> Self;
fn size(width: i32) -> Self;
fn content_type(width: i32) -> Self;
fn creation_date_time(width: i32) -> Self;
fn modification_date_time(width: i32) -> Self;
fn access_date_time(width: i32) -> Self;
}
impl Column for gtk::ColumnViewColumn {
@ -163,6 +165,37 @@ impl Column for gtk::ColumnViewColumn {
.build()
}
fn creation_date_time(width: i32) -> Self {
gtk::ColumnViewColumn::builder()
.fixed_width(width)
.resizable(true)
.title("Created")
.factory(&{
let factory = gtk::SignalListItemFactory::new();
factory.connect_bind(|_, this| {
use gtk::prelude::{Cast, ListItemExt};
let list_item = this.downcast_ref::<gtk::ListItem>().unwrap();
let item = list_item.item().unwrap();
let file_info = item.downcast_ref::<gtk::gio::FileInfo>().unwrap();
list_item.set_child(Some(
&gtk::Label::builder()
.halign(gtk::Align::Start)
.ellipsize(gtk::pango::EllipsizeMode::Middle)
.label(
file_info
.creation_date_time()
.unwrap()
.format_iso8601()
.unwrap_or(DEFAULT.into()),
)
.build(),
));
});
factory
})
.build()
}
fn modification_date_time(width: i32) -> Self {
gtk::ColumnViewColumn::builder()
.fixed_width(width)
@ -193,4 +226,35 @@ impl Column for gtk::ColumnViewColumn {
})
.build()
}
fn access_date_time(width: i32) -> Self {
gtk::ColumnViewColumn::builder()
.fixed_width(width)
.resizable(true)
.title("Accessed")
.factory(&{
let factory = gtk::SignalListItemFactory::new();
factory.connect_bind(|_, this| {
use gtk::prelude::{Cast, ListItemExt};
let list_item = this.downcast_ref::<gtk::ListItem>().unwrap();
let item = list_item.item().unwrap();
let file_info = item.downcast_ref::<gtk::gio::FileInfo>().unwrap();
list_item.set_child(Some(
&gtk::Label::builder()
.halign(gtk::Align::Start)
.ellipsize(gtk::pango::EllipsizeMode::Middle)
.label(
file_info
.access_date_time()
.unwrap()
.format_iso8601()
.unwrap_or(DEFAULT.into()),
)
.build(),
));
});
factory
})
.build()
}
}