def parseXmlImport(self, path): root = xml.etree.ElementTree.parse(path).getroot() if root.tag == 'data': Content.clearRegions() Content.data.children = [] for regionnode in root: if regionnode.tag == 'region': regionname = regionnode.attrib['id'] Content.allregions.append(regionname) for linenode in regionnode: lineid = linenode.attrib['id'] lineflag = linenode.attrib['flag'] entry = Content.data.addEntryPath(lineid) if lineflag == 'r': entry.entrytype = EntryType.DIARY region = entry.getRegion(regionname) # Ignore empty nodes if linenode.text and len(linenode.text) > 0: region.clearPages() linetext = linenode.text.split('%r') for line in linetext: line = line.replace('\\n', '\n') page = region.addPage() page.content = line if Content.region not in Content.allregions: Content.region = Content.allregions[0] Content.editEntry = None Content.markRestorePoint() Content.contentMutated()
def _actionDelete(self): deletetype = self.treeselection[4] entrypath = '' if Content.editEntry != None: entrypath = Content.editEntry.getPath() if deletetype == 'group': group = Content.data.findGroup(self.treeselection[0]) countchildren = group.countChildren() + 1 countentries = group.countEntries() countpages = group.countPages() message = 'Are you sure you want to delete \"' + group.id + '\"?\n\n' message += str( countchildren) + ' group(s) will be deleted containing ' message += str(countentries) + ' entries and ' message += str(countpages) + ' page(s).' if messagebox.askyesno('Delete Group?', message, default=messagebox.NO): group.parent.children.remove(group) group.parent.modified = True elif deletetype == 'entry': entry = Content.data.findEntry(self.treeselection[0]) if messagebox.askyesno('Delete Entry?', 'Are you sure you want to delete \"' + entry.id + '\"?\n\n' + str(len(entry.getPages())) + ' page(s) will be deleted.', default=messagebox.NO): if Content.editEntry == entry: Content.editEntry = None entry.parent.modified = True entry.parent.entries.remove(entry) Content.markRestorePoint() Content.checkEditPath(entrypath) Content.contentMutated()
def _pageModified(self, event): pane = self.pageEditPane.get('1.0', END).rstrip() self.page.content = pane self.page.parent.parent.modified = True # Content.markRestorePoint() # TODO this was too slow Content.contentMutated() self._updateDetails()
def _leftClickTreeRelease(self, event): if self.dragstate != DragState.NONE: if self.dragstate == DragState.SUCCESS: newparent = Content.data.findGroup( self._getItemPathByTreeId(self.tree.selection())) newparent.modified = True movetype = self.treeselection[4] if movetype == 'group': moveitem = Content.data.findGroup(self.treeselection[0]) moveitem.parent.children.remove(moveitem) moveitem.parent.modified = True moveitem.parent = newparent newparent.children.append(moveitem) newparent.sortGroups() elif movetype == 'entry': moveitem = Content.data.findEntry(self.treeselection[0]) moveitem.parent.entries.remove(moveitem) moveitem.parent.modified = True moveitem.parent = newparent newparent.entries.append(moveitem) newparent.sortEntries() Content.markRestorePoint() Content.contentMutated() self.tree.item(self._findTreeIndexByPath(newparent.getPath()), open=YES) self.tree.selection_set( self._findTreeIndexByPath(moveitem.getPath())) else: # If we didn't succeed, reset the selection back to the start self.tree.selection_set( self._findTreeIndexByPath(self.treeselection[0])) self.dragstate = DragState.NONE
def _doubleClickTree(self, event): iid = self.tree.identify_row(event.y) if iid: # We really only respond to double clicking on entries val = self._getItemValuesByTreeId(iid) if val[4] != 'entry': return Content.editEntry = Content.data.findEntry(val[0]) Content.contentMutated()
def _colorChanged(self, *args): if self.colorvar.get() == ' ': return newtype = EntryColors[self.colorvar.get()] if self.lastentry.entrycolor != newtype: self.lastentry.entrycolor = newtype self.lastentry.modified = True Content.markRestorePoint() Content.contentMutated()
def _typeChanged(self, *args): if self.typevar.get() == ' ': return newtype = EntryType[self.typevar.get()] if self.lastentry.entrytype != newtype: self.lastentry.entrytype = newtype self.lastentry.modified = True Content.markRestorePoint() Content.contentMutated()
def _actionDuplicate(self): duplicatetype = self.treeselection[4] if duplicatetype == 'group': group = Content.data.findGroup(self.treeselection[0]) self.verifygroup = group.parent group.parent.addGroup( self._incrementName(group.id, self._validateGroup)) group.parent.modified = True elif duplicatetype == 'entry': entry = Content.data.findEntry(self.treeselection[0]) self.verifygroup = entry.parent entry.parent.addEntry( self._incrementName(entry.id, self._validateEntry)) entry.parent.modified = True Content.markRestorePoint() Content.contentMutated()
def _actionNewGroup(self): self.verifygroup = Content.data.findGroup(self.treeselection[0]) popup = PopupDialog(self.master, "New Group", validate=self._validateGroup) if popup.result: result = self.verifygroup.addGroup(popup.result) self.verifygroup.modified = True Content.markRestorePoint() Content.contentMutated() iid = self._findTreeIndexByPath(result.parent.getPath()) if iid: self.tree.item(iid, open=YES) iid = self._findTreeIndexByPath(result.getPath()) if iid: self.tree.selection_set(iid)
def _selectRegion(self, region): if region == newid: self.regionstring.set(Content.region) popup = PopupDialog(self.master, title='New Region Id', label='Id:', validate=self._validateRegion) if popup.result: Content.region = popup.result Content.allregions.append(popup.result) self.regionstring.set(Content.region) self._rebuildOptions() Content.contentMutated() return if region != Content.region: Content.region = region Content.contentMutated()
def parseXmlProject(self, content): # This comes in as a pre-parsed string since it can be from memory # This doesn't change the modified flags, since it can be undone / redone root = xml.etree.ElementTree.fromstring(content) Content.clearRegions() editpath = '' if Content.editEntry != None: editpath = Content.editEntry.getPath() # Top level parsing for n in root: if n.tag == 'info': self._parseInfoNode(n) elif n.tag == 'group': Content.data = self._parseGroupNode(n, None) else: print(n.tag) Content.checkEditPath(editpath) Content.data.sortEntries() Content.contentMutated()
def _actionRename(self): renametype = self.treeselection[4] if renametype == 'group': group = Content.data.findGroup(self.treeselection[0]) self.verifygroup = group.parent popup = PopupDialog(self.master, 'Rename Group', inittext=group.id, validate=self._validateGroup) if popup.result: openstate = self.tree.item(self.tree.selection())['open'] group.id = popup.result group.modified = True group.parent.sortGroups() Content.markRestorePoint() Content.contentMutated() iid = self._findTreeIndexByPath(group.getPath()) if iid: self.tree.selection_set(iid) self.tree.item(iid, open=openstate) elif renametype == 'entry': entry = Content.data.findEntry(self.treeselection[0]) self.verifygroup = entry.parent popup = PopupDialog(self.master, 'Rename Entry', inittext=entry.id, validate=self._validateEntry) if popup.result: entry.id = popup.result entry.modified = True entry.parent.sortEntries() Content.markRestorePoint() Content.contentMutated() iid = self._findTreeIndexByPath(entry.getPath()) if iid: self.tree.selection_set(iid)
def _rebuildContent(self): self._rebuildPage() Content.contentMutated()