bool BrowserNode::load(QDir & dir) { char * buff = read_file(dir, filename, ro); if (buff == 0) return FALSE; char * p = buff; read_token(p); // format format = atoi(read_token(p)); setText(TREE_COL, read_string(p)); char * k = read_token(p); if (!strcmp(k, "revision")) { setText(REVISION_COL, read_token(p)); k = read_token(p); if (!strcmp(k, "modified_by")) { int n = atoi(read_token(p)); k = read_string(p); if ((n >= 2) || (n <= 127)) { modifier_name = k; modifier_id = n; setText(MODIFIEDBY_COL, modifier_name + " [id " + QString::number(n) + "]"); set_user_name(n, k); } k = read_token(p); } if (!strcmp(k, "owner")) { k = read_token(p); owner = atoi(k); if ((owner < 2) || (owner > 127)) setText(OWNER_COL, "<protected>"); else { setText(OWNER_COL, k); char * s = read_string(p); set_user_name(owner, s); setText(OWNERNAME_COL, s); } k = read_token(p); } else owner = -1; } else { owner = -1; setText(REVISION_COL, "0"); } offset = p - buff - strlen(k); QStringList sub_packages_id; while (k != 0) { if (! strcmp(k, "package_ref")) sub_packages_id.append(read_token(p)); else if (! strcmp(k, "simplerelation")) { // may contain a package_ref, bypass do k = read_token(p); while ((k != 0) && strcmp(k, "end")); } else if (! strcmp(k, "oid")) { (void) read_token(p); ro = TRUE; } k = read_token(p); } delete [] buff; QStringList::Iterator it; for (it = sub_packages_id.begin(); it != sub_packages_id.end(); ++it) if (! (new BrowserNode(this, *it))->load(dir)) return FALSE; return TRUE; }
// load package definition bool BrowserNode::load(QDir & dir) { BooL ro = FALSE; char * buff = read_file(dir, filename, ro); if (buff == 0) return FALSE; char * p = buff; read_token(p); // 'format' read_token(p); // format setText(TREE_COL, read_string(p)); char * k = read_token(p); if (!strcmp(k, "revision")) { setText(REVISION_COL, read_token(p)); k = read_token(p); if (!strcmp(k, "modified_by")) { int n = atoi(read_token(p)); k = read_string(p); if ((n >= 2) && (n <= 127)) { modifier_name = k; modifier_id = n; setText(MODIFIEDBY_COL, modifier_name + " [" + QString::number(n) + "]"); set_user_name(n, k); } k = read_token(p); } } else { setText(REVISION_COL, "0"); } QStringList sub_packages_id; while (k != 0) { if (! strcmp(k, "package_ref")) sub_packages_id.append(read_token(p)); else if (! strcmp(k, "simplerelation")) { // may contain package_ref do k = read_token(p); while ((k != 0) && strcmp(k, "end")); } else if (! strcmp(k, "class")) { QString fn = read_token(p) + QString(".bodies"); classes.append(fn); ro |= is_readonly(dir, fn); } else if (! strcmp(k, "activitydiagram") || ! strcmp(k, "classdiagram") || ! strcmp(k, "deploymentdiagram") || ! strcmp(k, "collaborationdiagram") || ! strcmp(k, "componentdiagram") || ! strcmp(k, "deploymentdiagram") || ! strcmp(k, "objectdiagram") || ! strcmp(k, "sequencediagram") || ! strcmp(k, "statediagram") || ! strcmp(k, "usecasediagram")) { QString fn = read_token(p) + QString(".diagram"); diagrams.append(fn); ro |= is_readonly(dir, fn); } k = read_token(p); } if (ro) view->set_readonly(); delete [] buff; QStringList::Iterator it; for (it = sub_packages_id.begin(); it != sub_packages_id.end(); ++it) { BrowserNode * bn = new BrowserNode(this, *it, view); if (! bn->load(dir)) return FALSE; } return TRUE; }