*/
virtual void refresh(bool updateAll = true) = 0;
+ /**
+ * @brief refresh method for updating properties of accessible node. This method is called when the node is created.
+ *
+ * @param text
+ * @param role
+ * @param type
+ * @param automationId
+ * @param description
+ * @param value
+ * @param minValue
+ * @param maxValue
+ * @param increment
+ * @param extents
+ */
+ virtual void refresh(const std::string &text, const std::string &role, const std::string &type,
+ const std::string &automationId, const std::string &description, const std::string &imgSrc,
+ double value, double minValue, double maxValue, double increment, const Rect<int> &extents) = 0;
+
/**
* @brief Gets available atspi action name.
*
}
}
+void AtspiAccessibleNode::refresh(const std::string &text, const std::string &role, const std::string &type,
+ const std::string &automationId, const std::string &description, const std::string &imgSrc,
+ double value, double minValue, double maxValue, double increment, const Rect<int> &extents)
+{
+ mText = text;
+ mRole = role;
+ mType = type;
+ mAutomationId = automationId;
+ mDescription = description;
+ mImgSrc = imgSrc;
+ mValue = value;
+ mMinValue = minValue;
+ mMaxValue = maxValue;
+ mIncrement = increment;
+ mScreenBoundingBox = extents;
+}
+
std::vector<std::string> AtspiAccessibleNode::getActions() const
{
std::vector<std::string> result{};
return ret;
}
+std::shared_ptr<Node> UiObject::parseTreeFromJson(Value &value)
+{
+ std::vector<std::shared_ptr<Node>> nodeChildren{};
+
+ if ((value.HasMember("appname") && value["appname"].IsString()) &&
+ (value.HasMember("path") && value["path"].IsString())) {
+ auto appName = value["appname"].GetString();
+ auto path = value["path"].GetString();
+ auto node = mNode->refAccessibleNode(appName, path);
+ if (node) {
+ auto text = value.HasMember("text") && value["text"].IsString()? value["text"].GetString() : "";
+ auto role = value.HasMember("role") && value["role"].IsString()? value["role"].GetString() : "";
+ auto type = value.HasMember("type") && value["type"].IsString()? value["type"].GetString() : "";
+ auto automationId = value.HasMember("automationId") && value["automationId"].IsString()? value["automationId"].GetString() : "";
+ auto description = value.HasMember("description") && value["description"].IsString()? value["description"].GetString() : "";
+ auto current = value.HasMember("value") && value["value"].HasMember("current") && value["value"]["current"].IsDouble()? value["value"]["current"].GetDouble() : 0.0f;
+ auto minValue = value.HasMember("value") && value["value"].HasMember("min") && value["value"]["min"].IsDouble()? value["value"]["min"].GetDouble() : 0.0f;
+ auto maxValue = value.HasMember("value") && value["value"].HasMember("max") && value["value"]["max"].IsDouble()? value["value"]["mimaxn"].GetDouble() : 0.0f;
+ auto increment = value.HasMember("value") && value["value"].HasMember("increment") && value["value"]["increment"].IsDouble()? value["value"]["increment"].GetDouble() : 0.0f;
+ auto x = value.HasMember("x") ? (value["x"].IsInt() ? value["x"].GetInt() : value["x"].GetDouble()) : 0;
+ auto y = value.HasMember("y") ? (value["y"].IsInt() ? value["y"].GetInt() : value["y"].GetDouble()) : 0;
+ auto w = value.HasMember("w") ? (value["w"].IsInt() ? value["w"].GetInt() : value["w"].GetDouble()) : 0;
+ auto h = value.HasMember("h") ? (value["h"].IsInt() ? value["h"].GetInt() : value["h"].GetDouble()) : 0;
+ auto extents = Rect<int>{x, y, x + w, y + h};
+ auto imgSrc = value.HasMember("attributes") && value["attributes"].HasMember("imgSrc") && value["attributes"]["imgSrc"].IsString() ? value["attributes"]["imgSrc"].GetString() : "";
+ node->refresh(text, role, type, automationId, description, imgSrc, current, minValue, maxValue, increment, extents);
+
+ if (value.HasMember("children") && value["children"].IsArray()) {
+ for (auto &child : value["children"].GetArray()) {
+ nodeChildren.push_back(parseTreeFromJson(child));
+ }
+ }
+
+ auto obj = std::make_shared<UiObject>(mDevice, mSelector, node);
+ return std::make_shared<Node>(obj, nodeChildren);
+ }
+ }
+ return std::make_shared<Node>(nullptr, nodeChildren);
+}
+
std::shared_ptr<Node> UiObject::getDescendant()
{
+ Document document;
std::vector<std::shared_ptr<Node>> nodeChildren{};
+ auto json = mNode->dumpTree();
+ document.Parse(json.c_str());
+ if (!document.HasParseError()) {
+ auto node = parseTreeFromJson(document);
+ if (node->mNode) return node;
+ }
+
auto children = getChildren();
for (auto &&child : children) {
+ child->refresh();
nodeChildren.push_back(child->getDescendant());
}
return std::make_shared<Node>(shared_from_this(), nodeChildren);
bool UiObject::getIncludeHidden() const {
return mNode->getIncludeHidden();
-}
\ No newline at end of file
+}