bool HyphMan::activateDictionaryFromStream( LVStreamRef stream ) { if ( stream.isNull() ) return false; CRLog::trace("remove old hyphenation method"); if ( HyphMan::_method != &NO_HYPH && HyphMan::_method != &ALGO_HYPH && HyphMan::_method ) { delete HyphMan::_method; HyphMan::_method = &NO_HYPH; } CRLog::trace("creating new TexHyph method"); TexHyph * method = new TexHyph(); CRLog::trace("loading from file"); if ( !method->load( stream ) ) { CRLog::error("HyphMan::activateDictionaryFromStream: Cannot open hyphenation dictionary from stream" ); delete method; return false; } CRLog::debug("Dictionary is loaded successfully. Activating."); HyphMan::_method = method; if ( HyphMan::_dictList->find(lString16(HYPH_DICT_ID_DICTIONARY))==NULL ) { HyphDictionary * dict = new HyphDictionary( HDT_DICT_ALAN, cs16("Dictionary"), lString16(HYPH_DICT_ID_DICTIONARY), lString16::empty_str ); HyphMan::_dictList->add(dict); HyphMan::_selectedDictionary = dict; } CRLog::trace("Activation is done"); return true; }
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(cs16("\\textures\\"))>=0 || fn.pos(cs16("/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 ); } } }
bool InitCREngine( const char * exename, lString16Collection & fontDirs) { CRLog::trace("InitCREngine(%s)", exename); InitFontManager(lString8::empty_str); // Load font definitions into font manager // fonts are in files font1.lbf, font2.lbf, ... font32.lbf // use fontconfig lString16Collection fontExt; fontExt.add(cs16(".ttf")); fontExt.add(cs16(".otf")); fontExt.add(cs16(".pfa")); fontExt.add(cs16(".pfb")); lString16Collection fonts; getDirectoryFonts( fontDirs, fontExt, fonts, true ); // load fonts from file CRLog::debug("%d font files found", fonts.length()); if (!fontMan->GetFontCount()) { for (int fi=0; fi<fonts.length(); fi++ ) { lString8 fn = UnicodeToLocal(fonts[fi]); CRLog::trace("loading font: %s", fn.c_str()); if ( !fontMan->RegisterFont(fn) ) CRLog::trace(" failed\n"); } } if (!fontMan->GetFontCount()) { printf("Fatal Error: Cannot open font file(s) .ttf \nCannot work without font\n" ); return false; } printf("%d fonts loaded.\n", fontMan->GetFontCount()); return true; }
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()); }