Skip to content

Commit

Permalink
Improve FileDialog entries (#64)
Browse files Browse the repository at this point in the history
  • Loading branch information
sonnyp authored Jan 30, 2024
1 parent 6229d45 commit 2fcb7bd
Show file tree
Hide file tree
Showing 12 changed files with 127 additions and 135 deletions.
11 changes: 5 additions & 6 deletions demos/Avatar/code.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,17 @@ pub fn main() {

let button: gtk::Button = workbench::builder().object("button").unwrap();

let mut filter = gtk::FileFilter::new();
filter.set_name(Some("Images"));
filter.add_pixbuf_formats();
let mut file_filter = gtk::FileFilter::new();
file_filter.add_pixbuf_formats();

let dialog = gtk::FileDialog::builder()
let file_dialog = gtk::FileDialog::builder()
.title("Select an Avatar")
.modal(true)
.default_filter(&filter)
.default_filter(&file_filter)
.build();

button.connect_clicked(move |_| {
dialog.open(
file_dialog.open(
Some(workbench::window()),
None::<&gio::Cancellable>,
on_clicked,
Expand Down
12 changes: 5 additions & 7 deletions demos/Avatar/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,21 @@ Gio._promisify(Gtk.FileDialog.prototype, "open", "open_finish");
const avatar_image = workbench.builder.get_object("avatar_image");
const button = workbench.builder.get_object("button");

const filter = new Gtk.FileFilter({
name: "Images",
});
filter.add_pixbuf_formats();
const file_filter = new Gtk.FileFilter();
file_filter.add_pixbuf_formats();

const dialog = new Gtk.FileDialog({
const file_dialog = new Gtk.FileDialog({
title: "Select an Avatar",
modal: true,
default_filter: filter,
default_filter: file_filter,
});

button.connect("clicked", () => {
onClicked().catch(console.error);
});

async function onClicked() {
const file = await dialog.open(workbench.window, null);
const file = await file_dialog.open(workbench.window, null);
const texture = Gdk.Texture.new_from_file(file);
avatar_image.set_custom_image(texture);
}
14 changes: 7 additions & 7 deletions demos/Avatar/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import workbench


filter = Gtk.FileFilter(name="Images")
filter.add_pixbuf_formats()
file_filter = Gtk.FileFilter()
file_filter.add_pixbuf_formats()

dialog = Gtk.FileDialog(
file_dialog = Gtk.FileDialog(
title="Select an Avatar",
modal=True,
default_filter=filter,
default_filter=file_filter,
)

avatar_image = workbench.builder.get_object("avatar_image")
Expand All @@ -21,11 +21,11 @@
button.connect("clicked", lambda *_: on_clicked())


def on_selected(_dialog, result):
file = _dialog.open_finish(result)
def on_selected(file_dialog, result):
file = file_dialog.open_finish(result)
texture = Gdk.Texture.new_from_file(file)
avatar_image.set_custom_image(texture)


def on_clicked():
file = dialog.open(workbench.window, None, on_selected)
file_dialog.open(workbench.window, None, on_selected)
12 changes: 6 additions & 6 deletions demos/Avatar/main.vala
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
#! /usr/bin/env -S vala workbench.vala --pkg libadwaita-1

private Adw.Avatar avatar_image;
private Gtk.FileFilter file_filter;

public void main () {
avatar_image = (Adw.Avatar) workbench.builder.get_object ("avatar_image");

file_filter = new Gtk.FileFilter ();
file_filter.add_pixbuf_formats ();

var button = (Gtk.Button) workbench.builder.get_object ("button");
button.clicked.connect (select_image.begin);
}

private async void select_image () {
var filter = new Gtk.FileFilter () {
name = "Images"
};
filter.add_pixbuf_formats ();

var file_dialog = new Gtk.FileDialog () {
title = "Select an Avatar",
modal = true,
default_filter = filter
default_filter = file_filter
};

try {
Expand Down
19 changes: 13 additions & 6 deletions demos/Open File/main.blp
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ Adw.StatusPage {
label: _("Open a file");

styles [
"pill",
"suggested-action"
"pill"
]
}

Expand All @@ -24,8 +23,7 @@ Adw.StatusPage {
label: _("Open Image");

styles [
"pill",
"suggested-action"
"pill"
]
}

Expand All @@ -34,8 +32,7 @@ Adw.StatusPage {
label: _("Open multiple files");

styles [
"pill",
"suggested-action"
"pill"
]
}

Expand All @@ -45,3 +42,13 @@ Adw.StatusPage {
}
}
}

FileFilter file_filter_image {
mime-types [
"image/svg+xml",
"image/png",
"image/jpeg",
"image/webp",
"image/gif"
]
}
52 changes: 22 additions & 30 deletions demos/Open File/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,44 +11,27 @@ Gio._promisify(
const button_single = workbench.builder.get_object("button_single");
const button_image = workbench.builder.get_object("button_image");
const button_multiple = workbench.builder.get_object("button_multiple");
const file_filter_image = workbench.builder.get_object("file_filter_image");

async function openFile() {
const dialog_for_file = new Gtk.FileDialog();
const file = await dialog_for_file.open(workbench.window, null);
const info = file.query_info(
"standard::name",
Gio.FileQueryInfoFlags.NONE,
null,
);
console.log(`Selected File: ${info.get_name()}`);
const file_dialog = new Gtk.FileDialog();
const file = await file_dialog.open(workbench.window, null);
console.log("Selected File:", getFileName(file));
}

async function openImageFile() {
const filters = new Gio.ListStore();

const imageFilter = Gtk.FileFilter.new();
imageFilter.set_name("Image File");
imageFilter.add_mime_type("image/*");
filters.append(imageFilter);

const fileDialog = new Gtk.FileDialog({ filters });
const file = await fileDialog.open(workbench.window, null);
const info = file.query_info(
"standard::name",
Gio.FileQueryInfoFlags.NONE,
null,
);
console.log(`Selected file: ${info.get_name()}`);
const file_dialog = new Gtk.FileDialog({ default_filter: file_filter_image });
const file = await file_dialog.open(workbench.window, null);
console.log("Selected Image:", getFileName(file));
}

async function openMultipleFiles() {
const dialog_for_multiple_files = new Gtk.FileDialog();
const files = await dialog_for_multiple_files.open_multiple(
workbench.window,
null,
);
const selected_items_count = files.get_n_items();
console.log(`No of selected files: ${selected_items_count}`);
const file_dialog = new Gtk.FileDialog();
const files = await file_dialog.open_multiple(workbench.window, null);
console.log(`Selected Files (${files.get_n_items()}):`);
for (const file of files) {
console.log(" ", getFileName(file));
}
}

button_single.connect("clicked", () => {
Expand All @@ -62,3 +45,12 @@ button_image.connect("clicked", () => {
button_multiple.connect("clicked", () => {
openMultipleFiles().catch(console.error);
});

function getFileName(file) {
const info = file.query_info(
"standard::name",
Gio.FileQueryInfoFlags.NONE,
null,
);
return info.get_name();
}
52 changes: 22 additions & 30 deletions demos/Open File/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,52 +7,44 @@
button_single = workbench.builder.get_object("button_single")
button_image = workbench.builder.get_object("button_image")
button_multiple = workbench.builder.get_object("button_multiple")
file_filter_image = workbench.builder.get_object("file_filter_image")

image_filter = Gtk.FileFilter(name="Images")
image_filter.add_mime_type("image/*")
file_dialog = Gtk.FileDialog(
default_filter=image_filter,
)


def on_file_opened(dialog, result):
file = dialog.open_finish(result)
info = file.query_info(
"standard::name",
Gio.FileQueryInfoFlags.NONE,
None,
)
print(f"Selected File: {info.get_name()}")
def on_file_opened(file_dialog, result):
file = file_dialog.open_finish(result)
print(f"Selected File: {get_file_name(file)}")


def open_file():
dialog_for_file = Gtk.FileDialog()
dialog_for_file.open(workbench.window, None, on_file_opened)
dialog = Gtk.FileDialog()
dialog.open(workbench.window, None, on_file_opened)


def on_image_opened(dialog, result):
def on_image_opened(file_dialog, result):
file = file_dialog.open_finish(result)
info = file.query_info("standard::name", Gio.FileQueryInfoFlags.NONE, None)

print(f"Selected File: {info.get_name()}")
print(f"Selected Image: {get_file_name(file)}")


def open_image():
dialog_for_image = file_dialog
dialog_for_image.open(workbench.window, None, on_image_opened)
file_dialog = Gtk.FileDialog(default_filter=file_filter_image)
file_dialog.open(workbench.window, None, on_image_opened)


def on_multiple_files_opened(dialog, result):
files = dialog.open_multiple_finish(result)
selected_items_count = files.get_n_items()
print(f"No of selected files: {selected_items_count}")
def on_multiple_files_opened(file_dialog, result):
files = file_dialog.open_multiple_finish(result)
print(f"Selected Files ({files.get_n_items()}):")
for file in files:
print(f" {get_file_name(file)}")


def open_multiple_files():
dialog_for_multiple_files = Gtk.FileDialog()
dialog_for_multiple_files.open_multiple(
workbench.window, None, on_multiple_files_opened
)
file_dialog = Gtk.FileDialog()
file_dialog.open_multiple(workbench.window, None, on_multiple_files_opened)


def get_file_name(file):
info = file.query_info("standard::name", Gio.FileQueryInfoFlags.NONE, None)
return info.get_name()


button_single.connect("clicked", lambda *_: open_file())
Expand Down
35 changes: 22 additions & 13 deletions demos/Open File/main.vala
Original file line number Diff line number Diff line change
@@ -1,44 +1,39 @@
#! /usr/bin/env -S vala workbench.vala --pkg libadwaita-1

private Gtk.FileFilter file_filter_image;

public void main () {
var button_single = (Gtk.Button) workbench.builder.get_object ("button_single");
var button_image = (Gtk.Button) workbench.builder.get_object ("button_image");
var button_multiple = (Gtk.Button) workbench.builder.get_object ("button_multiple");
file_filter_image = (Gtk.FileFilter) workbench.builder.get_object ("file_filter_image");

button_single.clicked.connect (open_single.begin);
button_image.clicked.connect (open_image.begin);
button_multiple.clicked.connect (open_multiple.begin);
}

private async void open_single () {
var file_dialog = new Gtk.FileDialog () {
};
var file_dialog = new Gtk.FileDialog ();

try {
File file = yield file_dialog.open (workbench.window, null);

FileInfo info = file.query_info ("standard::name", NONE, null);

message (@"Selected file: $(info.get_name ())");
message (@"Selected File: $( get_file_name (file))");
} catch (Error e) {
critical (e.message);
}
}

private async void open_image () {
var image_filter = new Gtk.FileFilter ();

image_filter.add_mime_type ("image/*");

var file_dialog = new Gtk.FileDialog () {
default_filter = image_filter
default_filter = file_filter_image
};

try {
File file = yield file_dialog.open (workbench.window, null);

FileInfo info = file.query_info ("standard::name", NONE, null);
message (@"Selected file: $(info.get_name ())");
message (@"Selected Image: $( get_file_name (file))");
} catch (Error e) {
critical (e.message);
}
Expand All @@ -49,8 +44,22 @@ private async void open_multiple () {
try {
ListModel files = yield file_dialog.open_multiple (workbench.window, null);

message (@"Number of selected files: $(files.get_n_items ())");
message (@"Selected Files ($(files.get_n_items())):");
for (int i = 0; i < files.get_n_items (); i++) {
var file = (File) files.get_item (i);
message (@" $(get_file_name(file))");
}
} catch (Error e) {
critical (e.message);
}
}

private static string get_file_name (File file) {
try {
var info = file.query_info ("standard::name", NONE, null);
return info.get_name ();
} catch (Error e) {
critical (e.message);
}
return "";
}
4 changes: 2 additions & 2 deletions demos/Save File/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ Gio._promisify(
const button = workbench.builder.get_object("button");

async function saveFile() {
const dialog = new Gtk.FileDialog({
const file_dialog = new Gtk.FileDialog({
initial_name: "Workbench.txt",
});
// "dialog.save" returns a Gio.File you can write to
const file = await dialog.save(workbench.window, null);
const file = await file_dialog.save(workbench.window, null);

const contents = new TextEncoder().encode("Hello from Workbench!");
await file.replace_contents_async(
Expand Down
Loading

0 comments on commit 2fcb7bd

Please sign in to comment.