void FBReader::tryShowFootnoteView(const std::string &id, const std::string &type) {
    if (type == "external") {
        openLinkInBrowser(id);
    } else if (type == "internal") {
        if (myMode == BOOK_TEXT_MODE && !myModel.isNull()) {
            BookModel::Label label = myModel->label(id);
            if (!label.Model.isNull()) {
                if (label.Model == myModel->bookTextModel()) {
                    bookTextView().gotoParagraph(label.ParagraphNumber);
                } else {
                    FootnoteView &view = ((FootnoteView&)*myFootnoteView);
                    view.setModel(label.Model);
                    setMode(FOOTNOTE_MODE);
                    view.gotoParagraph(label.ParagraphNumber);
                }
                setHyperlinkCursor(false);
                refreshWindow();
            }
        }
    } else if (type == "book") {
        DownloadBookRunnable downloader(id);
        downloader.executeWithUI();
        if (downloader.hasErrors()) {
            downloader.showErrorMessage();
        } else {
            shared_ptr<Book> book;
            createBook(downloader.fileName(), book);
            if (!book.isNull()) {
                Library::Instance().addBook(book);
                openBook(book);
                refreshWindow();
            }
        }
    }
}
Exemple #2
0
void FBReader::tryShowFootnoteView(const std::string &id, const std::string &type) {
	if (type == "external") {
		shared_ptr<ProgramCollection> collection = webBrowserCollection();
		if (!collection.isNull()) {
			shared_ptr<Program> program = collection->currentProgram();
			if (!program.isNull()) {
				program->run("openLink", id);
			}
		}
	} else if (type == "internal") {
		if (((myMode == BOOK_TEXT_MODE) || (myMode == FOOTNOTE_MODE) || (myMode == HYPERLINK_NAV_MODE)) && (myModel != 0)) {
			BookModel::Label label = myModel->label(id);
			if (!label.Model.isNull()) {
				if ((myMode != FOOTNOTE_MODE) && (label.Model == myModel->bookTextModel())) {
					bookTextView().gotoParagraph(label.ParagraphNumber);
				} else {
					FootnoteView &view = ((FootnoteView&)*myFootnoteView);
					view.setModel(label.Model, myModel->description()->language());
					setMode(FOOTNOTE_MODE);
					view.gotoParagraph(label.ParagraphNumber);
				}
				setHyperlinkCursor(false);
				refreshWindow();
			}
		}
	} else if (type == "book") {
		DownloadBookRunnable downloader(id);
		downloader.executeWithUI();
		if (downloader.hasErrors()) {
			downloader.showErrorMessage();
		} else {
			openFile(downloader.fileName());
		}
	}
}
void FBReader::tryShowFootnoteView(const std::string &id, bool external) {
	if (external) {
		shared_ptr<ProgramCollection> collection = webBrowserCollection();
		if (!collection.isNull()) {
			shared_ptr<Program> program = collection->currentProgram();
			if (!program.isNull()) {
				program->run("openLink", id);
			}
		}
	} else {
		if ((myMode == BOOK_TEXT_MODE) && (myModel != 0)) {
			BookModel::Label label = myModel->label(id);
			if (!label.Model.isNull()) {
				if (label.Model == myModel->bookTextModel()) {
					bookTextView().gotoParagraph(label.ParagraphNumber);
				} else {
					FootnoteView &view = ((FootnoteView&)*myFootnoteView);
					view.setModel(label.Model);
					setMode(FOOTNOTE_MODE);
					view.gotoParagraph(label.ParagraphNumber);
				}
				setHyperlinkCursor(false);
				refreshWindow();
			}
		}
	}
}
void FBReader::setMode(ViewMode mode) {
    if (mode == myMode) {
        return;
    }

    if (mode != BOOK_TEXT_MODE) {
        myActionOnCancel = RETURN_TO_TEXT_MODE;
    }

    myPreviousMode = myMode;
    myMode = mode;

    switch (myMode) {
    case BOOK_TEXT_MODE:
        setHyperlinkCursor(false);
        ((ZLTextView&)*myBookTextView).forceScrollbarUpdate();
        setView(myBookTextView);
        break;
    case CONTENTS_MODE:
        ((ContentsView&)*myContentsView).gotoReference();
        setView(myContentsView);
        break;
    case FOOTNOTE_MODE:
        setView(myFootnoteView);
        break;
    case LIBRARY_MODE:
    {
        shared_ptr<Book> currentBook = myModel->book();
        ((LibraryView&)*myLibraryByAuthorView).showBook(currentBook);
        ((LibraryView&)*myLibraryByTagView).showBook(currentBook);
        showLibraryView();
        break;
    }
    case BOOKMARKS_MODE:
        break;
    case NETWORK_LIBRARY_MODE:
        setView(myNetworkLibraryView);
        break;
    case UNDEFINED_MODE:
    case ALL_MODES:
        break;
    }
    refreshWindow();
}
Exemple #5
0
void FBReader::setMode(ViewMode mode) {
	if (mode == myMode) {
		return;
	}

	if (mode != BOOK_TEXT_MODE) {
		myActionOnCancel = RETURN_TO_TEXT_MODE;
	}

	myPreviousMode = myMode;
	myMode = mode;

	switch (myMode) {
		case HYPERLINK_NAV_MODE:
		case BOOK_TEXT_MODE:
			setHyperlinkCursor(false);
			((ZLTextView&)*myBookTextView).forceScrollbarUpdate();
			setView(myBookTextView);
			break;
		case CONTENTS_MODE:
			((ContentsView&)*myContentsView).gotoReference();
			setView(myContentsView);
			break;
		case FOOTNOTE_MODE:
			setView(myFootnoteView);
			break;
		case BOOK_COLLECTION_MODE:
			collectionView().openWithBook((myModel != 0) ? myModel->description() : 0);
			setView(myCollectionView);
			break;
		case BOOKMARKS_MODE:
			break;
		case NET_LIBRARY_MODE:
			setView(myNetLibraryView);
			break;
		case UNDEFINED_MODE:
		case ALL_MODES:
			break;
	}
}