@@ -26,50 +26,61 @@ LocalComponents.Page {
26 title: i18n.tr("Language")
26 title: i18n.tr("Language")
27 forwardButtonSourceComponent: forwardButton
27 forwardButtonSourceComponent: forwardButton
29+ property var detectedLangs: []
29 UbuntuLanguagePlugin {
31 UbuntuLanguagePlugin {
30 id: plugin
32 id: plugin
33 Component.onCompleted: {
35 Component.onCompleted: {
34− populateModel(["fr", "de"]); // FIXME pass a list of detected languages here
36+ detectedLangs = ["fr", "de", "it"] // FIXME pass a list of detected languages here
37+ populateModel(detectedLangs.length > 0 ? true : false, detectedLangs.length > 0 ? detectedLangs : ["en"]);
37− function populateModel(detectedLangs)
40+ function populateModel(onlyDetected, detectedLangs)
39 var langs = LocalePlugin.languages();
44 var langs = LocalePlugin.languages();
40 Object.keys(langs).map(function(code) { // prepare the object
45 Object.keys(langs).map(function(code) { // prepare the object
41 //console.log("Got language:" + code);
46 //console.log("Got language:" + code);
42− return { "code": code, "language": langs[code] || code,
47+
43− "dept": detectedLangs.indexOf(code) !== -1 ? i18n.tr("Detected") : i18n.tr("All") };
49+ if (!!detectedLangs && detectedLangs.indexOf(code) !== -1) {
44− })
50+ return { "code": code, "language": langs[code] || code }
45− .sort(function(a, b) { // group by status, sort by language name
51+ }
46− if (a.dept === b.dept) {
52+ } else {
47− return a.language.localeCompare(b.language);
53+ return { "code": code, "language": langs[code] || code }
48− } else if (a.dept === i18n.tr("Detected")) {
57+ .sort(function(a, b) { // sort by language name
58+ return a.language.localeCompare(b.language);
53 .forEach(function(lang) { // build the model
60 .forEach(function(lang) { // build the model
54 if (lang.code === "C") {
61 if (lang.code === "C") {
57 model.append(lang);
64 model.append(lang);
65+ if (!onlyDetected && detectedLangs.length > 0 && lang.code === detectedLangs[0]) { // preselect the first of detected languages
66+ selectLanguage(lang.code, index)
67+ languagesListView.positionViewAtIndex(index, ListView.Beginning)
59− busyIndicator.running = false;
60− busyIndicator.visible = false;
63− ActivityIndicator {
73+ function selectLanguage(code, index)
64− id: busyIndicator;
74+ {
65−
75+ root.language = code
66− anchors.centerIn: column;
76+ languagesListView.currentIndex = index
71 id: column
80 id: column
72 anchors.fill: content
81 anchors.fill: content
82+ anchors.bottomMargin: units.gu(1)
74 ListView {
85 ListView {
75 id: languagesListView;
86 id: languagesListView;
@@ -84,16 +95,7 @@ LocalComponents.Page {
84 right: parent.right;
95 right: parent.right;
87− height: column.height
98+ height: column.height - column.spacing - (showAll.visible ? showAll.height : 0)
91− criteria: ViewSection.FullString;
92− labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart
98 model: ListModel {
100 model: ListModel {
99 id: model;
101 id: model;
@@ -139,6 +141,17 @@ LocalComponents.Page {
147+ //anchors.horizontalCenter: parent.horizontalCenter
148+ text: i18n.tr("Show all languages...")
149+ visible: detectedLangs.length > 0
151+ populateModel(false, root.language !== "" ? [root.language] : ["en"]) // show all langs
152+ showAll.visible = false
144 Component {
157 Component {