diff --git a/data/uberwriter.gresource.xml b/data/uberwriter.gresource.xml index 2f90616..9be8947 100644 --- a/data/uberwriter.gresource.xml +++ b/data/uberwriter.gresource.xml @@ -7,6 +7,7 @@ media/icons/preview-layout-half-height-symbolic.svg media/css/gtk/base.css ui/Export.ui + ui/ExportPopover.ui ui/Menu.ui ui/Preferences.ui ui/Recents.ui diff --git a/data/ui/ExportPopover.ui b/data/ui/ExportPopover.ui new file mode 100644 index 0000000..d164a1e --- /dev/null +++ b/data/ui/ExportPopover.ui @@ -0,0 +1,101 @@ + + + + + + False + + + True + False + 12 + vertical + + + True + True + True + app.save_as + Save as... + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + True + True + app.export + "pdf" + Pdf + + + False + True + 2 + + + + + True + True + True + app.export + "html" + Html + + + False + True + 3 + + + + + True + True + True + app.export + "odt" + ODT + + + False + True + 4 + + + + + True + True + True + app.export + "advanced" + Advanced + + + False + True + 5 + + + + + + \ No newline at end of file diff --git a/data/ui/Headerbar.ui b/data/ui/Headerbar.ui index 15497ab..051366f 100644 --- a/data/ui/Headerbar.ui +++ b/data/ui/Headerbar.ui @@ -46,97 +46,6 @@ False view-restore-symbolic - - False - - - True - False - 12 - 12 - 12 - 12 - vertical - - - True - True - True - app.save_as - Save as... - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - True - True - Pdf - - - False - True - 2 - - - - - True - True - True - Html - - - False - True - 3 - - - - - True - True - True - ODT - - - False - True - 4 - - - - - True - True - True - Advanced - - - False - True - 5 - - - - - True False @@ -331,7 +240,6 @@ True True Save as... - export_menu diff --git a/uberwriter/application.py b/uberwriter/application.py index c1a7959..1aeaac9 100644 --- a/uberwriter/application.py +++ b/uberwriter/application.py @@ -90,7 +90,7 @@ class Application(Gtk.Application): action.connect("activate", self.on_save_as) self.add_action(action) - action = Gio.SimpleAction.new("export", None) + action = Gio.SimpleAction.new("export", GLib.VariantType("s")) action.connect("activate", self.on_export) self.add_action(action) @@ -246,8 +246,8 @@ class Application(Gtk.Application): def on_save_as(self, _action, _value): self.window.save_document_as() - def on_export(self, _action, _value): - self.window.open_advanced_export() + def on_export(self, _action, value): + self.window.open_advanced_export(value.get_string()) def on_copy_html(self, _action, _value): self.window.copy_html_to_clipboard() diff --git a/uberwriter/export_dialog.py b/uberwriter/export_dialog.py index 2c5b0c4..f31b7ea 100644 --- a/uberwriter/export_dialog.py +++ b/uberwriter/export_dialog.py @@ -39,6 +39,35 @@ class Export: __gtype_name__ = "export_dialog" + export_menu = { + "pdf": + { + "extension": "pdf", + "name": "PDF", + "mimetype": "application/pdf", + "dialog": regular_export_dialog() + }, + "html": + { + "extension": "html", + "name": "HTML", + "mimetype": "text/html" + }, + "odt": + { + "extension": "odt", + "name": "ODT", + "mimetype": "application/vnd.oasis.opendocument.text" + }, + "advanced": + { + "extension": "", + "name": "", + "mimetype": "", + "dialog": advanced_export_dialog() + }, + } + formats = [ { "name": "LaTeX (pdf)", @@ -147,12 +176,30 @@ class Export: } ] - def __init__(self, filename): - """Set up the about dialog""" + def __init__(self, filename, export_format): + """Set up the export dialog""" self.builder = Gtk.Builder() self.builder.add_from_resource( "/de/wolfvollprecht/UberWriter/ui/Export.ui") - self.dialog = self.builder.get_object("Export") + #self.dialog = self.builder.get_object("Export") + + self.dialog = Gtk.FileChooserNative.new(_("Export"), + None, + Gtk.FileChooserAction.SAVE, + _("Export to %s") % + self.export_menu[export_format]["extension"], + _("Cancel")) + print(self.export_menu[export_format]["mimetype"]) + filter = Gtk.FileFilter.new() + filter.set_name(self.export_menu[export_format]["name"]) + filter.add_mime_type(self.export_menu[export_format]["mimetype"]) + self.dialog.add_filter(filter) + self.dialog.set_do_overwrite_confirmation(True) + self.dialog.set_current_name("%s.%s" % (filename, self.export_menu[export_format]["extension"])) + #filechooser.connect("response", self.__on_save_response) + #filechooser.run() + + self.stack = self.builder.get_object("export_stack") self.stack_switcher = self.builder.get_object("format_switcher") @@ -196,6 +243,9 @@ class Export: self.format_field.add_attribute(format_renderer, "text", 1) self.format_field.set_active(0) + def regular_export_dialog(): + + def export(self, text=""): """Export the given text using the specified format. For advanced export, this includes special flags for the enabled options. @@ -330,6 +380,7 @@ class Export: else: export_btn.set_sensitive(True) + def disabled_text(): """Return the TexLive installation instructions diff --git a/uberwriter/headerbars.py b/uberwriter/headerbars.py index 3ffc9a5..d72f3b0 100644 --- a/uberwriter/headerbars.py +++ b/uberwriter/headerbars.py @@ -42,6 +42,8 @@ class BaseHeaderbar: self.builder = Gtk.Builder() self.builder.add_from_resource( "/de/wolfvollprecht/UberWriter/ui/Headerbar.ui") + self.builder.add_from_resource( + "/de/wolfvollprecht/UberWriter/ui/ExportPopover.ui") self.hb = self.builder.get_object( "Headerbar") @@ -63,8 +65,11 @@ class BaseHeaderbar: self.menu_button = self.builder.get_object("menu_button") self.recents_button = self.builder.get_object("recents_button") self.export_button = self.builder.get_object("export_button") + export_popover = self.builder.get_object("export_menu") self.preview_switch_button = self.builder.get_object("preview_switch_button") + self.export_button.set_popover(export_popover) + add_menus(self, app) settings = Gtk.Settings.get_default() diff --git a/uberwriter/main_window.py b/uberwriter/main_window.py index 06a0682..c5e3f14 100644 --- a/uberwriter/main_window.py +++ b/uberwriter/main_window.py @@ -544,11 +544,11 @@ class MainWindow(StyledWindow): self.searchreplace.toggle_search(replace=replace) - def open_advanced_export(self, _widget=None, _data=None): + def open_advanced_export(self, export_format): """open the export and advanced export dialog """ - self.export = Export(self.filename) + self.export = Export(self.filename, export_format) self.export.dialog.set_transient_for(self) response = self.export.dialog.run()