Implement creation of new project via dialog

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
TheJackiMonster 2023-03-21 22:36:36 +01:00
parent 960691e387
commit 5276ee81f1
No known key found for this signature in database
GPG key ID: D850A5F772E880F9
6 changed files with 64 additions and 13 deletions

View file

@ -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()

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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()