Пример #1
0
LibraryUI::LibraryUI( const QString & name , SApplication *parent )
    : SPage( name , parent )
{
    this->setAcceptDrops( true );

    QDir conf_dir( Silicon::config() + "/Library" );
        conf_dir.mkpath( conf_dir.path() );

    QString path = conf_dir.path() + "/library";
    library = new Librarydb( path );

    item_list = new ItemList();
        item_list->setLibrary( library );
        item_list->setIconSize( QSize(32,32) );
        item_list->setContextMenuPolicy( Qt::CustomContextMenu );

    tags_list = new TagsList();
        tags_list->setLibrary( library );
        //tags_list->setFixedWidth( 235 );

    char_list = new CharList();
        char_list->setFixedWidth( 43 );
        char_list->setLibrary( library );
        char_list->setFilterList( tags_list );

    format_list = new FormatList();
        format_list->setFixedWidth( 73 );
        format_list->setFilterList( char_list );


    filters_box = new QGroupBox( tr("Filters") );
        filters_box->setFixedWidth( 313 );

    filters_layout = new QHBoxLayout( filters_box );
        filters_layout->addWidget( format_list );
        filters_layout->addWidget( char_list );
        filters_layout->addWidget( tags_list );

    list_widget_box = new QGroupBox( "Result List" );
    list_widget_layout = new QVBoxLayout( list_widget_box );
        list_widget_layout->addWidget( item_list );

    item_preview = new ItemPreview();
    toolbar = new QToolBar();
        toolbar->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
        toolbar->setStyleSheet( "QToolBar{border-style:solid}" );

    lists_layout = new QHBoxLayout();
        lists_layout->addWidget( filters_box );
        lists_layout->addWidget( list_widget_box );

    base_layout = new QVBoxLayout( this );
        //base_layout->addWidget( toolbar );
        base_layout->addLayout( lists_layout );
        base_layout->addWidget( item_preview );


    mounter = SiDiTools::createImageMounter( this );
    isoinfo = new SIsoInfo( this );

    QObject::connect( isoinfo , SIGNAL(copyrightUpdated(QString)) , item_preview , SLOT(setCopyright(QString)) );
    QObject::connect( isoinfo , SIGNAL(volumeUpdated(QString)) , item_preview , SLOT(setVolumeID(QString)) );
    QObject::connect( isoinfo , SIGNAL(applicationIdReaded(QString)) , item_preview , SLOT(setApplicationID(QString)) );
    QObject::connect( isoinfo , SIGNAL(systemUpdated(QString)) , item_preview , SLOT(setSystemID(QString)) );
    QObject::connect( isoinfo , SIGNAL(publisherUpdated(QString)) , item_preview , SLOT(setPublisher(QString)) );
    QObject::connect( isoinfo , SIGNAL(formatUpdated(QString)) , item_preview , SLOT(setFormat(QString)) );

    QObject::connect( tags_list , SIGNAL(rowChenged(QStringList)) , item_list , SLOT(setItems(QStringList)) );
    QObject::connect( item_list , SIGNAL(currentRowChanged(int)) , this , SLOT(itemChanged(int)) );
    QObject::connect( item_list , SIGNAL(itemDoubleClicked(QListWidgetItem*)) , this , SLOT(mountCurrentItem()) );

    setupActions();
    reload();

    setToolBar( toolbar );
    setMinimumSize( QSize(720,350) );
}
//------------------------------------------------------------------------------
// entityState2Nib() -- (Input support)
//  Transfers data from the incoming entity attributes to the basic
//  NIB class variables.
//------------------------------------------------------------------------------
void Nib::entityState2Nib()
{    
   if (isAttributeUpdateRequired(NetIO::ENTITY_IDENTIFIER_AI)) {
      setPlayerID(baseEntity->entityIdentifier.entityNumber);
      setSiteID(baseEntity->entityIdentifier.federateIdentifier.siteID);
      setApplicationID(baseEntity->entityIdentifier.federateIdentifier.applicationID);
      setAttributeUpdateRequiredFlag(NetIO::ENTITY_IDENTIFIER_AI, false);
      haveEntityIdFlg = true;
   }

   if (isAttributeUpdateRequired(NetIO::ENTITY_TYPE_AI)) {
      setEntityType(
            baseEntity->entityType.entityKind,
            baseEntity->entityType.domain,
            baseEntity->entityType.countryCode,
            baseEntity->entityType.category,
            baseEntity->entityType.subcategory,
            baseEntity->entityType.specific,
            baseEntity->entityType.extra
         );
      setAttributeUpdateRequiredFlag(NetIO::ENTITY_TYPE_AI, false);
      haveEntityTypeFlg = true;
   }

   if (isAttributeUpdateRequired(NetIO::SPATIAL_AI)) {

      // NIB's base entity structures
      //SpatialStruct* spatial = &(baseEntity->spatial);
      SpatialRVStruct* spatialRvw = &(baseEntity->spatialRvw);

      // Set the freeze flag
      freeze(spatialRvw->isFrozen != 0);

      // Get the geocentric position, velocity and acceleration
      osg::Vec3d geocPos;
      geocPos[base::Nav::IX] = spatialRvw->worldLocation.x;
      geocPos[base::Nav::IY] = spatialRvw->worldLocation.y;
      geocPos[base::Nav::IZ] = spatialRvw->worldLocation.z;

      osg::Vec3d geocVel;
      geocVel[base::Nav::IX] = spatialRvw->velocityVector.xVelocity;
      geocVel[base::Nav::IY] = spatialRvw->velocityVector.yVelocity;
      geocVel[base::Nav::IZ] = spatialRvw->velocityVector.zVelocity;

      osg::Vec3d geocAcc;
      geocAcc[base::Nav::IX] = spatialRvw->accelerationVector.xAcceleration;
      geocAcc[base::Nav::IY] = spatialRvw->accelerationVector.yAcceleration;
      geocAcc[base::Nav::IZ] = spatialRvw->accelerationVector.zAcceleration;

      // Get orientation orientation and rates
      osg::Vec3d geocAngles;
      geocAngles[base::Nav::IPHI] = spatialRvw->orientation.phi;
      geocAngles[base::Nav::ITHETA] = spatialRvw->orientation.theta;
      geocAngles[base::Nav::IPSI] = spatialRvw->orientation.psi; 

      osg::Vec3d arates(0.0, 0.0, 0.0);

      // (re)initialize the dead reckoning function
      double diffTime(0.0);
      resetDeadReckoning(
         RVW_DRM,
         geocPos,
         geocVel,
         geocAcc,
         geocAngles,
         arates,
         diffTime);

      haveWorldLocationFlg = true;
      haveOrientationFlg = true;

      setAttributeUpdateRequiredFlag(NetIO::SPATIAL_AI, false);
   }
    
   // PhysicalEntity pointer
   PhysicalEntity* physicalEntity = dynamic_cast<PhysicalEntity*>(baseEntity);
   if (physicalEntity != nullptr) {

      if (isAttributeUpdateRequired(NetIO::FORCE_IDENTIFIER_AI)) {
         // Side: When mapping Force ID to Player Side ...
         if (physicalEntity->forceIdentifier == FRIENDLY) {
            // Friendly's are blue, ...
            setSide(simulation::Player::BLUE);
         }
         else if (physicalEntity->forceIdentifier == OPPOSING) {
            // opposing side is red, ...
            setSide(simulation::Player::RED);
         }
         else if (physicalEntity->forceIdentifier == NEUTRAL) {
            // Neutrals are white, ...
            setSide(simulation::Player::WHITE);
         }
         else  {
            // and everyone else is gray.
            setSide(simulation::Player::GRAY);
         }
         setAttributeUpdateRequiredFlag(NetIO::FORCE_IDENTIFIER_AI, false);
      }

   }

   setMode(simulation::Player::ACTIVE);    
   setTimeExec( (double) getNetIO()->getCurrentTime() );
}