Пример #1
0
void SCnEditorScene::selectField(SCnFieldItem *field)
{
    if (field)
    {
        unselectItems();
        field->setSelected(true);
        views().first()->centerOn(field);
    }
}
Пример #2
0
void SCnEditorScene::selectPrevField(SCnFieldItem *field)
{
    SCnFieldItem *prev = prevField(field);
    if (prev != 0)
    {
        unselectItems();
        prev->setSelected(true);
        views().first()->centerOn(prev);
    }
}
Пример #3
0
void SCnEditorScene::selectNextField(SCnFieldItem *field)
{
    SCnFieldItem *next = nextField(field);
    if (next != 0)
    {
        unselectItems();
        next->setSelected(true);
        views().first()->centerOn(next);
    }
}
void ossimQtVceCanvasWidget::addAllObjects(const ossimKeywordlist& kwl,
                                           const QPoint& location,
                                           const char* prefix)
{
   unselectItems();
   QPoint locationPoint = location;
   
   ossimString copyPrefix = prefix;
   std::vector<QCanvasItem*> newItemList;
   
   ossimString regExpression =  ossimString("^(") + copyPrefix + "object[0-9]+.)";
   vector<ossimString> keys =
      kwl.getSubstringKeyList( regExpression );
   long numberOfObjets = keys.size();//kwl.getNumberOfSubstringKeys(regExpression);

   int offset = (copyPrefix+"object").size();
   int idx = 0;
   std::vector<int> theNumberList(numberOfObjets);

   for(idx = 0; idx < (int)theNumberList.size();++idx)
   {
      ossimString numberStr(keys[idx].begin() + offset,
                            keys[idx].end());
      theNumberList[idx] = numberStr.toInt();
   }
   
   std::sort(theNumberList.begin(), theNumberList.end());
   for(idx=0;idx < (int)theNumberList.size();++idx)
   {
      ossimString newPrefix = copyPrefix;
      newPrefix += ossimString("object");
      newPrefix += ossimString::toString(theNumberList[idx]);
      newPrefix += ossimString(".");
      ossimString objType = kwl.find(newPrefix,
                                     ossimKeywordNames::TYPE_KW);
      QCanvasItem* item = NULL;
      if(objType == "ossimQtImageWindow")
      {
         item = new ossimQtVceImageDisplayObject(canvas(),
						 this);
         item->setX(locationPoint.x());
         item->setY(locationPoint.y());
         item->show();
         emit itemAdded(item);
      }
      else if(objType == "ossimImageHandler")
      {
         QStringList filenames = QFileDialog::getOpenFileNames("Images (*.adf *.ccf *.dem *.DEM *.dt1 *.dt0 *.dt2 *.hdr *.hgt *.jpg *.jpeg *.img *.doqq *.fst *.FST *.nitf *.NTF *.ntf *.ras *.sid *.tif *.tiff *.toc *.TOC);;Vectors(*.shp dht *.tab);;All Files(*)",
                                                               QString::null,
                                                               this,
                                                               "open file dialog",
                                                               "Choose a file to open");
         QStringList::Iterator it;
         for(it = filenames.begin(); it != filenames.end(); ++it)
         {
            std::vector<QCanvasItem*> newItems;
            openImageFile((*it).ascii(),
                          locationPoint,
                          newItems);
            if(newItems.size())
            {
               
//                QRect bounds = newItems[newItems.size()-1]->boundingRect();
//                locationPoint.setY(locationPoint.y() + bounds.height() + 10);

               newItemList.insert(newItemList.end(),
                                  newItems.begin(),
                                  newItems.end());
            }
         }
         // we will make sure that we don't adjust the location point any further
         //
         item = NULL;
      }
      else
      {
         ossimObject* object = ossimObjectFactoryRegistry::instance()->createObject(objType);
         
         if(object)
         {
            item = addObject(object, locationPoint);
         }
      }
      if(item)
      {
         newItemList.push_back(item);
         QRect bounds = item->boundingRect();
         
         locationPoint.setY(locationPoint.y() + bounds.height() + 10);
         emit itemAdded(item);
      }
   }
   if(newItemList.size() > 0)
   {
      for(idx = 0; idx < (int)newItemList.size(); ++idx)
      {
         newItemList[idx]->setSelected(true);
         theSelectedItems.push_back(newItemList[idx]);
         emit itemSelected(newItemList[idx]);
      }
   }
}
void ossimQtVceCanvasWidget::dropEvent(QDropEvent* event)
{
   std::vector<ossimObject*> objects;
   
   QString text;
   if ( QTextDrag::decode(event, text) )
   {
      QPoint position(event->pos().x() + contentsX(),
                      event->pos().y() + contentsY());
      ossimKeywordlist kwl;
      stringstream in(text.ascii());
      bool kwlParseFlag = kwl.parseStream(in);
      const char* type = NULL;
      if(kwlParseFlag)
      {
         type = kwl.find(ossimKeywordNames::TYPE_KW);
      }
      if(ossimString(type) == "ossimDataManagerObjectList")
      {
         addAllDataManagerObjects(kwl, position);
      }
      else if(ossimString(type)=="ossimQtVceComponentView")
      {
         addAllObjects(kwl, position);
      }
      else
      {
         unselectItems();
         QString filename;
         const char* s = text.ascii();
         const char* sEnd = text.ascii()+text.length();
         int idx = 0;
         while(s < sEnd)
         {
            filename = "";
            while((*s!='\0')&&
                  (*s != '\n')&&
                  (s < sEnd)&&
                  (*s != '\r'))
            {
               filename += *s;
               ++s;
            }
            ++s;
            filename += '\0';
            if(filename != "")
            {
               filename = filename.remove("file:");
               std::vector<QCanvasItem*> newItems;
               openImageFile(filename.ascii(),
                             position,
                             newItems);
               for(idx = 0; idx < (int)newItems.size(); ++idx)
               {
                  newItems[idx]->setSelected(true);
                  theSelectedItems.push_back(newItems[idx]);
                  emit itemSelected(newItems[idx]);
               }
            }
         }
      }
   }
}
void ossimQtVceCanvasWidget::selectAll()
{
   unselectItems();
   QCanvasItemList canvasItemList = canvas()->allItems();
   selectItems(canvasItemList);
}
void ossimQtVceCanvasWidget::contentsMousePressEvent(QMouseEvent * e )
{
   theMouseButtonState = e->button();
   
   switch(e->button())
   {
   case Qt::LeftButton:
   {
      theLeftDownFlag = true;
      deleteSelectionRect();
      theMouseStartPt = QPoint(e->x(),
                               e->y());
      theSelectionRect = new ossimQtVceShapeRect(QRect(e->x(),
                                                       e->y(),
                                                       1,
                                                       1),
                                                 canvas());
      // make sure that the selection rect is in front of everything
      //
      theSelectionRect->setZ(2);
      
      if(!intersectsSelection())
      {
         
         unselectItems();

         // initialize mode
         //
         QCanvasItemList collisionList    = theSelectionRect->collisions(true);
         ossimQtVceConnectableObject* obj = getObjectWhereConnectableSlotIntersectsPoint(collisionList,
                                                                                         theMouseStartPt);
         if(obj)
         {
            QRect rect;
            if(obj->getConnectionSlotBoundingRect(rect,
                                                  theMouseStartPt))
            {
               delete theSelectionRect;
               theSelectionRect = NULL;
               theLineObject = new QCanvasLine(canvas());
               QPoint startPt(rect.x() + rect.width()/2,
                              rect.y() + rect.height()/2);
               theLineObject->setPoints(startPt.x(),
                                        startPt.y(),
                                        theMouseStartPt.x(),
                                        theMouseStartPt.y());
               theLineObject->setPen(QPen(QColor(0,0,0), 2, Qt::DotLine));
               theLineObject->show();
            }
         }

         if(theSelectionRect)
         {
            // now set the pen style to dashed
            //
            theSelectionRect->hide();
            theSelectionRect->setPen(QPen(QColor(0,0,0), 2, Qt::DotLine));
            theSelectionRect->show();
         }
      }
      else
      {
         deleteSelectionRect();
      }
      
      break;
   }
   case Qt::RightButton:
     {
       thePopupMenu->hide();
       QPoint pt = mapToGlobal(pos());
       thePopupMenu->popup(e->globalPos());
     }
   default:
     {
       break;
     }
   }
   
   emit canvasWidgetMousePressEvent(e);
}