Make your App Social with BBM, Part II

Hier ist wieder @leaschnherr mit dem zweiten Teil, indem ich beschreibe wie dein BBM Profil via App verändert werden kann. Dafür muss die App zunächst bei BBM registriert sein. Eine Beschreibung der notwendigen Schritte ist hier zu finden, im ersten Teil dieser Serie. Um Zugriff auf das Profil zu bekommen und es zu ändern ist für jeden Parameter der gleiche Prozess notwendig. Manche Parameter können allerdings nur gelesen werden, aber nicht überschrieben werden. Der Status, die Status Nachricht und das Bild können über eine externe App geändert werden. Hierfür zeige ich die Vorgehensweise in einem Beispiel, welches dann für alle Parameter nach dem gleichen Prinzip durchgeführt werden kann.

Vor dem C++ Code müssen zwei einfach qml Dateien erstellt werden. Die erste zeigt einfach die aktuellen Profil Parameter. In diesem Beispiel werden nur der Name, die Status Nachricht und das Beschäftigt Flag verwendet. Hier ist der qml Code, der als Beispiel genutzt werden kann:

Wichtig ist nur die visible Property vom ImageView und die text Properties vom Name Label und Status Message Label. In diesen Zeilen bekommen die Komponenten die aktuellen Werte aus dem Profil. Es spielt später keine Rolle, welche Quelle die Werte ändert, die Properties werden automatisch aktualisiert.  _profile stammt aus dem C++ Code und wird weiter unten erläutert.

Auch wichtig ist, dass die ganze Page von einem navigationPane umgeben ist, damit über ein action item die nächste qml Datei gepusht werden kann. Dafür darf nicht vergessen werden diese Datei unter attachedObjects hinzuzufügen (hier update.qml genannt).

Diese zweite qml Datei wird dazu genutzt die Profil Daten zu ändern:

Es wird eine checkBox genutzt, um das Beschäftigt Flag zu ändern und ein TextField für die Status Nachricht. Diese Datei sieht sehr ähnlich aus wie die profile.qml, nur dass zusätzlich ein Button zum speichern benötigt wird. Dieser Button nutzt das onClicked() Signal um eine Funktion mit den Properties als Eingabe Parameter aufzurufen (Die Funktion wird später erklärt). Die zweite Zeile stellt sicher, dass zu profile.qml zurückgesprungen wird.

Nachdem die qml Dateien vorbereitet sind werden nur noch wenige Zeilen C++ Code benötigt. In der Profile.hpp werden Macros verwendet um die angezeigten Parameter automatisch zu ändern:

Der erste Wert ist immer der Name, der aus der qml Datei aufgerufen wird. Der nächste Parameter, nach READ, ist die dazugehörige getFunktion um den Wert der Variable zu liefern, welche in der selben Klasse definiert werden muss. Der letzte Parameter, nach NOTIFY, nutzt das Signal profileChanged(), welches in der Header Datei definiert sein muss (als public Signal). Diese Konstruktion sorgt dafür, dass die angezeigten Werte automatisch geändert werden, wenn das Signal profileChanged() aufgerufen wird.

Im ersten Teil dieser Serie wird ein Slot showProfile() aufgerufen. Das ist der Punkt, an dem profile.qml eingefügt wird:

Die Klasse UserProfile ist eine private Variable unserer Klasse, die das aktuelle BBM Profil beinhaltet. Die nächsten Zeilen sind sehr wichtig: Hier wird unser profileChanged() Signal aufgerufen, wenn sich die Parameter im BBM Profil geändert haben, die wir nutzten.

Dann wird die UI erstellt und angezeigt. Hier geben wir dem QmlDocument eine Referenz zu unserer Klasse mit. So ist diese als _profile in der qml Datei bekannt, wie sie zuvor schon genutzt wurde.

Der Button zum speichern update.qml nutzt einen public Slot der noch definiert werden muss:

In der Funktion werden die neuen Werte mit den alten Werten verglichen und für den Fall, dass sich ein Wert geändert hat wird ein Request zum ändern dieses Wertes aufgerufen. Der Vergleich der alten und neuen Werte sieht etwas kompliziert aus, da bevor der Wert tatsächlich geändert wird der Nutzer diese über eine Message Box bestätigen muss. Diese erscheint aus  der UserProfile Klasse. Um also zu vermeiden, dass eine solche Abfrage kommt, obwohl nichts geändert wurde werden in der if-Abfrage alle möglichen Kombination überprüft. Die Parameter werden jetzt im BBM Profil und in der App geändert.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">