Example #1
0
//----------------------------------------------------------------------------
//       int HypGraph::setDrawBackTo(string URL, int on, int descend)      
//............................................................................
//  
//----------------------------------------------------------------------------
int HypGraph::setDrawBackTo(string URL, int on, int descend)
{
  int i;
  if ((i = findUrl(URL)) >= 0) {
    nodes[i]->setEnabledIncoming(on, descend);
  } else if (URL == "HV_TOPNODE") {
    nodes[0]->setEnabledIncoming(on, descend);
  } else {
    return 0;
  }
  return 1;
}
Example #2
0
//----------------------------------------------------------------------------
//            HypTransform HypGraph::getNodePosition(string URL)           
//............................................................................
//  
//----------------------------------------------------------------------------
HypTransform HypGraph::getNodePosition(string URL)
{
  int i;
  HypTransform T;
  if ((i = findUrl(URL)) >= 0) {
    HypNode *n = nodes[i];
    T = nodes[i]->getC();
  } else {
    T.identity();
  }
  return T;
}
Example #3
0
//----------------------------------------------------------------------------
//    int HypGraph::setNodeGroup(string URL, int groupkey, string group)   
//............................................................................
//  
//----------------------------------------------------------------------------
int HypGraph::setNodeGroup(string URL, int groupkey, string group)
{
  int i;
  if ((i = findUrl(URL)) >= 0) {
    nodes[i]->setGroup(groupkey, group.c_str());
    if (groupkey == hd->groupKey) {
      markEnable(nodes[i]);
    }
    return 1;
  } else {
    return 0;
  }
}
Example #4
0
//----------------------------------------------------------------------------
//      StringArray HypGraph::enumerateSubtree(string URL, int levels)     
//............................................................................
//  
//----------------------------------------------------------------------------
StringArray HypGraph::enumerateSubtree(string URL, int levels)
{
  StringArray strs;
  int i;
  if ((i = findUrl(URL)) >= 0) {
    if (nodes[i]->getEnabled()) {
      HypNode *n = nodes[i];
      int foo = levels;
      StringArray strs2 = n->enumerateSubtree(foo);
      strs.insert(strs.end(),strs2.begin(),strs2.end());
    }
  }
  return strs;
}
Example #5
0
bool LLUrlRegistry::hasUrl(const LLWString &text)
{
	LLUrlMatch match;
	return findUrl(text, match);
}
Example #6
0
//----------------------------------------------------------------------------
//                void HypGraph::loadSpanGraph(istream & flat)                
//............................................................................
//  
//----------------------------------------------------------------------------
void HypGraph::loadSpanGraph(istream & flat)
{
  unsigned       linepos = 0;
  HypNode       *current = NULL;
  HypNode       *descend = NULL;
  string         id, type, mainid, line;
  string         token;
  StringArray    groups;
  int            level; 
  static string  whitespace = " \t\n";
  int            currlev = -999;
  int            linecount = 0;
  int            groupkey = 0;
  int            i,j;
  int            pri = 0;
  HypNodeArray   parents;

  while (! flat.eof()) {

    // parse line
    linecount++;
    getline(flat, line);
    if (line.length() <= 1)
      continue;

    // skip leading whitespace
    linepos = 0;
    linepos = line.find_first_not_of(" \t\n",linepos);
    
    // get the level
    token = line.substr(linepos,line.find(' ',linepos) - linepos);
    linepos += token.length() + 1;
    linepos = line.find_first_not_of(" \t\n",linepos);
    level = atoi(token.c_str());

    // get the id
    if (line.find(' ',linepos) != line.npos)
      id = line.substr(linepos,line.find(' ',linepos) - linepos);
    else
      id = line.substr(linepos,line.length() - linepos);
    
    linepos += id.length() + 1;
    linepos = line.find_first_not_of(" \t\n",linepos);
    
    if (level < -98) {
      if (id == "position") {
	for ( i = 0; i < 4; i++) {
	  for ( j = 0; j < 4; j++) {
            token = line.substr(linepos,line.find(' ',linepos) - linepos);
            initPos.T[i][j] = atof(token.c_str());
            linepos += token.length() + 1;
	    linepos = line.find_first_not_of(" \t\n",linepos);
          }
        }
	continue; 
      } else {
	continue;  // hack: -99 for level means comment. 
      }
    }

    // get the priority
    if (hd->spanPolicy & HV_SPANNUM) {
      token = line.substr(linepos,line.find(' ',linepos) - linepos);
      pri = atoi(token.c_str());
      linepos += token.length() + 1;
      linepos = line.find_first_not_of(" \t\n",linepos);
    }
    
    // enable file value is thrown away since it's obsolete 
    token = line.substr(linepos,line.find(' ',linepos) - linepos);
    linepos += token.length() + 1;
    linepos = line.find_first_not_of(" \t\n",linepos);

    // get the group(s)
    groups.erase(groups.begin(),groups.end());
    groupkey = 0;
    while (linepos < line.length() -1) {
      string g = line.substr(linepos,line.find(' ',linepos) - linepos);
      linepos += g.length() + 1;
      linepos = line.find_first_not_of(" \t\n",linepos);
      groups.push_back(g);
      groupkey++;
    }
    
    if (level > currlev+1) {
      if (currlev < -98) {
        currlev = level;
      }
      else {
        if (current) {
          parents.insert(parents.begin(),current);
          current = descend; // down
          currlev++;
        }
      }
    }
    else {
      if (level <= currlev) {
        while (currlev >= level) {
          if (parents.size() > 0) {
            current = parents[0];
            parents.erase(parents.begin());
          }
          currlev--;
        }
      }  // else stay at the same level
    }

    HypNode *newnode = doAddNode(current, id, level, pri);

    if (newnode) {
      for ( i = 0; i < groupkey && i < groups.size(); i++) {
	newnode->setGroup(i, groups[i]);
      }
      descend = newnode;
      if (!current) {
	current = newnode;
	hd->centerindex = 0;
      }
    }
    else {
      int exists = findUrl(id);
      HypNode *oldnode = nodes[exists];
      descend = oldnode;
    }
  }

  int linkparentindex, linkchildindex;
  for (i = 0; i < links.size(); i++) {
    //    fprintf(stderr, "link %s\n", (char*)links[i]->getId().c_str());
    HypLink *link = links[i];
    string par = link->getParentId();
    linkparentindex = findUrl(par);
    if (linkparentindex >= 0) 
      link->setParent(nodes[linkparentindex]);
    string child = link->getChildId();
    linkchildindex = findUrl(child);
    link->setChild(nodes[linkchildindex]);
  }     

  int disabled = 0;
  for (i = 0; !disabled && i < HV_MAXGROUPS; i++) 
    if (disabledGroup[i].size() > 0) disabled = 1;
  for (i = 0; disabled && i < nodes.size(); i++)
    markEnable(nodes[i]);

  return;
}
Example #7
0
//----------------------------------------------------------------------------
//                 int HypGraph::getNodeEnabled(string URL)                
//............................................................................
//  
//----------------------------------------------------------------------------
int HypGraph::getNodeEnabled(string URL)
{
  int i;
  if ((i = findUrl(URL)) >= 0) return nodes[i]->getEnabled();
  return 0; 
}
Example #8
0
//----------------------------------------------------------------------------
//        HypNode *HypGraph::doAddNode(HypNode *current, string id,        
//                                     int level, int pri)                 
//............................................................................
//  
//----------------------------------------------------------------------------
HypNode *HypGraph::doAddNode(HypNode *current, string id,
                             int level, int pri)
{
  string linkid;
  int swap = 0;
  int exists = findUrl(id);
  if (current && exists >= 0) {
    // possibly choose new main parent
    HypNode *oldnode = nodes[exists];
    if (!maybeAddChild(current, id))
      return (HypNode *)0;
    HypNode *oldpar = oldnode->getParent();
    swap = maybeSwap(current, oldpar, id, pri);
    if (1 == swap) {
      /* switch: found better main parent */

      linkid = current->getId() + "|" + id; // parent|child
      HypLink *oldlink = oldnode->getParentLink();
      //      fprintf(stderr, "swap in %s, swap out %s\n", (char*)linkid.c_str(), (char*)oldlink->getId().c_str());
      oldpar->addOutgoing(oldlink);
      oldpar->deleteChildLink(oldlink);
      oldpar->deleteChild(oldnode);
      HypLink *newlink = new HypLink(current->getId(), id);
      newLink(newlink, linkid);
      newlink->setParent(current);
      newlink->setChild(oldnode);
      newlink->setEnabled(1);
      newlink->setDesired(1);
      oldlink->setEnabled(0);
      oldlink->setDesired(0);
      newlink->setColorFrom(hd->colorLinkFrom[0], hd->colorLinkFrom[1], 
			    hd->colorLinkFrom[2], hd->colorLinkFrom[3]);
      newlink->setColorTo(hd->colorLinkTo[0], hd->colorLinkTo[1], 
			  hd->colorLinkTo[2], hd->colorLinkTo[3]);
      current->addChildLink(newlink);
      current->addChild(oldnode);
      oldnode->addParentLink(newlink);
      oldnode->addParent(current);
      oldnode->setLevel(current->getLevel()+1);
      oldnode->addIncoming(oldlink);
    } else {
      // outgoing nontree link
      if (!maybeAddOutgoing(current, id))
        return (HypNode *)0;
      /* mainparent and child nodes might not exist yet, add later */
      linkid = current->getId() + "|" + id; // parent|child
      HypLink *newlink = new HypLink(current->getId(), id);
      newLink(newlink, linkid);
      newlink->setParent(current);
      newlink->setChild(oldnode);
      newlink->setEnabled(0);
      newlink->setColorFrom(hd->colorLinkFrom[0], hd->colorLinkFrom[1], 
			    hd->colorLinkFrom[2], hd->colorLinkFrom[3]);
      newlink->setColorTo(hd->colorLinkTo[0], hd->colorLinkTo[1], 
			  hd->colorLinkTo[2], hd->colorLinkTo[3]);
      //	newlink->setEnabled(1);
      current->addOutgoing(newlink);
      oldnode->addIncoming(newlink);
    }

    return (HypNode *)0;

  } else {
    // child node
    //      int thelev = current ? current->getLevel()+1 : level;
    //      HypNode *newnode = new HypNode(hd, current, thelev);
    HypNode *newnode = new HypNode(hd, current, level);
    newNode(newnode, id);
    newnode->setEnabled(1);
    if (current) {
      linkid = current->getId() + "|" + id; // parent|child
      HypLink *newlink = new HypLink(current->getId(), id);
      newLink(newlink, linkid);
      newlink->setParent(current);
      newlink->setChild(newnode);
      newlink->setEnabled(1);
      newlink->setDesired(1);
      newlink->setColorFrom(hd->colorLinkFrom[0], hd->colorLinkFrom[1], 
			    hd->colorLinkFrom[2], hd->colorLinkFrom[3]);
      newlink->setColorTo(hd->colorLinkTo[0], hd->colorLinkTo[1], 
			  hd->colorLinkTo[2], hd->colorLinkTo[3]);
      current->addChildLink(newlink);
      current->addChild(newnode);
      newnode->addParentLink(newlink);
      newnode->addParent(current);
    }

    return newnode;

  }
}