فهرست منبع

Implement add contact functionality

- Implement add contact functionality
- Few code improvements
Alexey Edelev 5 سال پیش
والد
کامیت
dded574c17

+ 9 - 0
examples/addressbook/addressbookengine.cpp

@@ -42,6 +42,15 @@ AddressBookEngine::AddressBookEngine() : QObject()
     m_contacts->reset(tmp.list());
 }
 
+void AddressBookEngine::addContact(qtprotobuf::examples::Contact *contact)
+{
+    Contacts tmp;
+    m_client->addContact(*contact, tmp);
+    qDebug() << "tmp count:" << tmp.list().count();
+    m_contacts->reset(tmp.list());
+}
+
+
 AddressBookEngine::~AddressBookEngine()
 {
     delete m_client;

+ 2 - 0
examples/addressbook/addressbookengine.h

@@ -49,6 +49,8 @@ public:
         return m_contacts;
     }
 
+    Q_INVOKABLE void addContact(qtprotobuf::examples::Contact *contact);
+
 signals:
     void contactsChanged();
 

+ 16 - 2
examples/addressbook/qml/AddContactView.qml

@@ -1,6 +1,8 @@
 import QtQuick 2.0
 import QtQuick.Controls 2.4
 
+import qtprotobuf.examples.addressbook 1.0
+
 StackItem {
     id: root
     Flickable {
@@ -8,27 +10,39 @@ StackItem {
         Column {
             width: root.width
             TextInputRow {
-                id: firstName
+                id: firstNameField
                 width: root.width
                 label: qsTr("First name")
             }
             TextInputRow {
+                id: middleNameField
                 width: root.width
                 label: qsTr("Middle name")
             }
             TextInputRow {
+                id: lastNameField
                 width: root.width
                 label: qsTr("Last name")
             }
         }
     }
 
+    property Contact newContact: Contact {
+        firstName: firstNameField.text
+        middleName: middleNameField.text
+        lastName: lastNameField.text
+    }
+
     FloatingRoundButton {
         id: addContactButton
-        enabled: firstName.text.length > 0
+        enabled: firstNameField.text.length > 0
         anchors.right: parent.right
         anchors.bottom: parent.bottom
         anchors.margins: 10
         icon: "qrc:/images/check.png"
+        onClicked: {
+            abEngine.addContact(newContact)
+            stack.pop()
+        }
     }
 }

+ 2 - 2
examples/addressbook/qml/TextInputRow.qml

@@ -8,7 +8,7 @@ RowLayout {
     spacing: 10
     PrimaryText {
         id: labelItem
-        Layout.alignment: Qt.AlignVCenter
+        Layout.alignment: Qt.AlignBottom
         Layout.minimumWidth: 100
         Layout.maximumWidth: 100
         Layout.margins: 10
@@ -17,7 +17,7 @@ RowLayout {
         id: inputItem
         Layout.fillWidth: true
         Layout.margins: 10
-        Layout.alignment: Qt.AlignVCenter
+        Layout.alignment: Qt.AlignBottom
         font.pointSize: 12
         color: "#ffffff"
         Rectangle {

+ 1 - 0
examples/addressbook/qml/main.qml

@@ -25,6 +25,7 @@
 
 import QtQuick 2.9
 import QtQuick.Controls 2.9
+
 import qtprotobuf.examples.addressbook 1.0
 import examples.addressbook 1.0
 

+ 25 - 19
examples/addressbookserver/main.cpp

@@ -4,35 +4,23 @@
 #include "addressbook.grpc.pb.h"
 
 class AddressBookService final : public qtprotobuf::examples::AddressBook::Service {
+    ::qtprotobuf::examples::Contacts m_contacts;
 public:
-    AddressBookService() {}
-    ~AddressBookService() {}
-    ::grpc::Status addContact(::grpc::ServerContext* context, const ::qtprotobuf::examples::Contact* request, ::qtprotobuf::examples::Contacts* response) override
-    {
-        std::cout << "addContact called" << std::endl;
-        return ::grpc::Status(::grpc::UNIMPLEMENTED, "Unimplemented");
-    }
-    ::grpc::Status removeContact(::grpc::ServerContext* context, const ::qtprotobuf::examples::Contact* request, ::qtprotobuf::examples::Contacts* response) override
-    {
-        std::cout << "removeContact called" << std::endl;
-        return ::grpc::Status(::grpc::UNIMPLEMENTED, "Unimplemented");
-    }
-    ::grpc::Status getContacts(::grpc::ServerContext* context, const ::qtprotobuf::examples::ListFrame* request, ::qtprotobuf::examples::Contacts* response) override
-    {
+    AddressBookService() {
         std::cout << "getContacts called" << std::endl;
-        ::qtprotobuf::examples::Contact* contact = response->add_list();
+        ::qtprotobuf::examples::Contact* contact = m_contacts.add_list();
         contact->set_firstname("John");
         contact->set_lastname("Doe");
-        contact = response->add_list();
+        contact = m_contacts.add_list();
         contact->set_firstname("Jane");
         contact->set_lastname("Doe");
-        contact = response->add_list();
+        contact = m_contacts.add_list();
         contact->set_firstname("John");
         contact->set_lastname("McClane");
-        contact = response->add_list();
+        contact = m_contacts.add_list();
         contact->set_firstname("Alexey");
         contact->set_lastname("Edelev");
-        contact = response->add_list();
+        contact = m_contacts.add_list();
         contact->set_firstname("Ebenezer");
         contact->set_lastname("Scrooge");
         ::qtprotobuf::examples::Job *job = new ::qtprotobuf::examples::Job;
@@ -42,6 +30,24 @@ public:
         home.set_countrycode(49);
         home.set_number(12324534679);
         (*contact->mutable_phones())[::qtprotobuf::examples::Contact::Home] = home;
+    }
+    ~AddressBookService() {}
+    ::grpc::Status addContact(::grpc::ServerContext* context, const ::qtprotobuf::examples::Contact* request, ::qtprotobuf::examples::Contacts* response) override
+    {
+        std::cout << "addContact called" << std::endl;
+        ::qtprotobuf::examples::Contact* newContact = m_contacts.add_list();
+        *newContact = *request;
+        *response = m_contacts;
+        return ::grpc::Status();
+    }
+    ::grpc::Status removeContact(::grpc::ServerContext* context, const ::qtprotobuf::examples::Contact* request, ::qtprotobuf::examples::Contacts* response) override
+    {
+        std::cout << "removeContact called" << std::endl;
+        return ::grpc::Status(::grpc::UNIMPLEMENTED, "Unimplemented");
+    }
+    ::grpc::Status getContacts(::grpc::ServerContext* context, const ::qtprotobuf::examples::ListFrame* request, ::qtprotobuf::examples::Contacts* response) override
+    {
+        *response = m_contacts;
         return ::grpc::Status();
     }
     ::grpc::Status makeCall(::grpc::ServerContext* context, const ::qtprotobuf::examples::Contact* request, ::qtprotobuf::examples::SimpleResult* response) override