bool BuildingModel::setData(const QModelIndex &index, const QVariant &value, int role) { qDebug() << "Setting data"; if (!index.isValid() || index.row() < 0 || index.row() >= rowCount()) { qDebug() << "Index not found"; return false; } auto room = _rooms.at(index.row()); switch (role) { case NameRole: room->setName(value.toString()); break; case LightStateRole: qDebug() << "Setting light state " << value; room->setLightState(value==1 ? LightState::On : LightState::Off); break; case RoomStateRole: qDebug() << "Setting room state" << value; room->setRoomState(value==0 ? RoomState::Ok : RoomState::Error); break; default: return false; } emit dataChanged(index, index); return true; }
/** *TASK:based on the gesture, create the command and control the lamps *stateType:ON_OFF_TYPE, BRI_UP_TYPE, BRI_DOWN_TYPE, HUE_UP_TYPE, HUE_DOWN_TYPE *target:the number of lamp, start from 0 */ bool createCommand(int stateType, int target) { cJSON * pJsonRoot = NULL; pJsonRoot = cJSON_CreateObject(); if(NULL == pJsonRoot) { //error happend here printf("error when create json"); return false; } switch(stateType) { case ON_TYPE: { onValue[target - 1] = (onValue[target - 1] == true ? false : true); cJSON_AddBoolToObject(pJsonRoot, ON_STRING, onValue[target - 1]); break; } case BRI_UP_TYPE: { int value = (briValue[target - 1] + BRI_VALUE_UP) > 254 ? 254 : (briValue[target - 1] + BRI_VALUE_UP < 0 ? 0 : briValue[target - 1] + BRI_VALUE_UP); briValue[target - 1] = value; cJSON_AddNumberToObject(pJsonRoot, BRI_STRING, value); break; } case BRI_DOWN_TYPE: { int value = (briValue[target - 1] + BRI_VALUE_DOWN) > 254 ? 254 : (briValue[target - 1] + BRI_VALUE_DOWN < 0 ? 0 : briValue[target - 1] + BRI_VALUE_DOWN); briValue[target - 1] = value; cJSON_AddNumberToObject(pJsonRoot, BRI_STRING, value); break; } case HUE_UP_TYPE: { int value = (hueValue[target - 1] + HUE_VALUE_UP); value = value < 0 ? 65535 + value : value % 65535; hueValue[target - 1] = value; cJSON_AddNumberToObject(pJsonRoot, HUE_STRING, value); break; } case HUE_DOWN_TYPE: { int value = (hueValue[target - 1] + HUE_VALUE_DOWN); value = value < 0 ? 65535 + value : value % 65535; hueValue[target - 1] = value; cJSON_AddNumberToObject(pJsonRoot, HUE_STRING, value); break; } } printf("%s",cJSON_Print(pJsonRoot)); setLightState(target, cJSON_Print(pJsonRoot)); cJSON_Delete(pJsonRoot); }