diff -Nru kanagram-14.12.3/CMakeLists.txt kanagram-15.04.2/CMakeLists.txt --- kanagram-14.12.3/CMakeLists.txt 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/CMakeLists.txt 2015-04-27 11:12:06.000000000 +0000 @@ -10,7 +10,12 @@ include(FeatureSummary) find_package(Qt5 REQUIRED COMPONENTS Core Qml Quick OpenGL) -find_package(Qt5 OPTIONAL_COMPONENTS PrintSupport) +find_package(Qt5 QUIET OPTIONAL_COMPONENTS TextToSpeech) +if (NOT Qt5TextToSpeech_FOUND) + message(STATUS "Qt5TextToSpeech not found, speech feature will be disabled") +else() + add_definitions(-DHAVE_SPEECH) +endif() find_package(ECM 1.3.0 NO_MODULE REQUIRED) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) @@ -34,14 +39,13 @@ ) include_directories (${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) -find_package(Phonon4Qt5 4.6.60 NO_MODULE) - find_package(LibKEduVocDocument REQUIRED) add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) add_subdirectory( doc ) add_subdirectory( src ) add_subdirectory( icons ) -add_subdirectory( sounds ) install(FILES kanagram.appdata.xml DESTINATION ${SHARE_INSTALL_PREFIX}/appdata/) + +feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff -Nru kanagram-14.12.3/debian/changelog kanagram-15.04.2/debian/changelog --- kanagram-14.12.3/debian/changelog 2015-03-13 20:47:27.000000000 +0000 +++ kanagram-15.04.2/debian/changelog 2015-06-09 16:36:05.000000000 +0000 @@ -1,3 +1,15 @@ +kanagram (4:15.04.2-0ubuntu1) wily; urgency=medium + + [ Scarlett Clark ] + * New upstream release + * New upstream release + * Vivid backport + + [ Jonathan Riddell ] + * New upstream release + + -- Jonathan Riddell Tue, 09 Jun 2015 18:36:05 +0200 + kanagram (4:14.12.3-0ubuntu1) vivid; urgency=medium * New upstream release diff -Nru kanagram-14.12.3/debian/control kanagram-15.04.2/debian/control --- kanagram-14.12.3/debian/control 2015-03-13 20:47:26.000000000 +0000 +++ kanagram-15.04.2/debian/control 2015-06-09 16:36:04.000000000 +0000 @@ -26,7 +26,13 @@ Package: kanagram Architecture: any -Depends: kdeedu-kvtml-data, ${misc:Depends}, ${shlibs:Depends} +Depends: kdeedu-kvtml-data, + qml-module-qtmultimedia, + qml-module-qtquick-controls, + qml-module-qtquick2, + qml-module-qtwebkit, + ${misc:Depends}, + ${shlibs:Depends} Suggests: khelpcenter Description: jumble word puzzle KAnagram is a game where a random word is shown with its letters scrambled. diff -Nru kanagram-14.12.3/.gitignore kanagram-15.04.2/.gitignore --- kanagram-14.12.3/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ kanagram-15.04.2/.gitignore 2015-04-27 11:12:06.000000000 +0000 @@ -0,0 +1 @@ +.DS_Store diff -Nru kanagram-14.12.3/kanagram.appdata.xml kanagram-15.04.2/kanagram.appdata.xml --- kanagram-14.12.3/kanagram.appdata.xml 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/kanagram.appdata.xml 2015-04-27 11:12:06.000000000 +0000 @@ -1,12 +1,14 @@ - kanagram.desktop + org.kde.kanagram.desktop CC0-1.0 GPL-2.0+ Kanagram + Kanagram Kanagram Kanagram Kanagram + Kanagram Kanagram Kanagram Kanagram @@ -14,7 +16,9 @@ Kanagram Kanagram Kanagram + Kanagram Kanagram + Kanagram Kanagram Kanagram Kanagram @@ -29,6 +33,7 @@ Kanagram 語言_Kanagram Letter Order Game + Xuegu d'ordenar lletres Igra redoslijeda slova Joc d'ordenació de lletres Hra uspořádání písmen @@ -39,7 +44,9 @@ Kirjainten järjestyspeli Jeu sur l'ordre des lettres Szókirakó játék + Permainan Urutan Huruf Gioco di anagrammi + 글자 순서 게임 Raidžių rūšiavimo žaidimas Bookstaven ornen Letters ordenen @@ -62,6 +69,7 @@

Kanagram on anagrammeihin perustuva peli: peli on ratkaistu, kun sanan sekoitetut kirjaimet on laitettu takaisin oikeille paikoilleen. Peli ei rajoita ratkaisemiseen kuluvaa aikaa eikä ratkaisuyrityksiä. Peliin kuuluu useita sanastoja, vihjeet sekä huijaamismahdollisuus ja sanastojen muokkaus. Sanastoja voi myös päivittää ja jakaa verkkoon KNewStuffin välityksellä. Käyttöliittymä on skaalautuva ja sopii lapsille.

Kanagram est un jeu construit sur des anagrammes de mots : le puzzle est résolu quand les lettres mélangées d'un mot sont remise dans le bon ordre. Il n'y a pas de limite de temps ou de nombre de tentatives pour résoudre un mot. Il intègre un nombre important de listes de mots, un système de trucs-et-astuces pour aider, un éditeur de liste de mots et permet la distribution de vos listes grâce à KNewStuff. L'interface peut changer d'échelle et est approprié pour les enfants.

A Kanagram egy anagramma játék: a kirakós akkor van kész, ha az összekevert betűket helyes sorrendbe rakva összeáll az eredeti szó. A megfejtésre korlátlan idő és próbálkozás áll rendelkezésre. A játék tartalmaz beépített szólistákat, tipp- és csalásrendszert, szólistaszerkesztőt, és lehetővé teszi a szólisták frissítését és terjesztését a KNewStuffon keresztül. A program felülete nagyítható és gyerekeknek is ajánlott.

+

Kanagram adalah permainan berbasis anagram dari kata: teka-teki diselesaikan ketika huruf dari kata teracak diurutkan kembali dalam urutan yang benar. Tidak ada batasan dari waktu maupun usaha yang digunakan untuk menyelesaikan kata. Menampilkan beberapa daftar kata-kata, sebuah sistem bantuan petunjuk-dan-tipuan, sebuah penyunting kata, dan memperbolehkan memperbarui dan mendistribusikan daftar kata melalui KNewStuff. Ukuran antarmuka dapat disetel dan cocok untuk anak-anak.

Kanagram è un gioco basato sugli anagrammi di parole: il puzzle è risolto quando le lettere della parola mescolata sono messe nell'ordine corretto. Non c'è alcun limite di tempo o di numero di tentativi per risolvere la parola. Kanagram include diverse liste di parole, un sistema di aiuto con suggerimenti e trucchetti, un editor per le liste di parole, e permette di aggiornare e distribuire liste di parole usando KNewStuff. L'interfaccia può essere ridimensionata ed è adatta ai bambini.

Kanagram is Speel, dat op Woort-Anagramms opbuut: Dat Radel is lööst, wenn de Bookstaven in de richtige Reeg brocht wöörn. Dat gifft keen Grenz för de Tiet, de een bruukt, un ok nich för de Tall vun Versöök. Dat gifft en Reeg mitlevert Wöörlisten, en Tipps- un Tricks-Hülpsysteem un en Woortlisteditor. De Woortlisten laat sik över KNewStuff opfrischen un verdelen. De Böversiet lett sik ok vun Kinners bruken.

Kanagram is een spel gebaseerd op anagrammen van woorden: de puzzel is opgelost wanneer de letters van het door elkaar gegooide woord terug zijn geplaatst in de juiste volgorde. Er is geen limiet aan ofwel de genomen tijd of het aantal pogingen om het woord op te lossen. Het biedt verschillende meegeleverde woordlijsten, een tips-en-vals-spelen helpsysteem, een bewerker van woordlijsten en maakt het mogelijk woordlijsten bij te werken en te verspreiden via KNewStuff. Het interface is schaalbaar en geschikt voor kinderen.

