mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-17 03:12:27 +12:00
Implement creation of new project via dialog
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
parent
960691e387
commit
5276ee81f1
|
@ -317,6 +317,10 @@ class Outline(AbstractData):
|
|||
|
||||
AbstractData.load(self)
|
||||
|
||||
if not os.path.isdir(self.dataPath):
|
||||
self.complete(False)
|
||||
return
|
||||
|
||||
names = os.listdir(self.dataPath)
|
||||
names.sort()
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ class MskFile(TextFile, ZipFile):
|
|||
try:
|
||||
_ZipFile(path)
|
||||
directoryPath = None
|
||||
except BadZipFile:
|
||||
except (BadZipFile, FileNotFoundError):
|
||||
directoryPath = os.path.splitext(path)[0]
|
||||
|
||||
if not os.path.isdir(directoryPath):
|
||||
|
@ -47,7 +47,8 @@ class MskFile(TextFile, ZipFile):
|
|||
if not os.path.isdir(self.directoryPath):
|
||||
os.mkdir(self.directoryPath)
|
||||
|
||||
ZipFile.load(self)
|
||||
if os.path.exists(self.path):
|
||||
ZipFile.load(self)
|
||||
|
||||
self.zipFile = zipFile
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ from gi.repository import GObject, Gtk
|
|||
from manuskript.ui.chooser.fileFilter import FileFilter
|
||||
|
||||
|
||||
def openFileDialog(window, fileFilter: FileFilter = None) -> str | None:
|
||||
def openFileDialog(window, fileFilter_: FileFilter = None, appendAllFilter: bool = True) -> str | None:
|
||||
dialog = Gtk.FileChooserDialog(
|
||||
"Please choose a file",
|
||||
window,
|
||||
|
@ -19,9 +19,13 @@ def openFileDialog(window, fileFilter: FileFilter = None) -> str | None:
|
|||
Gtk.STOCK_OPEN, Gtk.ResponseType.OK)
|
||||
)
|
||||
|
||||
if fileFilter is not None:
|
||||
fileFilter.addToChooser(dialog)
|
||||
FileFilter("All files", "*").addToChooser(dialog)
|
||||
dialog.set_default_response(Gtk.ResponseType.OK)
|
||||
|
||||
if fileFilter_ is not None:
|
||||
fileFilter_.addToChooser(dialog)
|
||||
|
||||
if appendAllFilter:
|
||||
FileFilter("All files").addToChooser(dialog)
|
||||
|
||||
response = dialog.run()
|
||||
result = None
|
||||
|
@ -31,3 +35,34 @@ def openFileDialog(window, fileFilter: FileFilter = None) -> str | None:
|
|||
|
||||
dialog.destroy()
|
||||
return result
|
||||
|
||||
|
||||
def saveFileDialog(window, fileFilter_: FileFilter = None, appendAllFilter: bool = True) -> str | None:
|
||||
dialog = Gtk.FileChooserDialog(
|
||||
"Please choose a file",
|
||||
window,
|
||||
Gtk.FileChooserAction.SAVE,
|
||||
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
||||
Gtk.STOCK_SAVE, Gtk.ResponseType.OK)
|
||||
)
|
||||
|
||||
dialog.set_default_response(Gtk.ResponseType.OK)
|
||||
|
||||
if fileFilter_ is not None:
|
||||
fileFilter_.addToChooser(dialog)
|
||||
|
||||
if appendAllFilter:
|
||||
FileFilter("All files").addToChooser(dialog)
|
||||
|
||||
response = dialog.run()
|
||||
result = None
|
||||
|
||||
if response == Gtk.ResponseType.OK:
|
||||
result = dialog.get_filename()
|
||||
|
||||
if ((fileFilter_ is not None) and (fileFilter_.name == dialog.get_filter().get_name()) and
|
||||
(not result.endswith("." + fileFilter_.extension))):
|
||||
result += "." + fileFilter_.extension
|
||||
|
||||
dialog.destroy()
|
||||
return result
|
||||
|
|
|
@ -10,13 +10,13 @@ from gi.repository import GObject, Gtk
|
|||
|
||||
class FileFilter:
|
||||
|
||||
def __init__(self, name: str, pattern: str):
|
||||
def __init__(self, name: str, extension: str = ""):
|
||||
self.name = name
|
||||
self.pattern = pattern
|
||||
self.extension = extension
|
||||
|
||||
def addToChooser(self, chooser: Gtk.FileChooser):
|
||||
fileFilter = Gtk.FileFilter()
|
||||
fileFilter.set_name(self.name)
|
||||
fileFilter.add_pattern(self.pattern)
|
||||
fileFilter.add_pattern("*.{}".format(self.extension) if len(self.extension) > 0 else "*")
|
||||
|
||||
chooser.add_filter(fileFilter)
|
||||
|
|
|
@ -126,7 +126,7 @@ class MainWindow:
|
|||
self.startupWindow.show()
|
||||
|
||||
def _openAction(self, menuItem: Gtk.MenuItem):
|
||||
path = openFileDialog(self.window, FileFilter("Manuskript project", "*.msk"))
|
||||
path = openFileDialog(self.window, FileFilter("Manuskript project", "msk"))
|
||||
if path is None:
|
||||
return
|
||||
|
||||
|
|
|
@ -6,11 +6,11 @@ import gi
|
|||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import GObject, Gtk, Handy
|
||||
|
||||
from manuskript.data import Template, TemplateKind
|
||||
from manuskript.data import Project, Template, TemplateKind
|
||||
from manuskript.util import validInt, validString, parseFilenameFromURL
|
||||
|
||||
from manuskript.ui.abstractDialog import AbstractDialog
|
||||
from manuskript.ui.chooser import openFileDialog, FileFilter
|
||||
from manuskript.ui.chooser import openFileDialog, saveFileDialog, FileFilter
|
||||
from manuskript.ui.startup import TemplateEntry
|
||||
from manuskript.ui.util import bindMenuItem
|
||||
|
||||
|
@ -116,6 +116,7 @@ class StartupWindow(AbstractDialog):
|
|||
self.createButton = builder.get_object("create_button")
|
||||
|
||||
self.openButton.connect("clicked", self._openClicked)
|
||||
self.createButton.connect("clicked", self._createClicked)
|
||||
|
||||
def loadTemplate(self, template: Template):
|
||||
self.template = template
|
||||
|
@ -172,7 +173,7 @@ class StartupWindow(AbstractDialog):
|
|||
self.loadTemplate(self.template)
|
||||
|
||||
def openProject(self):
|
||||
path = openFileDialog(self.window, FileFilter("Manuskript project", "*.msk"))
|
||||
path = openFileDialog(self.window, FileFilter("Manuskript project", "msk"))
|
||||
if path is None:
|
||||
return
|
||||
|
||||
|
@ -181,6 +182,16 @@ class StartupWindow(AbstractDialog):
|
|||
def _openClicked(self, button: Gtk.Button):
|
||||
self.openProject()
|
||||
|
||||
def _createClicked(self, button: Gtk.Button):
|
||||
path = saveFileDialog(self.window, FileFilter("Manuskript project", "msk"), appendAllFilter=False)
|
||||
if path is None:
|
||||
return
|
||||
|
||||
project = Project(path)
|
||||
project.save()
|
||||
|
||||
self.mainWindow.openProject(path)
|
||||
|
||||
def _openAction(self, menuItem: Gtk.MenuItem):
|
||||
self.openProject()
|
||||
|
||||
|
|
Loading…
Reference in a new issue