forked from Mirrors/apostrophe
make new export dialogs actually work
parent
ef04a90fd7
commit
7a8d3a8459
|
@ -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>
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue