Hello community,

here is the log from the commit of package artikulate for openSUSE:Factory 
checked in at 2014-03-30 07:54:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/artikulate (Old)
 and      /work/SRC/openSUSE:Factory/.artikulate.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "artikulate"

Changes:
--------
--- /work/SRC/openSUSE:Factory/artikulate/artikulate.changes    2014-03-18 
17:16:46.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.artikulate.new/artikulate.changes       
2014-03-30 12:09:00.000000000 +0200
@@ -1,0 +2,14 @@
+Thu Mar 27 18:16:16 UTC 2014 - [email protected]
+
+- Update to 4.12.97
+   * KDE 4.13 RC  release
+   * See http://www.kde.org/announcements/announce-4.13-rc.php
+
+-------------------------------------------------------------------
+Thu Mar 20 18:33:38 UTC 2014 - [email protected]
+
+- Update to 4.12.95
+   * KDE 4.13 Beta 3  release
+   * See http://www.kde.org/announcements/announce-4.13-beta3.php
+
+-------------------------------------------------------------------

Old:
----
  artikulate-4.12.90.tar.xz

New:
----
  artikulate-4.12.97.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ artikulate.spec ++++++
--- /var/tmp/diff_new_pack.dtBcNP/_old  2014-03-30 12:09:03.000000000 +0200
+++ /var/tmp/diff_new_pack.dtBcNP/_new  2014-03-30 12:09:03.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           artikulate
-Version:        4.12.90
+Version:        4.12.97
 Release:        0
 Summary:        Pronunciation Self-Teaching
 License:        LGPL-3.0+ and GPL-2.0 and BSD-3-Clause
@@ -26,10 +26,10 @@
 Source0:        %{name}-%{version}.tar.xz
 # PATCH-FIX-UPSTREAM icons.patch -- install icons to hicolor namespace
 Patch0:         icons.patch
-BuildRequires:  libkde4-devel >= 4.10
 BuildRequires:  gstreamer-0_10-plugins-qt-devel
-BuildRequires:  xz
+BuildRequires:  libkde4-devel >= 4.10
 BuildRequires:  update-desktop-files
+BuildRequires:  xz
 # Runtime dep
 Requires:       kqtquickcharts >= %{version}
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -48,15 +48,20 @@
 
 %install
   %kde4_makeinstall -C build
+  rm %{buildroot}%{_kde4_libdir}/libartikulate*.so
   %suse_update_desktop_file %{name}       X-KDE-Edu-Teaching
   %kde_post_install
 
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
 %files
 %defattr(-,root,root)
 %doc COPYING*
 %{_kde4_bindir}/artikulate
-%{_kde4_libdir}/liblearnerprofile.so
-%{_kde4_libdir}/libartikulatecore.so
+%{_kde4_libdir}/libartikulatelearnerprofile.so.*
+%{_kde4_libdir}/libartikulatecore.so.*
 %{_kde4_appsdir}/artikulate/
 %{_kde4_applicationsdir}/artikulate.desktop
 %{_kde4_htmldir}/en/artikulate/
@@ -65,5 +70,4 @@
 %{_kde4_appsdir}/artikulateui.rc
 %{_kde4_iconsdir}/hicolor/*/*/artikulate*.*
 
-
 %changelog

++++++ artikulate-4.12.90.tar.xz -> artikulate-4.12.97.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/Messages.sh 
new/artikulate-4.12.97/Messages.sh
--- old/artikulate-4.12.90/Messages.sh  2014-03-12 05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/Messages.sh  2014-03-24 09:57:50.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
-$EXTRACTRC `find src -name '*.rc'` >> rc.cpp
-$EXTRACTRC `find src/ui -name *.ui` >> rc.cpp
-$EXTRACTRC `find src -name '*.kcfg'` >> rc.cpp
+$EXTRACTRC `find . -name '*.rc'` >> rc.cpp
+$EXTRACTRC `find . -name *.ui` >> rc.cpp
+$EXTRACTRC `find . -name '*.kcfg'` >> rc.cpp
 $EXTRACTRC --context="Language Title" --tag-group=none --tag=i18nTitle `find 
data/languages/ -name '*.xml'` >> rc.cpp
-$XGETTEXT rc.cpp `find src/ -name \*.qml -or -name \*.cpp` -o 
$podir/artikulate.pot
+$XGETTEXT rc.cpp `find . -name \*.qml -or -name \*.cpp` -o 
$podir/artikulate.pot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/artikulate.desktop 
new/artikulate-4.12.97/artikulate.desktop
--- old/artikulate-4.12.90/artikulate.desktop   2014-03-12 05:40:44.000000000 
+0100
+++ new/artikulate-4.12.97/artikulate.desktop   2014-03-24 09:57:50.000000000 
+0100
@@ -7,6 +7,7 @@
 GenericName=Artikulate Pronunciation Trainer
 GenericName[bs]=Artikulate vježba izgovora
 GenericName[ca]=Entrenador de la pronunciació Artikulate
+GenericName[ca@valencia]=Entrenador de la pronunciació Artikulate
 GenericName[cs]=Artikulate - učitel výslovnosti
 GenericName[da]=Artikulate udtaletræning
 GenericName[de]=Artikulate-Aussprachetrainer 
@@ -16,7 +17,9 @@
 GenericName[fr]=Programme Artikulate d'entraînement à la prononciation 
 GenericName[gl]=Entrenador de pronuncia Artikulate
 GenericName[hu]=Artikulate kiejtés oktató
+GenericName[ko]=Artikulate 발음 타이머
 GenericName[mr]=आर्टिक्युलेट उच्चारण प्रशिक्षक
+GenericName[nds]=Artikulate - Utspraak öven
 GenericName[nl]=Artikulate Trainingsprogramma voor uitspraak
 GenericName[pl]=Trener artykułowanej wymowy
 GenericName[pt]=Treino de Pronúncia Artikulate
@@ -34,6 +37,7 @@
 Name=Artikulate
 Name[bs]=Artikulate
 Name[ca]=Artikulate
+Name[ca@valencia]=Artikulate
 Name[cs]=Artikulate
 Name[da]=Artikulate
 Name[de]=Artikulate
@@ -43,7 +47,10 @@
 Name[fr]=Artikulate
 Name[gl]=Artikulate
 Name[hu]=Artikulate
+Name[it]=Artikulate
+Name[ko]=Artikulate
 Name[mr]=आर्टिक्युलेट
+Name[nds]=Artikulate
 Name[nl]=Artikulate
 Name[pl]=Artikulate
 Name[pt]=Artikulate
Files old/artikulate-4.12.90/doc/editor-apply.png and 
new/artikulate-4.12.97/doc/editor-apply.png differ
Files old/artikulate-4.12.90/doc/editor-cancel.png and 
new/artikulate-4.12.97/doc/editor-cancel.png differ
Files old/artikulate-4.12.90/doc/editor-screenshot-editing-phrase.png and 
new/artikulate-4.12.97/doc/editor-screenshot-editing-phrase.png differ
Files old/artikulate-4.12.90/doc/editor-screenshot-unit.png and 
new/artikulate-4.12.97/doc/editor-screenshot-unit.png differ
Files old/artikulate-4.12.90/doc/editor-set-repository.png and 
new/artikulate-4.12.97/doc/editor-set-repository.png differ
Files old/artikulate-4.12.90/doc/hi32-action-artikulate-expression.png and 
new/artikulate-4.12.97/doc/hi32-action-artikulate-expression.png differ
Files old/artikulate-4.12.90/doc/hi32-action-artikulate-language.png and 
new/artikulate-4.12.97/doc/hi32-action-artikulate-language.png differ
Files old/artikulate-4.12.90/doc/hi32-action-artikulate-paragraph.png and 
new/artikulate-4.12.97/doc/hi32-action-artikulate-paragraph.png differ
Files old/artikulate-4.12.90/doc/hi32-action-artikulate-sentence.png and 
new/artikulate-4.12.97/doc/hi32-action-artikulate-sentence.png differ
Files old/artikulate-4.12.90/doc/hi32-action-artikulate-word.png and 
new/artikulate-4.12.97/doc/hi32-action-artikulate-word.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/doc/index.docbook 
new/artikulate-4.12.97/doc/index.docbook
--- old/artikulate-4.12.90/doc/index.docbook    2014-03-12 05:40:44.000000000 
+0100
+++ new/artikulate-4.12.97/doc/index.docbook    2014-03-24 09:57:50.000000000 
+0100
@@ -33,7 +33,7 @@
 
 <copyright><year>2014</year><holder>The &artikulate; 
Developers</holder></copyright>
 
-<date>2014-XX-XX</date>
+<date>2014-03-15</date>
 <releaseinfo>0.3.0 &kde; 4.13</releaseinfo>
 
 <legalnotice>&FDLNotice;</legalnotice>
@@ -53,7 +53,7 @@
 <keyword>course</keyword>
 <keyword>unit</keyword>
 <keyword>phrase</keyword>
-<keyword>user profile</keyword>
+<keyword>learner profile</keyword>
 </keywordset>
 
 </bookinfo>
@@ -61,17 +61,19 @@
 <chapter id="introduction">
 <title>Introduction</title>
 <para>
-&artikulate; is a pronunciation trainer that helps improving and perfecting a 
learner's pronunciation skills for a foreign language. For this, it provides 
courses with native speaker recordings of the target language. The learner can 
select a set of phrases, record her/his own voice when speaking the phrases, 
and compare the results to the native speaker's recordings.
+&artikulate; is a pronunciation trainer that helps improving and perfecting a 
learner's pronunciation skills for a foreign language.
+For this, it provides courses with native speaker recordings of the target 
language for download.
+The learner download courses for selected language, selects a group of 
phrases, starts to record her/his own voice when speaking the phrases 
himself/herself, and compares the results to the native speaker's recordings by 
listening to both.
 </para>
 
 <sect1 id="introduction-concept">
 <title>The Learning Concept</title>
 <para>
-The learning concept of this language learning is as follows.
+The study concept of this language learning application is as follows.
 By repeating and comparing own recordings of spoken phrases to the recordings 
of (a representative set of) native speakers, a learner can
 <itemizedlist>
-    <listitem><para>identify weaknesses in speaking the foreign language 
and</para></listitem>
-    <listitem><para>adapt the pronunciation to follow the native 
speakers.</para></listitem>
+    <listitem><para>identify weaknesses when speaking the foreign language 
and</para></listitem>
+    <listitem><para>adapt the pronunciation to coincide with the native 
speaker's pronunciation.</para></listitem>
 </itemizedlist>
 For best learning outcome, specifically designed courses for every supported 
language are necessary.
 Those courses can concentrate on training special scenarios (like ordering 
food in a restaurant) but can also focus on learning how to pronounce difficult 
syllables and words of a particular language correctly.
@@ -81,19 +83,20 @@
 <sect1 id="introduction-first-steps">
 <title>First Steps in &artikulate;</title>
 <para>
-This chapter explains how to make the first steps in &artikulate;, especially 
how to create a learner profile, how to select a language and get the native 
speaker recordings, and how to start training.
+This chapter explains how to make the first steps in &artikulate;, especially 
how to create a learner identity, how to select a language and how to get 
native speaker recordings to start training.
 </para>
 
 <sect2>
-<title>1. Create a User Profile</title>
+<title>1. Create a Learner Identity</title>
 <para>
-For every learner, there has to be one user profile that collects the learning 
progress.
-This allows multiple people to use &artikulate; on the same computer, each 
being able to have his/her private learning statistics.
-To create a user profile, click on the <guilabel>New User</guilabel> button at 
the top left of the window, and then <guilabel>Create New Profile</guilabel>.
-You can edit your name with the <guilabel>Edit</guilabel> button.
+For every learner, there has to be one learner identity that saves the 
learning progress.
+This also allows multiple people to use &artikulate; on the same computer, 
each being able to have his/her private learning goals.
+To create a learner identity, click on the <guilabel>Create Learner 
Identity</guilabel> button (if starting &artikulate; for the first time) or 
otherwise the button with the name of the currently selected learner identity 
at the top left of the window.
+In the opening dialog, then select <guilabel>Create New Learner 
Identity</guilabel>.
+You can edit your name with the <guilabel>Edit</guilabel> button and set a 
picture if you like.
 </para>
 <screenshot>
-<screeninfo>Create a user profile.</screeninfo>
+<screeninfo>Create a learner identity.</screeninfo>
 <mediaobject>
 <imageobject>
 <imagedata fileref="first-steps-1-create-profile.png" format="PNG" />
@@ -105,9 +108,10 @@
 <sect2>
 <title>2. Select a Language</title>
 <para>
-Setting the learning language(s) of a learner is done in the 
<guilabel>Favorite Languages</guilabel> tab by clicking at any language you 
would like to learn.
-The star will turn colored once it is selected.
-Close the Learner Profile dialog by selecting your profile with <guilabel>Use 
Selected Profile</guilabel>.
+Setting the training language(s) of a learner is done in the 
<guilabel>Favorite Languages</guilabel> tab by activating (clicking at) the 
languages.
+The star symbol corresponding to each language will turn colored once it is 
selected.
+Close the Learner Identity dialog by selecting your identity with 
<guilabel>Use Selected Identity</guilabel>.
+Note that when downloading courses, the course language will automatically be 
activated for the currently selected learner identity.
 </para>
 <screenshot>
 <screeninfo>Set favorite languages.</screeninfo>
@@ -122,14 +126,14 @@
 <sect2>
 <title>3. Download a Language Course</title>
 <para>
-For this guide assume that we would like to learn Polish and hence want to 
download a course for Polish.
-You can download courses through  <menuchoice><guimenu>File</guimenu> 
<guimenuitem>Download New Language Course</guimenuitem></menuchoice> or by 
clicking at the orange star at the top right.
+For this tutorial, we assume that we would like to learn Polish and hence that 
we want to download a course for Polish.
+You can download courses through <menuchoice><guimenu>File</guimenu> 
<guimenuitem>Download New Language Course</guimenuitem></menuchoice> or by 
clicking at the orange star at the top right.
 A download window will appear, listing the available languages provided by the 
&kde; Community.
 You can sort through them using the order by functions at the right.
-Download the Polish course by clicking on <guilabel>Install</guilabel>.
+We download the Polish course by clicking on <guilabel>Install</guilabel>.
 </para>
 <screenshot>
-<screeninfo>Set favorite languages.</screeninfo>
+<screeninfo>Download course.</screeninfo>
 <mediaobject>
 <imageobject>
 <imagedata fileref="first-steps-3-download-course.png" format="PNG" />
@@ -141,8 +145,8 @@
 <sect2>
 <title>4. Start Training</title>
 <para>
-Courses consist of multiple training units.
-Select one of the training units that are available at the left panel, and 
then click on <guilabel>Start Training</guilabel>.
+Courses consist of multiple training units, each usually grouping a set of 
phrases according to a scenario.
+Select one of the training units available at the left panel, and then click 
on <guilabel>Start Training</guilabel>.
 </para>
 <screenshot>
 <screeninfo>Select unit and start training.</screeninfo>
@@ -157,7 +161,7 @@
 <sect2>
 <title>Finish Training / Statistics </title>
 <para>
-After completing through all the phrases in a course, you'll be presented with 
the statistics screen.
+After completing through all the phrases in a training unit, you will see a 
statistics screen for the completed training.
 You can see how many tries it took for the various types of phrases.
 The statistics screen is closed by click on the <guilabel>Finish 
Training</guilabel> button at the top right.
 </para>
@@ -172,8 +176,8 @@
 <title>The Training Screen</title>
 <para>
 The training view is the most important view in &artikulate;.
-Whenever starting a training, this view is opened and will be present until 
the training of the selected training unit is finished or the learner stops the 
training.
-In the center of this screen, there are controls for playing a native speaker 
recording, the text of the corresponding phrase and controls to record and 
playback the learner's own voice.
+Whenever starting a training, this view is opened and will be presented until 
the training of the selected training unit is finished or the learner stops the 
training.
+In the center of this screen, there are controls for playing a native speaker 
recording, the text of the corresponding phrase, and controls to record and 
playback the learner's own voice.
 When a learner judges to be done with training the pronunciation of the 
current phrase, by clicking <guilabel>OK</guilabel> the current phrase is 
marked as done and a next phrase is selected.
 Otherwise, when clicking on <guilabel>Retry Later</guilabel>, a next phrase is 
selected but the current phrase will be displayed later again.
 </para>
@@ -182,19 +186,19 @@
 For training the pronunciation of a current phrase, the learner shall first 
play the native speaker's recording by pressing at the 
<guilabel>Playback</guilabel> button at the left.
 The next step is to press on the <guilabel>Record</guilabel> button and read 
the presented phrase aloud.
 A further press on the <guilabel>Record</guilabel> button stops the recording 
and the recording can then be played with the corresponding 
<guilabel>Playback</guilabel> button.
-By listening to both recordings, the user shall judge if the phrase was 
pronounced correctly or not.
+By listening to both recordings, the learner shall judge if the phrase was 
pronounced correctly or not.
 If it was pronounced correctly, clicking on <guilabel>OK</guilabel> marks the 
phrase as learned and proceeds with the next phrase.
 Otherwise, if not yet satisfied with the recording, the learner either can 
retry recording by again clicking on <guilabel>Record</guilabel> or schedule 
the phrase for later training by clicking on <guilabel>Retry Later</guilabel>.
 </para>
 
 <para>
-&artikulate; units are composed of a list of phrases of different lengths 
(words, expressions, sentences, and paragraphs).
+&artikulate;'s units are composed of a list of phrases of different lengths 
(words, expressions, sentences, and paragraphs).
 A learner can see the current learning progress at the bottom when looking at 
<link linkend="screens-training-progressbar">the progress bar</link>.
 The progress bar also allows switching between phrases.
 </para>
 
 <para>
-At any time the learner can choose to stop training by clicking at the 
<guilabel>Finish</guilabel> button.
+At any time, the learner can choose to stop training by clicking at the 
<guilabel>Finish</guilabel> button.
 </para>
 
 <screenshot>
@@ -258,7 +262,7 @@
 <sect2 id="screens-training-progressbar">
 <title>Progress Bar</title>
 <para>
-The progress bar displays the learning progress in the current unit.
+The progress bar displays the learning progress for the current unit.
 It consists of blocks representing the phrases in the current unit, whereas 
the color of a block explains the length of the phrase.
 You can hover over these blocks to see the phrases and click on them to switch 
the currently trained phrase.
 Dark elements are already trained, light ones are untrained.
@@ -270,9 +274,7 @@
 <imagedata fileref="screen-training-progressbar.png" format="PNG" />
 </imageobject>
 <textobject>
-<phrase>
-    The progress bar for the current unit.
-</phrase>
+<phrase>The progress bar for the current unit.</phrase>
 </textobject>
 </mediaobject>
 </screenshot>
@@ -287,7 +289,200 @@
 </itemizedlist>
 </para>
 </sect2>
+</sect1>
+</chapter>
 
+<chapter>
+<title>Editor</title>
+<para>
+The integrated course editor is an advanced tool for language course 
contributors that allows the creation and collaborative work on language 
courses for &artikulate;.
+On the one hand it allows the creation of language courses and recording of 
the native speaker sound files.
+On the hand, it enables work on so called <emphasis>skeletons</emphasis>, 
which are language course prototypes that allow easy and fast creation of new 
courses derived from a prototype.
+The editor only edits files outside of the training course set, i.e., the set 
of courses downloaded in &artikulate;.
+</para>
+
+<sect1>
+<title>Overview</title>
+
+<sect2>
+<title>Editor Notions</title>
+<para>
+For the course editor we use a specific set of terms, which is also used for 
the following descriptions.
+</para>
+<variablelist>
+<varlistentry>
+    <term>Language:</term>
+    <listitem>
+    <para>
+        Languages are only available in &artikulate; if they are given by 
language specifications.
+    </para>
+    </listitem>
+</varlistentry>
+<varlistentry>
+    <term>Course:</term>
+    <listitem>
+    <para>
+        A course is associated to one language and contains a list of units.
+    </para>
+    </listitem>
+</varlistentry>
+<varlistentry>
+    <term>Unit:</term>
+    <listitem>
+    <para>
+        A unit consists of phrases that are "somehow" homogeneous.
+        E.g. those can be phrases spoken in a restaurant or phrases spoken at 
a conversation at the street by a tourist searching for the way.
+    </para>
+    </listitem>
+</varlistentry>
+<varlistentry>
+    <term>Course Skeletons:</term>
+    <listitem>
+    <para>
+        A course skeleton forms the prototype of a course.
+        This is, skeletons help to ease creation of courses in several 
languages as they state a set of units and phrases (in English) that then can 
be used as a blueprint to create a course in a new language.
+        Updates of course skeletons can also be imported into courses that are 
created from a skeleton.
+    </para>
+    </listitem>
+</varlistentry>
+<varlistentry>
+    <term>Phrases:</term>
+    <listitem>
+    <para>
+        Phrases are given by a text string and a recording by a native 
speaker. We differ phrases by their lengths. The following phrase lengths exists
+        <itemizedlist>
+        <listitem>
+        <para><inlinemediaobject><imageobject>
+        <imagedata fileref="hi32-action-artikulate-word.png" 
format="PNG"/></imageobject>
+        </inlinemediaobject>
+        word: a single word, letter, or number</para>
+        </listitem>
+        <listitem>
+        <para><inlinemediaobject><imageobject>
+        <imagedata fileref="hi32-action-artikulate-expression.png" 
format="PNG"/></imageobject>
+        </inlinemediaobject>
+        expression: an expression of several words that does not form a 
complete sentence</para>
+        </listitem>
+        <listitem>
+        <para><inlinemediaobject><imageobject>
+        <imagedata fileref="hi32-action-artikulate-sentence.png" 
format="PNG"/></imageobject>
+        </inlinemediaobject>
+        sentence: a complete sentence</para>
+        </listitem>
+        <listitem>
+        <para><inlinemediaobject><imageobject>
+        <imagedata fileref="hi32-action-artikulate-paragraph.png" 
format="PNG"/></imageobject>
+        </inlinemediaobject>
+        paragraph: several sentences (usually 2-3)</para>
+        </listitem>
+        </itemizedlist>
+    </para>
+    </listitem>
+</varlistentry>
+</variablelist>
+<para>
+A course is associated with a specific language, consists of different units 
and each unit is given by a sequence of phrases in different lengths.
+</para>
+</sect2>
+
+<sect2>
+<title>Set Storage Folder/Course Repository</title>
+<para>
+The editor operates within a separate folder (in the following called 
<emphasis>repository</emphasis>, as it is recommended to be under some version 
control system).
+In that folder, the editor searches for editable courses and skeleton files 
and also stores new files.
+</para>
+<para>
+The course repository can be set in the configuration dialog.
+It can be found at <menuchoice><guimenu>Settings</guimenu> 
<guimenuitem>Configure &artikulate;</guimenuitem></menuchoice> and the course 
settings are at the menu option <guilabel>Course Resources</guilabel>.
+</para>
+<screenshot>
+<screeninfo>Set course repository for editor.</screeninfo>
+<mediaobject>
+<imageobject>
+<imagedata fileref="editor-set-repository.png" format="PNG" />
+</imageobject>
+<caption><para>Set course repository for editor.</para></caption>
+</mediaobject>
+</screenshot>
+</sect2>
+</sect1>
+
+<sect1>
+<title>Edit a Course</title>
+<para>
+The editor can be started from the main menu with 
<menuchoice><guimenu>Mode</guimenu> <guimenuitem>Course Editor 
mode</guimenuitem></menuchoice>.
+There you have the options to work on existing skeleton files or to create new 
courses or edit existing ones.
+After selecting a language, you can open an existing course to edit it, or 
otherwise use <guilabel>New Course</guilabel> to create a new course for this 
language.
+In either case, you will be presented the list of units of the course, where 
you can create new units or open existing ones for edit.
+</para>
+
+<sect2>
+<title>Edit a Unit</title>
+<para>
+When opening a unit for editing, you will see the list of its phrases (see 
below).
+One line of this list contains the following information:
+<orderedlist>
+    <listitem><para>edit button: open this phrase for edit</para></listitem>
+    <listitem><para>phrase type: icon that denotes the type of this phrase 
(e.g., word, expression)</para></listitem>
+    <listitem><para>edit state: a colored block that denotes the edit state of 
this phrase (red: unknown/no state set; orange: translated state; green: 
completed state)</para></listitem>
+    <listitem><para>the phrase</para></listitem>
+    <listitem><para>exclude button: if course derives from a course skeleton, 
this button allows excluding the phrase from the unit</para></listitem>
+</orderedlist>
+</para>
+<screenshot>
+<screeninfo>Editor View: list of phrases within a unit.</screeninfo>
+<mediaobject>
+<imageobject>
+<imagedata fileref="editor-screenshot-unit.png" format="PNG" />
+</imageobject>
+<caption><para>Editor View: list of phrases within a unit.</para></caption>
+</mediaobject>
+</screenshot>
+</sect2>
+
+<sect2>
+<title>Edit a Phrase</title>
+<para>
+When opening a phrase for editing, you will see the phrase editor as shown 
below.
+This edit interface contains the following elements:
+</para>
+<itemizedlist>
+    <listitem><para>the phrase text as it will be shown in the 
trainer</para></listitem>
+    <listitem><para>the original phrase, if using a course 
skeleton</para></listitem>
+    <listitem><para>the edit state of the phrase</para></listitem>
+    <listitem><para>the type/length of the phrase</para></listitem>
+    <listitem><para>recording buttons for the native speaker 
recordings</para></listitem>
+    <listitem><para>buttons to denote interesting phonemes of the phrase 
(currently not used in training mode)</para></listitem>
+</itemizedlist>
+<para>
+You can close the phrase editing interface with
+<inlinemediaobject><imageobject>
+<imagedata fileref="editor-apply.png" format="PNG"/></imageobject>
+</inlinemediaobject>
+to accept the changes you did, or with
+<inlinemediaobject><imageobject>
+<imagedata fileref="editor-cancel.png" format="PNG"/></imageobject>
+</inlinemediaobject>
+to discard your changes.
+</para>
+<screenshot>
+<screeninfo>Editor View: editing view for a phrase.</screeninfo>
+<mediaobject>
+<imageobject>
+<imagedata fileref="editor-screenshot-editing-phrase.png" format="PNG" />
+</imageobject>
+<caption><para>Editor View: editing view for a phrase.</para></caption>
+</mediaobject>
+</screenshot>
+</sect2>
+
+<sect2>
+<title>Update from Course Prototype</title>
+<para>
+If the currently edited course derives from a skeleton, then the course can be 
updated from the latest version of the skeleton by using the button 
<guilabel>Update from Course Prototype</guilabel> at the top left of the screen.
+This button is deactivated if the course is not derived from a course skeleton.
+</para>
+</sect2>
 </sect1>
 </chapter>
 
Files old/artikulate-4.12.90/icons/hi32-action-artikulate-paragraph.png and 
new/artikulate-4.12.97/icons/hi32-action-artikulate-paragraph.png differ
Files old/artikulate-4.12.90/icons/hisc-action-artikulate-paragraph.svgz and 
new/artikulate-4.12.97/icons/hisc-action-artikulate-paragraph.svgz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artikulate-4.12.90/liblearnerprofile/src/CMakeLists.txt 
new/artikulate-4.12.97/liblearnerprofile/src/CMakeLists.txt
--- old/artikulate-4.12.90/liblearnerprofile/src/CMakeLists.txt 2014-03-12 
05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/liblearnerprofile/src/CMakeLists.txt 2014-03-24 
09:57:50.000000000 +0100
@@ -23,7 +23,7 @@
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ###
 
-set( learnerprofile_LIB_SRCS
+set(learnerprofile_LIB_SRCS
     learner.cpp
     learninggoal.cpp
     profilemanager.cpp
@@ -32,14 +32,24 @@
     models/learninggoalmodel.cpp
 )
 
-kde4_add_library( learnerprofile SHARED ${learnerprofile_LIB_SRCS} )
+kde4_add_library(artikulatelearnerprofile SHARED ${learnerprofile_LIB_SRCS})
 
 target_link_libraries(
-    learnerprofile
+    artikulatelearnerprofile
     LINK_PRIVATE
         ${KDE4_KDECORE_LIBS}
         ${KDE4_KFILE_LIBS}
         ${QT_QTSQL_LIBRARY}
 )
 
-install( TARGETS learnerprofile ${INSTALL_TARGETS_DEFAULT_ARGS} )
+set_target_properties(
+    artikulatelearnerprofile
+    PROPERTIES
+        VERSION ${GENERIC_LIB_VERSION}
+        SOVERSION ${GENERIC_LIB_SOVERSION}
+)
+
+install(
+    TARGETS artikulatelearnerprofile
+    ${INSTALL_TARGETS_DEFAULT_ARGS}
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/CMakeLists.txt 
new/artikulate-4.12.97/src/CMakeLists.txt
--- old/artikulate-4.12.90/src/CMakeLists.txt   2014-03-12 05:40:44.000000000 
+0100
+++ new/artikulate-4.12.97/src/CMakeLists.txt   2014-03-24 09:57:50.000000000 
+0100
@@ -24,7 +24,7 @@
 ###
 set(ARTIKULATE_VERSION_MAJOR 0)
 set(ARTIKULATE_VERSION_MINOR 2)
-set(ARTIKULATE_VERSION_PATCH 90)
+set(ARTIKULATE_VERSION_PATCH 95)
 
 find_package(KDeclarative REQUIRED)
 find_package(QtMobility COMPONENTS MultimediaKit QUIET)
@@ -95,7 +95,7 @@
 set(
     artikulateTargetLibs
     artikulatecore
-    learnerprofile
+    artikulatelearnerprofile
     ${KDECLARATIVE_LIBRARIES}
     ${KDE4_PLASMA_LIBS}
     ${KDE4_KIO_LIBS}
@@ -151,10 +151,19 @@
 kde4_add_library(artikulatecore SHARED ${artikulateCore_SRCS})
 target_link_libraries(artikulatecore
     LINK_PRIVATE
-        learnerprofile
+        artikulatelearnerprofile
         ${artikulateCoreTargetLibs}
 )
-install(TARGETS artikulatecore ${INSTALL_TARGETS_DEFAULT_ARGS})
+set_target_properties(
+    artikulatecore
+    PROPERTIES
+        VERSION ${GENERIC_LIB_VERSION}
+        SOVERSION ${GENERIC_LIB_SOVERSION}
+)
+install(
+    TARGETS artikulatecore
+    DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS}
+)
 install( FILES artikulate.knsrc  DESTINATION  ${CONFIG_INSTALL_DIR} )
 
 # set the source code files from which Artikulate is compiled
@@ -193,7 +202,7 @@
 kde4_add_executable(artikulate ${artikulate_SRCS})
 target_link_libraries(artikulate
     LINK_PRIVATE
-        learnerprofile
+        artikulatelearnerprofile
         ${artikulateTargetLibs}
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/core/course.cpp 
new/artikulate-4.12.97/src/core/course.cpp
--- old/artikulate-4.12.90/src/core/course.cpp  2014-03-12 05:40:44.000000000 
+0100
+++ new/artikulate-4.12.97/src/core/course.cpp  2014-03-24 09:57:50.000000000 
+0100
@@ -295,7 +295,7 @@
 void Course::sync()
 {
     if (!m_file.isValid() || m_file.isEmpty() || m_resource == 0) {
-        kWarning() << "No file path set, aborting sync operation.";
+        kError() << "Path" << m_file.toLocalFile() << "not valid, aborting 
sync operation.";
         return;
     }
     m_resource->sync();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/core/resourcemanager.cpp 
new/artikulate-4.12.97/src/core/resourcemanager.cpp
--- old/artikulate-4.12.90/src/core/resourcemanager.cpp 2014-03-12 
05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/src/core/resourcemanager.cpp 2014-03-24 
09:57:50.000000000 +0100
@@ -356,11 +356,17 @@
     }
 }
 
-void ResourceManager::newCourseDialog()
+void ResourceManager::newCourseDialog(Language *language)
 {
     QPointer<NewCourseDialog> dialog = new NewCourseDialog(this);
-    if (dialog->exec() == QDialog::Accepted ) {
+    if (language != 0) {
+        dialog->setLanguage(language);
+    }
+    if (dialog->exec() == QDialog::Accepted) {
+        CourseResource *tempCourse = dialog->courseResource();
+        tempCourse->setContributorResource(true);
         addCourseResource(dialog->courseResource());
+        emit languageCoursesChanged();
     }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/core/resourcemanager.h 
new/artikulate-4.12.97/src/core/resourcemanager.h
--- old/artikulate-4.12.90/src/core/resourcemanager.h   2014-03-12 
05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/src/core/resourcemanager.h   2014-03-24 
09:57:50.000000000 +0100
@@ -176,7 +176,7 @@
      */
     QList<SkeletonResource *> skeletonResources();
 
-    Q_INVOKABLE void newCourseDialog();
+    Q_INVOKABLE void newCourseDialog(Language* language = 0);
 
 signals:
     void languageResourceAdded();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artikulate-4.12.90/src/core/resources/courseresource.cpp 
new/artikulate-4.12.97/src/core/resources/courseresource.cpp
--- old/artikulate-4.12.90/src/core/resources/courseresource.cpp        
2014-03-12 05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/src/core/resources/courseresource.cpp        
2014-03-24 09:57:50.000000000 +0100
@@ -33,6 +33,8 @@
 #include <QDomDocument>
 #include <QIODevice>
 #include <QFile>
+#include <QFileInfo>
+#include <QDir>
 
 #include <KDebug>
 
@@ -226,6 +228,13 @@
     root.appendChild(unitListElement);
 
     // write back to file
+    QFileInfo info(path().directory());    // create directories if necessary
+    if (!info.exists()) {
+        kDebug() << "create xml output file directory, not existing";
+        QDir dir;
+        dir.mkpath(path().directory());
+    }
+
     //TODO port to KSaveFile
     QFile file;
     file.setFileName(path().toLocalFile());
@@ -310,16 +319,20 @@
         return d->m_courseResource;
     }
 
-    if (!path().isLocalFile()) {
-        kWarning() << "Cannot open course file at " << path().toLocalFile() << 
", aborting.";
-        return 0;
+    // if file does not exist, create new course
+    QFileInfo info(d->m_path.toLocalFile());
+    if (!info.exists()) {
+        d->m_courseResource = new Course(this);
+        d->m_courseResource->setId(d->m_identifier);
+        d->m_courseResource->setTitle(d->m_title);
+        return d->m_courseResource;
     }
 
+    // load existing file
     QXmlSchema schema = loadXmlSchema("course");
     if (!schema.isValid()) {
         return 0;
     }
-
     QDomDocument document = loadDomDocument(path(), schema);
     if (document.isNull()) {
         kWarning() << "Could not parse document " << path().toLocalFile() << 
", aborting.";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/mainwindow.cpp 
new/artikulate-4.12.97/src/mainwindow.cpp
--- old/artikulate-4.12.90/src/mainwindow.cpp   2014-03-12 05:40:44.000000000 
+0100
+++ new/artikulate-4.12.97/src/mainwindow.cpp   2014-03-24 09:57:50.000000000 
+0100
@@ -215,6 +215,10 @@
 void MainWindow::updateTrainingPhraseFont()
 {
     QObject *phraseText = 
m_view->rootObject()->findChild<QObject*>("phraseText");
+    if (!phraseText) {
+        kDebug() << "no phraseText context object found, aborting";
+        return;
+    }
     QFont f = phraseText->property("font").value<QFont>();
     phraseText->setProperty("font", Settings::trainingPhraseFont());
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/qml/Editor.qml 
new/artikulate-4.12.97/src/qml/Editor.qml
--- old/artikulate-4.12.90/src/qml/Editor.qml   2014-03-12 05:40:44.000000000 
+0100
+++ new/artikulate-4.12.97/src/qml/Editor.qml   2014-03-24 09:57:50.000000000 
+0100
@@ -259,10 +259,13 @@
                 Text {
                     anchors.verticalCenter: parent.verticalCenter
                     text: i18n("<strong>Skeleton:</strong> %1", 
editor.currentCourseName)
+                    font.pointSize: 1.5 * theme.defaultFont.pointSize
                 }
                 PlasmaComponents.ToolButton { // unselect-button for language
                     anchors.verticalCenter: parent.verticalCenter
                     iconSource: "go-up"
+                    width: theme.mediumIconSize
+                    height: theme.mediumIconSize
                     flat: true
                     enabled: editorProfile.course != null
                     onClicked: {
@@ -302,10 +305,6 @@
         }
 
         Item {
-            anchors {
-                top: main.top
-                topMargin: 30
-            }
             visible: editorProfile.course != null
 
             Column {
@@ -364,7 +363,7 @@
         visible: !globalResourceManager.isRepositoryManager()
         Text {
             text: i18n("No Course Repository Selected")
-            font.pointSize: 28
+            font.pointSize: 1.5 * theme.defaultFont.pointSize
         }
         Text {
             text: i18n("Editor is only available when Artikulate works on a 
course data repository. Please see program settings.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/qml/EditorSelector.qml 
new/artikulate-4.12.97/src/qml/EditorSelector.qml
--- old/artikulate-4.12.90/src/qml/EditorSelector.qml   2014-03-12 
05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/src/qml/EditorSelector.qml   2014-03-24 
09:57:50.000000000 +0100
@@ -82,7 +82,7 @@
             Text {
                 id: textSelectLanguage
                 text: i18n("Select Course Language:")
-                font.pointSize: 20;
+                font.pointSize: 1.5 * theme.defaultFont.pointSize
             }
             LanguageSelector {
                 id: languageSelector
@@ -110,7 +110,7 @@
                     anchors.verticalCenter: parent.verticalCenter
                     text: i18n("Language: ")
                     iconSource: "go-up"
-                    font.pointSize: 20;
+                    font.pointSize: 1.5 * theme.defaultFont.pointSize
                     onClicked: {
                         unselect()
                     }
@@ -125,7 +125,7 @@
                             return i18n("unselected");
                         }
                     }
-                    font.pointSize: 20;
+                    font.pointSize: 1.5 * theme.defaultFont.pointSize
                 }
             }
 
@@ -135,7 +135,7 @@
                 iconSource: "document-new"
                 enabled: selectedLanguage != null
                 onClicked: {
-                    globalResourceManager.newCourseDialog();
+                    
globalResourceManager.newCourseDialog(root.selectedLanguage);
                 }
             }
             CourseSelector {
@@ -158,7 +158,7 @@
 
         Text {
             text: i18n("Select Skeleton:")
-            font.pointSize: 20;
+            font.pointSize: 1.5 * theme.defaultFont.pointSize
         }
         SkeletonSelector {
             id: skeletonSelector
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/qml/UnitEditor.qml 
new/artikulate-4.12.97/src/qml/UnitEditor.qml
--- old/artikulate-4.12.90/src/qml/UnitEditor.qml       2014-03-12 
05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/src/qml/UnitEditor.qml       2014-03-24 
09:57:50.000000000 +0100
@@ -208,7 +208,6 @@
 
         PlasmaComponents.ToolButton {
             id: addPhraseButton
-            anchors.top: unitBreadcrumb.bottom
             text: i18n("Add Phrase")
             iconSource: "document-new"
             enabled: root.unit != null && !root.editMode
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/ui/newcoursedialog.cpp 
new/artikulate-4.12.97/src/ui/newcoursedialog.cpp
--- old/artikulate-4.12.90/src/ui/newcoursedialog.cpp   2014-03-12 
05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/src/ui/newcoursedialog.cpp   2014-03-24 
09:57:50.000000000 +0100
@@ -33,6 +33,7 @@
 
 NewCourseDialog::NewCourseDialog(ResourceManager *m_resourceManager)
     : KDialog(0)
+    , m_fixedLanguage(0)
     , m_resourceManager(m_resourceManager)
     , m_createdCourse(0)
 {
@@ -70,15 +71,24 @@
     delete ui;
 }
 
+void NewCourseDialog::setLanguage(Language *language)
+{
+    ui->language->setVisible(false);
+    ui->labelLanguage->setVisible(false);
+    m_fixedLanguage = language;
+}
+
 void NewCourseDialog::createCourse()
 {
-    // set language
-    Language * language = 0;
-    QString selectedLanguage = 
ui->language->itemData(ui->language->currentIndex()).toString();
-    foreach (LanguageResource *resource, 
m_resourceManager->languageResources()) {
-        if (resource->identifier() == selectedLanguage) {
-            language = resource->language();
-            break;
+    // set language from dialog if not set yet
+    Language * language = m_fixedLanguage;
+    if (!language) {
+        QString selectedLanguage = 
ui->language->itemData(ui->language->currentIndex()).toString();
+        foreach (LanguageResource *resource, 
m_resourceManager->languageResources()) {
+            if (resource->identifier() == selectedLanguage) {
+                language = resource->language();
+                break;
+            }
         }
     }
 
@@ -90,18 +100,19 @@
         .arg(language->id());
 
     m_createdCourse = new CourseResource(m_resourceManager, 
KUrl::fromLocalFile(path));
+    Q_ASSERT(m_createdCourse);
 
     Course *course = m_createdCourse->course();
+    Q_ASSERT(course);
     course->setId(QUuid::createUuid().toString());
     course->setTitle(ui->title->text());
     course->setDescription(ui->description->toHtml());
+    course->setFile(KUrl::fromLocalFile(path));
+    course->setLanguage(language);
 
     // set skeleton
     QString skeletonId = 
ui->skeletonSelector->itemData(ui->skeletonSelector->currentIndex()).toString();
     course->setForeignId(skeletonId);
-
-    // check that language actually exists
-    Q_ASSERT(course->language());
 }
 
 CourseResource * NewCourseDialog::courseResource() const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artikulate-4.12.90/src/ui/newcoursedialog.h 
new/artikulate-4.12.97/src/ui/newcoursedialog.h
--- old/artikulate-4.12.90/src/ui/newcoursedialog.h     2014-03-12 
05:40:44.000000000 +0100
+++ new/artikulate-4.12.97/src/ui/newcoursedialog.h     2014-03-24 
09:57:50.000000000 +0100
@@ -26,6 +26,7 @@
 
 class ResourceManager;
 class CourseResource;
+class Language;
 
 class NewCourseDialog :
     public KDialog
@@ -35,6 +36,7 @@
 public:
     explicit NewCourseDialog(ResourceManager *resourceMgr);
     virtual ~NewCourseDialog();
+    void setLanguage(Language *language);
     CourseResource * courseResource() const;
 
 public slots:
@@ -42,6 +44,7 @@
 
 private:
     Ui::NewCourseDialog *ui;
+    Language *m_fixedLanguage;
     ResourceManager *m_resourceManager;
     CourseResource *m_createdCourse;
 };

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to