appmodel.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. #include "appmodel.h"
  2. #include "Ego.h"
  3. // extern std::array<IRender *, 3> ar;
  4. CarData::CarData(QObject *parent) : QObject(parent) {}
  5. CarData::CarData(const CarData &other)
  6. : QObject(nullptr), m_uid(other.m_uid), m_name(other.m_name),
  7. m_type(other.m_type), m_state(other.m_state) {}
  8. QString CarData::uid() const { return m_uid; }
  9. QString CarData::name() const { return m_name; }
  10. QString CarData::type() const { return m_type; }
  11. QString CarData::state() const { return m_state; }
  12. void CarData::setUid(const QString &value) {
  13. m_uid = value;
  14. emit dataChanged();
  15. }
  16. void CarData::setName(const QString &value) {
  17. m_name = value;
  18. emit dataChanged();
  19. }
  20. void CarData::setState(const QString &value) {
  21. m_state = value;
  22. emit dataChanged();
  23. }
  24. void CarData::setType(const QString &value) {
  25. m_type = value;
  26. emit dataChanged();
  27. }
  28. class AppModelPrivate {
  29. public:
  30. QList<CarData *> car;
  31. QQmlListProperty<CarData> *carProp = nullptr;
  32. };
  33. static void carAppend(QQmlListProperty<CarData> *prop, CarData *val) {
  34. Q_UNUSED(val);
  35. Q_UNUSED(prop);
  36. }
  37. static CarData *carAt(QQmlListProperty<CarData> *prop, qsizetype index) {
  38. AppModelPrivate *d = static_cast<AppModelPrivate *>(prop->data);
  39. return d->car.at(index);
  40. }
  41. static qsizetype carCount(QQmlListProperty<CarData> *prop) {
  42. AppModelPrivate *d = static_cast<AppModelPrivate *>(prop->data);
  43. return d->car.size();
  44. }
  45. static void carClear(QQmlListProperty<CarData> *prop) {
  46. static_cast<AppModelPrivate *>(prop->data)->car.clear();
  47. }
  48. AppModel::AppModel(IEgoNotify *n, IEgoControl *c, QObject *parent)
  49. : _notify(n), _control(c), QObject(parent), d(new AppModelPrivate) {
  50. d->carProp = new QQmlListProperty<CarData>(this, d, carAppend, carCount,
  51. carAt, carClear);
  52. connect(dynamic_cast<QObject *>(_notify), SIGNAL(egoLoginResult(bool)), this,
  53. SLOT(onLoginRst(bool)));
  54. connect(dynamic_cast<QObject *>(_notify), SIGNAL(egoCarAppend(UserCamera)),
  55. this, SLOT(onCarAppend(UserCamera)));
  56. connect(
  57. dynamic_cast<QObject *>(_notify),
  58. SIGNAL(egoRadar(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t)),
  59. this,
  60. SLOT(
  61. onRadarUpadte(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t)));
  62. connect(dynamic_cast<QObject *>(_notify), SIGNAL(egoPing(int32_t)), this,
  63. SLOT(onPing(int32_t)));
  64. connect(dynamic_cast<QObject *>(_notify), SIGNAL(egoImu(int32_t, int32_t)),
  65. this, SLOT(onImuUpdate(int32_t, int32_t)));
  66. connect(dynamic_cast<QObject *>(_notify), SIGNAL(egoNotifyDel()), this,
  67. SLOT(onNotifyDel()));
  68. connect(dynamic_cast<QObject *>(_notify), SIGNAL(egoKickoff()), this,
  69. SLOT(onKickoff()));
  70. }
  71. AppModel::~AppModel() {
  72. if (d->carProp)
  73. delete d->carProp;
  74. if (d)
  75. delete d;
  76. }
  77. bool AppModel::ready() const { return m_ready; }
  78. int AppModel::radar1() const { return m_radar1; }
  79. int AppModel::radar2() const { return m_radar2; }
  80. int AppModel::radar3() const { return m_radar3; }
  81. int AppModel::radar4() const { return m_radar4; }
  82. int AppModel::radar5() const { return m_radar5; }
  83. int AppModel::radar6() const { return m_radar6; }
  84. int AppModel::ping() const { return m_ping; }
  85. int AppModel::imux() const { return m_imux; }
  86. int AppModel::imuy() const { return m_imuy; }
  87. QString AppModel::username() const { return m_username; }
  88. QString AppModel::password() const { return m_password; }
  89. int AppModel::alertSound() const { return m_alert; }
  90. void AppModel::setReady(const bool value) {
  91. m_ready = value;
  92. emit readyChanged();
  93. }
  94. void AppModel::setRadar1(const int32_t &value) {
  95. m_radar1 = value;
  96. emit radar1Changed();
  97. }
  98. void AppModel::setRadar2(const int32_t &value) {
  99. m_radar2 = value;
  100. emit radar2Changed();
  101. }
  102. void AppModel::setRadar3(const int32_t &value) {
  103. m_radar3 = value;
  104. emit radar3Changed();
  105. }
  106. void AppModel::setRadar4(const int32_t &value) {
  107. m_radar4 = value;
  108. emit radar4Changed();
  109. }
  110. void AppModel::setRadar5(const int32_t &value) {
  111. m_radar5 = value;
  112. emit radar5Changed();
  113. }
  114. void AppModel::setRadar6(const int32_t &value) {
  115. m_radar6 = value;
  116. emit radar6Changed();
  117. }
  118. void AppModel::setPing(const int32_t &value) {
  119. m_ping = value;
  120. emit pingChanged();
  121. }
  122. void AppModel::setImux(const int32_t &value) {
  123. m_imux = value;
  124. emit imuxChanged();
  125. }
  126. void AppModel::setUsername(const QString &value) {
  127. m_username = value;
  128. emit usernameChanged();
  129. }
  130. void AppModel::setPassword(const QString &value) {
  131. m_password = value;
  132. emit passwordChanged();
  133. }
  134. void AppModel::setImuy(const int32_t &value) {
  135. m_imuy = value;
  136. emit imuyChanged();
  137. }
  138. void AppModel::onKickoff() { emit closeWin(); }
  139. QQmlListProperty<CarData> AppModel::car() const { return *(d->carProp); }
  140. void AppModel::userLogin(QString useName, QString password) {
  141. _control->Login(useName.toStdString(), password.toStdString());
  142. }
  143. void AppModel::leaveCar() {
  144. _control->OnCarLeave();
  145. // setReady(false);
  146. }
  147. void AppModel::connectCar(int id) {
  148. _control->OnCarConnect(id);
  149. if (!m_ready) {
  150. setReady(true);
  151. }
  152. }
  153. void AppModel::onLoginRst(bool rst) {
  154. qDebug() << "AppModel::loginResult >>";
  155. if (rst) {
  156. // delete previous carList
  157. // foreach (CarData *inf, d->car)
  158. // delete inf;
  159. // d->car.clear();
  160. // req new list
  161. //_control->ReqCarList();
  162. } else {
  163. qDebug() << "AppModel::loginResult >>" << rst;
  164. }
  165. }
  166. void AppModel::onNotifyDel() { d->car.clear(); }
  167. void AppModel::onCarAppend(const UserCamera &info) {
  168. CarData users;
  169. users.setUid(QString::number(info.uid));
  170. users.setType(QString::number(info.type));
  171. users.setName(QString::fromStdString(info.name));
  172. users.setState(QString::number(info.state));
  173. d->car.append(&users);
  174. emit carChanged();
  175. }
  176. void AppModel::onRadarUpadte(int32_t r0, int32_t r1, int32_t r2, int32_t r3,
  177. int32_t r4, int32_t r5) {
  178. if (r0 > 0)
  179. this->setRadar1(r0);
  180. if (r1 > 0)
  181. this->setRadar2(r1);
  182. if (r2 > 0)
  183. this->setRadar3(r2);
  184. if (r3 > 0)
  185. this->setRadar4(r3);
  186. if (r4 > 0)
  187. this->setRadar5(r4);
  188. if (r5 > 0)
  189. this->setRadar6(r5);
  190. int32_t distance = 2000;
  191. if ((r0 > 0 && r0 < distance) || (r1 > 0 && r1 < distance) ||
  192. (r2 > 0 && r2 < distance) || (r3 > 0 && r3 < distance) ||
  193. (r4 > 0 && r4 < distance) || (r5 > 0 && r5 < distance)) {
  194. emit playAlertSound();
  195. }
  196. }
  197. void AppModel::onPing(int32_t value) { this->setPing(value); }
  198. void AppModel::onImuUpdate(int32_t x, int32_t y) {
  199. this->setImux(x);
  200. this->setImuy(y);
  201. }
  202. void AppModel::logout() {
  203. d->car.clear();
  204. m_ready = false;
  205. }
  206. void AppModel::loadUser() {
  207. std::string usr;
  208. std::string pwd;
  209. QString iniFilePath = QString(QCoreApplication::applicationDirPath()) + "/user.ini";
  210. QSettings ini(iniFilePath, QSettings::IniFormat);
  211. if(!QFile::exists(iniFilePath)) {
  212. ini.setValue("user/Name", "");
  213. ini.setValue("user/Password", "");
  214. } else {
  215. QString usr = ini.value("user/Name").toString();
  216. this->setUsername(usr);
  217. QString pwd = ini.value("user/Password").toString();
  218. this->setPassword(pwd);
  219. }
  220. }