예제 #1
0
 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()
예제 #2
0
 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()
예제 #3
0
 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()
예제 #4
0
 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
예제 #5
0
 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()
예제 #6
0
 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()
예제 #7
0
 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()
예제 #8
0
 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()
예제 #9
0
 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)
예제 #10
0
 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()
예제 #11
0
 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()
예제 #12
0
 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)
예제 #13
0
 def _rebuildContent(self):
     self._rebuildPage()
     Content.contentMutated()