From f20e40d27c5b2345df097dfb6e54990e0524d6c8 Mon Sep 17 00:00:00 2001 From: Allie Law Date: Sat, 19 Nov 2022 05:16:02 +0000 Subject: [PATCH 1/2] feat: :construction: wip for fun test pages --- src/PrinterPage.vala | 105 +++++++++++++++++++++++++++++++------------ 1 file changed, 77 insertions(+), 28 deletions(-) diff --git a/src/PrinterPage.vala b/src/PrinterPage.vala index 802a6355..a9f4b388 100644 --- a/src/PrinterPage.vala +++ b/src/PrinterPage.vala @@ -66,10 +66,21 @@ public class Printers.PrinterPage : Granite.SimpleSettingsPage { show_all (); } - private string? get_testprint_filename (string datadir) { - string[] testprints = {"/data/testprint", "/data/testprint.ps"}; + private string? get_testprint_filename (string datadir, bool boring) { + // Boring test page + string page; + if (boring) { + page = "testprint"; + } else { + // Random selection from fun ones + string[] fun_pages = {"sudoku"}; + page = fun_pages[GLib.Random.int_range (0, fun_pages.length)]; + } + + string[] testprints = {"/data/" + page, "/data/" + page + ".ps"}; foreach (var testprint in testprints) { string filename = datadir + testprint; + stdout.printf(filename+"\n"); if (Posix.access (filename, Posix.R_OK) == 0) { return filename; } @@ -79,37 +90,75 @@ public class Printers.PrinterPage : Granite.SimpleSettingsPage { } private void print_test_page () { - string? filename = null; - var datadir = GLib.Environment.get_variable ("CUPS_DATADIR"); - if (datadir != null) { - filename = get_testprint_filename (datadir); - } else { - string[] dirs = { "/usr/share/cups", "/usr/local/share/cups" }; - foreach (var dir in dirs) { - filename = get_testprint_filename (dir); - if (filename != null) { + + // Ask the user if they want a fun test page + var dialog = new Granite.Dialog () { + // transient_for = window + }; + + + dialog.get_content_area().add ( + new Gtk.Label (_("Do you want a fun or boring test page?")) { + xalign= 0, + xpad= 13 + } + ); + + dialog.add_button (_("Cancel"), 0); + dialog.add_button (_("Boring"), 1); + dialog.add_button (_("Fun!"), 2); + + dialog.show_all (); + dialog.response.connect ((response_id) => { + + bool boring_page; + + switch (response_id) { + case 1: + boring_page = true; break; - } + case 2: + boring_page = false; + break; + default: + dialog.destroy (); + return; } - } - if (filename != null) { - var type = int.parse (printer.printer_type); - string printer_uri, resource; - if (CUPS.PrinterType.CLASS in type) { - printer_uri = "ipp://localhost/classes/%s".printf (printer.dest.name); - resource = "/classes/%s".printf (printer.dest.name); + string? filename = null; + var datadir = GLib.Environment.get_variable ("CUPS_DATADIR"); + if (datadir != null) { + filename = get_testprint_filename (datadir, boring_page); } else { - printer_uri = "ipp://localhost/printers/%s".printf (printer.dest.name); - resource = "/printers/%s".printf (printer.dest.name); + string[] dirs = { "/usr/share/cups", "/usr/local/share/cups" }; + foreach (var dir in dirs) { + filename = get_testprint_filename (dir, boring_page); + if (filename != null) { + break; + } + } } - var request = new CUPS.IPP.IPP.request (CUPS.IPP.Operation.PRINT_JOB); - request.add_string (CUPS.IPP.Tag.OPERATION, CUPS.IPP.Tag.URI, "printer-uri", null, printer_uri); - request.add_string (CUPS.IPP.Tag.OPERATION, CUPS.IPP.Tag.NAME, "requesting-user-name", null, CUPS.get_user ()); - /// TRANSLATORS: Name of the test page job - request.add_string (CUPS.IPP.Tag.OPERATION, CUPS.IPP.Tag.NAME, "job-name", null, _("Test page")); - request.do_file_request (CUPS.HTTP.DEFAULT, resource, filename); - } + if (filename != null) { + var type = int.parse (printer.printer_type); + string printer_uri, resource; + if (CUPS.PrinterType.CLASS in type) { + printer_uri = "ipp://localhost/classes/%s".printf (printer.dest.name); + resource = "/classes/%s".printf (printer.dest.name); + } else { + printer_uri = "ipp://localhost/printers/%s".printf (printer.dest.name); + resource = "/printers/%s".printf (printer.dest.name); + } + + var request = new CUPS.IPP.IPP.request (CUPS.IPP.Operation.PRINT_JOB); + request.add_string (CUPS.IPP.Tag.OPERATION, CUPS.IPP.Tag.URI, "printer-uri", null, printer_uri); + request.add_string (CUPS.IPP.Tag.OPERATION, CUPS.IPP.Tag.NAME, "requesting-user-name", null, CUPS.get_user ()); + /// TRANSLATORS: Name of the test page job + request.add_string (CUPS.IPP.Tag.OPERATION, CUPS.IPP.Tag.NAME, "job-name", null, _("Test page")); + request.do_file_request (CUPS.HTTP.DEFAULT, resource, filename); + } + + dialog.destroy (); + }); } } From 173103f6a364422c696cff1078018f56ed3ddd67 Mon Sep 17 00:00:00 2001 From: Allie Law Date: Sat, 19 Nov 2022 21:15:07 +0000 Subject: [PATCH 2/2] refactor: use MessageDialog and new page names --- src/PrinterPage.vala | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/PrinterPage.vala b/src/PrinterPage.vala index a9f4b388..22bd03b1 100644 --- a/src/PrinterPage.vala +++ b/src/PrinterPage.vala @@ -73,14 +73,16 @@ public class Printers.PrinterPage : Granite.SimpleSettingsPage { page = "testprint"; } else { // Random selection from fun ones - string[] fun_pages = {"sudoku"}; + string[] fun_pages = { + "sudoku-testprint", + // "fortune-testprint" + }; page = fun_pages[GLib.Random.int_range (0, fun_pages.length)]; } string[] testprints = {"/data/" + page, "/data/" + page + ".ps"}; foreach (var testprint in testprints) { string filename = datadir + testprint; - stdout.printf(filename+"\n"); if (Posix.access (filename, Posix.R_OK) == 0) { return filename; } @@ -92,19 +94,19 @@ public class Printers.PrinterPage : Granite.SimpleSettingsPage { private void print_test_page () { // Ask the user if they want a fun test page - var dialog = new Granite.Dialog () { - // transient_for = window - }; + var dialog = new Granite.MessageDialog.with_image_from_icon_name ( + _("Do you want a practical or fun test page?"), + "", + "dialog-information", + Gtk.ButtonsType.CANCEL + ); + // TODO make function + var checkbox = new Gtk.CheckButton.with_label (_("Remember my choice")); + checkbox.show (); - dialog.get_content_area().add ( - new Gtk.Label (_("Do you want a fun or boring test page?")) { - xalign= 0, - xpad= 13 - } - ); + dialog.custom_bin.add (checkbox); - dialog.add_button (_("Cancel"), 0); dialog.add_button (_("Boring"), 1); dialog.add_button (_("Fun!"), 2);