Hello community, here is the log from the commit of package lokalize for openSUSE:Factory checked in at 2016-05-29 03:09:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/lokalize (Old) and /work/SRC/openSUSE:Factory/.lokalize.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lokalize" Changes: -------- --- /work/SRC/openSUSE:Factory/lokalize/lokalize.changes 2016-03-29 10:37:52.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.lokalize.new/lokalize.changes 2016-05-29 03:09:35.000000000 +0200 @@ -1,0 +2,24 @@ +Sat May 7 10:43:12 UTC 2016 - tittiatc...@gmail.com + +- Update to KDE Applications 16.04.1 + * KDE Applications 16.04.1 + * https://www.kde.org/announcements/announce-applications-16.04.1.php + + +------------------------------------------------------------------- +Sun Apr 17 06:19:10 UTC 2016 - tittiatc...@gmail.com + +- Update to KDE Applications 16.04.0 + * KDE Applications 16.04.0 + * https://www.kde.org/announcements/announce-applications-16.04.0.php + + +------------------------------------------------------------------- +Mon Apr 11 06:54:20 UTC 2016 - tittiatc...@gmail.com + +- Update to KDE Applications 16.03.90 + * KDE Applications 16.04.0 RC + * https://www.kde.org/announcements/announce-applications-16.04-rc.php + + +------------------------------------------------------------------- Old: ---- lokalize-15.12.3.tar.xz New: ---- lokalize-16.04.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ lokalize.spec ++++++ --- /var/tmp/diff_new_pack.N3pZps/_old 2016-05-29 03:09:36.000000000 +0200 +++ /var/tmp/diff_new_pack.N3pZps/_new 2016-05-29 03:09:36.000000000 +0200 @@ -17,7 +17,7 @@ Name: lokalize -Version: 15.12.3 +Version: 16.04.1 Release: 0 Summary: KDE Translation Editor License: GPL-2.0+ ++++++ lokalize-15.12.3.tar.xz -> lokalize-16.04.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/CMakeLists.txt new/lokalize-16.04.1/CMakeLists.txt --- old/lokalize-15.12.3/CMakeLists.txt 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/CMakeLists.txt 2016-05-02 03:01:19.000000000 +0200 @@ -10,13 +10,13 @@ set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) include(KDEInstallDirs) include(KDECMakeSettings) -include(KDECompilerSettings) +include(KDECompilerSettings NO_POLICY_SCOPE) find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core DBus Widgets Script Sql) find_package(KF5 REQUIRED I18n KIO XmlGui Notifications Config CoreAddons DocTools Kross Sonnet DBusAddons Crash) -add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) +add_definitions(-DQT_USE_QSTRINGBUILDER) find_package(HUNSPELL) set_package_properties( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/cmake/FindHUNSPELL.cmake new/lokalize-16.04.1/cmake/FindHUNSPELL.cmake --- old/lokalize-15.12.3/cmake/FindHUNSPELL.cmake 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/cmake/FindHUNSPELL.cmake 2016-05-02 03:01:19.000000000 +0200 @@ -14,7 +14,7 @@ FIND_PATH(HUNSPELL_INCLUDE_DIR hunspell/hunspell.hxx ) -FIND_LIBRARY(HUNSPELL_LIBRARIES NAMES hunspell-1.3 hunspell-1.2) +FIND_LIBRARY(HUNSPELL_LIBRARIES NAMES hunspell-2.0 hunspell-1.5 hunspell-1.4 hunspell-1.3 hunspell-1.2) # handle the QUIETLY and REQUIRED arguments and set HUNSPELL_FOUND to TRUE if # all listed variables are TRUE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/lokalize.appdata.xml new/lokalize-16.04.1/lokalize.appdata.xml --- old/lokalize-15.12.3/lokalize.appdata.xml 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/lokalize.appdata.xml 2016-05-02 03:01:19.000000000 +0200 @@ -12,7 +12,6 @@ <name xml:lang="de">Lokalize</name> <name xml:lang="en-GB">Lokalize</name> <name xml:lang="es">Lokalize</name> - <name xml:lang="et">Lokalize</name> <name xml:lang="fi">Lokalize</name> <name xml:lang="fr">Lokalize</name> <name xml:lang="gl">Lokalize</name> @@ -43,7 +42,6 @@ <summary xml:lang="de">Computergestütztes Übersetzungssystem</summary> <summary xml:lang="en-GB">Computer-aided translation system</summary> <summary xml:lang="es">Sistema de traducción asistido por computador</summary> - <summary xml:lang="et">Tõlkemäluga tõlkimisrakendus</summary> <summary xml:lang="fi">Tietokoneavusteinen käännösjärjestelmä</summary> <summary xml:lang="fr">Outil de traduction assistée par ordinateur</summary> <summary xml:lang="gl">Sistema de tradución asistida por computador.</summary> @@ -69,12 +67,11 @@ <description> <p>Lokalize is the localization tool for KDE and other open source software. It is also a general computer-aided translation system (CAT) with which you can translate OpenDocument files (*.odt). Translate-Toolkit is used internally to extract text for translation from .odt to .xliff files and to merge translation back into .odt file.</p> <p xml:lang="ast">Lokalize ye la ferramienta de llocalización pa KDE y otru software de códigu llibre. Ye tamién un sistema de traducción asistíu per ordenador (CAT) col que pues traducir ficheros OpenDocument (*.odt). Internamente úsase Translate-Toolkit pa estrayer el testu pa la traducción de ficheros </p> - <p xml:lang="ca">El Lokalize és l'eina de traducció pel KDE i altre programari de codi lliure. També és un sistema de traducció assistit per ordinador (CAT) general que amb el que es poden traduir fitxers OpenDocument (*.odt). Internament s'utilitza el Translate-Toolkit per extreure text per la traducció des de fitxers .odt a .xliff i per tornar a fusionar la traducció al fitxer .odt.</p> - <p xml:lang="ca-valencia">El Lokalize és l'eina de traducció pel KDE i altre programari de codi lliure. També és un sistema de traducció assistit per ordinador (CAT) general que amb el que es poden traduir fitxers OpenDocument (*.odt). Internament s'utilitza el Translate-Toolkit per extreure text per la traducció des de fitxers .odt a .xliff i per tornar a fusionar la traducció al fitxer .odt.</p> + <p xml:lang="ca">El Lokalize és l'eina de traducció pel KDE i altre programari de codi lliure. També és un sistema de traducció assistit per ordinador (CAT) general que amb el que es poden traduir fitxers OpenDocument (*.odt). Internament s'utilitza el Translate-Toolkit per extreure text per a la traducció des de fitxers .odt a .xliff i per tornar a fusionar la traducció al fitxer .odt.</p> + <p xml:lang="ca-valencia">El Lokalize és l'eina de traducció pel KDE i altre programari de codi lliure. També és un sistema de traducció assistit per ordinador (CAT) general que amb el que es poden traduir fitxers OpenDocument (*.odt). Internament s'utilitza el Translate-Toolkit per extreure text per a la traducció des de fitxers .odt a .xliff i per tornar a fusionar la traducció al fitxer .odt.</p> <p xml:lang="de">Lokalize ist ein Lokalisierungs-Programm für KDE und andere quelloffene Software. Es ist außerdem ein rechnergestütztes Übersetzungssystem (CAT), mit dem Sie auch OpenDocument-Dateien (odt) übersetzen können. Intern wird „Translate-Toolkit“ zum Extrahieren von Text für die Übersetzung aus „odt“- in „xliff“-Dateien und für das Einfügen der Übersetzung zurück in „odt“-Dateien verwendet.</p> <p xml:lang="en-GB">Lokalize is the localisation tool for KDE and other open source software. It is also a general computer-aided translation system (CAT) with which you can translate OpenDocument files (*.odt). Translate-Toolkit is used internally to extract text for translation from .odt to .xliff files and to merge translation back into .odt file.</p> <p xml:lang="es">Lokalize es la herramienta de traducción para KDE y para otros proyectos de software de código abierto. También es un sistema de traducción asistido por computador (CAT) de uso general con el que puede traducir archivos OpenDocument (*.odt). «Translate-Toolkit» se usa internamente para extraer el texto para la traducción de archivos .odt en .xliff y para volver a fusionar de nuevo las traducciones en los archivos .odt.</p> - <p xml:lang="et">Lokalize on KDE ja muu avatud lähtekoodiga tarkvara tõlkimisrakendus. Samuti on see üldisemas tähenduses tõlkemäluga süsteem (CAT), mille abil saab tõlkida OpenDocument-faile (*.odt). Teksti eraldamiseks tõlkimise tarbeks .odt-failist .xliff-faili ja tõlke tagasiliitmiseks .odt-faili kasutatakse sisemiselt programmi Translate-Toolkit.</p> <p xml:lang="fi">Lokalize on lokalisointityökalu KDE:lle ja muille avoimen koodin ohjelmille. Se on myös yleiskäyttöinen tietokoneavusteinen käännösjärjestelmä (CAT), jolla voi kääntää OpenDocument-tiedostoja (*.odt). Lokalize käyttää Translate Toolkitia poimimaan käännettävän tekstin .odt-tiedostosta .xliff-tiedostoihin ja yhdistämään käännöksen takaisin .odt-tiedostoon.</p> <p xml:lang="fr">Lokalize est un outil de localisation pour KDE et d'autres outils open source. Il s'agit également d'un système d'aide à la traduction assisté par ordinateur pour les fichiers au format OpenDocument (*.odt). Translate-Toolkit est utilisé en interne pour extraire le texte à traduire depuis le fichier .odt vers un fichier au format .xliff puis fusionner en retour les traductions dans le fichier .odt.</p> <p xml:lang="gl">Lokalize é a ferramenta de localización de KDE e doutros programas libres. Tamén é un sistema xeral de tradución asistida por computador (CAT polas súas siglas en inglés) que lle permite traducir ficheiros en formato OpenDocument (.odt). Internamente usa Translate-Toolkit para extraer o texto a traducir de ficheiros «.odt» e «.xliff» e para integrar as traducións de volta no ficheiro «.odt».</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/scripts/find-gui-text.sh new/lokalize-16.04.1/scripts/find-gui-text.sh --- old/lokalize-15.12.3/scripts/find-gui-text.sh 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/scripts/find-gui-text.sh 2016-05-02 03:01:19.000000000 +0200 @@ -14,6 +14,7 @@ done for LOKALIZE_INSTANCE in $LOKALIZE_INSTANCES; do \ + qdbus $LOKALIZE_INSTANCE /ThisIsWhatYouWant/FileSearch/0 org.kde.Lokalize.FileSearch.findGuiTextPackage "$TEXT" "$PACKAGE"; \ qdbus $LOKALIZE_INSTANCE /ThisIsWhatYouWant org.kde.Lokalize.MainWindow.showTranslationMemory; \ qdbus $LOKALIZE_INSTANCE /ThisIsWhatYouWant/TranslationMemory/0 org.kde.Lokalize.TranslationMemory.findGuiTextPackage "$TEXT" "$PACKAGE"; \ done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/scripts/msgfmt.py new/lokalize-16.04.1/scripts/msgfmt.py --- old/lokalize-15.12.3/scripts/msgfmt.py 1970-01-01 01:00:00.000000000 +0100 +++ new/lokalize-16.04.1/scripts/msgfmt.py 2016-05-02 03:01:19.000000000 +0200 @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +import os,sys +import Editor +import Project + +def doCompile(): + if not Editor.isValid() or Editor.currentFile=='': return + lang=Project.targetLangCode() + + (path, pofilename)=os.path.split(Editor.currentFile()) + (package, ext)=os.path.splitext(pofilename) + if os.system('touch ~/.local/share/locale/%s/LC_MESSAGES' % lang)!=0: + os.system('mkdir ~/.local/share') + os.system('mkdir ~/.local/share/locale') + os.system('mkdir ~/.local/share/locale/%s' % lang) + os.system('mkdir ~/.local/share/locale/%s/LC_MESSAGES' % lang) + + os.system('msgfmt -o ~/.local/share/locale/%s/LC_MESSAGES/%s.mo %s' % (lang, package, Editor.currentFile())) + +doCompile() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/scripts/msgfmt.rc new/lokalize-16.04.1/scripts/msgfmt.rc --- old/lokalize-15.12.3/scripts/msgfmt.rc 1970-01-01 01:00:00.000000000 +0100 +++ new/lokalize-16.04.1/scripts/msgfmt.rc 2016-05-02 03:01:19.000000000 +0200 @@ -0,0 +1,6 @@ +<!DOCTYPE KrossScripting SYSTEM "kpartgui.dtd"> +<KrossScripting> + <collection comment="Tools" name="tools" text="Tools" > + <script icon="text-x-python" comment="Compile .po and make it available to applications" name="msgfmt" file="msgfmt.py" interpreter="python" text="Compile .po" /> + </collection> +</KrossScripting> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/scripts/xliff2odf-standalone.py new/lokalize-16.04.1/scripts/xliff2odf-standalone.py --- old/lokalize-15.12.3/scripts/xliff2odf-standalone.py 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/scripts/xliff2odf-standalone.py 2016-05-02 03:01:19.000000000 +0200 @@ -20,13 +20,13 @@ try: ctx = establish_connection() except: - os.system('soffice "-accept=socket,host=localhost,port=2002;urp;"') + os.system('soffice "--accept=socket,host=localhost,port=2002;urp;"') for c in range(30): time.sleep(1) #sleeps rule ))) try:ctx = establish_connection() except: continue break - print "file://"+odfpathname + print ("file://"+odfpathname) desktop = ctx.ServiceManager.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) model = desktop.loadComponentFromURL( "file://"+odfpathname,"_default", 0, () ) @@ -40,11 +40,11 @@ cursor = model.Text.createTextCursor() cursor.gotoStart(False) try: - print entryid + print (entryid) #office:document-content[0]/office:body[0]/office:text[0]/text:h[0] standardstart='office:document-content[0]/office:body[0]/office:text[0]/' if entryid.startswith(standardstart): entryid=entryid[len(standardstart):] - else: print 'non-standard start: %s' % entryid + else: print ('non-standard start: %s' % entryid) numre=re.compile('\\[([0-9]*)\\]') elemre=re.compile(':([^\\[]*)\\[') @@ -70,7 +70,7 @@ c.gotoRange(cursor,False) except: - print 'error determining pos' + print ('error determining pos') #return ctx ctx.ServiceManager diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/scripts/xliffmerge.py new/lokalize-16.04.1/scripts/xliffmerge.py --- old/lokalize-15.12.3/scripts/xliffmerge.py 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/scripts/xliffmerge.py 2016-05-02 03:01:19.000000000 +0200 @@ -6,8 +6,8 @@ #TODO: mark as 'needs adaptation' when only punctuation is changed #check id's change after document update -from PyQt4.QtCore import * -from PyQt4.QtXml import * +from PyQt5.QtCore import * +from PyQt5.QtXml import * import itertools import math diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/catalog/catalog.cpp new/lokalize-16.04.1/src/catalog/catalog.cpp --- old/lokalize-15.12.3/src/catalog/catalog.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/catalog/catalog.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -123,10 +123,10 @@ QTimer* t=&(d._autoSaveTimer); t->setInterval(2*60*1000); t->setSingleShot(false); - connect(t, SIGNAL(timeout()), this,SLOT(doAutoSave())); + connect(t, &QTimer::timeout, this, &Catalog::doAutoSave); connect(this,SIGNAL(signalFileSaved()), t,SLOT(start())); connect(this,SIGNAL(signalFileLoaded()), t,SLOT(start())); - connect(this,SIGNAL(indexChanged(int)),this,SLOT(setAutoSaveDirty())); + connect(this, &Catalog::indexChanged, this, &Catalog::setAutoSaveDirty); #endif connect(Project::local(),SIGNAL(configChanged()),this,SLOT(projectConfigChanged())); } @@ -658,7 +658,7 @@ QString localPath=QFileInfo(localFilePath).absolutePath(); - if (!QFileInfo(localPath).exists()) + if (!QFileInfo::exists(localPath)) if (!QDir::root().mkpath(localPath)) return false; QFile file(localFilePath); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/common/stemming.cpp new/lokalize-16.04.1/src/common/stemming.cpp --- old/lokalize-15.12.3/src/common/stemming.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/common/stemming.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -61,14 +61,14 @@ QString dictPath = QStringLiteral("C:/Program Files (x86)/LibreOffice 5/share/extensions/dict-") % langCode.leftRef(2) % '/'; #else QString dictPath = QStringLiteral("/usr/share/hunspell/"); - if (!QFileInfo(dictPath).exists()) + if (!QFileInfo::exists(dictPath)) dictPath = QStringLiteral("/usr/share/myspell/"); #endif QString dic = dictPath % langCode % QLatin1String(".dic"); - if (!QFileInfo(dic).exists()) + if (!QFileInfo::exists(dic)) dic = dictPath % enhanceLangCode(langCode) % QLatin1String(".dic"); - if (QFileInfo(dic).exists()) + if (QFileInfo::exists(dic)) { speller = new Hunspell(QString(dictPath % langCode % ".aff").toLatin1().constData(), dic.toLatin1().constData()); codec = QTextCodec::codecForName(speller->get_dic_encoding()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/editortab.cpp new/lokalize-16.04.1/src/editortab.cpp --- old/lokalize-15.12.3/src/editortab.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/editortab.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -124,14 +124,14 @@ connect(m_view, SIGNAL(signalChanged(uint)), this, SLOT(msgStrChanged())); msgStrChanged(); connect(SettingsController::instance(),SIGNAL(generalSettingsChanged()),m_view, SLOT(settingsChanged())); - connect(m_view->tabBar(),SIGNAL(currentChanged(int)),this,SLOT(switchForm(int))); + connect(m_view->tabBar(),&QTabBar::currentChanged,this,&EditorTab::switchForm); connect(m_view, SIGNAL(gotoEntryRequested(DocPosition)),this,SLOT(gotoEntry(DocPosition))); connect(m_view, SIGNAL(tmLookupRequested(DocPosition::Part,QString)), this, SLOT(lookupSelectionInTranslationMemory())); connect(this, SIGNAL(fileOpened()), this, SLOT(indexWordsForCompletion()),Qt::QueuedConnection); - connect (m_catalog,SIGNAL(signalFileAutoSaveFailed(QString)),this,SLOT(fileAutoSaveFailedWarning(QString))); + connect (m_catalog,&Catalog::signalFileAutoSaveFailed,this,&EditorTab::fileAutoSaveFailedWarning); //defer some work to make window appear earlier (~200 msec on my Core Duo) @@ -145,6 +145,9 @@ EditorTab::~EditorTab() { + disconnect(m_catalog,&Catalog::signalNumberOfFuzziesChanged,this,&EditorTab::numberOfFuzziesChanged); + disconnect(m_catalog,&Catalog::signalNumberOfEmptyChanged,this,&EditorTab::numberOfUntranslatedChanged); + if (!m_catalog->isEmpty()) { emit fileAboutToBeClosed(); @@ -166,8 +169,8 @@ statusBarItems.insert(ID_STATUS_UNTRANS,i18nc("@info:status message entries","Untranslated: %1",0)); statusBarItems.insert(ID_STATUS_ISFUZZY,QString()); - connect(m_catalog,SIGNAL(signalNumberOfFuzziesChanged()),this,SLOT(numberOfFuzziesChanged())); - connect(m_catalog,SIGNAL(signalNumberOfEmptyChanged()),this,SLOT(numberOfUntranslatedChanged())); + connect(m_catalog,&Catalog::signalNumberOfFuzziesChanged,this,&EditorTab::numberOfFuzziesChanged); + connect(m_catalog,&Catalog::signalNumberOfEmptyChanged,this,&EditorTab::numberOfUntranslatedChanged); } #ifndef NOKDE @@ -278,9 +281,8 @@ actionCollection()->addAction( QStringLiteral("showcatalogtreeview_action"), m_transUnitsView->toggleViewAction() ); connect (this,SIGNAL(signalNewEntryDisplayed(DocPosition)),m_transUnitsView,SLOT(slotNewEntryDisplayed(DocPosition))); connect (m_transUnitsView,SIGNAL(gotoEntry(DocPosition,int)),this,SLOT(gotoEntry(DocPosition,int))); - connect (m_transUnitsView,SIGNAL(escaped()),this,SLOT(setProperFocus())); - connect (m_syncView,SIGNAL(mergeCatalogPointerChanged(MergeCatalog*)), - m_transUnitsView, SLOT(setMergeCatalogPointer(MergeCatalog*))); + connect (m_transUnitsView,&CatalogView::escaped,this,&EditorTab::setProperFocus); + connect (m_syncView,&MergeView::mergeCatalogPointerChanged, m_transUnitsView, &CatalogView::setMergeCatalogPointer); m_notesView = new MsgCtxtView(this,m_catalog); addDockWidget(Qt::LeftDockWidgetArea, m_notesView); @@ -288,7 +290,7 @@ connect(m_catalog,SIGNAL(signalFileLoaded()),m_notesView,SLOT(cleanup())); connect(m_notesView,SIGNAL(srcFileOpenRequested(QString,int)),this,SLOT(dispatchSrcFileOpenRequest(QString,int))); connect(m_view, SIGNAL(signalChanged(uint)), m_notesView, SLOT(removeErrorNotes())); - connect(m_notesView,SIGNAL(escaped()),this,SLOT(setProperFocus())); + connect(m_notesView,&MsgCtxtView::escaped,this,&EditorTab::setProperFocus); action=edit->addAction(QStringLiteral("edit_addnote"),m_notesView,SLOT(addNoteUI())); //action->setShortcut(Qt::CTRL+glist[i]); @@ -370,7 +372,7 @@ GlossaryNS::GlossaryView* _glossaryView = new GlossaryNS::GlossaryView(this,m_catalog,gactions); addDockWidget(Qt::BottomDockWidgetArea, _glossaryView); glossary->addAction( QStringLiteral("showglossaryview_action"), _glossaryView->toggleViewAction() ); - connect (this,SIGNAL(signalNewEntryDisplayed(DocPosition)),_glossaryView,SLOT(slotNewEntryDisplayed(DocPosition))); + connect (this,&EditorTab::signalNewEntryDisplayed,_glossaryView,&GlossaryNS::GlossaryView::slotNewEntryDisplayed); connect (_glossaryView,SIGNAL(termInsertRequested(QString)),m_view,SLOT(insertTerm(QString))); gaction = glossary->addAction(QStringLiteral("glossary_define"),this,SLOT(defineNewTerm())); @@ -382,7 +384,7 @@ BinUnitsView* binUnitsView=new BinUnitsView(m_catalog,this); addDockWidget(Qt::BottomDockWidgetArea, binUnitsView); edit->addAction( QStringLiteral("showbinunitsview_action"), binUnitsView->toggleViewAction() ); - connect(m_view,SIGNAL(binaryUnitSelectRequested(QString)),binUnitsView,SLOT(selectUnit(QString))); + connect(m_view,&EditorView::binaryUnitSelectRequested,binUnitsView,&BinUnitsView::selectUnit); //#ifdef WEBQUERY_ENABLE @@ -493,7 +495,7 @@ action->setCheckable(true); connect(action, SIGNAL(triggered()), m_view,SLOT(toggleApprovement())); connect(m_view, SIGNAL(signalApprovedEntryDisplayed(bool)),this,SIGNAL(signalApprovedEntryDisplayed(bool))); - connect(this, SIGNAL(signalApprovedEntryDisplayed(bool)),action,SLOT(setChecked(bool))); + connect(this, &EditorTab::signalApprovedEntryDisplayed,action,&QAction::setChecked); connect(this, SIGNAL(signalApprovedEntryDisplayed(bool)),this,SLOT(msgStrChanged()),Qt::QueuedConnection); m_approveAction=action; @@ -568,25 +570,25 @@ actionCategory=nav; action=nav->addAction(KStandardAction::Next,this, SLOT(gotoNext())); action->setText(i18nc("@action:inmenu entry","&Next")); - connect( this, SIGNAL(signalLastDisplayed(bool)),action,SLOT(setDisabled(bool))); + connect( this, &EditorTab::signalLastDisplayed, action, &QAction::setDisabled); connect(m_view->viewPort(),SIGNAL(gotoNextRequested()),this,SLOT(gotoNext())); action=nav->addAction(KStandardAction::Prior,this, SLOT(gotoPrev())); action->setText(i18nc("@action:inmenu entry","&Previous")); - connect( this, SIGNAL(signalFirstDisplayed(bool)), action , SLOT(setDisabled(bool)) ); + connect( this, &EditorTab::signalFirstDisplayed, action, &QAction::setDisabled); connect(m_view->viewPort(),SIGNAL(gotoPrevRequested()),this,SLOT(gotoPrev())); action=nav->addAction(KStandardAction::FirstPage,this, SLOT(gotoFirst())); connect(m_view->viewPort(),SIGNAL(gotoFirstRequested()),this,SLOT(gotoFirst())); action->setText(i18nc("@action:inmenu","&First Entry")); action->setShortcut(QKeySequence(Qt::CTRL+Qt::ALT+Qt::Key_Home)); - connect( this, SIGNAL(signalFirstDisplayed(bool)), action , SLOT(setDisabled(bool)) ); + connect( this, &EditorTab::signalFirstDisplayed, action, &QAction::setDisabled); action=nav->addAction(KStandardAction::LastPage,this, SLOT(gotoLast())); connect(m_view->viewPort(),SIGNAL(gotoLastRequested()),this,SLOT(gotoLast())); action->setText(i18nc("@action:inmenu","&Last Entry")); action->setShortcut(QKeySequence(Qt::CTRL+Qt::ALT+Qt::Key_End)); - connect( this, SIGNAL(signalLastDisplayed(bool)),action,SLOT(setDisabled(bool))); + connect( this, &EditorTab::signalLastDisplayed,action,&QAction::setDisabled); action=nav->addAction(KStandardAction::GotoPage,this, SLOT(gotoEntry())); ac->setDefaultShortcut(action, QKeySequence(Qt::CTRL+Qt::Key_G)); @@ -595,32 +597,32 @@ ADD_ACTION_SHORTCUT_ICON("go_prev_fuzzy",i18nc("@action:inmenu\n'not ready' means 'fuzzy' in gettext terminology","Previous non-empty but not ready"),Qt::CTRL+Qt::Key_PageUp,"prevfuzzy") connect( action, SIGNAL(triggered(bool)), this, SLOT(gotoPrevFuzzy()) ); connect( m_view->viewPort(), SIGNAL(gotoPrevFuzzyRequested()), this, SLOT(gotoPrevFuzzy()) ); - connect( this, SIGNAL(signalPriorFuzzyAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalPriorFuzzyAvailable,action,&QAction::setEnabled); ADD_ACTION_SHORTCUT_ICON("go_next_fuzzy",i18nc("@action:inmenu\n'not ready' means 'fuzzy' in gettext terminology","Next non-empty but not ready"),Qt::CTRL+Qt::Key_PageDown,"nextfuzzy") connect( action, SIGNAL(triggered(bool)), this, SLOT(gotoNextFuzzy()) ); connect( m_view->viewPort(), SIGNAL(gotoNextFuzzyRequested()), this, SLOT(gotoNextFuzzy()) ); - connect( this, SIGNAL(signalNextFuzzyAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalNextFuzzyAvailable,action,&QAction::setEnabled); ADD_ACTION_SHORTCUT_ICON("go_prev_untrans",i18nc("@action:inmenu","Previous untranslated"),Qt::ALT+Qt::Key_PageUp,"prevuntranslated") connect( action, SIGNAL(triggered(bool)), this, SLOT(gotoPrevUntranslated())); connect( m_view->viewPort(), SIGNAL(gotoPrevUntranslatedRequested()), this, SLOT(gotoPrevUntranslated()) ); - connect( this, SIGNAL(signalPriorUntranslatedAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalPriorUntranslatedAvailable,action,&QAction::setEnabled); ADD_ACTION_SHORTCUT_ICON("go_next_untrans",i18nc("@action:inmenu","Next untranslated"),Qt::ALT+Qt::Key_PageDown,"nextuntranslated") connect( action, SIGNAL(triggered(bool)), this, SLOT(gotoNextUntranslated())); connect( m_view->viewPort(), SIGNAL(gotoNextUntranslatedRequested()), this, SLOT(gotoNextUntranslated()) ); - connect( this, SIGNAL(signalNextUntranslatedAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalNextUntranslatedAvailable,action,&QAction::setEnabled); ADD_ACTION_SHORTCUT_ICON("go_prev_fuzzyUntr",i18nc("@action:inmenu\n'not ready' means 'fuzzy' in gettext terminology","Previous not ready"),Qt::CTRL+Qt::SHIFT/*ALT*/+Qt::Key_PageUp,"prevfuzzyuntrans") connect( action, SIGNAL(triggered(bool)), this, SLOT(gotoPrevFuzzyUntr()) ); connect( m_view->viewPort(), SIGNAL(gotoPrevFuzzyUntrRequested()), this, SLOT(gotoPrevFuzzyUntr()) ); - connect( this, SIGNAL(signalPriorFuzzyOrUntrAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalPriorFuzzyOrUntrAvailable,action,&QAction::setEnabled); ADD_ACTION_SHORTCUT_ICON("go_next_fuzzyUntr",i18nc("@action:inmenu\n'not ready' means 'fuzzy' in gettext terminology","Next not ready"),Qt::CTRL+Qt::SHIFT+Qt::Key_PageDown,"nextfuzzyuntrans") connect( action, SIGNAL(triggered(bool)), this, SLOT(gotoNextFuzzyUntr()) ); connect( m_view->viewPort(), SIGNAL(gotoNextFuzzyUntrRequested()), this, SLOT(gotoNextFuzzyUntr()) ); - connect( this, SIGNAL(signalNextFuzzyOrUntrAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalNextFuzzyOrUntrAvailable,action,&QAction::setEnabled); action=nav->addAction(QStringLiteral("go_focus_earch_line"),m_transUnitsView, SLOT(setFocus())); ac->setDefaultShortcut(action, QKeySequence(Qt::CTRL+Qt::Key_L)); @@ -633,15 +635,15 @@ action->setText(i18nc("@option:check","Bookmark message")); action->setCheckable(true); //connect(action, SIGNAL(triggered(bool)),m_view,SLOT(toggleBookmark(bool))); - connect( this, SIGNAL(signalBookmarkDisplayed(bool)),action,SLOT(setChecked(bool)) ); + connect( this, &EditorTab::signalBookmarkDisplayed,action,&QAction::setChecked); action=nav->addAction(QStringLiteral("bookmark_prior"),this,SLOT(gotoPrevBookmark())); action->setText(i18nc("@action:inmenu","Previous bookmark")); - connect( this, SIGNAL(signalPriorBookmarkAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalPriorBookmarkAvailable,action,&QAction::setEnabled); action=nav->addAction(QStringLiteral("bookmark_next"),this,SLOT(gotoNextBookmark())); action->setText(i18nc("@action:inmenu","Next bookmark")); - connect( this, SIGNAL(signalNextBookmarkAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( this, &EditorTab::signalNextBookmarkAvailable,action,&QAction::setEnabled); //Tools edit->addAction(KStandardAction::Spelling,this,SLOT(spellcheck())); @@ -670,7 +672,7 @@ action->setWhatsThis(action->statusTip()); ac->setDefaultShortcut(action, QKeySequence(Qt::ALT+Qt::Key_Up)); - connect( m_syncView, SIGNAL(signalPriorChangedAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( m_syncView, &MergeView::signalPriorChangedAvailable,action,&QAction::setEnabled); m_syncView->addAction(action); action = sync1->addAction(QStringLiteral("merge_next"),m_syncView,SLOT(gotoNextChanged())); @@ -679,20 +681,20 @@ action->setToolTip(action->statusTip()); action->setWhatsThis(action->statusTip()); ac->setDefaultShortcut(action, QKeySequence(Qt::ALT+Qt::Key_Down)); - connect( m_syncView, SIGNAL(signalNextChangedAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( m_syncView, &MergeView::signalNextChangedAvailable,action,&QAction::setEnabled); m_syncView->addAction(action); action = sync1->addAction(QStringLiteral("merge_nextapproved"),m_syncView,SLOT(gotoNextChangedApproved())); action->setText(i18nc("@action:inmenu","Next different approved")); ac->setDefaultShortcut(action, QKeySequence(Qt::ALT+Qt::META+Qt::Key_Down)); - connect( m_syncView, SIGNAL(signalNextChangedAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( m_syncView, &MergeView::signalNextChangedAvailable,action,&QAction::setEnabled); m_syncView->addAction(action); action = sync1->addAction(QStringLiteral("merge_accept"),m_syncView,SLOT(mergeAccept())); action->setText(i18nc("@action:inmenu","Copy from merging source")); action->setEnabled(false); ac->setDefaultShortcut(action, QKeySequence(Qt::ALT+Qt::Key_Return)); - connect( m_syncView, SIGNAL(signalEntryWithMergeDisplayed(bool)),action,SLOT(setEnabled(bool))); + connect( m_syncView, &MergeView::signalEntryWithMergeDisplayed,action,&QAction::setEnabled); m_syncView->addAction(action); action = sync1->addAction(QStringLiteral("merge_acceptnew"),m_syncView,SLOT(mergeAcceptAllForEmpty())); @@ -701,13 +703,13 @@ action->setToolTip(action->statusTip()); action->setWhatsThis(action->statusTip()); ac->setDefaultShortcut(action, QKeySequence(Qt::CTRL+Qt::ALT+Qt::Key_A)); - connect( m_syncView, SIGNAL(mergeCatalogAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( m_syncView, &MergeView::mergeCatalogAvailable,action,&QAction::setEnabled); m_syncView->addAction(action); //action->setShortcut(Qt::ALT+Qt::Key_E); action = sync1->addAction(QStringLiteral("merge_back"),m_syncView,SLOT(mergeBack())); action->setText(i18nc("@action:inmenu","Copy to merging source")); - connect( m_syncView, SIGNAL(mergeCatalogAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( m_syncView, &MergeView::mergeCatalogAvailable,action,&QAction::setEnabled); ac->setDefaultShortcut(action, QKeySequence(Qt::CTRL+Qt::ALT+Qt::Key_Return)); m_syncView->addAction(action); @@ -725,7 +727,7 @@ action->setStatusTip(i18nc("@info:status","Previous entry which is translated differently in the file being merged, including empty translations in merge source")); action->setToolTip(action->statusTip()); action->setWhatsThis(action->statusTip()); - connect( m_syncViewSecondary, SIGNAL(signalPriorChangedAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( m_syncView, &MergeView::signalPriorChangedAvailable,action,&QAction::setEnabled); m_syncViewSecondary->addAction(action); action = sync2->addAction(QStringLiteral("mergesecondary_next"),m_syncViewSecondary,SLOT(gotoNextChanged())); @@ -733,12 +735,12 @@ action->setStatusTip(i18nc("@info:status","Next entry which is translated differently in the file being merged, including empty translations in merge source")); action->setToolTip(action->statusTip()); action->setWhatsThis(action->statusTip()); - connect( m_syncViewSecondary, SIGNAL(signalNextChangedAvailable(bool)),action,SLOT(setEnabled(bool)) ); + connect( m_syncView, &MergeView::signalNextChangedAvailable,action,&QAction::setEnabled); m_syncViewSecondary->addAction(action); action = sync2->addAction(QStringLiteral("mergesecondary_accept"),m_syncViewSecondary,SLOT(mergeAccept())); action->setText(i18nc("@action:inmenu","Copy from merging source")); - connect( m_syncViewSecondary, SIGNAL(signalEntryWithMergeDisplayed(bool)),action,SLOT(setEnabled(bool))); + connect( m_syncView, &MergeView::signalEntryWithMergeDisplayed,action,&QAction::setEnabled); m_syncViewSecondary->addAction(action); action = sync2->addAction(QStringLiteral("mergesecondary_acceptnew"),m_syncViewSecondary,SLOT(mergeAcceptAllForEmpty())); @@ -1463,11 +1465,18 @@ mergeOpen(mergeFilePath); } -void EditorTab::dispatchSrcFileOpenRequest(const QString& srcPath, int line) +static void openLxrSearch(const QString& srcFileRelPath) +{ + QDesktopServices::openUrl(QUrl(QStringLiteral("https://lxr.kde.org/search?_filestring=") + + QString::fromLatin1(QUrl::toPercentEncoding(srcFileRelPath)))); +} + + +void EditorTab::dispatchSrcFileOpenRequest(const QString& srcFileRelPath, int line) { // Try project scripts first. m_srcFileOpenRequestAccepted = false; - emit srcFileOpenRequested(srcPath, line); + emit srcFileOpenRequested(srcFileRelPath, line); if (m_srcFileOpenRequestAccepted) return; @@ -1475,12 +1484,88 @@ // path exists relative to the current translation file path. QDir relativePath(currentFilePath()); relativePath.cdUp(); - QString srcAbsolutePath(relativePath.absoluteFilePath(srcPath)); + QString srcAbsolutePath(relativePath.absoluteFilePath(srcFileRelPath)); if (QFile::exists(srcAbsolutePath)) { QDesktopServices::openUrl(QUrl::fromLocalFile(srcAbsolutePath)); return; } + QString dir = Project::instance()->local()->sourceDir(); + if (dir.isEmpty()) + { + switch (KMessageBox::questionYesNoCancel(SettingsController::instance()->mainWindowPtr(), + i18nc("@info","Would you like to search for the source file locally or via lxr.kde.org?"),i18nc("@title:window","Source file lookup"), + KGuiItem(i18n("Locally")), KGuiItem("lxr.kde.org") + )) + { + case KMessageBox::Yes: break; + case KMessageBox::No: openLxrSearch(srcFileRelPath); + case KMessageBox::Cancel: + default: + return; + } + } + + //hard fallback + if (dir.isEmpty()) + { + dir = QFileDialog::getExistingDirectory(this, i18n("Select project's base folder for source file lookup"), QDir::homePath()); + if (dir.length()) + Project::instance()->local()->setSourceDir(dir); + } + if (dir.length()) + { + auto doOpen = [srcFileRelPath]() + { + auto sourceFilePaths = Project::instance()->sourceFilePaths(); + bool found = false; + QByteArray fn = srcFileRelPath.midRef(srcFileRelPath.lastIndexOf('/')+1).toUtf8(); + auto it=sourceFilePaths.constFind(fn); + while (it!=sourceFilePaths.constEnd() && it.key() == fn) + { + const QString absFilePath = QString::fromUtf8(it.value()+'/'+fn); + if (!absFilePath.endsWith(srcFileRelPath) || !QFileInfo::exists(absFilePath) ) //for the case when link contained also folders + { + it++; + continue; + } + found = true; + QDesktopServices::openUrl(QUrl::fromLocalFile(absFilePath)); + it++; + } + if (!found) + { + switch (KMessageBox::warningYesNoCancel(SettingsController::instance()->mainWindowPtr(), + i18nc("@info","Could not find source file in the folder specified.\n" + "Do you want to change source files folder?"),i18nc("@title:window","Source file lookup"), + KStandardGuiItem::yes(), KStandardGuiItem::no(), KGuiItem(i18n("lxr.kde.org")))) + { + case KMessageBox::Cancel: + Project::instance()->local()->setSourceDir(QString()); + Project::instance()->resetSourceFilePaths(); + openLxrSearch(srcFileRelPath); + case KMessageBox::No: + return; + default: ; //fall through to dir selection + } + + QString dir = QFileDialog::getExistingDirectory(0, i18n("Select project's base folder for source file lookup"), Project::instance()->local()->sourceDir()); + if (dir.length()) + { + Project::instance()->local()->setSourceDir(dir); + Project::instance()->resetSourceFilePaths(); + } + + } + }; + if (!Project::instance()->sourceFilePaths().isEmpty()) + doOpen(); + else + connect(Project::instance(), &Project::sourceFilePathsAreReady, doOpen); + return; + } + + // Otherwise, let the user know how to create a project script to handle // opening source file paths that are not relative to translation files. KMessageBox::information(this, i18nc("@info", @@ -1552,9 +1637,14 @@ QStringList unoArgs(QStringLiteral("-c")); unoArgs.append(QStringLiteral("import uno")); if (QProcess::execute(python, unoArgs)!=0) { - KMessageBox::information(SettingsController::instance()->mainWindowPtr(), + python=QStringLiteral("python3"); + QStringList unoArgs(QStringLiteral("-c")); unoArgs.append(QStringLiteral("import uno")); + if (QProcess::execute(python, unoArgs)!=0) + { + KMessageBox::information(SettingsController::instance()->mainWindowPtr(), i18n("Install python-uno package for additional functionality.")); - return; + return; + } } QStringList reloaderArgs(reloaderScript); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/filesearch/filesearchtab.cpp new/lokalize-16.04.1/src/filesearch/filesearchtab.cpp --- old/lokalize-15.12.3/src/filesearch/filesearchtab.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/filesearch/filesearchtab.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -941,6 +941,14 @@ return FILESEARCH_PATH + QString::number(m_dbusId); } + +bool FileSearchTab::findGuiTextPackage(QString text, QString package) +{ + setSourceQuery(text); + performSearch(); + + return true; +} //END DBus interface #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/filesearch/filesearchtab.h new/lokalize-16.04.1/src/filesearch/filesearchtab.h --- old/lokalize-15.12.3/src/filesearch/filesearchtab.h 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/filesearch/filesearchtab.h 2016-05-02 03:01:19.000000000 +0200 @@ -79,6 +79,10 @@ Q_SCRIPTABLE void addFilesToSearch(const QStringList&); Q_SCRIPTABLE void setSourceQuery(const QString&); Q_SCRIPTABLE void setTargetQuery(const QString&); +#ifndef NOKDE + Q_SCRIPTABLE bool findGuiText(QString text){return findGuiTextPackage(text,QString());} + Q_SCRIPTABLE bool findGuiTextPackage(QString text, QString package); +#endif void fileSearchNext(); void stopSearch(); void massReplace(const QRegExp &what, const QString& with); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/filesearch/org.kde.lokalize.FileSearch.xml new/lokalize-16.04.1/src/filesearch/org.kde.lokalize.FileSearch.xml --- old/lokalize-15.12.3/src/filesearch/org.kde.lokalize.FileSearch.xml 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/filesearch/org.kde.lokalize.FileSearch.xml 2016-05-02 03:01:19.000000000 +0200 @@ -6,5 +6,20 @@ <method name="addFilesToSearch"> <arg type="as" direction="in"/> </method> + <method name="setSourceQuery"> + <arg type="s" direction="in"/> + </method> + <method name="setTargetQuery"> + <arg type="s" direction="in"/> + </method> + <method name="findGuiText"> + <arg type="b" direction="out"/> + <arg name="text" type="s" direction="in"/> + </method> + <method name="findGuiTextPackage"> + <arg type="b" direction="out"/> + <arg name="text" type="s" direction="in"/> + <arg name="package" type="s" direction="in"/> + </method> </interface> </node> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/lokalize.notifyrc new/lokalize-16.04.1/src/lokalize.notifyrc --- old/lokalize-15.12.3/src/lokalize.notifyrc 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/lokalize.notifyrc 2016-05-02 03:01:19.000000000 +0200 @@ -232,3 +232,28 @@ Name[zh_CN]=未找到 Qt SQL 模块 Name[zh_TW]=找不到 Qt Sql 模組 Action=Popup + +[Event/SourceFileScan] +Name=Scanning folders with source files... +Name[ast]=Escaniando carpetes con ficheros fonte... +Name[ca]=S'estan explorant les carpetes amb els fitxers de codi font... +Name[ca@valencia]=S'estan explorant les carpetes amb els fitxers de codi font... +Name[de]=Ordner mit Quelldateien wird durchsucht ... +Name[en_GB]=Scanning folders with source files... +Name[es]=Explorando carpetas con archivos de código fuente... +Name[fi]=Etsitään lähdekoodikansiosta… +Name[gl]=Examinando os cartafoles con ficheiros fonte… +Name[nl]=Mappen scannen met bronbestanden... +Name[pl]=Przeszukiwanie katalogów z plikami źródłowymi... +Name[pt]=A sondar as pastas com os ficheiros de origem... +Name[pt_BR]=Analisando as pastas com os arquivos de origem... +Name[sk]=Prehľadávam priečinky so zdrojovými súbormi... +Name[sl]=Preiskovanje map z izvornimi datotekami ... +Name[sr]=Скенирам фасцикле изворних фајлова... +Name[sr@ijekavian]=Скенирам фасцикле изворних фајлова... +Name[sr@ijekavianlatin]=Skeniram fascikle izvornih fajlova... +Name[sr@latin]=Skeniram fascikle izvornih fajlova... +Name[sv]=Söker igenom kataloger med källfiler... +Name[uk]=Шукаємо початкові файли у теках… +Name[x-test]=xxScanning folders with source files...xx +Action=Popup diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/lokalizemainwindow.cpp new/lokalize-16.04.1/src/lokalizemainwindow.cpp --- old/lokalize-15.12.3/src/lokalizemainwindow.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/lokalizemainwindow.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -81,12 +81,10 @@ m_mdiArea->setViewMode(QMdiArea::TabbedView); m_mdiArea->setActivationOrder(QMdiArea::ActivationHistoryOrder); m_mdiArea->setDocumentMode(true); -#if QT_VERSION >= 0x040800 m_mdiArea->setTabsMovable(true); -#endif setCentralWidget(m_mdiArea); - connect(m_mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),this,SLOT(slotSubWindowActivated(QMdiSubWindow*))); + connect(m_mdiArea, &QMdiArea::subWindowActivated,this,&LokalizeMainWindow::slotSubWindowActivated); setupActions(); //prevent relayout of dockwidgets diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/main.cpp new/lokalize-16.04.1/src/main.cpp --- old/lokalize-15.12.3/src/main.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/main.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -152,7 +152,7 @@ Q_FOREACH (const QString& filePath, parser.positionalArguments()) if (filePath.endsWith(QLatin1String(".lokalize"))) projectFilePath = filePath; - else if (QFile::exists(filePath)) + else if (QFileInfo::exists(filePath)) urls.append(filePath); if (projectFilePath.length()) @@ -185,7 +185,7 @@ { for (int j=0; j<parser.positionalArguments().count(); j++) { - if (!QFile::exists(parser.positionalArguments().at(j))) continue; + if (!QFileInfo::exists(parser.positionalArguments().at(j))) continue; strncpy(sentPath, parser.positionalArguments().at(j).toUtf8().constData(), 255); MyCDS.dwData = FILEPATHMESSAGE; MyCDS.cbData = sizeof( sentPath ); // size of data @@ -211,7 +211,7 @@ #endif SettingsController::instance()->ensureProjectIsLoaded(); for (int j=0; j<parser.positionalArguments().count(); j++) - if (QFile::exists(parser.positionalArguments().at(j))) Project::instance()->fileOpen(parser.positionalArguments().at(j)); + if (QFileInfo::exists(parser.positionalArguments().at(j))) Project::instance()->fileOpen(parser.positionalArguments().at(j)); if (!parser.positionalArguments().count()) { WelcomeTab* welcome=new WelcomeTab(0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/msgctxtview.cpp new/lokalize-16.04.1/src/msgctxtview.cpp --- old/lokalize-15.12.3/src/msgctxtview.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/msgctxtview.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -64,7 +64,7 @@ m_browser->viewport()->setBackgroundRole(QPalette::Background); m_browser->setOpenLinks(false); - connect(m_browser,SIGNAL(anchorClicked(QUrl)),this,SLOT(anchorClicked(QUrl))); + connect(m_browser,&QTextBrowser::anchorClicked,this,&MsgCtxtView::anchorClicked); } MsgCtxtView::~MsgCtxtView() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/project/project.cpp new/lokalize-16.04.1/src/project/project.cpp --- old/lokalize-15.12.3/src/project/project.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/project/project.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -37,6 +37,7 @@ #include <klocalizedstring.h> #include <kmessagebox.h> +#include <knotification.h> #include <QLocale> #include <QTimer> @@ -50,6 +51,10 @@ #include "projectmodel.h" #include "webquerycontroller.h" +#include <kio/global.h> +#include <kjob.h> +#include <kjobtrackerinterface.h> + #include <kross/core/action.h> #include <kross/core/actioncollection.h> #include <kross/core/manager.h> @@ -163,7 +168,7 @@ #ifndef NOKDE setSharedConfig(KSharedConfig::openConfig(newProjectPath, KConfig::NoGlobals)); - if (!QFile::exists(newProjectPath)) Project::instance()->setDefaults(); + if (!QFileInfo::exists(newProjectPath)) Project::instance()->setDefaults(); ProjectBase::load(); #else #endif @@ -195,6 +200,8 @@ //QTimer::singleShot(0,this,SLOT(populateGlossary())); populateGlossary();//we cant postpone it because project load can be called from define new term function + m_sourceFilePaths.clear(); + if (newProjectPath.isEmpty()) return; @@ -239,11 +246,11 @@ void Project::populateDirModel() { #ifndef NOKDE - if (KDE_ISUNLIKELY( m_path.isEmpty() || !QFile::exists(poDir()) )) + if (KDE_ISUNLIKELY( m_path.isEmpty() || !QFileInfo::exists(poDir()) )) return; QUrl potUrl; - if (QFile::exists(potDir())) + if (QFileInfo::exists(potDir())) potUrl=QUrl::fromLocalFile(potDir()); model()->setUrl(QUrl::fromLocalFile(poDir()), potUrl); #endif @@ -347,7 +354,115 @@ +static void fillFilePathsRecursive(const QDir& dir, QMultiMap<QByteArray, QByteArray>& sourceFilePaths) +{ + QStringList subDirs(dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot|QDir::Readable)); + int i=subDirs.size(); + while(--i>=0) + fillFilePathsRecursive(QDir(dir.filePath(subDirs.at(i))),sourceFilePaths); + + static QStringList filters = QStringList(QStringLiteral("*.cpp")) + <<QStringLiteral("*.c") + <<QStringLiteral("*.cc") + <<QStringLiteral("*.mm") + <<QStringLiteral("*.ui") + <<QStringLiteral("*rc"); + QStringList files(dir.entryList(filters, QDir::Files|QDir::NoDotAndDotDot|QDir::Readable)); + i=files.size(); + + QByteArray absDirPath=dir.absolutePath().toUtf8(); absDirPath.squeeze(); + while(--i>=0) + { + //qDebug()<<files.at(i)<<absDirPath; + QByteArray fn=files.at(i).toUtf8(); fn.squeeze(); + auto it=sourceFilePaths.constFind(fn); + if (it!=sourceFilePaths.constEnd()) + sourceFilePaths.insert(it.key(), absDirPath); //avoid having identical qbytearray objects to save memory + else + sourceFilePaths.insert(fn, absDirPath); + } +} + + +#ifndef NOKDE +class SourceFilesSearchJob: public KJob +{ +public: + SourceFilesSearchJob(const QString& folderName, QObject* parent=0); + void start(); + void finish(){emitResult(); emit Project::instance()->sourceFilePathsAreReady();} +protected: + bool doKill(); + +private: + QString m_folderName; +}; + +SourceFilesSearchJob::SourceFilesSearchJob(const QString& folderName, QObject* parent) + : KJob(parent) + , m_folderName(folderName) +{ + setCapabilities(KJob::Killable); +} + +bool SourceFilesSearchJob::doKill() +{ + //TODO + return true; +} +class FillSourceFilePathsJob: public QRunnable +{ +public: + explicit FillSourceFilePathsJob(const QDir& dir, SourceFilesSearchJob* j):startingDir(dir),kj(j){} + +protected: + void run() + { + QMultiMap<QByteArray, QByteArray> sourceFilePaths; + fillFilePathsRecursive(startingDir, sourceFilePaths); + Project::instance()->m_sourceFilePaths = sourceFilePaths; + QTimer::singleShot(0, kj, &SourceFilesSearchJob::finish); + } +public: + QDir startingDir; + SourceFilesSearchJob* kj; +}; + + +void SourceFilesSearchJob::start() +{ + QThreadPool::globalInstance()->start(new FillSourceFilePathsJob(QDir(m_folderName), this)); + emit description(this, + i18n("Scanning folders with source files"), + qMakePair(i18n("Editor"), m_folderName)); +} +#endif + +const QMultiMap<QByteArray, QByteArray>& Project::sourceFilePaths() +{ + if (m_sourceFilePaths.isEmpty()) + { + QDir dir(local()->sourceDir()); + if (dir.exists()) + { +#ifndef NOKDE + SourceFilesSearchJob* metaJob = new SourceFilesSearchJob(local()->sourceDir()); + KIO::getJobTracker()->registerJob(metaJob); + metaJob->start(); + + //KNotification* notification=new KNotification("SourceFileScan", 0); + //notification->setText( i18nc("@info","Please wait while %1 is being scanned for source files.", local()->sourceDir()) ); + //notification->sendEvent(); +#else + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + fillFilePathsRecursive(dir, m_sourceFilePaths); + QApplication::restoreOverrideCursor(); +#endif + } + } + return m_sourceFilePaths; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/project/project.h new/lokalize-16.04.1/src/project/project.h --- old/lokalize-15.12.3/src/project/project.h 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/project/project.h 2016-05-02 03:01:19.000000000 +0200 @@ -121,6 +121,13 @@ static Project* instance(); static ProjectLocal* local(){return instance()->m_localConfig;} + const QMultiMap<QByteArray, QByteArray>& sourceFilePaths(); + void resetSourceFilePaths(){m_sourceFilePaths.clear();} + + friend class FillSourceFilePathsJob; +signals: + void sourceFilePathsAreReady(); + private: QString m_path; QString m_desirablePath; @@ -130,6 +137,8 @@ GlossaryNS::GlossaryWindow* m_glossaryWindow; TM::TMManagerWin* m_tmManagerWindow; + QMultiMap<QByteArray, QByteArray> m_sourceFilePaths; + //cache QString m_projectDir; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/project/projectlocal.kcfg new/lokalize-16.04.1/src/project/projectlocal.kcfg --- old/lokalize-15.12.3/src/project/projectlocal.kcfg 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/project/projectlocal.kcfg 2016-05-02 03:01:19.000000000 +0200 @@ -4,6 +4,9 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > <kcfgfile arg="true"/> + <group name="General"> + <entry name="SourceDir" type="String"></entry> + </group> <group name="Personal"> <entry name="Role" type="Enum"> <choices name="PersonRole"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/project/projectmodel.cpp new/lokalize-16.04.1/src/project/projectmodel.cpp --- old/lokalize-15.12.3/src/project/projectmodel.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/project/projectmodel.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -75,28 +75,22 @@ m_potModel.dirLister()->setAutoErrorHandlingEnabled(false, NULL); m_potModel.dirLister()->setNameFilter(QStringLiteral("*.pot")); - connect(&m_poModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(po_dataChanged(QModelIndex,QModelIndex))); + connect(&m_poModel, &KDirModel::dataChanged, this, &ProjectModel::po_dataChanged); - connect(&m_poModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(po_rowsInserted(QModelIndex,int,int))); + connect(&m_poModel, &KDirModel::rowsInserted, this, &ProjectModel::po_rowsInserted); - connect(&m_poModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(po_rowsRemoved(QModelIndex,int,int))); + connect(&m_poModel, &KDirModel::rowsRemoved, this, &ProjectModel::po_rowsRemoved); - connect(&m_potModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(pot_dataChanged(QModelIndex,QModelIndex))); + connect(&m_potModel, &KDirModel::dataChanged, this, &ProjectModel::pot_dataChanged); - connect(&m_potModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(pot_rowsInserted(QModelIndex,int,int))); + connect(&m_potModel, &KDirModel::rowsInserted, this, &ProjectModel::pot_rowsInserted); - connect(&m_potModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(pot_rowsRemoved(QModelIndex,int,int))); + connect(&m_potModel, &KDirModel::rowsRemoved, this, &ProjectModel::pot_rowsRemoved); m_delayedReloadTimer->setSingleShot(true); m_doneTimer->setSingleShot(true); - connect(m_doneTimer, SIGNAL(timeout()), this, SLOT(updateTotalsChanged())); - connect(m_delayedReloadTimer, SIGNAL(timeout()), this, SLOT(reload())); + connect(m_doneTimer, &QTimer::timeout, this, &ProjectModel::updateTotalsChanged); + connect(m_delayedReloadTimer, &QTimer::timeout, this, &ProjectModel::reload); setUrl(QUrl(), QUrl()); } @@ -1053,9 +1047,7 @@ files.append(itemForIndex(index(row, 0, item))); m_activeJob = new UpdateStatsJob(files, this); - connect( - m_activeJob,SIGNAL(done(UpdateStatsJob*)), - this,SLOT(finishMetadataUpdate(UpdateStatsJob*))); + connect(m_activeJob, &UpdateStatsJob::done, this, &ProjectModel::finishMetadataUpdate); m_threadPool->start(m_activeJob); } @@ -1105,8 +1097,7 @@ files.append(itemForIndex(index)); UpdateStatsJob* j = new UpdateStatsJob(files); - connect(j,SIGNAL(done(UpdateStatsJob*)), - this,SLOT(finishSingleMetadataUpdate(UpdateStatsJob*))); + connect(j, &UpdateStatsJob::done, this, &ProjectModel::finishSingleMetadataUpdate); m_threadPool->start(j); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/project/projecttab.cpp new/lokalize-16.04.1/src/project/projecttab.cpp --- old/lokalize-15.12.3/src/project/projecttab.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/project/projecttab.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -246,7 +246,7 @@ menu->addAction(i18nc("@action:inmenu","Add to translation memory"),this,SLOT(scanFilesToTM())); menu->addAction(i18nc("@action:inmenu","Search in files"),this,SLOT(searchInFiles())); - if (QFileInfo(Project::instance()->templatesRoot()).exists()) + if (QDir(Project::instance()->templatesRoot()).exists()) menu->addAction(i18nc("@action:inmenu","Search in files (including templates)"),this,SLOT(searchInFilesInclTempl())); // else if (Project::instance()->model()->hasChildren(/*m_proxyModel->mapToSource(*/(m_browser->currentIndex())) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/syntaxhighlighter.cpp new/lokalize-16.04.1/src/syntaxhighlighter.cpp --- old/lokalize-15.12.3/src/syntaxhighlighter.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/syntaxhighlighter.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -108,7 +108,7 @@ void SyntaxHighlighter::settingsChanged() { - QRegExp re(QStringLiteral(" +$|^ +|.?")%QChar(0x0000AD)%(".?")); //soft hyphen + QRegExp re(" +$|^ +|.?"%QChar(0x0000AD)%".?"); //soft hyphen if (Settings::highlightSpaces() && highlightingRules.last().pattern!=re) { HighlightingRule rule; @@ -117,14 +117,18 @@ #ifndef NOKDE KColorScheme colorScheme(QPalette::Normal); //nbsp - rule.format.setBackground(colorScheme.background(KColorScheme::AlternateBackground)); + //rule.format.setBackground(colorScheme.background(KColorScheme::NegativeBackground)); + rule.format.setBackground(colorScheme.foreground(KColorScheme::InactiveText)); #else rule.format.setBackground(QApplication::palette().alternateBase()); #endif - rule.pattern = QRegExp(QChar(0x00a0U)); + rule.format.setFontLetterSpacing(200); + + rule.pattern = QRegExp(QChar(0x00a0U), Qt::CaseSensitive, QRegExp::FixedString); highlightingRules.append(rule); //usual spaces at the end + rule.format.setFontLetterSpacing(100); #ifndef NOKDE rule.format.setBackground(colorScheme.background(KColorScheme::ActiveBackground)); #else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/tm/jobs.cpp new/lokalize-16.04.1/src/tm/jobs.cpp --- old/lokalize-15.12.3/src/tm/jobs.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/tm/jobs.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -1238,7 +1238,7 @@ return false; bool seen85=false; int limit=200; - QMap<uint,qlonglong>::const_iterator clit=concordanceLevelToIds.constEnd(); + auto clit=concordanceLevelToIds.constEnd(); if (concordanceLevelToIds.size()) --clit; if (concordanceLevelToIds.size()) while (--limit>=0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/tm/tmtab.cpp new/lokalize-16.04.1/src/tm/tmtab.cpp --- old/lokalize-15.12.3/src/tm/tmtab.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/tm/tmtab.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -780,7 +780,6 @@ bool TMTab::findGuiTextPackage(QString text, QString package) { - //std::cout<<package.toLatin1().constData()<<text.toLatin1().constData()<<std::endl; qWarning()<<package<<text; QLineEdit* const source_target_query[]={ui_queryOptions->queryTarget,ui_queryOptions->querySource}; static const DocPosition::Part source_target[]={DocPosition::Target,DocPosition::Source}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/tm/tmview.cpp new/lokalize-16.04.1/src/tm/tmview.cpp --- old/lokalize-15.12.3/src/tm/tmview.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/tm/tmview.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -703,7 +703,7 @@ DiffInfo d=getDiffInfo(diff); bool sameMarkup=Project::instance()->markup()==entry.markupExpr&&!entry.markupExpr.isEmpty(); - bool tryMarkup=entry.target.tags.size() && sameMarkup; + bool tryMarkup=!entry.target.tags.size() && sameMarkup; //search for changed markup if (tryMarkup) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lokalize-15.12.3/src/tools/widgettextcaptureconfig.cpp new/lokalize-16.04.1/src/tools/widgettextcaptureconfig.cpp --- old/lokalize-15.12.3/src/tools/widgettextcaptureconfig.cpp 2016-02-22 01:42:06.000000000 +0100 +++ new/lokalize-16.04.1/src/tools/widgettextcaptureconfig.cpp 2016-05-02 03:01:19.000000000 +0200 @@ -61,7 +61,7 @@ if (ui->clipboard->isChecked()) cg.writeEntry("CopyWidgetTextCommand", QString()); else if (ui->search->isChecked()) - cg.writeEntry("CopyWidgetTextCommand", "/bin/sh `kde4-config --path data --locate lokalize/scripts/find-gui-text.sh` \"%1\" \"%2\""); + cg.writeEntry("CopyWidgetTextCommand", "/bin/sh /usr/share/lokalize/scripts/find-gui-text.sh \"%1\" \"%2\""); konfig.sync(); }