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 // Init model
const ATTRIBUTES: &str = 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() let directory_list = gtk::DirectoryList::builder()
.file(file) .file(file)
@ -40,13 +40,17 @@ impl Directory {
let name = Column::name(360); let name = Column::name(360);
let size = Column::size(120); let size = Column::size(120);
let content_type = Column::content_type(180); 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(&icon);
column_view.append_column(&name); column_view.append_column(&name);
column_view.append_column(&size);
column_view.append_column(&content_type); 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.sort_by_column(Some(&name), gtk::SortType::Ascending);
column_view column_view

View file

@ -5,7 +5,9 @@ pub trait Column {
fn name(width: i32) -> Self; fn name(width: i32) -> Self;
fn size(width: i32) -> Self; fn size(width: i32) -> Self;
fn content_type(width: i32) -> Self; fn content_type(width: i32) -> Self;
fn creation_date_time(width: i32) -> Self;
fn modification_date_time(width: i32) -> Self; fn modification_date_time(width: i32) -> Self;
fn access_date_time(width: i32) -> Self;
} }
impl Column for gtk::ColumnViewColumn { impl Column for gtk::ColumnViewColumn {
@ -163,6 +165,37 @@ impl Column for gtk::ColumnViewColumn {
.build() .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 { fn modification_date_time(width: i32) -> Self {
gtk::ColumnViewColumn::builder() gtk::ColumnViewColumn::builder()
.fixed_width(width) .fixed_width(width)
@ -193,4 +226,35 @@ impl Column for gtk::ColumnViewColumn {
}) })
.build() .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()
}
} }