Binary files /tmp/8Atr38evmV/kanagram-14.12.3/sounds/chalk.ogg and /tmp/jAd7LPDsvF/kanagram-15.04.2/sounds/chalk.ogg differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/sounds/chalk.wav and /tmp/jAd7LPDsvF/kanagram-15.04.2/sounds/chalk.wav differ diff -Nru kanagram-14.12.3/sounds/CMakeLists.txt kanagram-15.04.2/sounds/CMakeLists.txt --- kanagram-14.12.3/sounds/CMakeLists.txt 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/sounds/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ - -install( FILES right.ogg wrong.ogg chalk.ogg DESTINATION ${DATA_INSTALL_DIR}/kanagram/sounds ) Binary files /tmp/8Atr38evmV/kanagram-14.12.3/sounds/right.ogg and /tmp/jAd7LPDsvF/kanagram-15.04.2/sounds/right.ogg differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/sounds/right.wav and /tmp/jAd7LPDsvF/kanagram-15.04.2/sounds/right.wav differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/sounds/wrong.ogg and /tmp/jAd7LPDsvF/kanagram-15.04.2/sounds/wrong.ogg differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/sounds/wrong.wav and /tmp/jAd7LPDsvF/kanagram-15.04.2/sounds/wrong.wav differ diff -Nru kanagram-14.12.3/src/CMakeLists.txt kanagram-15.04.2/src/CMakeLists.txt --- kanagram-14.12.3/src/CMakeLists.txt 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/CMakeLists.txt 2015-04-27 11:12:06.000000000 +0000 @@ -11,9 +11,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} - ${QT_INCLUDES} ${LIBKEDUVOCDOCUMENT_INCLUDE_DIR} - ${PHONON_INCLUDES} ) ki18n_wrap_ui(kanagram_SRCS @@ -23,7 +21,6 @@ ) kconfig_add_kcfg_files(kanagram_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/kanagramsettings.kcfgc) -# qt5_add_dbus_interfaces(kanagram_SRCS ${KDE4_DBUS_INTERFACES_DIR}/org.kde.KSpeech.xml ) add_executable(kanagram ${kanagram_SRCS}) target_link_libraries(kanagram @@ -36,9 +33,13 @@ KF5::Declarative KF5::Crash LibKEduVocDocumentImport__KEduVocDocument - Phonon::phonon4qt5 ) +if (Qt5TextToSpeech_FOUND) + target_link_libraries(kanagram + Qt5::TextToSpeech) +endif() + install( FILES kanagram.kcfg @@ -58,7 +59,7 @@ DESTINATION ${DATA_INSTALL_DIR}/kanagram/ui) install( - FILES kanagram.desktop + FILES org.kde.kanagram.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) diff -Nru kanagram-14.12.3/src/kanagramconfigdialog.cpp kanagram-15.04.2/src/kanagramconfigdialog.cpp --- kanagram-14.12.3/src/kanagramconfigdialog.cpp 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/kanagramconfigdialog.cpp 2015-04-27 11:12:06.000000000 +0000 @@ -35,12 +35,12 @@ // add the main settings page m_mainSettingsPage = new MainSettings( this ); addPage(m_mainSettingsPage , i18nc("@title:group main settings page name", "General" ), "preferences-other" ); - connect(m_mainSettingsPage, SIGNAL(widgetModified()), this, SLOT(settingsModified())); + connect(m_mainSettingsPage, &MainSettings::widgetModified, this, &KanagramConfigDialog::settingsModified); // create and add the vocabsettings page m_vocabSettingsPage = new VocabSettings( this ); addPage(m_vocabSettingsPage, i18n("Vocabularies"), "document-properties" ); - connect(m_vocabSettingsPage, SIGNAL(widgetModified()), this, SLOT(settingsModified())); + connect(m_vocabSettingsPage, &VocabSettings::widgetModified, this, &KanagramConfigDialog::settingsModified); m_hasChanged = false; } diff -Nru kanagram-14.12.3/src/kanagram.desktop kanagram-15.04.2/src/kanagram.desktop --- kanagram-14.12.3/src/kanagram.desktop 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/kanagram.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -1,198 +0,0 @@ -[Desktop Entry] -Name=Kanagram -Name[ast]=Kanagram -Name[be]=Kanagram -Name[bg]=Kanagram -Name[bn]=কে-অ্যানাগ্রাম -Name[br]=Kanagram -Name[bs]=Kanagram -Name[ca]=Kanagram -Name[ca@valencia]=Kanagram -Name[cs]=Kanagram -Name[csb]=Kanagram -Name[cy]=blinKen -Name[da]=Kanagram -Name[de]=Kanagram -Name[el]=Kanagram -Name[en_GB]=Kanagram -Name[eo]=Kanagram -Name[es]=Kanagram -Name[et]=Kanagram -Name[eu]=Kanagram -Name[fi]=Kanagram -Name[fr]=Kanagram -Name[ga]=Kanagram -Name[gl]=Kanagram -Name[gu]=Kanagram -Name[he]=Kanagram -Name[hi]=के-अनाग्राम -Name[hne]=के-अनाग्राम -Name[hr]=Kanagram -Name[hu]=Kanagram -Name[is]=Kanagram -Name[it]=Kanagram -Name[ja]=Kanagram -Name[ka]=Kanagram -Name[kk]=Kanagram -Name[km]=Kanagram -Name[ko]=Kanagram -Name[lt]=Kanagram -Name[lv]=Kanagram -Name[ml]=കെ-അനഗ്രം -Name[mr]=कानाग्राम -Name[ms]=Kanagram -Name[nb]=Kanagram -Name[nds]=Kanagram -Name[ne]=कानाग्राम -Name[nl]=Kanagram -Name[nn]=Kanagram -Name[pa]=ਕੰਨਗਰਾਮ -Name[pl]=Kanagram -Name[pt]=Kanagram -Name[pt_BR]=Kanagram -Name[ro]=Kanagram -Name[ru]=Kanagram -Name[sk]=Kanagram -Name[sl]=Kanagram -Name[sv]=Kanagram -Name[te]=కనాగ్రాం -Name[tr]=Kanagram -Name[ug]=Kanagram -Name[uk]=Kanagram -Name[vi]=Kanagram -Name[x-test]=xxKanagramxx -Name[zh_CN]=Kanagram -Name[zh_TW]=語言_Kanagram -Exec=kanagram -Icon=kanagram -Type=Application -X-DocPath=kanagram/index.html -Comment=KDE Letter Order Game -Comment[ast]=Xuegu d'ordenar lletres de KDE -Comment[be]=Гульня з перамяшчэннем літар -Comment[bg]=Игра за подредба на букви -Comment[bn]=কে.ডি.ই. উপস্থাপিত অক্ষর সাজানোর খেলা -Comment[bs]=KDE Igra redoslijeda slova -Comment[ca]=Joc d'ordenació de lletres per a KDE -Comment[ca@valencia]=Joc d'ordenació de lletres per a KDE -Comment[cs]=Hra uspořádání písmen pro KDE -Comment[csb]=Gra w ùkładanié słowów dlô KDE -Comment[da]=Bogstavsrækkefølgesspil for KDE -Comment[de]=Ein KDE-Spiel, bei dem Buchstaben sortiert werden -Comment[el]=Παιχνίδι εύρεσης σειράς γραμμάτων του KDE -Comment[en_GB]=KDE Letter Order Game -Comment[eo]=KDE literorda ludo -Comment[es]=Juego de ordenación de letras de KDE -Comment[et]=KDE tähtede järjestamise mäng -Comment[eu]=Letren ordenaren jokoa -Comment[fa]=بازی ترتیب حروف KDE -Comment[fi]=KDE Kirjainten järjestyspeli -Comment[fr]=Jeu KDE de remise en ordre de lettres -Comment[ga]=Cluiche Anagram le haghaidh KDE -Comment[gl]=Xogo de ordenar letras para KDE -Comment[gu]=KDE અક્ષર ક્રમ રમત -Comment[he]=משחק סידור מילים של KDE -Comment[hi]=केडीई अक्षर अनुक्रम खेल -Comment[hne]=केडीई अक्छर अनुक्रम खेल -Comment[hr]=KDE igra premještanja slova -Comment[hu]=KDE-alapú szókirakó játék -Comment[is]=KDE Stafaröðunarleikur -Comment[it]=Gioco di anagrammi per KDE -Comment[ja]=KDE 回文ゲーム -Comment[ka]=KDE ასოების გადალაგების თამაში -Comment[kk]=KDE әріп реті ойны -Comment[km]=ល្បែង​តម្រៀប​អក្សរ​របស់ KDE -Comment[ko]=KDE 글자 순서 게임 -Comment[lt]=KDE raidžių tvarkos žaidimas -Comment[lv]=KDE burtu kārtības spēle -Comment[ml]=കെഡിഇ അക്ഷരക്രമം കളി -Comment[mr]=केडीई अक्षर अनुक्रम खेळ -Comment[nb]=KDEs ordlek med bokstavrekkefølge -Comment[nds]=KDE-Bookstavenspeel -Comment[ne]=केडीई अक्षर क्रम खेल -Comment[nl]=KDE-spel voor ordenen van letters -Comment[nn]=Bokstavordningsspel for KDE -Comment[pl]=Gra w układanie liter dla KDE -Comment[pt]=Jogo de Ordenação de Letras do KDE -Comment[pt_BR]=Jogo de ordenação de letras do KDE -Comment[ru]=Игра с перестановкой букв -Comment[sk]=KDE hra o usporiadaní písmen -Comment[sl]=Igra vrstnega reda črk za KDE -Comment[sv]=Bokstavsordningsspel för KDE -Comment[te]=KDE అక్షరాలు సరీ చేసె ఆట -Comment[tr]=KDE Harf Sırası Oyunu -Comment[ug]=KDE ھەرپ تىزىش ئويۇنى -Comment[uk]=Гра з впорядкування літер -Comment[vi]=Trò chơi Sắp xếp Chữ cái KDE -Comment[x-test]=xxKDE Letter Order Gamexx -Comment[zh_CN]=字母顺序游戏 -Comment[zh_TW]=KDE 字母排序遊戲 -GenericName=Letter Order Game -GenericName[af]=Lettervolgorde Speletjie -GenericName[ast]=Xuegu d'ordenar lletres -GenericName[be]=Гульня з перамяшчэннем літар -GenericName[bg]=Игра за подредба на букви -GenericName[bn]=অক্ষর সাজানোর খেলা -GenericName[bs]=Igra redoslijeda slova -GenericName[ca]=Joc d'ordenació de lletres -GenericName[ca@valencia]=Joc d'ordenació de lletres -GenericName[cs]=Hra uspořádání písmen -GenericName[csb]=Gra w ùkładanié słowów -GenericName[cy]=Gêm Trefn Llythrennau -GenericName[da]=Bogstavrækkefølgespil -GenericName[de]=Spielerisches Sortieren von Buchstaben -GenericName[el]=Παιχνίδι εύρεσης σειράς γραμμάτων -GenericName[en_GB]=Letter Order Game -GenericName[eo]=Literorda ludo -GenericName[es]=Juego de ordenación de letras -GenericName[et]=Tähtede järjestamine -GenericName[eu]=Letren ordenaren jokoa -GenericName[fa]=بازی ترتیب حرف -GenericName[fi]=Kirjainten järjestyspeli -GenericName[fr]=Jeu de remise en ordre de lettres -GenericName[ga]=Cluiche Anagram -GenericName[gl]=Xogo de ordenar letras -GenericName[gu]=અક્ષર ક્રમ રમત -GenericName[he]=משחק סידור מילים -GenericName[hi]=अक्षर अनुक्रम खेल -GenericName[hne]=अक्छर अनुक्रम खेल -GenericName[hr]=Igra rasporeda slova -GenericName[hu]=Szókirakó játék -GenericName[is]=Stafaröðunarleikur -GenericName[it]=Gioco di anagrammi -GenericName[ja]=回文ゲーム -GenericName[ka]=ასოების გადალაგება -GenericName[kk]=Әріп реті ойны -GenericName[km]=ល្បែង​តម្រៀប​អក្សរ -GenericName[ko]=글자 순서 게임 -GenericName[lt]=Raidžių rūšiavimo žaidimas -GenericName[lv]=Burtu kārtības spēle -GenericName[mk]=Игра за пишување писма -GenericName[ml]=അക്ഷരക്രമം കളി -GenericName[mr]=अक्षर अनुक्रम खेळ -GenericName[ms]=Permainan Susun Huruf -GenericName[nb]=Ordlek med bokstavrekkefølge -GenericName[nds]=Bookstaven ornen -GenericName[ne]=अक्षर क्रम खेल -GenericName[nl]=Letters ordenen -GenericName[nn]=Bokstavordningsspel -GenericName[pl]=Gra w układanie słów -GenericName[pt]=Jogo de Ordenação de Letras do KDE -GenericName[pt_BR]=Jogo de ordenação de letras -GenericName[ru]=Игра с перестановкой букв -GenericName[se]=Bustávvaortnetspeallu -GenericName[sk]=Hra o usporiadaní písmen -GenericName[sl]=Igra vrstnega reda črk -GenericName[sv]=Bokstavsordningsspel -GenericName[ta]=எழுத்துவரிசை விளையாட்டு -GenericName[te]=అక్షరాలు సరీ చేసె ఆట -GenericName[tg]=Бозии Тартиби Ҳарф -GenericName[tr]=Harf Sırası Oyunu -GenericName[ug]=ھەرپ تەرتىپى ئويۇنى -GenericName[uk]=Гра з впорядкування літер -GenericName[vi]=Trò chơi Sắp xếp Chữ cái -GenericName[xh]=Umdlalo Wolungelanisa Unobumba -GenericName[x-test]=xxLetter Order Gamexx -GenericName[zh_CN]=字母顺序游戏 -GenericName[zh_TW]=字母排序遊戲 -Categories=Qt;KDE;Education;Languages;Game;KidsGame; diff -Nru kanagram-14.12.3/src/kanagramgame.cpp kanagram-15.04.2/src/kanagramgame.cpp --- kanagram-14.12.3/src/kanagramgame.cpp 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/kanagramgame.cpp 2015-04-27 11:12:06.000000000 +0000 @@ -28,13 +28,11 @@ #include #include #include -#ifdef BUILD_WITH_SPEECH -#include -#include +#ifdef HAVE_SPEECH +#include #endif #include -#include #include #include @@ -44,11 +42,12 @@ KanagramGame::KanagramGame() : m_fileIndex(-1) ,m_document(NULL) - ,m_player(NULL) -#ifdef BUILD_WITH_SPEECH - ,m_kspeech(NULL) +#ifdef HAVE_SPEECH + ,m_speech(NULL) #endif ,m_totalScore(0) + ,m_totalScore2(0) + ,m_currentPlayerNumber(1) ,m_speller(NULL) { loadSettings(); @@ -58,8 +57,8 @@ // Load the default vocabulary loadDefaultVocabulary(); -#ifdef BUILD_WITH_SPEECH - setupJovie(); +#ifdef HAVE_SPEECH + m_speech = new QTextToSpeech(this); #endif m_speller = new Sonnet::Speller(); @@ -73,10 +72,12 @@ delete m_document; m_document = NULL; - delete m_player; - m_player = NULL; delete m_speller; m_speller = NULL; +#ifdef HAVE_SPEECH + delete m_speech; + m_speech = NULL; +#endif } bool KanagramGame::checkFile() @@ -93,9 +94,9 @@ QString KanagramGame::sanitizedDataLanguage() const { QString dataLanguage = KanagramSettings::dataLanguage(); + QStringList languageCodes = SharedKvtmlFiles::languages(); - if (dataLanguage.isEmpty()) { - QStringList languageCodes = SharedKvtmlFiles::languages(); + if (dataLanguage.isEmpty() || !languageCodes.contains(dataLanguage)) { if (languageCodes.contains(QLocale::system().uiLanguages().at(0))) { dataLanguage = QLocale::system().uiLanguages().at(0); } else { @@ -117,6 +118,28 @@ nextAnagram(); } +void KanagramGame::setSinglePlayerMode(bool singlePlayer) +{ + KanagramSettings::setSinglePlayerMode(singlePlayer); + emit singlePlayerChanged(); +} + +bool KanagramGame::singlePlayerMode() +{ + return KanagramSettings::singlePlayerMode(); +} + +int KanagramGame::getPlayerNumber() +{ + return m_currentPlayerNumber; +} + +void KanagramGame::setPlayerNumber(int pnumber) +{ + m_currentPlayerNumber = pnumber; + emit currentPlayerChanged(); +} + bool KanagramGame::refreshVocabularyList() { QString oldFilename = m_filename; @@ -230,6 +253,7 @@ m_audioUrl = ""; // TODO: add some error reporting here } + emit userAnswerChanged(); emit wordChanged(); } } @@ -239,9 +263,15 @@ return m_fileList.isEmpty() ? m_filename : m_fileList.at(m_fileIndex); } -QString KanagramGame::anagram() const +QStringList KanagramGame::anagram() const { - return m_anagram; + QStringList resultList; + foreach (const QChar &userLetter, m_anagram) + { + resultList.append(userLetter); + } + + return resultList; } QString KanagramGame::hint() const @@ -254,6 +284,17 @@ return m_originalWord; } +QStringList KanagramGame::userAnswer() const +{ + QStringList returnList; + foreach (const QChar &letter, m_userAnswer) + { + returnList.append(letter); + } + return returnList; +} + + void KanagramGame::createAnagram() { if (m_originalWord.count(m_originalWord.at(0)) < m_originalWord.size()) { @@ -273,14 +314,16 @@ } while (anagram == m_originalWord); m_anagram = anagram; + m_userAnswer.clear(); } else { m_anagram = m_originalWord; + m_userAnswer.clear(); } +} - if (KanagramSettings::useSounds()) - { - play("chalk.ogg"); - } +bool KanagramGame::useSounds() +{ + return KanagramSettings::useSounds(); } QString KanagramGame::documentTitle() const @@ -347,69 +390,12 @@ return m_audioUrl; } -void KanagramGame::play(const QString& filename) -{ - if (!filename.isEmpty()) - { - QString soundFile = QStandardPaths::locate(QStandardPaths::DataLocation, "sounds/" + filename); - if (soundFile.isEmpty()) - soundFile = filename; - - if (!m_player) - { - m_player = Phonon::createPlayer(Phonon::GameCategory, QUrl::fromLocalFile(soundFile)); - } - else - { - m_player->setCurrentSource(QUrl::fromLocalFile(soundFile)); - } - m_player->play(); - } -} - +#ifdef HAVE_SPEECH void KanagramGame::wordRevealed() { if (KanagramSettings::enablePronunciation()) { - // User wants words spoken, but if there's no audio file, play right.ogg - if (!m_audioUrl.isEmpty()) - play(m_audioUrl.toLocalFile()); -#ifdef BUILD_WITH_SPEECH - else - say(m_originalWord); -#else - else - play("right.ogg"); -#endif - } -} - -#ifdef BUILD_WITH_SPEECH -void KanagramGame::setupJovie() -{ - // If KTTSD not running, start it. - QDBusReply reply = QDBusConnection::sessionBus().interface()->isServiceRegistered( "org.kde.kttsd" ); - bool kttsdactive = false; - if ( reply.isValid() ) - kttsdactive = reply.value(); - if ( !kttsdactive ) - { - QString error; - if ( KToolInvocation::startServiceByDesktopName( "kttsd", QStringList(), &error ) ) - { - QMessageBox::warning(NULL, i18n("Speech System Failure"), i18n( "Starting Jovie Text-to-Speech service Failed: %1", error ) ); - } - else - { - kttsdactive = true; - } - } - if ( kttsdactive && m_kspeech==0) - { - // creating the connection to the kspeech interface - m_kspeech = new org::kde::KSpeech( "org.kde.kttsd", "/KSpeech", QDBusConnection::sessionBus() ); - m_kspeech->setParent(this); - m_kspeech->setApplicationName( "Kanagram" ); + say(m_originalWord); } } @@ -418,10 +404,9 @@ if ( text.isEmpty() ) return; - setupJovie(); - if ( this->m_kspeech ) + if ( m_speech ) { - QDBusReply< int > reply = this->m_kspeech->say(text, KSpeech::soPlainText ); + m_speech->say(text); } } #endif @@ -450,6 +435,46 @@ return ((scoreTime + 1) * 15); } +void KanagramGame::moveLetterToUserAnswer(int position) +{ + m_userAnswer.append(m_anagram[position]); + m_anagram.remove(position, 1); + emit wordChanged(); + emit userAnswerChanged(); +} + +void KanagramGame::moveLetterToAnagram(int position) +{ + m_anagram.append(m_userAnswer[position]); + m_userAnswer.remove(position, 1); + emit wordChanged(); + emit userAnswerChanged(); +} + +void KanagramGame::resetAnagram() +{ + m_anagram = m_userAnswer; + m_userAnswer.clear(); + emit wordChanged(); + emit userAnswerChanged(); +} + +void KanagramGame::moveLetter(QString letter) +{ + QString small = letter.toLower(); + int index = m_anagram.toLower().indexOf(small); + if (index != -1) + { + moveLetterToUserAnswer(index); + } + else + { + index = m_userAnswer.toLower().indexOf(letter); + if (index != -1) + moveLetterToAnagram(index); + } +} + int KanagramGame::getNumericSetting(QString settingString) { int indexFound_setting = settingString.size(); @@ -466,13 +491,20 @@ void KanagramGame::resetTotalScore() { - m_totalScore = 0; - emit scoreChanged(); + if (m_currentPlayerNumber == 1) + { + m_totalScore = 0; + m_totalScore2 = 0; + emit scoreChanged(); + } } void KanagramGame::adjustScore(int points) { - m_totalScore += points; + if (m_currentPlayerNumber == 1) + m_totalScore += points; + else + m_totalScore2 += points; emit scoreChanged(); } @@ -481,15 +513,20 @@ return m_totalScore; } +int KanagramGame::totalScore2() +{ + return m_totalScore2; +} + void KanagramGame::revealWord() { m_anagram = m_originalWord; emit wordChanged(); } -bool KanagramGame::checkWord(QString answer) +bool KanagramGame::checkWord() { - QString enteredWord = answer.toLower().trimmed(); + QString enteredWord = m_userAnswer.toLower().trimmed(); QString lowerOriginal = m_originalWord.toLower(); QString strippedOriginal = stripAccents(m_originalWord); if (!enteredWord.isEmpty()) @@ -500,27 +537,24 @@ (isAnagram(enteredWord, lowerOriginal) || isAnagram(enteredWord, strippedOriginal)))) { +#ifdef HAVE_SPEECH if (KanagramSettings::enablePronunciation()) { - // User wants words spoken, but if there's no audio file, play right.ogg - if (!m_audioUrl.isEmpty()) - play(m_audioUrl.toLocalFile()); - } - else if (KanagramSettings::useSounds()) - { - // Otherwise just play right.ogg - play("right.ogg"); + // User wants words spoken + say(m_originalWord); } +#endif return true; } else { - if (KanagramSettings::useSounds()) play("wrong.ogg"); return false; } } else + { return false; + } } bool KanagramGame::isAnagram(QString& enteredword, QString& word) @@ -613,24 +647,36 @@ void KanagramGame::answerCorrect() { - m_totalScore += m_correctAnswerScore; + if (m_currentPlayerNumber == 1) + m_totalScore += m_correctAnswerScore; + else + m_totalScore2 += m_correctAnswerScore; emit scoreChanged(); } void KanagramGame::answerIncorrect() { - m_totalScore += m_incorrectAnswerScore; + if (m_currentPlayerNumber == 1) + m_totalScore += m_incorrectAnswerScore; + else + m_totalScore2 += m_incorrectAnswerScore; emit scoreChanged(); } void KanagramGame::answerRevealed() { - m_totalScore += m_revealAnswerScore; + if (m_currentPlayerNumber == 1) + m_totalScore += m_revealAnswerScore; + else + m_totalScore2 += m_revealAnswerScore; emit scoreChanged(); } void KanagramGame::answerSkipped() { - m_totalScore += m_skippedWordScore; + if (m_currentPlayerNumber == 1) + m_totalScore += m_skippedWordScore; + else + m_totalScore2 += m_skippedWordScore; emit scoreChanged(); } diff -Nru kanagram-14.12.3/src/kanagramgame.h kanagram-15.04.2/src/kanagramgame.h --- kanagram-14.12.3/src/kanagramgame.h 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/kanagramgame.h 2015-04-27 11:12:06.000000000 +0000 @@ -29,18 +29,14 @@ #include -#ifdef BUILD_WITH_SPEECH -#include "kspeechinterface.h" +#ifdef HAVE_SPEECH +class QTextToSpeech; #endif Q_DECLARE_LOGGING_CATEGORY(KANAGRAM) class KEduVocDocument; -namespace Phonon { - class MediaObject; -} - namespace Sonnet { class Speller; } @@ -52,12 +48,13 @@ { Q_OBJECT // Get the current anagram, word, hint, picture, and audio - Q_PROPERTY(QString anagram READ anagram NOTIFY wordChanged) + Q_PROPERTY(QStringList anagram READ anagram NOTIFY wordChanged) Q_PROPERTY(QString word READ word NOTIFY wordChanged) Q_PROPERTY(QString hint READ hint NOTIFY wordChanged) Q_PROPERTY(QUrl picHint READ picHint NOTIFY wordChanged) Q_PROPERTY(QUrl audio READ audioFile NOTIFY wordChanged) - + // Get the individual word list + Q_PROPERTY(QStringList userAnswer READ userAnswer NOTIFY userAnswerChanged) // Get the current title Q_PROPERTY(QString title READ documentTitle NOTIFY titleChanged) @@ -66,7 +63,13 @@ Q_PROPERTY(QStringList languages READ languageNames) Q_PROPERTY(QString dataLanguage READ dataLanguage WRITE setDataLanguage NOTIFY dataLanguageChanged) + Q_PROPERTY(int currentPlayer READ getPlayerNumber WRITE setPlayerNumber NOTIFY currentPlayerChanged) + Q_PROPERTY(bool singlePlayer READ singlePlayerMode WRITE setSinglePlayerMode NOTIFY singlePlayerChanged) + Q_PROPERTY(int score READ totalScore NOTIFY scoreChanged) + Q_PROPERTY(int score2 READ totalScore2 NOTIFY scoreChanged) + + Q_PROPERTY(bool useSounds READ useSounds NOTIFY useSoundsChanged) public: /** Default constructor */ @@ -76,7 +79,7 @@ ~KanagramGame(); /** Get the anagram to show */ - QString anagram() const; + QStringList anagram() const; /** Get this anagram's hint */ QString hint() const; @@ -96,6 +99,9 @@ /** Get the current vocabulary file's filename */ QString filename() const; + /** Get the user's current guess */ + QStringList userAnswer() const; + /** Get the list of vocabularies */ QStringList vocabularyList() const; @@ -118,14 +124,41 @@ Q_INVOKABLE int scoreTime(); + Q_INVOKABLE void moveLetterToUserAnswer(int position); + + Q_INVOKABLE void moveLetterToAnagram(int position); + + /** Reset the anagram, move all userAnswer letters back to the anagram */ + Q_INVOKABLE void resetAnagram(); + + /** Move the given letter from anagram to answer or back if there's no + * instances of the given letter in the anagram currently */ + Q_INVOKABLE void moveLetter(QString letter); + + Q_INVOKABLE bool singlePlayerMode(); + /** Get the current score */ int totalScore(); + /** Get the current score of player 2*/ + int totalScore2(); + /** Check word answer against the current word */ - Q_INVOKABLE bool checkWord(QString answer); + Q_INVOKABLE bool checkWord(); + + bool useSounds(); public Q_SLOTS: + /** Checks if in single-player mode*/ + void setSinglePlayerMode(bool); + + /** Get */ + int getPlayerNumber(); + + /** Set */ + void setPlayerNumber(int); + /** Set the vocabulary to use according to the vocabulary name */ void useVocabulary(const QString &vocabularyname); @@ -153,8 +186,10 @@ /** Use the previous vocabulary file in the list */ void previousVocabulary(); +#ifdef HAVE_SPEECH /** The word was revealed (or correctly entered), so play the audio, say it, or play right.ogg */ void wordRevealed(); +#endif /** Reset the current score */ void resetTotalScore(); @@ -181,6 +216,12 @@ /** Signal the ui that the data language has changed */ void dataLanguageChanged(); + /** Signal the ui that the player has changed when in 2-player Mode*/ + void currentPlayerChanged(); + + /** Signal the ui that the mode has changed*/ + void singlePlayerChanged(); + /** Signal the ui that the current document title has changed */ void titleChanged(); @@ -189,6 +230,16 @@ /** Signal the ui that the score has changed */ void scoreChanged(); + + + //Signal the UI that the word is broken into alphabets + void userAnswerChanged(); + + //Signal for the UI to give the list of alphabets rather than the single string + void wordResult(); + + /** Signal the ui that sound enabled has changed */ + void useSoundsChanged(); private: /** Make the word into an anagram */ @@ -197,13 +248,7 @@ /** Check the current file */ bool checkFile(); - /** Play a media file via Phonon */ - void play(const QString &filename); - -#ifdef BUILD_WITH_SPEECH - /** setup kde text-to-speech daemon */ - void setupJovie(); - +#ifdef HAVE_SPEECH /** speak the word *@param text the word that is to be converted from text to speech */ @@ -228,6 +273,9 @@ /** The current scrambled word */ QString m_anagram; + //The current word scambled word list + QString m_userAnswer; + /** The current anagram's hint */ QString m_hint; @@ -258,17 +306,20 @@ /** The hash of the language code and name */ QHash m_languageCodeNameHash; - /** audio player to use for playing sounds */ - Phonon::MediaObject *m_player; - -#ifdef BUILD_WITH_SPEECH - /** object to enable text to speech conversion */ - org::kde::KSpeech *m_kspeech; +#ifdef HAVE_SPEECH + /** Text to Speech API */ + QTextToSpeech *m_speech; #endif /** current total score */ int m_totalScore; + /** current total score of player 2*/ + int m_totalScore2; + + /** current player number in 2-player mode*/ + int m_currentPlayerNumber; + /** Speller object to check correct spelling */ Sonnet::Speller *m_speller; diff -Nru kanagram-14.12.3/src/kanagram.kcfg kanagram-15.04.2/src/kanagram.kcfg --- kanagram-14.12.3/src/kanagram.kcfg 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/kanagram.kcfg 2015-04-27 11:12:06.000000000 +0000 @@ -9,6 +9,10 @@ -1 + + + true + 1 diff -Nru kanagram-14.12.3/src/main.cpp kanagram-15.04.2/src/main.cpp --- kanagram-14.12.3/src/main.cpp 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/main.cpp 2015-04-27 11:12:06.000000000 +0000 @@ -41,7 +41,7 @@ migrator.migrate(); QApplication::setApplicationName("kanagram"); - QApplication::setApplicationVersion("1.0"); + QApplication::setApplicationVersion("1.1"); QApplication::setOrganizationDomain("kde.org"); KLocalizedString::setApplicationDomain("kanagram"); QApplication::setApplicationDisplayName(i18n("kanagram")); @@ -49,7 +49,7 @@ KAboutData about(I18N_NOOP("kanagram"), i18n("Kanagram"), - I18N_NOOP("1.0"), + I18N_NOOP("1.1"), i18n("An anagram game"), KAboutLicense::GPL, i18n("© 2005 Joshua Keel\n© 2005 Danny Allen\n© 2007 Jeremy Whiting\n© 2014 Debjit Mondal")); @@ -67,6 +67,7 @@ about.addCredit(i18n("Jure Repinc"), i18n("Slovenian Data Files"), "jlp@holodeck1.com"); about.addCredit(i18n("Yuri Chornoivan"), i18n("Ukranian Data Files"), ""); about.addCredit(i18n("Kristóf Kiszel"), i18n("Hungarian Data Files"), "ulysses@kubuntu.org"); + about.addCredit(i18n("Souvik Das"), i18n("2-player mode"), "souvikdas728@gmail.com"); KAboutData::setApplicationData(about); diff -Nru kanagram-14.12.3/src/mainsettings.cpp kanagram-15.04.2/src/mainsettings.cpp --- kanagram-14.12.3/src/mainsettings.cpp 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/mainsettings.cpp 2015-04-27 11:12:06.000000000 +0000 @@ -41,7 +41,7 @@ slotToggleAdvancedSettings(); populateLanguageBox(); - connect(scoringPointCheckbox,SIGNAL(toggled(bool)),this,SLOT(slotToggleAdvancedSettings())); + connect(scoringPointCheckbox, &QCheckBox::toggled, this, &MainSettings::slotToggleAdvancedSettings); //the language code/name QLocale languageLocale(KanagramSettings::dataLanguage()); @@ -50,7 +50,7 @@ languageComboBox->setCurrentIndex(languageComboBox->findText(languageLocale.nativeLanguageName())); // Connect after we set the current language from settings. - connect(languageComboBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(widgetModified())); + connect(languageComboBox, static_cast(&QComboBox::currentIndexChanged), this, &MainSettings::widgetModified); } MainSettings::~MainSettings() diff -Nru kanagram-14.12.3/src/mainwindow.cpp kanagram-15.04.2/src/mainwindow.cpp --- kanagram-14.12.3/src/mainwindow.cpp 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/mainwindow.cpp 2015-04-27 11:12:06.000000000 +0000 @@ -66,7 +66,7 @@ setSource(QUrl::fromLocalFile(location)); qCDebug(KANAGRAM) << "Set qml file location"; - connect(m_game, SIGNAL(titleChanged()), SLOT(categoryChanged())); + connect(m_game, &KanagramGame::titleChanged, this, &MainWindow::categoryChanged); categoryChanged(); } @@ -104,9 +104,9 @@ if (!KConfigDialog::showDialog("settings")) { m_configDialog = new KanagramConfigDialog( NULL, "settings", KanagramSettings::self() ); - connect(m_configDialog, SIGNAL(settingsChanged(QString)), m_game, SLOT(reloadSettings())); + connect(m_configDialog, &KConfigDialog::settingsChanged, m_game, &KanagramGame::reloadSettings); - connect(m_configDialog, SIGNAL(accepted()), m_game, SLOT(refreshVocabularyList())); + connect(m_configDialog, &KConfigDialog::accepted, m_game, &KanagramGame::refreshVocabularyList); // m_configDialog->setHelp("kanagram/index.html"); m_configDialog->resize(600, 500); diff -Nru kanagram-14.12.3/src/org.kde.kanagram.desktop kanagram-15.04.2/src/org.kde.kanagram.desktop --- kanagram-14.12.3/src/org.kde.kanagram.desktop 1970-01-01 00:00:00.000000000 +0000 +++ kanagram-15.04.2/src/org.kde.kanagram.desktop 2015-04-27 11:12:06.000000000 +0000 @@ -0,0 +1,202 @@ +[Desktop Entry] +Name=Kanagram +Name[ast]=Kanagram +Name[be]=Kanagram +Name[bg]=Kanagram +Name[bn]=কে-অ্যানাগ্রাম +Name[br]=Kanagram +Name[bs]=Kanagram +Name[ca]=Kanagram +Name[ca@valencia]=Kanagram +Name[cs]=Kanagram +Name[csb]=Kanagram +Name[cy]=blinKen +Name[da]=Kanagram +Name[de]=Kanagram +Name[el]=Kanagram +Name[en_GB]=Kanagram +Name[eo]=Kanagram +Name[es]=Kanagram +Name[et]=Kanagram +Name[eu]=Kanagram +Name[fi]=Kanagram +Name[fr]=Kanagram +Name[ga]=Kanagram +Name[gl]=Kanagram +Name[gu]=Kanagram +Name[he]=Kanagram +Name[hi]=के-अनाग्राम +Name[hne]=के-अनाग्राम +Name[hr]=Kanagram +Name[hu]=Kanagram +Name[id]=Kanagram +Name[is]=Kanagram +Name[it]=Kanagram +Name[ja]=Kanagram +Name[ka]=Kanagram +Name[kk]=Kanagram +Name[km]=Kanagram +Name[ko]=Kanagram +Name[lt]=Kanagram +Name[lv]=Kanagram +Name[ml]=കെ-അനഗ്രം +Name[mr]=कानाग्राम +Name[ms]=Kanagram +Name[nb]=Kanagram +Name[nds]=Kanagram +Name[ne]=कानाग्राम +Name[nl]=Kanagram +Name[nn]=Kanagram +Name[pa]=ਕੰਨਗਰਾਮ +Name[pl]=Kanagram +Name[pt]=Kanagram +Name[pt_BR]=Kanagram +Name[ro]=Kanagram +Name[ru]=Kanagram +Name[sk]=Kanagram +Name[sl]=Kanagram +Name[sv]=Kanagram +Name[te]=కనాగ్రాం +Name[tr]=Kanagram +Name[ug]=Kanagram +Name[uk]=Kanagram +Name[vi]=Kanagram +Name[x-test]=xxKanagramxx +Name[zh_CN]=Kanagram +Name[zh_TW]=語言_Kanagram +Exec=kanagram +Icon=kanagram +Type=Application +X-DocPath=kanagram/index.html +Comment=KDE Letter Order Game +Comment[ast]=Xuegu d'ordenar lletres de KDE +Comment[be]=Гульня з перамяшчэннем літар +Comment[bg]=Игра за подредба на букви +Comment[bn]=কে.ডি.ই. উপস্থাপিত অক্ষর সাজানোর খেলা +Comment[bs]=KDE Igra redoslijeda slova +Comment[ca]=Joc d'ordenació de lletres per a KDE +Comment[ca@valencia]=Joc d'ordenació de lletres per a KDE +Comment[cs]=Hra uspořádání písmen pro KDE +Comment[csb]=Gra w ùkładanié słowów dlô KDE +Comment[da]=Bogstavsrækkefølgesspil for KDE +Comment[de]=Ein KDE-Spiel, bei dem Buchstaben sortiert werden +Comment[el]=Παιχνίδι εύρεσης σειράς γραμμάτων του KDE +Comment[en_GB]=KDE Letter Order Game +Comment[eo]=KDE literorda ludo +Comment[es]=Juego de ordenación de letras de KDE +Comment[et]=KDE tähtede järjestamise mäng +Comment[eu]=Letren ordenaren jokoa +Comment[fa]=بازی ترتیب حروف KDE +Comment[fi]=KDE Kirjainten järjestyspeli +Comment[fr]=Jeu KDE de remise en ordre de lettres +Comment[ga]=Cluiche Anagram le haghaidh KDE +Comment[gl]=Xogo de ordenar letras para KDE +Comment[gu]=KDE અક્ષર ક્રમ રમત +Comment[he]=משחק סידור מילים של KDE +Comment[hi]=केडीई अक्षर अनुक्रम खेल +Comment[hne]=केडीई अक्छर अनुक्रम खेल +Comment[hr]=KDE igra premještanja slova +Comment[hu]=KDE-alapú szókirakó játék +Comment[id]=Permainan Urutan Huruf KDE +Comment[is]=KDE Stafaröðunarleikur +Comment[it]=Gioco di anagrammi per KDE +Comment[ja]=KDE 回文ゲーム +Comment[ka]=KDE ასოების გადალაგების თამაში +Comment[kk]=KDE әріп реті ойны +Comment[km]=ល្បែង​តម្រៀប​អក្សរ​របស់ KDE +Comment[ko]=KDE 글자 순서 게임 +Comment[lt]=KDE raidžių tvarkos žaidimas +Comment[lv]=KDE burtu kārtības spēle +Comment[ml]=കെഡിഇ അക്ഷരക്രമം കളി +Comment[mr]=केडीई अक्षर अनुक्रम खेळ +Comment[nb]=KDEs ordlek med bokstavrekkefølge +Comment[nds]=KDE-Bookstavenspeel +Comment[ne]=केडीई अक्षर क्रम खेल +Comment[nl]=KDE-spel voor ordenen van letters +Comment[nn]=Bokstavordningsspel for KDE +Comment[pl]=Gra w układanie liter dla KDE +Comment[pt]=Jogo de Ordenação de Letras do KDE +Comment[pt_BR]=Jogo de ordenação de letras do KDE +Comment[ru]=Игра с перестановкой букв +Comment[sk]=KDE hra o usporiadaní písmen +Comment[sl]=Igra vrstnega reda črk za KDE +Comment[sv]=Bokstavsordningsspel för KDE +Comment[te]=KDE అక్షరాలు సరీ చేసె ఆట +Comment[tr]=KDE Harf Sırası Oyunu +Comment[ug]=KDE ھەرپ تىزىش ئويۇنى +Comment[uk]=Гра з впорядкування літер +Comment[vi]=Trò chơi Sắp xếp Chữ cái KDE +Comment[x-test]=xxKDE Letter Order Gamexx +Comment[zh_CN]=字母顺序游戏 +Comment[zh_TW]=KDE 字母排序遊戲 +GenericName=Letter Order Game +GenericName[af]=Lettervolgorde Speletjie +GenericName[ast]=Xuegu d'ordenar lletres +GenericName[be]=Гульня з перамяшчэннем літар +GenericName[bg]=Игра за подредба на букви +GenericName[bn]=অক্ষর সাজানোর খেলা +GenericName[bs]=Igra redoslijeda slova +GenericName[ca]=Joc d'ordenació de lletres +GenericName[ca@valencia]=Joc d'ordenació de lletres +GenericName[cs]=Hra uspořádání písmen +GenericName[csb]=Gra w ùkładanié słowów +GenericName[cy]=Gêm Trefn Llythrennau +GenericName[da]=Bogstavrækkefølgespil +GenericName[de]=Spielerisches Sortieren von Buchstaben +GenericName[el]=Παιχνίδι εύρεσης σειράς γραμμάτων +GenericName[en_GB]=Letter Order Game +GenericName[eo]=Literorda ludo +GenericName[es]=Juego de ordenación de letras +GenericName[et]=Tähtede järjestamine +GenericName[eu]=Letren ordenaren jokoa +GenericName[fa]=بازی ترتیب حرف +GenericName[fi]=Kirjainten järjestyspeli +GenericName[fr]=Jeu de remise en ordre de lettres +GenericName[ga]=Cluiche Anagram +GenericName[gl]=Xogo de ordenar letras +GenericName[gu]=અક્ષર ક્રમ રમત +GenericName[he]=משחק סידור מילים +GenericName[hi]=अक्षर अनुक्रम खेल +GenericName[hne]=अक्छर अनुक्रम खेल +GenericName[hr]=Igra rasporeda slova +GenericName[hu]=Szókirakó játék +GenericName[id]=Permainan Urutan Huruf +GenericName[is]=Stafaröðunarleikur +GenericName[it]=Gioco di anagrammi +GenericName[ja]=回文ゲーム +GenericName[ka]=ასოების გადალაგება +GenericName[kk]=Әріп реті ойны +GenericName[km]=ល្បែង​តម្រៀប​អក្សរ +GenericName[ko]=글자 순서 게임 +GenericName[lt]=Raidžių rūšiavimo žaidimas +GenericName[lv]=Burtu kārtības spēle +GenericName[mk]=Игра за пишување писма +GenericName[ml]=അക്ഷരക്രമം കളി +GenericName[mr]=अक्षर अनुक्रम खेळ +GenericName[ms]=Permainan Susun Huruf +GenericName[nb]=Ordlek med bokstavrekkefølge +GenericName[nds]=Bookstaven ornen +GenericName[ne]=अक्षर क्रम खेल +GenericName[nl]=Letters ordenen +GenericName[nn]=Bokstavordningsspel +GenericName[pl]=Gra w układanie słów +GenericName[pt]=Jogo de Ordenação de Letras do KDE +GenericName[pt_BR]=Jogo de ordenação de letras +GenericName[ru]=Игра с перестановкой букв +GenericName[se]=Bustávvaortnetspeallu +GenericName[sk]=Hra o usporiadaní písmen +GenericName[sl]=Igra vrstnega reda črk +GenericName[sv]=Bokstavsordningsspel +GenericName[ta]=எழுத்துவரிசை விளையாட்டு +GenericName[te]=అక్షరాలు సరీ చేసె ఆట +GenericName[tg]=Бозии Тартиби Ҳарф +GenericName[tr]=Harf Sırası Oyunu +GenericName[ug]=ھەرپ تەرتىپى ئويۇنى +GenericName[uk]=Гра з впорядкування літер +GenericName[vi]=Trò chơi Sắp xếp Chữ cái +GenericName[xh]=Umdlalo Wolungelanisa Unobumba +GenericName[x-test]=xxLetter Order Gamexx +GenericName[zh_CN]=字母顺序游戏 +GenericName[zh_TW]=字母排序遊戲 +Categories=Qt;KDE;Education;Languages;Game;KidsGame; +X-DBUS-ServiceName=org.kde.kanagram diff -Nru kanagram-14.12.3/src/ui/Blackboard.qml kanagram-15.04.2/src/ui/Blackboard.qml --- kanagram-14.12.3/src/ui/Blackboard.qml 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/ui/Blackboard.qml 2015-04-27 11:12:06.000000000 +0000 @@ -21,6 +21,7 @@ import QtQuick 2.0 import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 Rectangle { @@ -42,6 +43,11 @@ showAnswerTimer.start() } + function letterButtonClicked(index) { + kanagramGame.moveLetterToUserAnswer(index); + checkSolved(); + } + Item { width: parent.width height: parent.height @@ -100,6 +106,9 @@ anchors.margins: 4 fillMode: Image.PreserveAspectFit } + style: ButtonStyle { + background: Rectangle { color: "transparent" } + } } Action { @@ -128,17 +137,9 @@ anchors.margins: 4 fillMode: Image.PreserveAspectFit } - } - - Text { - id: anagram - text: kanagramGame.anagram - anchors { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter + style: ButtonStyle { + background: Rectangle { color: "transparent" } } - color: "white" - font.pixelSize: parent.width / 12.5 } Rectangle { @@ -186,6 +187,9 @@ anchors.margins: 4 fillMode: Image.PreserveAspectFit } + style: ButtonStyle { + background: Rectangle { color: "transparent" } + } } Action { @@ -215,6 +219,9 @@ anchors.margins: 4 fillMode: Image.PreserveAspectFit } + style: ButtonStyle { + background: Rectangle { color: "transparent" } + } } Action { @@ -248,6 +255,9 @@ anchors.margins: 4 fillMode: Image.PreserveAspectFit } + style: ButtonStyle { + background: Rectangle { color: "transparent" } + } } Rectangle { @@ -290,6 +300,22 @@ } } + Grid { + id: currentWordGrid; + anchors { + centerIn: parent; + } + spacing: 5; + columns: 10; + Repeater { + model: kanagramGame.anagram + LetterButton { + text: modelData + onClicked: letterButtonClicked( index ); + } + } + } + Rectangle { id: wikiSection width: parent.width / 9 @@ -398,7 +424,7 @@ horizontalCenter: scoreSection.horizontalCenter } color: "white" - text: i18n("Score : ") + kanagramGame.score + text: kanagramGame.currentPlayer == 1 ? i18n("Score : ") + kanagramGame.score : i18n("Score : ") + kanagramGame.score2 opacity: 0 font.pixelSize: parent.width / 40 } @@ -435,12 +461,30 @@ triggeredOnStart: false onTriggered: { + if (!wikiButton.wikiLinkActivated) { if (--scoreButton.countDownTimerValue == 0) { stop() timerSection.opacity = 0 timeRemaining.opacity = 0 scoreTimer.running = false + + if(!(kanagramGame.singlePlayerMode())) { + if((kanagramGame.getPlayerNumber())==1) { + kanagramGame.setPlayerNumber(2); + score2Box.visible = true; + showTurnText.visible = true; + score2BoxText.visible = false; + } + + else { + kanagramGame.setPlayerNumber(1); + score2Box.visible = true; + showTurnText.visible = false; + score2BoxText.visible = true; + } + } + } else { scoreTimer.running = true timerSection.opacity = 0.35 @@ -455,6 +499,77 @@ } } + Item { + id: score2Box + anchors { + top: blackboard.top + topMargin: 150 + left: blackboard.left + leftMargin: 130 + } + visible: false + + Rectangle { + id: score2Button + width: blackboard.width / 2 + height: blackboard.height / 5 + MouseArea { + anchors.fill: parent + } + radius: 8 + color: "black" + } + + Text { + id: score2BoxText + anchors { + verticalCenter: score2Button.verticalCenter + horizontalCenter: score2Button.horizontalCenter + } + color: "white" + text: i18n(" Player 1 : ") + kanagramGame.score + i18n("\n Player 2 : ") + kanagramGame.score2 + i18n("\n Close dialog for new game ") + } + + Text { + id: showTurnText + anchors { + verticalCenter: score2Button.verticalCenter + horizontalCenter: score2Button.horizontalCenter + } + color: "white" + text: i18n(" Time Up. \n Player 2's Turn") + } + + ToolButton { + id: closeButton + action: closeAction + width: score2Button.width / 6 + height: score2Button.height / 2 + anchors { + top: score2Button.top + right: score2Button.right + } + + Image { + source: "icons/close.png" + anchors.fill: parent + anchors.margins: 4 + fillMode: Image.PreserveAspectFit + } + style: ButtonStyle { + background: Rectangle { color: "transparent" } + } + } + + Action { + id: closeAction + onTriggered: { + score2Box.visible = false; + } + tooltip: i18n("Close") + } + } + Timer { id: showAnswerTimer interval: 1000 Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/icons/1player.png and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/icons/1player.png differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/icons/2player.png and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/icons/2player.png differ diff -Nru kanagram-14.12.3/src/ui/LetterButton.qml kanagram-15.04.2/src/ui/LetterButton.qml --- kanagram-14.12.3/src/ui/LetterButton.qml 1970-01-01 00:00:00.000000000 +0000 +++ kanagram-15.04.2/src/ui/LetterButton.qml 2015-04-27 11:12:06.000000000 +0000 @@ -0,0 +1,37 @@ +/*************************************************************************** + * This file is part of the Kanagram project * + * Copyright 2015 Jeremy Whiting * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +import QtQuick 2.3 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 + +Button { + id: buttonText + width: height + style: ButtonStyle { + label: Label { + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: buttonText.text; + font.pixelSize: 20 + } + } +} diff -Nru kanagram-14.12.3/src/ui/main.qml kanagram-15.04.2/src/ui/main.qml --- kanagram-14.12.3/src/ui/main.qml 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/ui/main.qml 2015-04-27 11:12:06.000000000 +0000 @@ -20,10 +20,14 @@ import QtQuick 2.3 import QtQuick.Controls 1.2 +import QtMultimedia 5.0 Rectangle { id: screen + focus: true + property int countDownTimerValue: 0 + property bool flagCorrectAnswer: true function nextAnagram() { kanagramGame.nextAnagram() @@ -32,6 +36,37 @@ } if (kanagramGame.hintHideTime()) blackboard.showHintTimeInterval = 1 + if (kanagramGame.useSounds) + if (chalkSound.hasAudio) + chalkSound.play(); + else + console.log("unable to play chalk sound " + chalkSound.error); + } + + function checkSolved() { + if (kanagramGame.anagram.length == 0) { + if (kanagramGame.checkWord()) { + countDownTimerValue = 1; + flagCorrectAnswer = true; + if (kanagramGame.useSounds) + rightSound.play(); + if (blackboard.activeTimer) { + kanagramGame.answerCorrect(); + } + resetTimer.repeat = true + resetTimer.start() + } else { + countDownTimerValue = 1; + flagCorrectAnswer = false; + if (kanagramGame.useSounds) + wrongSound.play(); + if (blackboard.activeTimer) { + kanagramGame.answerIncorrect(); + } + resetTimer.repeat = true + resetTimer.start() + } + } } Image { @@ -69,6 +104,51 @@ } Image { + id: playericon + width: 60 + height: 60 + anchors.left:parent.left + anchors.leftMargin:20 + anchors.verticalCenter: parent.verticalCenter + source: kanagramGame.singlePlayer ? "icons/1player.png" : "icons/2player.png" + smooth: true + fillMode: Image.PreserveAspectCrop + function togglePlayerMode() { + kanagramGame.singlePlayer = !kanagramGame.singlePlayer; + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: playericon.state = "onEntered" + onExited: playericon.state = "onExited" + onClicked: playericon.togglePlayerMode() + } + states: State { + name: "onEntered" + PropertyChanges { + target: playerModeText + opacity: 1 + } + PropertyChanges { + target: playericon + source: kanagramGame.singlePlayer ? "icons/2player.png" : "icons/1player.png" + } + } + State { + name: "onExited" + } + transitions: Transition { + PropertyAnimation { + properties: "x,y,opacity" + easing.type: Easing.Linear + easing.amplitude: 5.0 + easing.period: 1 + } + } + } + + Image { id: powerButton smooth: true height: parent.height / 3 @@ -122,6 +202,19 @@ opacity: 0 font.pixelSize: parent.width / 91 } + + Text { + id: playerModeText + anchors { + top: playericon.bottom + topMargin: 2 + horizontalCenter: playericon.horizontalCenter + } + color: "white" + text: i18n("Change mode") + opacity: 0 + font.pixelSize: parent.width / 91 + } } // End of headerArea Item { @@ -218,6 +311,40 @@ } // End of nextAnagram Item { + id: playerBox + anchors { + top: blackboard.top + right: blackboard.left + rightMargin: 185 + topMargin: blackboard.height / 7 + } + + visible: kanagramGame.singlePlayer ? false : true + + Rectangle { + id: playerButton + width: blackboard.width / 3 + height: blackboard.height / 7 + radius: 8 + color: "black" + + MouseArea { + anchors.fill: parent + } + + Text { + id: currentPlayerText + anchors{ + verticalCenter: playerButton.verticalCenter + horizontalCenter: playerButton.horizontalCenter + } + color : "white" + text: kanagramGame.currentPlayer == 1 ? i18n("1st Player") : i18n("2nd Player") + } + } + } + + Item { id: configure anchors { left: blackboard.right @@ -626,62 +753,60 @@ opacity: 0.35 } - TextInput { - id: input - color: "white" - selectionColor: "white" - selectedTextColor: "black" - font.pixelSize: parent.width / 40 - font.bold: true - width: inputField.width - anchors.centerIn: inputField - focus: true - property int countDownTimerValue: 0 - property bool flagCorrectAnswer: true - onAccepted: { - if (kanagramGame.checkWord(text)) { - input.color = "green" - input.countDownTimerValue = 1 - input.flagCorrectAnswer = true - if (blackboard.activeTimer) { - kanagramGame.answerCorrect(); - } - showAnswerTimer.repeat = true - showAnswerTimer.start() - } else { - input.color = "red" - input.countDownTimerValue = 1 - input.flagCorrectAnswer = false - if (blackboard.activeTimer) { - kanagramGame.answerIncorrect(); + Grid { + id: answerGrid + anchors { + centerIn: inputField + } + spacing: 5 + columns: 13 + Repeater { + model: kanagramGame.userAnswer + LetterButton { + text: modelData + onClicked: { + kanagramGame.moveLetterToAnagram( index ) } - showAnswerTimer.repeat = true - showAnswerTimer.start() } } } Timer { - id: showAnswerTimer + id: resetTimer interval: 1000 repeat: true running: false triggeredOnStart: false onTriggered: { - if (--input.countDownTimerValue == 0) { - input.color = "white" - if (input.flagCorrectAnswer) { + if (--countDownTimerValue == 0) { + if (flagCorrectAnswer) { kanagramGame.nextAnagram(); if (kanagramGame.hintHideTime()) blackboard.showHintTimeInterval = 1 + } else { + kanagramGame.resetAnagram(); } - input.text = "" stop() } } } + MediaPlayer { + id: chalkSound + source: "sounds/chalk.wav" + } + + MediaPlayer { + id: rightSound + source: "sounds/right.wav" + } + + MediaPlayer { + id: wrongSound + source: "sounds/wrong.wav" + } + Blackboard { id: blackboard border { @@ -704,6 +829,19 @@ } } + Keys.onPressed: { + if (event.text.length > 0) { + kanagramGame.moveLetter(event.text); + checkSolved(); + } + if (event.key == Qt.Key_Backspace) + { + var length = kanagramGame.userAnswer.length; + if (length > 0) + kanagramGame.moveLetterToAnagram(length - 1); + } + } + // WikiPage { // id: wikiPage // visible: false Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/sounds/chalk.ogg and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/sounds/chalk.ogg differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/sounds/chalk.wav and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/sounds/chalk.wav differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/sounds/right.ogg and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/sounds/right.ogg differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/sounds/right.wav and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/sounds/right.wav differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/sounds/wrong.ogg and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/sounds/wrong.ogg differ Binary files /tmp/8Atr38evmV/kanagram-14.12.3/src/ui/sounds/wrong.wav and /tmp/jAd7LPDsvF/kanagram-15.04.2/src/ui/sounds/wrong.wav differ diff -Nru kanagram-14.12.3/src/vocabedit.cpp kanagram-15.04.2/src/vocabedit.cpp --- kanagram-14.12.3/src/vocabedit.cpp 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/vocabedit.cpp 2015-04-27 11:12:06.000000000 +0000 @@ -52,20 +52,20 @@ delete doc; } - connect(btnSave, SIGNAL(clicked()), this, SLOT(slotSave())); - connect(btnNewWord, SIGNAL(clicked()), this, SLOT(slotNewWord())); - connect(btnRemoveWord, SIGNAL(clicked()), this, SLOT(slotRemoveWord())); - connect(btnClose, SIGNAL(clicked()), this, SLOT(slotClose())); + connect(btnSave, &QPushButton::clicked, this, &VocabEdit::slotSave); + connect(btnNewWord, &QPushButton::clicked, this, &VocabEdit::slotNewWord); + connect(btnRemoveWord, &QPushButton::clicked, this, &VocabEdit::slotRemoveWord); + connect(btnClose, &QPushButton::clicked, this, &VocabEdit::slotClose); - connect(txtWord, SIGNAL(textChanged(QString)), this, SLOT(slotWordTextChanged(QString))); - connect(txtHint, SIGNAL(textChanged(QString)), this, SLOT(slotHintTextChanged(QString))); + connect(txtWord, &QLineEdit::textChanged, this, &VocabEdit::slotWordTextChanged); + connect(txtHint, &QLineEdit::textChanged, this, &VocabEdit::slotHintTextChanged); //Connect the name and description boxes to a general textChanged slot, so that we can keep track of //whether they've been changed or not - connect(txtVocabName, SIGNAL(textChanged(QString)), this, SLOT(slotTextChanged(QString))); - connect(txtDescription, SIGNAL(textChanged(QString)), this, SLOT(slotTextChanged(QString))); + connect(txtVocabName, &QLineEdit::textChanged, this, &VocabEdit::slotTextChanged); + connect(txtDescription, &QLineEdit::textChanged, this, &VocabEdit::slotTextChanged); - connect(lboxWords, SIGNAL(itemSelectionChanged()), this, SLOT(slotSelectionChanged())); + connect(lboxWords, &QListWidget::itemSelectionChanged, this, &VocabEdit::slotSelectionChanged); //Has anything in the dialog changed? m_textChanged = false; @@ -134,15 +134,15 @@ void VocabEdit::slotSelectionChanged() { //A little hack to make things work right - disconnect(txtWord, SIGNAL(textChanged(QString)), this, SLOT(slotWordTextChanged(QString))); - disconnect(txtHint, SIGNAL(textChanged(QString)), this, SLOT(slotHintTextChanged(QString))); + disconnect(txtWord, &QLineEdit::textChanged, this, &VocabEdit::slotWordTextChanged); + disconnect(txtHint, &QLineEdit::textChanged, this, &VocabEdit::slotHintTextChanged); if (lboxWords->currentRow() >= 0) { txtWord->setText(m_vocabList[lboxWords->currentRow()].translation(0)->text()); txtHint->setText(m_vocabList[lboxWords->currentRow()].translation(0)->comment()); } - connect(txtWord, SIGNAL(textChanged(QString)), this, SLOT(slotWordTextChanged(QString))); - connect(txtHint, SIGNAL(textChanged(QString)), this, SLOT(slotHintTextChanged(QString))); + connect(txtWord, &QLineEdit::textChanged, this, &VocabEdit::slotWordTextChanged); + connect(txtHint, &QLineEdit::textChanged, this, &VocabEdit::slotHintTextChanged); } void VocabEdit::slotWordTextChanged(const QString &changes) diff -Nru kanagram-14.12.3/src/vocabsettings.cpp kanagram-15.04.2/src/vocabsettings.cpp --- kanagram-14.12.3/src/vocabsettings.cpp 2015-02-23 11:41:11.000000000 +0000 +++ kanagram-15.04.2/src/vocabsettings.cpp 2015-04-27 11:12:06.000000000 +0000 @@ -37,7 +37,7 @@ { setupUi(this); - connect(lviewVocab, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(slotSelectionChanged(QTreeWidgetItem*))); + connect(lviewVocab, &QTreeWidget::currentItemChanged, this, &VocabSettings::slotSelectionChanged); btnDownloadNew->setIcon(QIcon::fromTheme("get-hot-new-stuff")); @@ -79,7 +79,7 @@ { int index = m_itemMap[lviewVocab->currentItem()]; VocabEdit *vocabEdit = new VocabEdit(this, m_fileList[index]); - connect(vocabEdit, SIGNAL(finished(int)), this, SLOT(refreshView())); + connect(vocabEdit, &VocabEdit::finished, this, &VocabSettings::refreshView); vocabEdit->show(); } } @@ -87,7 +87,7 @@ void VocabSettings::on_btnCreateNew_clicked() { VocabEdit *vocabEdit = new VocabEdit(this, ""); - connect(vocabEdit, SIGNAL(finished(int)), this, SLOT(refreshView())); + connect(vocabEdit, &VocabEdit::finished, this, &VocabSettings::refreshView); vocabEdit->show(); }