def display_about_dialog_callback(self, w, data): """ This method is used for displaying "About DBR" notice """ play = False program_name = "DBR" authors = ["Rafael Cantos Villanueva", "Francisco Javier Dorado Martínez"] translations = _("This program has been translated by:\n\nJuan C. Buño\nHammer Attila\n") license = _( "This program is under GNU/General Public License version 3. See accompanying COPYING file for more details." ) version = pkg_resources.require("dbr")[0].version copyright = "Copyright 2008 Rafael Cantos Villanueva" website = "http://dbr.sourceforge.net" ADlg = gtk.AboutDialog() if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() ADlg.set_program_name(program_name) ADlg.set_version(version) ADlg.set_copyright(copyright) ADlg.set_authors(authors) ADlg.set_translator_credits(translations) ADlg.set_license(license) ADlg.set_website(website) ADlg.connect("response", self.close_about_dialog_callback) ADlg.show()
def downVolumeCallback(self, w, data): """ Change down the volume """ if self.bookOpened(): self.p.changeVolume(-1) else: self.showMessage(_("Warning"), _("There are currently no playing book"))
def switchStateCallback(self, w, data): """ Switch between play and pause """ if self.bookOpened(): self.p.playPause() else: self.showMessage(_("Warning"), _("There are currently no playing book"))
def toggleMuteCallback(self, w, data): """ Toggles the mute """ if self.bookOpened(): self.p.mute() else: self.showMessage(_("Warning"), _("There are currently no playing book"))
def stopCallback(self, w, data): """ Stops the playback and checks if there is any opened book """ if self.bookOpened(): self.p.stop() self.syncViewAudio(False) else: self.showMessage(_("Warning"), _("Tehre are currently no playing book"))
def goToPriorChapterCallback(self, w, data): """ Goto prior chapter """ if self.bookOpened(): switch = self.b.nextOrPriorChapter(-1) if switch == 1: self.p.stop() self.b.setReadPosition(self.b.ncc_pos, 0) self.syncViewAudio() else: self.showMessage(_("Warning"), _("There are currently no playing book"))
def deleteBookmarkCallback(self, w, data): """ Prompts for deletion of bookmark """ play = False if self.bookOpened(): book_title = self.b.getBookTitle() bookmarks = self.sets.getBookmarksForBook(book_title) if self.p.getState() == "Playing": play = True self.p.playPause() if bookmarks != []: bookmarks_names = [] for i in range(len(bookmarks)): bookmarks_names.append(bookmarks[i][0]) bookmark_index = self.showCombobox( _("Bookmarks deletion"), _("Choose the bookmark which you want to delete"), bookmarks_names ) if bookmark_index != None: self.sets.deleteBookmark(book_title, bookmark_index) else: self.showMessage(_("Warning"), _("You have not selected any bookmark")) else: self.showMessage(_("Warning"), _("Don't exist bookmarks for this book")) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("Tehre are currently no playing book"))
def displayChaptersCallback(self, w, data): """ Displays the chapters list """ play = False if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() chapters, chapters_pos = self.b.getChapters() if chapters != []: chapter_pos = self.showCombobox( _("Goo to chapter"), _("Select which chapter do you want to go"), chapters ) if chapter_pos != None: self.p.stop() self.syncViewAudio() # here? else: self.showMessage(_("Warning"), _("You have not selected any chapter")) else: self.showMessage(_("Error"), _("Don't exist any chapter in the book")) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("There are currently no playing book"))
def displayBookmarksCallback(self, w, data): """ Displays a list of bookmarks """ play = False if self.bookOpened(): book_title = self.b.getBookTitle() bookmarks = self.sets.getBookmarksForBook(book_title) if self.p.getState() == "Playing": play = True self.p.playPause() if bookmarks != []: bookmarks_names = [] for i in range(len(bookmarks)): bookmarks_names.append(bookmarks[i][0]) bookmark_index = self.showCombobox( _("Bookmark list"), _("Choose the bookmark which you want to go"), bookmarks_names ) if bookmark_index != None: self.p.stop() self.b.setReadPosition(bookmarks[bookmark_index][1], bookmarks[bookmark_index][2]) self.syncViewAudio() else: self.showMessage(_("Warning"), _("You have not selected any bookmark")) else: self.showMessage(_("Warning"), _("There are not bookmarks for this book")) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("Tehre are currently no playing book"))
def displayBookTranslationCallback(self, w, data): """ Displays book translation information """ play = False if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() info = self.b.getBookTranslationInfo() self.showMessage(_("Book translation information"), info) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("There are currently no playing book"))
def displayBookDurationCallback(self, w, data): """ Display current book duration in hh:mm:ss format """ play = False if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() duration = self.b.getBookDuration() duration_formated = self.b.getFormatedTime(duration) self.showMessage(_("Total book's playback time"), duration_formated) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("Tehre are currently no playing book"))
def displayLicenseCallback(self, w, data): """ Display license notice """ play = False if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() if os.path.exists("docs/licencia.html"): os.system("firefox docs/licencia.html") else: self.showMessage(_("Warning!"), _("The help file can not be found")) if self.bookOpened(): if self.p.getState() == "Paused" and play: self.p.playPause()
def openRecentBookCallback(self, w, data): """ Open a recently opened book """ play = False if self.p.getState() == "Playing": play = True self.p.playPause() books = self.sets.getBooks() if books != []: book_titles = [] for i in range(len(books)): book_titles.append(books[i][0]) book_index = self.showCombobox( _("Recently opened books"), _("Choose the book which you want to open"), book_titles ) if book_index != None: aux_book = book.Book(books[book_index][1]) if aux_book.getBookTitle() == books[book_index][0]: self.p.stop() self.v.clearModel() self.b = aux_book self.v.displayBook(self.b.getNcc()) self.syncViewAudio() else: self.showMessage( _("Warning"), _("Specified book doesn't match with the book currently in that path") ) else: self.showMessage("Warning", _("You have not selected any book")) else: self.showMessage(_("Warning"), _("There are no saved books")) if (self.p.getState() == "Paused") and play: self.p.playPause()
def displayCurrentPlayingTimeCallback(self, w, data): """ Displays playing time in hh:mm:ss format """ play = False if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() pos = self.p.getCurrentNs() pos = pos / 1000000000 seconds, aux = self.b.getPlayingTime() t = seconds + (pos - aux) duration = self.b.getFormatedTime(t) self.showMessage(_("Elapsed playback time"), duration) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("Tehre are currently no playing book"))
def newWindow(self): """ Creates the main window for the application """ window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.connect("destroy", self.destroyApplication) # Translators: this string the main DBR window title window.set_title(_("Daisy Book Reader")) window.set_border_width(1) window.set_default_size(640, 480) return window
def displayBook(self, list): """ Displays book when starting application """ self.clearModel() l = [] for x in range(len(list)): y = list[x].childNodes z = y[0].firstChild.toprettyxml() l.append(y[0]) iter = self.treestore.append(None, ['%s' % z]) title = self.c.displayBookTitle() # Translators: this string the DBR application window title when the user opening a daisy book. %s variable containing the opened daisy book title self.window.set_title(_("Daisy Book Reader - %s") %(title))
def goToPageCallback(self, w, data): """ Goto a specified page user entered """ play = False if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() page = self.showEntryText(_("Go to page"), _("Enter the page which you want to go"), 4) if page.isdigit(): switch, pos = self.b.goToPage(page) if switch == 1: self.p.stop() self.b.setReadPosition(pos - 1, 0) self.syncViewAudio() else: self.showMessage(_("Warning"), _("Page out of range")) else: self.showMessage(_("Error"), _("You have not entered a number")) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("Tehre are currently no playing book"))
def createBookmarkCallback(self, w, data): """ Creates a bookmark for the current playing book """ play = False if self.bookOpened(): if self.p.getState() == "Playing": play = True self.p.playPause() bookmark_name = self.showEntryText(_("Set bookmark"), _("Enter the bookmark name"), 50) if bookmark_name != "": bookmark = self.b.getExactPosition() bookmark.append(bookmark_name) self.sets.createBookmark(bookmark) else: self.showMessage(_("Error"), _("You have not entered a bookmark name")) if self.p.getState() == "Paused" and play: self.p.playPause() else: self.showMessage(_("Warning"), _("There are currently no playing book"))
def openBook(self, w): """ Handle opening a book """ if self.p.getState() == "Playing": self.p.playPause() selection = gtk.FileChooserDialog( _("Open book"), None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK), ) selection.set_default_response(gtk.RESPONSE_OK) # Filter all ncc.html filenames filter = gtk.FileFilter() path = os.path.abspath("ncc") selection.set_filename(path) # Configure file extension and filter name filter.set_name(_("Daisy 2.0/2.02 book (*.html)")) filter.add_pattern("*.html") selection.add_filter(filter) response = selection.run() if response == gtk.RESPONSE_OK: try: # Open the book filename = selection.get_filename() self.b = book.Book(filename) except IOError: self.showMessage(_("Failed to open"), _(" The book can not be opened")) elif response == gtk.RESPONSE_CANCEL: self.showMessage(_("Canceled selection"), _("No book has been selected")) if self.p.getState() == "Paused": self.p.playPause() selection.destroy() ncc = self.b.getNcc() if len(ncc) > 1: return ncc
def __init__(self, controller): """ Initialization for view object """ self.c = controller self.c.setView(self) self.menu_items = ( ("/" + _("_File"), "<alt>F", None, 0, "<Branch>"), ("/" + _("File") + "/" + _("_Open book"), "<control>O", self.openBookCallback, 0, None), ("/" + _("File") + "/" + _("_Find book"), "<control>F", self.c.openRecentBookCallback, 0, None), ("/" + _("File") + "/" + _("_Close book"), "<control>F4", self.c.closeBookCallback, 0, None), ("/" + _("File") + "/" + _("_Quit"), "<control>Q", self.closeApplication, 0, None), ("/" + _("_Control"), "<alt>C", None, 0, "<Branch>"), ("/" + _("Control") + "/" + _("_Play-Pause"), "<control>space", self.c.switchStateCallback, 0, None), ("/" + _("Control") + "/" + _("_Mute"), "<control>M", self.c.toggleMuteCallback, 0, None), ("/" + _("Control") + "/" + _("_Stop"), "<control>S", self.c.stopCallback, 0, None), ("/" + _("Control") + "/" + _("_Volume"), "<alt>V", None, 0, "<Branch>"), ("/" + _("Control") + "/" + _("Volume") + "/" + _("Increase volume"), "<control>V", self.c.upVolumeCallback, 0, None), ("/" + _("Control") + "/" + _("Volume") + "/" + _("Decrease volume"), "<control><shift>V", self.c.downVolumeCallback, 0, None), ("/" + _("_Navigation"), "<alt>N", None, 0, "<Branch>"), ("/" + _("Navigation") + "/" + _("Previous chapter"), "<control><shift>L", self.c.goToPriorChapterCallback, 0, None), ("/" + _("Navigation") + "/" + _("Next chapter"), "<control>L", self.c.goToNextChapterCallback, 0, None), ("/" + _("Navigation") + "/" + _("Previous page"), "<control><shift>N", self.c.goToPriorPageCallback, 0, None), ("/" + _("Navigation") + "/" + _("Next page"), "<control>N", self.c.goToNextPageCallback, 0, None), ("/" + _("Navigation") + "/" + _("Previous paragraph"), "<control><shift>P", self.c.goToPriorTextCallback, 0, None), ("/" + _("Navigation") + "/" + _("Next paragraph"), "<control>P", self.c.goToNextTextCallback, 0, None), ("/" + _("_Go to"), "<control>G", None, 0, "<Branch>"), ("/" + _("_Go to") + "/" + _("Chapter"), None, self.c.displayChaptersCallback, 0, None), ("/" + _("_Go to") + "/" + _("Page"), None, self.c.goToPageCallback, 0, None), ("/" + _("_Bookmarks"), "<alt>B", None, 0, "<Branch>"), ("/" + _("Bookmarks") + "/" + _("_Set bookmark"), "<control>K", self.c.createBookmarkCallback, 0, None), ("/" + _("Bookmarks") + "/" + _("_Delete bookmarks"), "<control>D", self.c.deleteBookmarkCallback, 0, None), ("/" + _("Bookmarks") + "/" + _("_List bookmarks"), "<control>B", self.c.displayBookmarksCallback, 0, None), ("/" + _("_Info"), "<alt>I", None, 0, "<Branch>"), ("/" + _("Info") + "/" + _("_Book info"), "<control>O", self.c.displayBookInfoCallback, 0, None), ("/" + _("Info") + "/" + _("Book _translation information"), "<control>N", self.c.displayBookTranslationCallback, 0, None), ("/" + _("Info") + "/" + _("Playback _duration"), "<control>X", self.c.displayCurrentPlayingTimeCallback, 0, None), ("/" + _("Info") + "/" + _("Total play _duration"), "<control>W", self.c.displayBookDurationCallback, 0, None), ("/" + _("_Help"), "<alt>H", None, 0, "<Branch>"), ("/" + _("Help") + "/" + _("_User help"), "<control>u", self.c.displayHelpCallback, 0, None), ("/" + _("Help") + "/" + _("_About DBR"), "<control>Y", self.c.display_about_dialog_callback, 0, None), ("/" + _("Help") + "/" + _("_License"), "<control>J", self.c.displayLicenseCallback, 0, None) ) self.window = self.newWindow() main_box = gtk.VBox(False, 1) main_box.set_border_width(1) main_box.show() menubar = self.mainMenu(self.window) main_box.pack_start(menubar, False, True, 0) menubar.show() #Create toolbar self.toolbar = gtk.Toolbar() self.toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL) self.toolbar.set_style(gtk.TOOLBAR_BOTH) self.toolbar.set_border_width(5) # Options for toolbar: open... toolbar_item = gtk.ToolButton(_("Open")) toolbar_item.set_stock_id(gtk.STOCK_OPEN) toolbar_item.connect("clicked", self.openBookCallback, toolbar_item) toolbar_item.show() self.toolbar.insert(toolbar_item, -1) self.toolbar_item2 = gtk.ToggleToolButton(gtk.STOCK_MEDIA_PLAY) #self.toolbar_item2.set_stock_id(gtk.STOCK_MEDIA_PAUSE) self.toolbar_item2.set_active(False) self.toolbar_item2.connect("clicked", self.c.switchStateCallback, self.toolbar_item2) self.toolbar_item2.show() self.toolbar.insert(self.toolbar_item2, -1) toolbar_item3 = gtk.ToolButton(_("Stop")) toolbar_item3.set_stock_id(gtk.STOCK_MEDIA_STOP) toolbar_item3.connect("clicked", self.c.stopCallback, toolbar_item3) toolbar_item3.show() self.toolbar.insert(toolbar_item3, -1) toolbar_item6 = gtk.ToolButton(_("Next Chapter")) toolbar_item6.set_stock_id(gtk.STOCK_MEDIA_REWIND) toolbar_item6.connect("clicked", self.c.goToNextChapterCallback, toolbar_item6) toolbar_item6.show() self.toolbar.insert(toolbar_item6, -1) toolbar_item4 = gtk.ToolButton(_("Previous Chapter")) toolbar_item4.set_stock_id(gtk.STOCK_MEDIA_FORWARD) toolbar_item4.connect("clicked", self.c.goToPriorChapterCallback, toolbar_item4) toolbar_item4.show() self.toolbar.insert(toolbar_item4, -1) iconw = gtk.Image() # icon widget iconw.set_from_file("/usr/share/icons/gnome/32x32/actions/bookmarks.png") toolbar_item5 = gtk.ToolButton(iconw,_("Set Bookmark")) #toolbar_item5.set_stock_id(gtk.STOCK_INDEX) toolbar_item5.connect("clicked", self.c.createBookmarkCallback, toolbar_item5) toolbar_item5.show() self.toolbar.insert(toolbar_item5, -1) main_box.pack_start(self.toolbar, False, True, 0) self.toolbar.show() # Creates a TreeStore with a text column. self.treestore = gtk.TreeStore(str) # Creation of TreeView using the treestore self.treeview = gtk.TreeView(self.treestore) # Creation of the TreeViewColumn for displaying data self.tvcolumn = gtk.TreeViewColumn(_("Table of contents")) # Add the column to the treeview self.treeview.append_column(self.tvcolumn) # Create a CellRendererText for displaying data self.cell = gtk.CellRendererText() # Add the cell to the column and let expand it self.tvcolumn.pack_start(self.cell, True) # Include "text" attribute to the column 0 - return text # from the column into tree. self.tvcolumn.add_attribute(self.cell, 'text', 0) # Make it searchable self.treeview.set_search_column(0) self.treeselection = self.treeview.get_selection() self.cursorChanged = self.treeview.connect("cursor-changed", self.updateAudio) book_window = gtk.ScrolledWindow() book_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) book_window.show() book_window.add_with_viewport(self.treeview) self.treeview.show_all() general_box = gtk.VBox(False, 1) general_box.set_border_width(1) self.window.add(general_box) general_box.show() general_box.pack_start(main_box, False, True, 0) general_box.pack_start(book_window, True, True, 0) self.window.show_all() list, toc_position = self.c.getConfiguration() if len(list) > 0: self.displayBook(list) self.updateView(toc_position) self.c.loadLatestBook() self.treeview.grab_focus()
def clearModel(self): """ Clears the tree model """ self.treestore.clear() self.window.set_title(_("Daisy Book Reader"))