def loadContent(self): logger.debug("GUI: Loading character tree content") # Store currently selected item selHandle = None listModel, pathList = self.treeSelect.get_selected_rows() for pathItem in pathList: listIter = listModel.get_iter(pathItem) selHandle = listModel.get_value(listIter,self.COL_HANDLE) # Make unselectable and clear self.treeSelect.set_mode(Gtk.SelectionMode.NONE) self.listStore.clear() for treeHandle in self.theBook.theTree.treeOrder: treeItem = self.theBook.getItem(treeHandle) itemHandle = treeItem["handle"] itemParent = treeItem["parent"] itemName = treeItem["entry"].itemName itemClass = treeItem["entry"].itemClass itemLevel = treeItem["entry"].itemLevel itemType = treeItem["entry"].itemType if not itemClass == "CONTAINER": continue if not itemLevel == "ITEM": continue if not itemType == "CHAR": continue logger.vverbose("GUI: Adding %s '%s'" % (itemLevel,itemName)) itemImportance = treeItem["entry"].itemImportance itemRole = treeItem["entry"].itemRole itemComment = treeItem["entry"].itemComment tmpIter = self.listStore.append([ encodeString(itemName), itemImportance, encodeString(itemRole), encodeString(itemComment), itemHandle ]) self.iterMap[itemHandle] = tmpIter self.treeSelect.set_mode(Gtk.SelectionMode.SINGLE) # Restore selected item state if selHandle is not None: newIter = self.getIter(selHandle) self.treeSelect.select_iter(newIter) return
def openBook(self, bookPath, openRecent=False): if openRecent: bookPath = self.mainConf.getLastBook() logger.info("BookOpen: Opening last book project from %s" % bookPath) if path.isfile(bookPath): self.theBook.openBook(bookPath) else: logger.info("BookOpen: Project file not found") self.theBook.createBook() else: if path.isfile(bookPath): logger.info("BookOpen: Opening book project from %s" % bookPath) self.theBook.openBook(bookPath) else: logger.info("BookOpen: Project file not found") self.winMain.treeLeft.loadContent() self.bookPage.treeChapters.loadContent() self.charPage.treeChars.loadContent() self.plotPage.treePlots.loadContent() self.timeLine.loadContent() bookTitle = self.theBook.bookTitle bookAuthors = ", ".join(self.theBook.bookAuthors) winTitle = "%s – novelWriter v%s" % (bookTitle, nw.__version__) self.winMain.set_title(winTitle) self.bookPage.entryBookTitle.set_text(encodeString(bookTitle)) self.bookPage.entryBookAuthor.set_text(encodeString(bookAuthors)) self.mainConf.setLastBook(bookPath) return
def onChapterToggle(self, guiObject, itemPath, itemTag): srcTree = self.bookPage.treeChapters handleCol = srcTree.COL_HANDLE if itemTag == "compile": srcColumn = srcTree.COL_COMPILE itemHandle = srcTree.listStore[itemPath][handleCol] currState = srcTree.listStore[itemPath][srcColumn] self.theBook.updateItem(itemHandle, itemTag, not currState) parsedValue = self.theBook.getItem(itemHandle)["entry"].getFromTag( itemTag) srcTree.listStore[itemPath][srcColumn] = encodeString(parsedValue) self.winMain.treeLeft.loadContent() return
def onPlotEdit(self, guiObject, itemPath, editText, itemTag): srcTree = self.plotPage.treePlots handleCol = srcTree.COL_HANDLE if itemTag == "name": srcColumn = srcTree.COL_TITLE if itemTag == "importance": srcColumn = srcTree.COL_IMPORTANCE if itemTag == "comment": srcColumn = srcTree.COL_COMMENT itemHandle = srcTree.listStore[itemPath][handleCol] self.theBook.updateItem(itemHandle, itemTag, editText) parsedValue = self.theBook.getItem(itemHandle)["entry"].getFromTag( itemTag) srcTree.listStore[itemPath][srcColumn] = encodeString(parsedValue) self.winMain.treeLeft.loadContent() return
def onChapterEdit(self, guiObject, itemPath, editText, itemTag): srcTree = self.bookPage.treeChapters handleCol = srcTree.COL_HANDLE if itemTag == "subtype": srcColumn = srcTree.COL_TYPE if itemTag == "number": srcColumn = srcTree.COL_NUMBER if itemTag == "name": srcColumn = srcTree.COL_TITLE if itemTag == "comment": srcColumn = srcTree.COL_COMMENT itemHandle = srcTree.listStore[itemPath][handleCol] self.theBook.updateItem(itemHandle, itemTag, editText) parsedValue = self.theBook.getItem(itemHandle)["entry"].getFromTag( itemTag) srcTree.listStore[itemPath][srcColumn] = encodeString(parsedValue) self.winMain.treeLeft.loadContent() return
def loadContent(self): logger.debug("GUI: Loading main tree content") # Store currently selected item selHandle = None listModel, pathList = self.treeSelect.get_selected_rows() for pathItem in pathList: listIter = listModel.get_iter(pathItem) selHandle = listModel.get_value(listIter, self.COL_HANDLE) # Make unselectable and clear self.treeSelect.set_mode(Gtk.SelectionMode.NONE) self.treeStore.clear() for treeHandle in self.theBook.theTree.treeOrder: treeItem = self.theBook.getItem(treeHandle) itemHandle = treeItem["handle"] itemParent = treeItem["parent"] itemName = treeItem["entry"].itemName itemLevel = treeItem["entry"].itemLevel itemClass = treeItem["entry"].itemClass logger.vverbose("GUI: Adding %s '%s'" % (itemLevel, itemName)) wordCount = treeItem["entry"].metaWordCount if itemParent is None: parIter = None else: if itemParent in self.iterMap: parIter = self.iterMap[itemParent] else: logger.error("Item encountered before its parent") parIter = None if itemClass == BookItem.CLS_CONT: itemTitle = "<b>%s</b>" % itemName else: itemTitle = itemName if itemLevel == BookItem.LEV_FILE: if wordCount is None: wordCount = "<i>0</i>" else: wordCount = "<i>%s</i>" % str(wordCount) else: wordCount = None tmpIter = self.treeStore.append(parIter, [ encodeString(itemTitle), "0", wordCount, encodeString(itemName), itemHandle ]) self.iterMap[itemHandle] = tmpIter # Expand all nodes, and reactivate # TODO: Should restore previous expanded state, or update tree rater than repopulate self.expand_all() self.treeSelect.set_mode(Gtk.SelectionMode.SINGLE) # Restore selected item state if selHandle is not None: newIter = self.getIter(selHandle) self.treeSelect.select_iter(newIter) return