void RecentBooksDlg::on_btnRemove_clicked() { int bn = getBookNum(); if ( bn >= 0 ) { LVPtrVector<CRFileHistRecord>& files = docview->getDocView()->getHistory()->getRecords(); int result = 0; int value = docview->getOptions()->getIntDef(PROP_APP_UI_RECENT_REMOVE_FILES, 0); if ( value ) { RecentRemoveDlg dlg(this); dlg.exec(false); result = dlg.getResult(); } else { result = 1; } switch( result ) { case 0: default: break; case 1: if ( bn > 0 || !docview->getDocView()->isDocumentOpened() ) { files.remove(bn); ui->tableWidget->removeRow(bn); } break; case 2: if ( 0 == bn && docview->getDocView()->isDocumentOpened() ) { docview->getDocView()->createDefaultDocument( qt2cr(tr("Removed")), qt2cr(tr("Document was removed") ) ); } { QString fileName(cr2qt(files[bn]->getFilePathName())); files.remove(bn); ui->tableWidget->removeRow(bn); QFile::remove(fileName); docview->update(); } break; } } }
void AddBookmarkDialog::on_buttonBox_accepted() { _bm->setCommentText( qt2cr(m_ui->edComment->toPlainText()) ); _docview->getDocView()->clearImageCache(); _docview->update(); close(); }
void qt2cr( lString16Collection & dst, const QStringList & src ) { dst.clear(); for ( int i=0; i<src.length(); i++ ) { dst.add( qt2cr( src[i] ) ); } }
void MainWindow::on_actionDeleteCurrentDocument_triggered() { LVPtrVector<CRFileHistRecord>& files = ui->view->getDocView()->getHistory()->getRecords(); if ( !files.empty() && ui->view->getDocView()->isDocumentOpened() ) { QMessageBox::StandardButton result = ::questionBox( this, tr("Delete"), tr("Do you really want to delete the current document?"), QMessageBox::Yes|QMessageBox::No, QMessageBox::No); if ( QMessageBox::Yes == result ) { ui->view->getDocView()->createDefaultDocument( qt2cr(tr("Removed")), qt2cr(tr("Document was removed") ) ); QString fileName(cr2qt(files[0]->getFilePathName())); files.remove(0); QFile::remove(fileName); update(); } } }
void SettingsDlg::updateStyleSample() { QColor txtColor = getColor( PROP_FONT_COLOR, 0x000000 ); QColor bgColor = getColor( PROP_BACKGROUND_COLOR, 0xFFFFFF ); QColor headerColor = getColor( PROP_STATUS_FONT_COLOR, 0xFFFFFF ); setBackground( m_ui->frmTextColor, txtColor ); setBackground( m_ui->frmBgColor, bgColor ); setBackground( m_ui->frmHeaderTextColor, headerColor ); m_ui->crSample->setOptions( m_props ); m_ui->crSample->getDocView()->setShowCover( false ); m_ui->crSample->getDocView()->setViewMode( DVM_SCROLL, 1 ); m_ui->crSample->getDocView()->getPageImage(0); HyphMan::getDictList()->activate( qt2cr(m_oldHyph) ); }
void MainWindow::onPropsChange( PropsRef props ) { for ( int i=0; i<props->count(); i++ ) { QString name = props->name( i ); QString value = props->value( i ); int v = (value != "0"); CRLog::debug("MainWindow::onPropsChange [%d] '%s'=%s ", i, props->name(i), props->value(i).toUtf8().data() ); if ( name == PROP_WINDOW_FULLSCREEN ) { bool state = windowState().testFlag(Qt::WindowFullScreen); bool vv = v ? true : false; if ( state != vv ) setWindowState( windowState() ^ Qt::WindowFullScreen ); } if ( name == PROP_WINDOW_SHOW_MENU ) { ui->menuBar->setVisible( v ); } if ( name == PROP_WINDOW_SHOW_SCROLLBAR ) { ui->scroll->setVisible( v ); } if ( name == PROP_BACKGROUND_IMAGE ) { lString16 fn = qt2cr(value); LVImageSourceRef img; if ( !fn.empty() && fn[0]!='[' ) { CRLog::debug("Background image file: %s", LCSTR(fn)); LVStreamRef stream = LVOpenFileStream(fn.c_str(), LVOM_READ); if ( !stream.isNull() ) { img = LVCreateStreamImageSource(stream); } } fn.lowercase(); bool tiled = ( fn.pos(lString16("\\textures\\"))>=0 || fn.pos(lString16("/textures/"))>=0); ui->view->getDocView()->setBackgroundImage(img, tiled); } if ( name == PROP_WINDOW_TOOLBAR_SIZE ) { ui->mainToolBar->setVisible( v ); } if ( name == PROP_WINDOW_SHOW_STATUSBAR ) { ui->statusBar->setVisible( v ); } if ( name == PROP_WINDOW_STYLE ) { QApplication::setStyle( value ); } } }
void SearchDialog::on_btnFindNext_clicked() { bool found = false; QString pattern = ui->edPattern->text(); lString16 p16 = qt2cr(pattern); bool reverse = ui->rbBackward->isChecked(); bool caseInsensitive = ui->cbCaseSensitive->checkState()!=Qt::Checked; found = findText(p16, 1, reverse , caseInsensitive); if ( !found ) found = findText(p16, -1, reverse, caseInsensitive); if ( !found ) { QMessageBox * mb = new QMessageBox( QMessageBox::Information, tr("Not found"), tr("Search pattern is not found in document"), QMessageBox::Close, this ); mb->setButtonText(QMessageBox::Close,tr("Close")); mb->exec(); } else { _docview->getDocView()->savePosToNavigationHistory(); _docview->update(); } }
void SettingsDlg::updateStyleSample() { QColor txtColor = getColor( PROP_FONT_COLOR, 0x000000 ); QColor bgColor = getColor( PROP_BACKGROUND_COLOR, 0xFFFFFF ); QColor headerColor = getColor( PROP_STATUS_FONT_COLOR, 0xFFFFFF ); QColor selectionColor = getColor( PROP_HIGHLIGHT_SELECTION_COLOR, 0xC0C0C0 ); QColor commentColor = getColor( PROP_HIGHLIGHT_BOOKMARK_COLOR_COMMENT, 0xC0C000 ); QColor correctionColor = getColor( PROP_HIGHLIGHT_BOOKMARK_COLOR_CORRECTION, 0xC00000 ); setBackground( m_ui->frmTextColor, txtColor ); setBackground( m_ui->frmBgColor, bgColor ); setBackground( m_ui->frmHeaderTextColor, headerColor ); setBackground( m_ui->frmSelectionColor, selectionColor ); setBackground( m_ui->frmCommentColor, commentColor ); setBackground( m_ui->frmCorrectionColor, correctionColor ); m_ui->crSample->setOptions( m_props ); m_ui->crSample->getDocView()->setShowCover( false ); m_ui->crSample->getDocView()->setViewMode( DVM_SCROLL, 1 ); m_ui->crSample->getDocView()->getPageImage(0); HyphMan::getDictList()->activate( qt2cr(m_oldHyph) ); }
void MainWindow::on_actionExport_triggered() { QString fileName = QFileDialog::getSaveFileName(this, tr("Export document to"), QString(), tr("WOL book (*.wol)")); if ( fileName.length()==0 ) return; WolExportDlg * dlg = new WolExportDlg( this ); //dlg->setModal( true ); dlg->setWindowTitle(tr("Export to WOL format")); // dlg->setModal( true ); // dlg->show(); //dlg->raise(); //dlg->activateWindow(); int result = dlg->exec(); if ( result==QDialog::Accepted ) { int bpp = dlg->getBitsPerPixel(); int levels = dlg->getTocLevels(); delete dlg; repaint(); ExportProgressDlg * msg = new ExportProgressDlg(this); msg->show(); msg->raise(); msg->activateWindow(); msg->repaint(); repaint(); ExportProgressCallback progress(msg); LVDocViewCallback * oldCallback = ui->view->getDocView()->getCallback( ); ui->view->getDocView()->setCallback( &progress ); ui->view->getDocView()->exportWolFile(qt2cr(fileName).c_str(), bpp>1, levels ); ui->view->getDocView()->setCallback( oldCallback ); delete msg; } else { delete dlg; } }
QString FilePropsDialog::getDocAuthors( const char * path, const char * delim ) { lString16 res; for ( int i=0; i<100; i++ ) { lString8 p = lString8(path) + "[" + lString8::itoa(i+1) + "]"; lString16 firstName = qt2cr(getDocText( (p + "/first-name").c_str(), " " )); lString16 lastName = qt2cr(getDocText( (p + "/last-name").c_str(), " " )); lString16 middleName = qt2cr(getDocText( (p + "/middle-name").c_str(), " " )); lString16 nickName = qt2cr(getDocText( (p + "/nickname").c_str(), " " )); lString16 homePage = qt2cr(getDocText( (p + "/homepage").c_str(), " " )); lString16 email = qt2cr(getDocText( (p + "/email").c_str(), " " )); lString16 s = firstName; if ( !middleName.empty() ) s << L" " << middleName; if ( !lastName.empty() ) { if ( !s.empty() ) s << L" "; s << lastName; } if ( !nickName.empty() ) { if ( !s.empty() ) s << L" "; s << nickName; } if ( !homePage.empty() ) { if ( !s.empty() ) s << L" "; s << homePage; } if ( !email.empty() ) { if ( !s.empty() ) s << L" "; s << email; } if ( s.empty() ) continue; if ( !res.empty() && delim!=NULL ) res << Utf8ToUnicode( lString8( delim ) ); res << s; } return cr2qt(res); }
SettingsDlg::SettingsDlg(QWidget *parent, CR3View * docView ) : QDialog(parent), m_ui(new Ui::SettingsDlg), m_docview( docView ) { initDone = false; m_ui->setupUi(this); m_props = m_docview->getOptions(); m_oldHyph = cr2qt(HyphMan::getSelectedDictionary()->getId()); #ifdef _LINUX QString homeDir = QDir::toNativeSeparators(QDir::homePath() + "/.cr3/"); #else QString homeDir = QDir::toNativeSeparators(QDir::homePath() + "/cr3/"); #endif #if MAC==1 QString exeDir = QDir::toNativeSeparators(qApp->applicationDirPath() + "/../Resources/"); //QDir::separator(); #elif _LINUX QString exeDir = QString(CR3_DATA_DIR); #else QString exeDir = QDir::toNativeSeparators(qApp->applicationDirPath() + "/"); //QDir::separator(); #endif lString16Collection baseDirs; baseDirs.add(qt2cr(homeDir)); baseDirs.add(qt2cr(exeDir)); #ifdef _LINUX baseDirs.add(cs16("/usr/local/share/cr3/")); #endif lString16Collection bgFiles; QStringList bgFileLabels; findBackgrounds( baseDirs, bgFiles ); int bgIndex = 0; m_backgroundFiles.append("[NONE]"); bgFileLabels.append("[NONE]"); QString bgFile = m_props->getStringDef(PROP_BACKGROUND_IMAGE, ""); for ( int i=0; i<bgFiles.length(); i++ ) { lString16 fn = bgFiles[i]; QString f = cr2qt(fn); if ( f==bgFile ) bgIndex = i; m_backgroundFiles.append(f); fn = LVExtractFilenameWithoutExtension(fn); bgFileLabels.append(cr2qt(fn)); } m_ui->cbPageSkin->clear(); m_ui->cbPageSkin->addItems( bgFileLabels ); m_ui->cbPageSkin->setCurrentIndex(bgIndex+1); optionToUi( PROP_WINDOW_FULLSCREEN, m_ui->cbWindowFullscreen ); optionToUi( PROP_WINDOW_SHOW_MENU, m_ui->cbWindowShowMenu ); optionToUi( PROP_WINDOW_SHOW_SCROLLBAR, m_ui->cbWindowShowScrollbar ); optionToUi( PROP_WINDOW_TOOLBAR_SIZE, m_ui->cbWindowShowToolbar ); optionToUi( PROP_WINDOW_SHOW_STATUSBAR, m_ui->cbWindowShowStatusBar ); optionToUi( PROP_FOOTNOTES, m_ui->cbShowFootNotes ); optionToUi( PROP_SHOW_BATTERY, m_ui->cbShowBattery ); optionToUi( PROP_SHOW_TIME, m_ui->cbShowClock ); optionToUi( PROP_SHOW_TITLE, m_ui->cbShowBookName ); optionToUi( PROP_TXT_OPTION_PREFORMATTED, m_ui->cbTxtPreFormatted ); optionToUi( PROP_EMBEDDED_STYLES, m_ui->cbEnableDocumentStyles ); optionToUi( PROP_EMBEDDED_FONTS, m_ui->cbEnableEmbeddedFonts ); m_ui->cbEnableEmbeddedFonts->setEnabled(m_props->getBoolDef(PROP_EMBEDDED_STYLES, true) ? Qt::Checked : Qt::Unchecked); optionToUi( PROP_TXT_OPTION_PREFORMATTED, m_ui->cbTxtPreFormatted ); optionToUi( PROP_FLOATING_PUNCTUATION, m_ui->cbFloatingPunctuation ); optionToUiIndex( PROP_IMG_SCALING_ZOOMIN_INLINE_MODE, m_ui->cbImageInlineZoominMode ); optionToUiIndex( PROP_IMG_SCALING_ZOOMIN_INLINE_SCALE, m_ui->cbImageInlineZoominScale ); optionToUiIndex( PROP_IMG_SCALING_ZOOMOUT_INLINE_MODE, m_ui->cbImageInlineZoomoutMode ); optionToUiIndex( PROP_IMG_SCALING_ZOOMOUT_INLINE_SCALE, m_ui->cbImageInlineZoomoutScale ); optionToUiIndex( PROP_IMG_SCALING_ZOOMIN_BLOCK_MODE, m_ui->cbImageBlockZoominMode ); optionToUiIndex( PROP_IMG_SCALING_ZOOMIN_BLOCK_SCALE, m_ui->cbImageBlockZoominScale ); optionToUiIndex( PROP_IMG_SCALING_ZOOMOUT_BLOCK_MODE, m_ui->cbImageBlockZoomoutMode ); optionToUiIndex( PROP_IMG_SCALING_ZOOMOUT_BLOCK_SCALE, m_ui->cbImageBlockZoomoutScale ); QString gamma = m_props->getStringDef(PROP_FONT_GAMMA, ""); if ( gamma=="" ) m_props->setString(PROP_FONT_GAMMA, "1.0"); optionToUiString(PROP_FONT_GAMMA, m_ui->cbFontGamma); optionToUiInversed( PROP_STATUS_LINE, m_ui->cbShowPageHeader ); bool b = m_props->getIntDef( PROP_STATUS_LINE, 0 )==0; m_ui->cbShowBattery->setEnabled( b ); m_ui->cbShowClock->setEnabled( b ); m_ui->cbShowBookName->setEnabled( b ); m_ui->cbStartupAction->setCurrentIndex( m_props->getIntDef( PROP_APP_START_ACTION, 0 ) ); int lp = m_props->getIntDef( PROP_LANDSCAPE_PAGES, 2 ); int vm = m_props->getIntDef( PROP_PAGE_VIEW_MODE, 1 ); if ( vm==0 ) m_ui->cbViewMode->setCurrentIndex( 2 ); else m_ui->cbViewMode->setCurrentIndex( lp==1 ? 0 : 1 ); int hinting = m_props->getIntDef(PROP_FONT_HINTING, 2); m_ui->cbFontHinting->setCurrentIndex(hinting); int highlight = m_props->getIntDef(PROP_HIGHLIGHT_COMMENT_BOOKMARKS, 1); m_ui->cbBookmarkHighlightMode->setCurrentIndex(highlight); int n = m_props->getIntDef( PROP_PAGE_MARGIN_LEFT, 8 ); int mi = 0; for (int i=0; i < (int)MAX_MARGIN_INDEX; i++) { if (n <= def_margins[i]) { mi = i; break; } } CRLog::debug("initial margins index: %d", mi); m_ui->cbMargins->setCurrentIndex( mi ); QStringList styles = QStyleFactory::keys(); QString style = m_props->getStringDef( PROP_WINDOW_STYLE, "" ); m_ui->cbLookAndFeel->addItems( styles ); QStyle * s = QApplication::style(); QString currStyle = s->objectName(); CRLog::debug("Current system style is %s", currStyle.toUtf8().data() ); if ( !styles.contains(style, Qt::CaseInsensitive) ) style = currStyle; int index = styles.indexOf( style, Qt::CaseInsensitive ); if ( index >=0 ) m_ui->cbLookAndFeel->setCurrentIndex( index ); crGetFontFaceList( m_faceList ); m_ui->cbTextFontFace->addItems( m_faceList ); m_ui->cbTitleFontFace->addItems( m_faceList ); m_ui->cbFallbackFontFace->addItems( m_faceList ); QStringList sizeList; LVArray<int> sizes( cr_font_sizes, sizeof(cr_font_sizes)/sizeof(int) ); for ( int i=0; i<sizes.length(); i++ ) sizeList.append( QString("%1").arg(sizes[i]) ); m_ui->cbTextFontSize->addItems( sizeList ); m_ui->cbTitleFontSize->addItems( sizeList ); const char * defFontFace = "DejaVu Sans"; static const char * goodFonts[] = { "DejaVu Sans", "FreeSans", "Liberation Sans", "Arial", NULL }; for ( int i=0; goodFonts[i]; i++ ) { if ( m_faceList.indexOf(QString(goodFonts[i]))>=0 ) { defFontFace = goodFonts[i]; break; } } fontToUi( PROP_FONT_FACE, PROP_FONT_SIZE, m_ui->cbTextFontFace, m_ui->cbTextFontSize, defFontFace ); fontToUi( PROP_STATUS_FONT_FACE, PROP_STATUS_FONT_SIZE, m_ui->cbTitleFontFace, m_ui->cbTitleFontSize, defFontFace ); fontToUi( PROP_FALLBACK_FONT_FACE, PROP_FALLBACK_FONT_FACE, m_ui->cbFallbackFontFace, NULL, defFontFace ); // {_("90%"), "90"}, // {_("100%"), "100"}, // {_("110%"), "110"}, // {_("120%"), "120"}, // {_("140%"), "140"}, //PROP_INTERLINE_SPACE //PROP_HYPHENATION_DICT QString v = QString("%1").arg(m_props->getIntDef(PROP_INTERLINE_SPACE, 100)) + "%"; QStringList isitems; for (int i = 0; i < (int)(sizeof(interline_spaces) / sizeof(int)); i++) isitems.append(QString("%1").arg(interline_spaces[i]) + "%"); m_ui->cbInterlineSpace->addItems(isitems); int isi = m_ui->cbInterlineSpace->findText(v); m_ui->cbInterlineSpace->setCurrentIndex(isi>=0 ? isi : 6); int hi = -1; v = m_props->getStringDef(PROP_HYPHENATION_DICT,"@algorithm"); //HYPH_DICT_ID_ALGORITHM; for ( int i=0; i<HyphMan::getDictList()->length(); i++ ) { HyphDictionary * item = HyphMan::getDictList()->get( i ); if (v == cr2qt(item->getFilename() ) || v == cr2qt(item->getId() )) hi = i; QString s = cr2qt( item->getTitle() ); if ( item->getType()==HDT_NONE ) s = tr("[No hyphenation]"); else if ( item->getType()==HDT_ALGORITHM ) s = tr("[Algorythmic hyphenation]"); m_ui->cbHyphenation->addItem( s ); } m_ui->cbHyphenation->setCurrentIndex(hi>=0 ? hi : 1); m_ui->crSample->setOptions( m_props ); m_ui->crSample->getDocView()->setShowCover( false ); m_ui->crSample->getDocView()->setViewMode( DVM_SCROLL, 1 ); QString testPhrase = tr("The quick brown fox jumps over the lazy dog. "); m_ui->crSample->getDocView()->createDefaultDocument(lString16::empty_str, qt2cr(testPhrase+testPhrase+testPhrase)); updateStyleSample(); m_styleNames.clear(); m_styleNames.append(tr("Default paragraph style")); m_styleNames.append(tr("Title")); m_styleNames.append(tr("Subtitle")); m_styleNames.append(tr("Preformatted text")); m_styleNames.append(tr("Link")); m_styleNames.append(tr("Cite / quotation")); m_styleNames.append(tr("Epigraph")); m_styleNames.append(tr("Poem")); m_styleNames.append(tr("Text author")); m_styleNames.append(tr("Footnote link")); m_styleNames.append(tr("Footnote")); m_styleNames.append(tr("Footnote title")); m_styleNames.append(tr("Annotation")); m_ui->cbStyleName->clear(); m_ui->cbStyleName->addItems(m_styleNames); m_ui->cbStyleName->setCurrentIndex(0); initStyleControls("def"); initDone = true; //m_ui->cbPageSkin->addItem(QString("[None]"), QVariant()); }
virtual void setString( const char * prop, const QString & value ) { _ref->setString( prop, qt2cr(value) ); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindowClass) { ui->setupUi(this); ui->view->setScrollBar( ui->scroll ); QIcon icon = QIcon(":/icons/icons/cr3.png"); CRLog::warn("\n\n\n*** ######### application icon %s\n\n\n", icon.isNull() ? "null" : "found"); qApp->setWindowIcon(icon); addAction(ui->actionOpen); addAction(ui->actionRecentBooks); addAction(ui->actionTOC); addAction(ui->actionToggle_Full_Screen); addAction(ui->actionSettings); addAction(ui->actionClose); addAction(ui->actionToggle_Pages_Scroll); addAction(ui->actionMinimize); addAction(ui->actionNextPage); addAction(ui->actionPrevPage); addAction(ui->actionNextPage2); addAction(ui->actionPrevPage2); addAction(ui->actionNextPage3); addAction(ui->actionNextLine); addAction(ui->actionPrevLine); addAction(ui->actionFirstPage); addAction(ui->actionLastPage); addAction(ui->actionBack); addAction(ui->actionForward); addAction(ui->actionNextChapter); addAction(ui->actionPrevChapter); addAction(ui->actionZoom_In); addAction(ui->actionZoom_Out); addAction(ui->actionCopy); addAction(ui->actionCopy2); // alternative shortcut addAction(ui->actionAddBookmark); addAction(ui->actionShowBookmarksList); addAction(ui->actionCopy); addAction(ui->actionToggleEditMode); #ifdef _LINUX QString homeDir = QDir::toNativeSeparators(QDir::homePath() + "/.cr3/"); #else QString homeDir = QDir::toNativeSeparators(QDir::homePath() + "/cr3/"); #endif #ifdef _LINUX QString exeDir = QString(CR3_DATA_DIR); #else QString exeDir = QDir::toNativeSeparators(qApp->applicationDirPath() + "/"); //QDir::separator(); #endif QString cacheDir = homeDir + "cache"; QString bookmarksDir = homeDir + "bookmarks"; QString histFile = exeDir + "cr3hist.bmk"; QString histFile2 = homeDir + "cr3hist.bmk"; QString iniFile2 = exeDir + "cr3.ini"; QString iniFile = homeDir + "cr3.ini"; QString cssFile = homeDir + "fb2.css"; QString cssFile2 = exeDir + "fb2.css"; //QString translations = exeDir + "i18n"; //CRLog::info("Translations directory: %s", LCSTR(qt2cr(translations)) ); QString hyphDir = exeDir + "hyph" + QDir::separator(); ui->view->setHyphDir(hyphDir); ui->view->setHyphDir(homeDir + "hyph" + QDir::separator(), false); ldomDocCache::init( qt2cr( cacheDir ), DOC_CACHE_SIZE ); ui->view->setPropsChangeCallback( this ); if ( !ui->view->loadSettings( iniFile ) ) ui->view->loadSettings( iniFile2 ); if ( !ui->view->loadHistory( histFile ) ) ui->view->loadHistory( histFile2 ); if ( !ui->view->loadCSS( cssFile ) ) ui->view->loadCSS( cssFile2 ); #if ENABLE_BOOKMARKS_DIR==1 ui->view->setBookmarksDir( bookmarksDir ); #endif QStringList args( qApp->arguments() ); for ( int i=1; i<args.length(); i++ ) { if ( args[i].startsWith("--") ) { // option } else { // filename to open if ( _filenameToOpen.length()==0 ) _filenameToOpen = args[i]; } } // QTranslator qtTranslator; // if (qtTranslator.load("qt_" + QLocale::system().name(), // QLibraryInfo::location(QLibraryInfo::TranslationsPath))) // QApplication::installTranslator(&qtTranslator); // // QTranslator myappTranslator; // QString trname = "cr3_" + QLocale::system().name(); // CRLog::info("Using translation file %s from dir %s", UnicodeToUtf8(qt2cr(trname)).c_str(), UnicodeToUtf8(qt2cr(translations)).c_str() ); // if ( myappTranslator.load(trname, translations) ) // QApplication::installTranslator(&myappTranslator); ui->view->restoreWindowPos( this, "main.", true ); }
void AddBookmarkDialog::on_buttonBox_accepted() { _bm->setCommentText( qt2cr(m_ui->edComment->toPlainText()) ); close(); }
int main(int argc, char *argv[]) { int res = 0; { Device::instance(); // initialize device #ifndef i386 QProcess::execute("eips -c"); pTouch = new TouchScreen(); #endif lString16 exedir = LVExtractPath(LocalToUnicode(lString8(argv[0]))); LVAppendPathDelimiter(exedir); lString16 datadir = exedir + L"data/"; lString16 exefontpath = exedir + L"fonts"; lString16Collection fontDirs; fontDirs.add(exefontpath); #ifndef i386 fontDirs.add(lString16(L"/usr/java/lib/fonts")); fontDirs.add(lString16(L"/mnt/us/fonts")); #endif CRPropRef props = LVCreatePropsContainer(); { LVStreamRef cfg = LVOpenFileStream(UnicodeToUtf8(datadir + L"cr3.ini").data(), LVOM_READ); if(!cfg.isNull()) props->loadFromStream(cfg.get()); } lString16 lang = props->getStringDef(PROP_WINDOW_LANG, ""); InitCREngineLog(props); CRLog::info("main()"); if(!InitCREngine(argv[0], fontDirs)) { printf("Cannot init CREngine - exiting\n"); return 2; } #ifndef i386 PrintString(1, 1, "crengine version: " + QString(CR_ENGINE_VERSION)); PrintString(1, 2, QString("buid date: %1 %2").arg(__DATE__).arg(__TIME__)); if (!Device::isTouch()) { QString message = "Please wait while application is loading..."; int xpos = ((Device::getWidth()/12-1)-message.length())/2; int ypos = (Device::getHeight()/20-2)/2; PrintString(xpos, ypos, message); } #endif // set row count depending on device model (used in lists) int rc = props->getIntDef(PROP_WINDOW_ROW_COUNT, 0); if(!rc) { #ifndef i386 switch(Device::getModel()) { case Device::KDX: rc = 16; break; case Device::KT: case Device::KPW: rc = 8; break; default: rc = 10; } props->setInt(PROP_WINDOW_ROW_COUNT, rc); #else props->setInt(PROP_WINDOW_ROW_COUNT, 10); #endif LVStreamRef cfg = LVOpenFileStream(UnicodeToUtf8(datadir + L"cr3.ini").data(), LVOM_WRITE); props->saveToStream(cfg.get()); } QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); MyApplication a(argc, argv); pMyApp = &a; // set app stylesheet #ifndef i386 QString style = Device::isTouch() ? "stylesheet_pw.qss" : "stylesheet_k3.qss"; QFile qss(QDir::toNativeSeparators(cr2qt(datadir)) + style); // set up full update interval for the graphics driver Device::setFullScreenUpdateEvery(props->getIntDef(PROP_DISPLAY_FULL_UPDATE_INTERVAL, 1)); #else QFile qss(QDir::toNativeSeparators(cr2qt(datadir)) + "stylesheet_k3.qss"); #endif qss.open(QFile::ReadOnly); if(qss.error() == QFile::NoError) { a.setStyleSheet(qss.readAll()); qss.close(); } QString translations = cr2qt(datadir) + "i18n"; QTranslator myappTranslator; if(!lang.empty() && lang.compare(L"English")) { if(myappTranslator.load(cr2qt(lang), translations)) QApplication::installTranslator(&myappTranslator); else qDebug("Can`t load translation file %s from dir %s", UnicodeToUtf8(lang).c_str(), UnicodeToUtf8(qt2cr(translations)).c_str()); } (void) signal(SIGUSR1, sigCatcher); MainWindow mainWin; a.setMainWindow(&mainWin); mainWin.showFullScreen(); mainWin.doStartupActions(); res = a.exec(); } ShutdownCREngine(); return res; }
int main(int argc, char *argv[]) { int res = 0; { #ifdef DEBUG lString8 loglevel("TRACE"); lString8 logfile("stdout"); #else lString8 loglevel("ERROR"); lString8 logfile("stderr"); #endif for ( int i=1; i<argc; i++ ) { if ( !strcmp("-h", argv[i]) || !strcmp("-?", argv[i]) || !strcmp("/?", argv[i]) || !strcmp("--help", argv[i]) ) { printHelp(); return 0; } if ( !strcmp("-v", argv[i]) || !strcmp("/v", argv[i]) || !strcmp("--version", argv[i]) ) { printVersion(); return 0; } if ( !strcmp("--stats", argv[i]) && i<argc-4 ) { if ( i!=argc-5 ) { printf("To calculate character encoding statistics, use cr3 <infile.txt> <outfile.cpp> <codepagename> <langname>\n"); return 1; } lString8 list; FILE * out = fopen(argv[i+2], "wb"); if ( !out ) { printf("Cannot create file %s", argv[i+2]); return 1; } MakeStatsForFile( argv[i+1], argv[i+3], argv[i+4], 0, out, list ); fclose(out); return 0; } lString8 s(argv[i]); if ( s.startsWith(lString8("--loglevel=")) ) { loglevel = s.substr(11, s.length()-11); } else if ( s.startsWith(lString8("--logfile=")) ) { logfile = s.substr(10, s.length()-10); } } // set logger if ( logfile=="stdout" ) CRLog::setStdoutLogger(); else if ( logfile=="stderr" ) CRLog::setStderrLogger(); else if ( !logfile.empty() ) CRLog::setFileLogger(logfile.c_str()); if ( loglevel=="TRACE" ) CRLog::setLogLevel(CRLog::LL_TRACE); else if ( loglevel=="DEBUG" ) CRLog::setLogLevel(CRLog::LL_DEBUG); else if ( loglevel=="INFO" ) CRLog::setLogLevel(CRLog::LL_INFO); else if ( loglevel=="WARN" ) CRLog::setLogLevel(CRLog::LL_WARN); else if ( loglevel=="ERROR" ) CRLog::setLogLevel(CRLog::LL_ERROR); else CRLog::setLogLevel(CRLog::LL_FATAL); lString16 exename = LocalToUnicode( lString8(argv[0]) ); lString16 exedir = LVExtractPath(exename); lString16 datadir = lString16(CR3_DATA_DIR); LVAppendPathDelimiter(exedir); LVAppendPathDelimiter(datadir); lString16 exefontpath = exedir + L"fonts"; CRLog::info("main()"); lString16Collection fontDirs; //fontDirs.add( lString16(L"/usr/local/share/crengine/fonts") ); //fontDirs.add( lString16(L"/usr/local/share/fonts/truetype/freefont") ); //fontDirs.add( lString16(L"/mnt/fonts") ); #if 0 fontDirs.add( exefontpath ); fontDirs.add( lString16(L"/usr/share/fonts/truetype") ); fontDirs.add( lString16(L"/usr/share/fonts/truetype/liberation") ); fontDirs.add( lString16(L"/usr/share/fonts/truetype/freefont") ); #endif // TODO: use fontconfig instead //fontDirs.add( lString16(L"/root/fonts/truetype") ); if ( !InitCREngine( argv[0], fontDirs ) ) { printf("Cannot init CREngine - exiting\n"); return 2; } if ( argc>=2 && !strcmp(argv[1], "unittest") ) { #ifdef _DEBUG runTinyDomUnitTests(); #endif CRLog::info("UnitTests finished: exiting"); return 0; } //if ( argc!=2 ) { // printf("Usage: cr3 <filename_to_open>\n"); // return 3; //} { QApplication a(argc, argv); #ifdef _WIN32 QString exeDir = QDir::toNativeSeparators(qApp->applicationDirPath() + "/"); //QDir::separator(); QString translations = exeDir + "i18n"; #else QString exeDir = cr2qt(datadir); QString translations = exeDir + "i18n/"; #endif QTranslator qtTranslator; if (qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) QApplication::installTranslator(&qtTranslator); QTranslator myappTranslator; QString trname = "cr3_" + QLocale::system().name(); CRLog::info("Using translation file %s from dir %s", UnicodeToUtf8(qt2cr(trname)).c_str(), UnicodeToUtf8(qt2cr(translations)).c_str() ); if ( myappTranslator.load(trname, translations) ) QApplication::installTranslator(&myappTranslator); else CRLog::error("Canot load translation file %s from dir %s", UnicodeToUtf8(qt2cr(trname)).c_str(), UnicodeToUtf8(qt2cr(translations)).c_str() ); MainWindow w; w.show(); res = a.exec(); } } ShutdownCREngine(); return res; }
bool MainWindow::findText( const QString& pattern, int origin, bool reverse, bool caseInsensitive ) { if ( pattern.isEmpty() ) return false; if ( pattern != SearchDialog::lastText && origin == 1 ) origin = 0; SearchDialog::lastText = pattern; LVArray<ldomWord> words; lvRect rc; ui->view->getDocView()->GetPos( rc ); int pageHeight = rc.height(); int start = -1; int end = -1; if ( reverse ) { // reverse if ( origin == 0 ) { // from end current page to first page end = rc.bottom; } else if ( origin == -1 ) { // from last page to end of current page start = rc.bottom; } else { // origin == 1 // from prev page to first page end = rc.top; } } else { // forward if ( origin == 0 ) { // from current page to last page start = rc.top; } else if ( origin == -1 ) { // from first page to current page end = rc.top; } else { // origin == 1 // from next page to last start = rc.bottom; } } CRLog::debug("CRViewDialog::findText: Current page: %d .. %d", rc.top, rc.bottom); CRLog::debug("CRViewDialog::findText: searching for text '%s' from %d to %d origin %d", pattern.toUtf8().constData(), start, end, origin ); if ( ui->view->getDocView()->getDocument()->findText( qt2cr(pattern), caseInsensitive, reverse, start, end, words, 200, pageHeight ) ) { CRLog::debug("CRViewDialog::findText: pattern found"); ui->view->getDocView()->clearSelection(); ui->view->getDocView()->selectWords( words ); ldomMarkedRangeList * ranges = ui->view->getDocView()->getMarkedRanges(); if ( ranges ) { if ( ranges->length()>0 ) { int pos = ranges->get(0)->start.y; if ( pos != ui->view->getDocView()->GetPos() ) { ui->view->getDocView()->savePosToNavigationHistory(); ui->view->getDocView()->SetPos(pos); } } } return true; } CRLog::debug("CRViewDialog::findText: pattern not found"); return false; }
MainWindow::MainWindow(QWidget *parent) : QWidget(parent) , ui(new Ui::MainWindowClass) , menu(0) , menuActive(false) , lastPage(0) , updateCounter(1) , updateInterval(1) , gc(this) , fifo(qgetenv("VLASOVSOFT_FIFO1")) , pt(qgetenv("VLASOVSOFT_FIFO2")) { ui->setupUi(this); QString dataDir = qApp->applicationDirPath() + QDir::toNativeSeparators(QString("/data/")); QString cacheDir = dataDir + "cache"; QString bookmarksDir = dataDir + "bookmarks"; QString histFile = dataDir + "cr3hist.bmk"; QString iniFile = dataDir + "cr3.ini"; QString cssFile = dataDir + "fb2.css"; QString hyphDir = dataDir + "hyph" + QDir::separator(); ui->view->setHyphDir(hyphDir); ldomDocCache::init(qt2cr(cacheDir), DOC_CACHE_SIZE); ui->view->setPropsChangeCallback(this); ui->view->loadSettings(iniFile); ui->view->loadHistory(histFile); ui->view->loadCSS(cssFile); #if ENABLE_BOOKMARKS_DIR==1 ui->view->setBookmarksDir(bookmarksDir); #endif ui->view->getDocView()->setBatteryState( ui->view->getBatteryState() ); ui->view->getDocView()->setCallback(this); updateCounter = updateInterval = ui->view->getOptions()->getIntDef(PROP_DISPLAY_FULL_UPDATE_INTERVAL, 1); // Fill action list aList.push_back(ui->actionEmpty); // 0 aList.push_back(ui->actionShowMenu); // 1 aList.push_back(ui->actionBack); // 2 aList.push_back(ui->actionForward); // 3 aList.push_back(ui->actionNextPage); // 4 aList.push_back(ui->actionPreviousPage); // 5 aList.push_back(ui->actionNext10Pages); aList.push_back(ui->actionPrevious10Pages); aList.push_back(ui->actionNextChapter); aList.push_back(ui->actionPreviousChapter); aList.push_back(ui->actionFirstPage); aList.push_back(ui->actionLastPage); aList.push_back(ui->actionPosition); aList.push_back(ui->actionOpen); aList.push_back(ui->actionClose); aList.push_back(ui->actionTOC); aList.push_back(ui->actionRecentBooks); aList.push_back(ui->actionSettings); aList.push_back(ui->actionAddBookmark); aList.push_back(ui->actionShowBookmarksList); aList.push_back(ui->actionFileProperties); aList.push_back(ui->actionScreenRotation); aList.push_back(ui->actionFrontlight); aList.push_back(ui->actionFrontlightToggle); aList.push_back(ui->actionFrontlightPlus); aList.push_back(ui->actionFrontlightMinus); aList.push_back(ui->actionZoomIn); aList.push_back(ui->actionZoomOut); aList.push_back(ui->actionToggleInversion); aList.push_back(ui->actionToggleHeader); aList.push_back(ui->actionSuspend); aList.push_back(ui->actionScreenRotation0); aList.push_back(ui->actionScreenRotation90); aList.push_back(ui->actionScreenRotation180); aList.push_back(ui->actionScreenRotation270); aList.push_back(ui->actionScreenRotationPlus90); aList.push_back(ui->actionScreenRotationPlus180); aList.push_back(ui->actionScreenRotationMinus90); aList.push_back(ui->actionDeleteCurrentDocument); aList.push_back(ui->actionDictionary); PropsRef props( ui->view->getOptions() ); // use right column for next page by default setDefaultTapZoneAction( props,0,2,0,4 ); setDefaultTapZoneAction( props,0,2,1,4 ); setDefaultTapZoneAction( props,0,2,2,4 ); // use left column for previous page by default setDefaultTapZoneAction( props,0,0,0,5 ); setDefaultTapZoneAction( props,0,0,1,5 ); setDefaultTapZoneAction( props,0,0,2,5 ); // use center column for menu by default setDefaultTapZoneAction( props,0,1,0,1 ); setDefaultTapZoneAction( props,0,1,1,1 ); setDefaultTapZoneAction( props,0,1,2,1 ); ui->view->setOptions(props); gc.setRotation( props->getIntDef(PROP_ROTATE_ANGLE, 0) ); gc.setWeights( QSize(props->getIntDef(PROP_APP_UI_SWIPES_X_WEIGHT, 1), props->getIntDef(PROP_APP_UI_SWIPES_Y_WEIGHT, 1)) ); QObject::connect( &gc, SIGNAL(sigGesture(QPoint,GesturesController::GestureType)), this, SLOT(onGesture(QPoint,GesturesController::GestureType)) ); QObject::connect( &pt, SIGNAL(sigPipeMsg(QString)), this, SLOT(pipeMsg(QString)) ); // set margins int top = g_pConfig->readInt("margin_top", 1); int bottom = g_pConfig->readInt("margin_bottom", 0); int left = g_pConfig->readInt("margin_left", 0); int right = g_pConfig->readInt("margin_right", 0); if ( top <= 0 ) top = 1; // to handle full/partial updates ui->layout->setContentsMargins(left,top,right,bottom); writeFifoCommand(fifo, "n+"); }