void RasterLayer::RemoveFrame(int index) { mLayerModel->RemoveFrame(index); update(); mTimeline->UpdateCanvas(); UpdateMaxFrames(); }
void RasterLayer::AddFrame(int frameIndex) { mLayerModel->AddFrame(frameIndex); update(); mTimeline->UpdateCanvas(); UpdateMaxFrames(); }
RasterLayer::RasterLayer(Timeline* timeline, RasterLayerModel* layerModel, QWidget *parent) : Layer(parent), mLayerModel(layerModel), mTimeline(timeline), mWidth(layerModel->GetWidth()), mHeight(layerModel->GetHeight()), mSelected(false), mOpacity(0xFF), mEnabled(true), mOnionEnabled(false), mState(EditorStateMove), mEditFrame(NULL), mEditFrameIndex(0), mEditFrameExposure(1), mMaxFrames(0) { setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); mPropertyWindow = new RasterPropertyWindow(timeline, this); UpdateMaxFrames(); mTimeline->UpdateCanvas(); }
int TrajinList::AddTrajin(std::string const& fname, Topology* topIn, ArgList const& argIn) { if (topIn == 0) { mprinterr("Error: No topology for input trajectory '%s'\n", fname.c_str()); return 1; } // CRDIDXARG finalCrdIndicesArg_.clear(); ArgList trajin_args = argIn; bool isRemdtraj = trajin_args.hasKey("remdtraj"); int err = 0; File::NameArray fnames = File::ExpandToFilenames( fname ); if (fnames.empty()) return 1; Trajin* traj = 0; for (File::NameArray::const_iterator fn = fnames.begin(); fn != fnames.end(); ++fn) { ArgList args = trajin_args; if (isRemdtraj) traj = new Trajin_Multi(); else traj = new Trajin_Single(); if (traj == 0) { mprinterr("Error: Memory allocation for input trajectory failed.\n"); return 1; } traj->SetDebug(debug_); if ( traj->SetupTrajRead(*fn, args, topIn) ) { mprinterr("Error: Could not set up input trajectory '%s'.\n", fn->full()); delete traj; err++; continue; } // Add to trajin list and update # of frames. trajin_.push_back( traj ); UpdateMaxFrames( traj->Traj() ); } if (err > 0) return 1; // FIXME: For backwards compat. overwrite Topology box info with traj box info. topIn->SetBoxFromTraj( trajin_.back()->TrajCoordInfo().TrajBox() ); return 0; }
void RasterLayer::mouseMoveEvent(QMouseEvent *ev) { QPoint e(ev->x() + mTimeline->GetOffset(), ev->y()); int frameIndex = GetFrameIndex(e.x(), e.y()); if (mState == EditorStateScale) { if (mEditFrame) { int exposure = mEditFrameExposure + (frameIndex - mEditFrameIndex); if (exposure < 1) { exposure = 1; } mEditFrame->SetExposure(exposure); update(); UpdateMaxFrames(); } } else { mTimeline->SetFrameIndex(frameIndex); } }
void RasterLayer::ModExposure(int index, int delta) { mLayerModel->ModExposure(index, delta); update(); UpdateMaxFrames(); }
// TrajinList::AddEnsembleIn() int TrajinList::AddEnsembleIn(std::string const& fname, Topology* topIn, ArgList const& argIn) { if (topIn == 0) { mprinterr("Error: No topology for input ensemble '%s'\n", fname.c_str()); return 1; } int err = 0; File::NameArray fnames = File::ExpandToFilenames( fname ); if (fnames.empty()) return 1; TrajectoryFile::TrajFormatType trajinFmt; TrajectoryIO* tio = 0; for (File::NameArray::const_iterator fn = fnames.begin(); fn != fnames.end(); ++fn) { ArgList args = argIn; // Determine whether this file is multiple file or single file ensemble. tio = TrajectoryFile::DetectFormat( *fn, trajinFmt ); if (tio == 0) { mprinterr("Error: Could not determine trajectory %s format\n", fn->full()); err++; continue; } EnsembleIn* ensemble = 0; # ifdef ENABLE_SINGLE_ENSEMBLE if (tio->CanProcessEnsemble()) ensemble = new EnsembleIn_Single(); else # endif ensemble = new EnsembleIn_Multi(); if (ensemble == 0) { mprinterr("Error: Memory allocation for input ensemble failed.\n"); delete tio; return 1; } ensemble->SetDebug( debug_ ); // CRDIDXARG: Append coordinate indices arg if there is one args.AddArg( finalCrdIndicesArg_ ); if ( ensemble->SetupEnsembleRead(*fn, args, topIn) ) { mprinterr("Error: Could not set up input ensemble '%s'.\n", fname.c_str()); delete ensemble; delete tio; err++; continue; } // Currently all input ensembles must be same size. if (ensembleSize_ == -1) ensembleSize_ = ensemble->EnsembleCoordInfo().EnsembleSize(); else if (ensembleSize_ != ensemble->EnsembleCoordInfo().EnsembleSize()) { mprinterr("Error: Ensemble size (%i) does not match first ensemble size (%i).\n", ensemble->EnsembleCoordInfo().EnsembleSize(), ensembleSize_); return 1; } // CRDIDXARG: If trajectory is REMD ensemble and sorting by CRDIDX, need to // save final CRDIDX for next ensemble command. // TODO: This is very clunky - remlog dataset should contain all exchanges // so trajin doesnt have to worry about it. # ifdef ENABLE_SINGLE_ENSEMBLE if ( !tio->CanProcessEnsemble() ) { # endif EnsembleIn_Multi const& mTraj = static_cast<EnsembleIn_Multi const&>( *ensemble ); if ( mTraj.TargetMode() == ReplicaInfo::CRDIDX ) { finalCrdIndicesArg_ = mTraj.FinalCrdIndices(); if (finalCrdIndicesArg_.empty()) { mprinterr("Error: Could not obtain final remlog indices.\n"); delete ensemble; delete tio; err++; continue; } //mprintf("DEBUG: Final crd indices arg: %s\n", finalCrdIndicesArg_.c_str()); } # ifdef ENABLE_SINGLE_ENSEMBLE } else mprintf("Warning: Single ensemble cannot process crdidx.\n"); # endif // Add to ensemble list and update # of frames. ensemble_.push_back( ensemble ); UpdateMaxFrames( ensemble->Traj() ); delete tio; } if (err > 0) return 1; // FIXME: For backwards compat. overwrite Topology box info with traj box info. topIn->SetBoxFromTraj( ensemble_.back()->EnsembleCoordInfo().TrajBox() ); return 0; }
void Timeline::SetScene(SceneModel* scene) { if (mScene == scene) { return; } // unload all layers QVBoxLayout* l = (QVBoxLayout*)mTimeLinePanel->layout(); while(QLayoutItem* item = l->itemAt(0)) { l->removeItem(item); } l = (QVBoxLayout*)mPropertyPanel->layout(); while(QLayoutItem* item = l->itemAt(0)) { l->removeItem(item); } for (size_t i = 0; i < mLayers.size(); ++i) { Layer* layer = mLayers[i]; delete layer->GetPropertyWindow(); delete layer; } mLayers.clear(); mScene = scene; if (mScene) { for (size_t i = 0; i < mScene->GetLayers().size(); ++i) { LayerModel* layerModel = mScene->GetLayers()[i]; if (layerModel) { switch(layerModel->GetType()) { case LayerModel::LayerTypeRaster: { RasterLayerModel* rlm = (RasterLayerModel*)layerModel; RasterLayer* layer = new RasterLayer(this, rlm); mLayers.push_back(layer); } break; case LayerModel::LayerTypeTrace: { TraceLayerModel* lm = (TraceLayerModel*)layerModel; TraceLayer* layer = new TraceLayer(this, lm); mLayers.push_back(layer); } break; } } } delete mCompositeImage; mCompositeImage = new QImage(scene->GetWidth(), scene->GetHeight(), QImage::Format_RGBA8888); } UpdateLayersUi(); SetLayerIndex((int)mLayers.size() - 1); UpdateMaxFrames(); }