コード例 #1
0
ファイル: GfxBlockItem.cpp プロジェクト: wagenadl/eln
Item *GfxBlockItem::newImage(QImage img, QUrl src, QPointF pos) {
  ASSERT(data()->book());
  ASSERT(data()->resManager());
  double maxW = availableWidth();
  double maxH = maxW;
  double scale = 1;
  if (scale*img.width()>maxW)
    scale = maxW/img.width();
  if (scale*img.height()>maxH)
    scale = maxH/img.height();
  if (allChildren().isEmpty())
    pos = QPointF(0, 0);
  else
    pos -= QPointF(img.width(),img.height())*(scale/2);
  pos = constrainPointToRect(pos, boundingRect());
  Resource *res = data()->resManager()->importImage(img, src);
  QString resName = res->tag();
  GfxImageData *gid = new GfxImageData(resName, img, data());
  gid->setScale(scale);
  gid->setPos(pos);
  GfxImageItem *gii = new GfxImageItem(gid, this);
  gii->makeWritable();
  resetPosition();
  sizeToFit();
  return gii;
}
コード例 #2
0
ファイル: Item.cpp プロジェクト: wagenadl/eln
QRectF Item::netBounds() const {
  QRectF b = boundingRect();
  foreach (Item *i, allChildren()) 
    if (!i->excludeFromNet())
      b |= i->mapRectToParent(i->netBounds());
  return b;
}
コード例 #3
0
ファイル: GfxBlockItem.cpp プロジェクト: wagenadl/eln
QRectF GfxBlockItem::generousChildrenBounds() const {
  QRectF r;
  foreach (Item *i, allChildren())
    if (!i->excludeFromNet())
      r |= i->mapRectToParent(i->netBounds());
  if (r.isEmpty())
    return r;
  r.setTop(r.top()-style().real("gfx-block-vmargins"));
  r.setBottom(r.bottom()+style().real("gfx-block-vmargins"));
  return r;
}
コード例 #4
0
/**
 * Recursive function to compare all descendants and cram matches into ret.
 * Returns number of matches.
 */
int allChildren( Id start, const string& insideBrace, unsigned int index,
	vector< Id >& ret )
{
	unsigned int nret = ret.size();
	vector< Id > kids;
	Neutral::getChildren( start.eref(), kids );
	vector< Id >::iterator i;
	for ( i = kids.begin(); i != kids.end(); i++ ) {
		if ( matchName( start, *i, "#", insideBrace, index ) )
			ret.push_back( *i );
		allChildren( *i, insideBrace, index, ret );
	}
	return ret.size() - nret;
}
コード例 #5
0
void BtTreeModel::deleteSelected(QModelIndexList victims)
{
   QModelIndexList toBeDeleted = victims; // trust me

   while ( ! toBeDeleted.isEmpty() ) 
   {
      QModelIndex ndx = toBeDeleted.takeFirst();
      switch ( type(ndx) ) 
      {
         case BtTreeItem::EQUIPMENT:
            Database::instance().remove( equipment(ndx) );
            break;
         case BtTreeItem::FERMENTABLE:
            Database::instance().remove( fermentable(ndx) );
            break;
         case BtTreeItem::HOP:
            Database::instance().remove( hop(ndx) );
            break;
         case BtTreeItem::MISC:
            Database::instance().remove( misc(ndx) );
            break;
         case BtTreeItem::RECIPE:
            Database::instance().remove( recipe(ndx) );
            break;
         case BtTreeItem::STYLE:
            Database::instance().remove( style(ndx) );
            break;
         case BtTreeItem::YEAST:
            Database::instance().remove( yeast(ndx) );
            break;
         case BtTreeItem::BREWNOTE:
            Database::instance().remove( brewNote(ndx) );
            break;
         case BtTreeItem::FOLDER:
            // This one is weird.
            toBeDeleted += allChildren(ndx);
            removeFolder(ndx);
            break;
         default:
            Brewtarget::logW(QString("deleteSelected:: unknown type %1").arg(type(ndx)));
      }
   }
}
コード例 #6
0
/**
 * 	singleLevelWildcard parses a single level of the path and returns all
 * 	ids that match it. If there is a suitable doublehash, it will recurse
 * 	into child elements.
 * 	Returns # of ids found.
 */
int singleLevelWildcard( Id start, const string& path, vector< Id >& ret )
{
	if ( path.length() == 0 )
		return 0;
	unsigned int nret = ret.size();

/*
#ifdef USE_MPI
	// Won't work for global nodes
	if ( start.node() != Shell::myNode() ) {
		Eref shellE = Id::shellId().eref();
		Shell* sh = static_cast< Shell* >( shellE.data() );
		assert( shellE.e != 0 );
		vector< Nid > kids;
		unsigned int requestId = openOffNodeValueRequest< vector< Nid > >( 
			sh, &kids, 1 );
		unsigned int tgtNode = start.node();
		if ( tgtNode > Shell::myNode() )
			--tgtNode;
		sendTo3< Nid, string, unsigned int >( 
			shellE, singleLevelWildcardSlot, tgtNode,
			start, path, requestId );
		vector< Nid >* temp = 
			closeOffNodeValueRequest< vector< Nid > >( sh, requestId );
		assert( temp == &kids );
		for ( size_t i = 0; i < kids.size(); ++i ) {
			ret.push_back( kids[i] );
		}
		return ret.size() - nret;
	}
#endif
*/

	string beforeBrace;
	string insideBrace;
	unsigned int index;
	// This has to handle ghastly cases like foo[][FIELD(x)=12.3]
	findBraceContent( path, beforeBrace, insideBrace, index );
	if ( beforeBrace == "##" )
		return allChildren( start, insideBrace, index, ret ); // recursive.

	/*
	 * Future off-node stuff. But this really needs to be delegated
	 * to a separate routine, which does nothing but get the wildcard
	 * list off node. Also should bring back the names and indices.
	 *
	vector< Nid > kids;
	unsigned int requestId = openOffNodeValueRequest< vector< Nid > >( 
		sh, &kids, sh->numNodes() - 1 );
	send2< Nid, unsigned int >( shellE, requestLeSlot, start, requestId );
	vector< Nid >* temp = 
		closeOffNodeValueRequest< vector< Nid > >( sh, requestId );
	assert( temp == &kids );
		
	vector< Nid >::iterator i;
	for ( i = kids.begin(); i != kids.end(); i++ ) {
		if ( matchName( start, *i, beforeBrace, insideBrace, index ) )
			ret.push_back( *i );
	}
	return ret.size() - nret;
	*/

	vector< Id > kids; 
	Neutral::getChildren( start.eref(), kids );
// 	cout << start.eref().name() << endl;
// 	for (size_t i = 0; i < kids.size(); i++)
// 		cout << "* " << kids[i].eref().name() << endl;
	vector< Id >::iterator i;
	for ( i = kids.begin(); i != kids.end(); i++ ) {
		if ( matchName( start, *i, beforeBrace, insideBrace, index ) )
			ret.push_back( *i );
	}

	return ret.size() - nret;
}
コード例 #7
0
ファイル: Item.cpp プロジェクト: wagenadl/eln
void Item::makeWritable() {
  ASSERT(d);
  writable = true;
  foreach (Item *i, allChildren())
    i->makeWritable();
}