make new export dialogs actually work

ui
Manuel Genoves 2020-03-11 02:54:56 +01:00
parent ef04a90fd7
commit 7a8d3a8459
3 changed files with 47 additions and 69 deletions

View File

@ -500,6 +500,9 @@
<property name="position">1</property>
</packing>
</child>
<style>
<class name="linked"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
@ -510,10 +513,15 @@
<object class="GtkDialog" id="Export">
<property name="can_focus">False</property>
<property name="type_hint">dialog</property>
<action-widgets>
<action-widget response="cancel">cancel_btn</action-widget>
<action-widget response="accept" default="true">export_btn</action-widget>
</action-widgets>
<child type="titlebar">
<object class="GtkHeaderBar" id="Export_hb">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_subtitle">False</property>
<child>
<object class="GtkButton" id="cancel_btn">
<property name="label">gtk-cancel</property>
@ -526,12 +534,6 @@
<property name="position">1</property>
</packing>
</child>
<child type="title">
<object class="GtkStackSwitcher" id="format_switcher">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkButton" id="export_btn">
<property name="label" translatable="yes">Export</property>
@ -566,6 +568,8 @@
<object class="GtkFileChooserWidget" id="advanced">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action">select-folder</property>
<property name="do_overwrite_confirmation">True</property>
<property name="extra_widget">advanced_export_options</property>
</object>
<packing>

View File

@ -24,7 +24,7 @@ from gettext import gettext as _
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gtk, GLib
from uberwriter import helpers
from uberwriter.theme import Theme
@ -147,7 +147,7 @@ class Export:
}
]
def __init__(self, filename, export_format):
def __init__(self, filename, export_format, text):
"""Set up the export dialog"""
self.export_menu = {
@ -186,41 +186,23 @@ class Export:
self.dialog = self.export_menu[export_format]["dialog"]()
response = self.dialog.run()
if response == Gtk.ResponseType.ACCEPT:
try:
self.export(export_format, text)
except (NotADirectoryError, Exception) as e:
dialog = Gtk.MessageDialog(None,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.ERROR,
Gtk.ButtonsType.CLOSE,
_("An error happened while trying to export:\n\n{err_msg}")
.format(err_msg= str(e).encode().decode("unicode-escape"))
)
dialog.run()
dialog.destroy()
#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")
#stack_pdf_disabled = self.builder.get_object("pdf_disabled")
filename = filename or _("Untitled document.md")
#self.filechoosers = {export_format: self.stack.get_child_by_name(export_format)
# for export_format in ["pdf", "html", "advanced"]}
#for export_format, filechooser in self.filechoosers.items():
# filechooser.set_do_overwrite_confirmation(True)
# filechooser.set_current_folder(os.path.dirname(filename))
# if export_format == "advanced":
# self.adv_export_name = self.builder.get_object("advanced_export_name")
# self.adv_export_name.set_text(os.path.basename(filename)[:-3])
# else:
# filechooser.set_current_name(os.path.basename(filename)[:-2] + export_format)
# Disable pdf if Texlive not installed
#texlive_installed = helpers.exist_executable("pdftex")
#if not texlive_installed:
# self.filechoosers["pdf"].set_visible(False)
# stack_pdf_disabled.set_visible(True)
# stack_pdf_disabled.set_text(disabled_text())
# stack_pdf_disabled.set_justify(Gtk.Justification.CENTER)
# self.stack.connect('notify', self.allow_export, 'visible_child_name')
def regular_export_dialog(self):
texlive_installed = helpers.exist_executable("pdftex")
@ -235,7 +217,6 @@ class Export:
dialog.props.secondary_text = _("Seems that you don't have TexLive installed.\n" +
disabled_text())
else:
dialog = Gtk.FileChooserNative.new(_("Export"),
None,
@ -249,19 +230,18 @@ class Export:
dialog.add_filter(dialog_filter)
dialog.set_do_overwrite_confirmation(True)
dialog.set_current_folder(os.path.dirname(self.filename))
dialog.set_current_name("%s.%s" % (os.path.basename(self.filename)[:-2],
self.export_menu[self.export_format]["extension"]))
dialog.set_current_name(os.path.basename(self.filename)[:-2] +
self.export_menu[self.export_format]["extension"])
return dialog
def advanced_export_dialog(self):
self.builder = Gtk.Builder()
self.builder.add_from_resource(
"/de/wolfvollprecht/UberWriter/ui/Export.ui")
return self.builder.get_object("Export")
self.builder.get_object("highlight_style").set_active(0)
self.builder.get_object("css_filechooser").set_uri(
helpers.path_to_file(Theme.get_current().web_css_path))
@ -276,8 +256,14 @@ class Export:
self.format_field.add_attribute(format_renderer, "text", 1)
self.format_field.set_active(0)
self.adv_export_folder = self.builder.get_object("advanced")
def export(self, text=""):
self.adv_export_name = self.builder.get_object("advanced_export_name")
self.adv_export_name.set_text(os.path.basename(self.filename)[:-3])
return self.builder.get_object("Export")
def export(self, export_type, text=""):
"""Export the given text using the specified format.
For advanced export, this includes special flags for the enabled options.
@ -285,11 +271,16 @@ class Export:
text {str} -- Text to export (default: {""})
"""
export_type = self.stack.get_visible_child_name()
args = []
if export_type == "advanced":
filename = self.adv_export_name.get_text()
output_dir = os.path.abspath(self.filechoosers["advanced"].get_current_folder())
# TODO: use walrust operator
output_uri = self.adv_export_folder.get_uri()
if output_uri:
output_dir = GLib.filename_from_uri(output_uri)[0]
else:
raise NotADirectoryError(_("A folder must be selected before proceeding"))
basename = os.path.basename(filename)
fmt = self.formats[self.format_field.get_active()]
@ -304,7 +295,7 @@ class Export:
args.extend(self.get_advanced_arguments())
else:
filename = self.filechoosers[export_type].get_filename()
filename = self.dialog.get_filename()
if filename.endswith("." + export_type):
filename = filename[:-len(export_type)-1]
output_dir = os.path.abspath(os.path.join(filename, os.path.pardir))

View File

@ -547,26 +547,9 @@ class MainWindow(StyledWindow):
def open_advanced_export(self, export_format):
"""open the export and advanced export dialog
"""
text = bytes(self.text_view.get_text(), "utf-8")
self.export = Export(self.filename, export_format)
self.export.dialog.set_transient_for(self)
response = self.export.dialog.run()
if response == 1:
try:
self.export.export(bytes(self.text_view.get_text(), "utf-8"))
except Exception as e:
dialog = Gtk.MessageDialog(self,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.ERROR,
Gtk.ButtonsType.CLOSE,
_("An error happened while trying to export:\n\n{err_msg}")
.format(err_msg= str(e).encode().decode("unicode-escape"))
)
dialog.run()
dialog.destroy()
self.export.dialog.destroy()
self.export = Export(self.filename, export_format, text)
def open_recent(self, _widget, data=None):
"""open the given recent document