Track *Track::GetLink() const { auto pList = mList.lock(); if (!pList) return nullptr; if (!pList->isNull(mNode)) { if (mLinked) { auto next = pList->getNext( mNode ); if ( !pList->isNull( next ) ) return next.first->get(); } if (mNode.first != mNode.second->begin()) { auto prev = pList->getPrev( mNode ); if ( !pList->isNull( prev ) ) { auto track = prev.first->get(); if (track && track->GetLinked()) return track; } } } return nullptr; }
void QUserPanel::DropItem(const char* itemname, TClass* cl, int kind) { switch (TabWidget->currentIndex()) { case 0: DragLbl->setText("User dropped item"); DragItemLbl->setText(itemname); DragClassLbl->setText(cl==0 ? "No class specified" : cl->GetName()); DragKindLbl->setText(kindString(kind)); break; case 1: if (cl==0) { PrintLbl->setText("Can not drop item of uncknown class"); } else { PrintLbl->setText(QString("Print item: ") + itemname); RemoveLink("PrintItem"); AddLink(itemname, "PrintItem"); PrintObject(GetLinked("PrintItem", 2)); } break; case 2: DrawObjectOnCanvas(itemname); break; } }
Track *Track::GetLink() const { if (!mList) return nullptr; if (!mList->isNull(mNode)) { if (mLinked) { auto next = mNode; ++next; if (!mList->isNull(next)) { return next->get(); } } if (mList->hasPrev(mNode)) { auto prev = mNode; --prev; auto track = prev->get(); if (track && track->GetLinked()) { return track; } } } return nullptr; }
vfsDevice* VFS::GetDevice(const std::string& ps3_path, std::string& path) const { auto try_get_device = [this, &path](const std::string& ps3_path) -> vfsDevice* { std::vector<std::string> ps3_path_blocks = simplify_path_blocks(ps3_path); size_t max_eq = 0; int max_i = -1; for (u32 i = 0; i < m_devices.size(); ++i) { std::vector<std::string> dev_ps3_path_blocks = simplify_path_blocks(m_devices[i]->GetPs3Path()); if (ps3_path_blocks.size() < dev_ps3_path_blocks.size()) continue; size_t eq = 0; for (; eq < dev_ps3_path_blocks.size(); ++eq) { if (strcmp(ps3_path_blocks[eq].c_str(), dev_ps3_path_blocks[eq].c_str())) { break; } } if (eq > max_eq) { max_eq = eq; max_i = i; } } if (max_i < 0) return nullptr; path = m_devices[max_i]->GetLocalPath(); for (size_t i = max_eq; i < ps3_path_blocks.size(); i++) { path += "/" + ps3_path_blocks[i]; } path = simplify_path(path, false, false); return m_devices[max_i]; }; if (!ps3_path.size() || ps3_path[0] != '/') { return nullptr; } return try_get_device(GetLinked(ps3_path)); // What is it? cwd is real path, ps3_path is ps3 path, but GetLinked accepts ps3 path //if (auto res = try_get_device(GetLinked(cwd + ps3_path))) // return res; }
void QUserPanel::DrawObjectOnCanvas(const char* itemname) { RemoveLink("DrawItem"); AddLink(itemname, "DrawItem"); TObject* obj = GetLinked("DrawItem", 2); if (obj!=0) { fxDrawCanvas->getCanvas()->Clear(); fxDrawCanvas->getCanvas()->cd(); obj->Draw(""); fxDrawCanvas->getCanvas()->Update(); } }
bool Track::LinkConsistencyCheck() { // Sanity checks for linked tracks; unsetting the linked property // doesn't fix the problem, but it likely leaves us with orphaned // blockfiles instead of much worse problems. bool err = false; if (GetLinked()) { Track *l = GetLink(); if (l) { // A linked track's partner should never itself be linked if (l->GetLinked()) { wxLogWarning( wxT("Left track %s had linked right track %s with extra right track link.\n Removing extra link from right track."), GetName(), l->GetName()); err = true; l->SetLinked(false); } // Channels should be left and right if ( !( (GetChannel() == Track::LeftChannel && l->GetChannel() == Track::RightChannel) || (GetChannel() == Track::RightChannel && l->GetChannel() == Track::LeftChannel) ) ) { wxLogWarning( wxT("Track %s and %s had left/right track links out of order. Setting tracks to not be linked."), GetName(), l->GetName()); err = true; SetLinked(false); } } else { wxLogWarning( wxT("Track %s had link to NULL track. Setting it to not be linked."), GetName()); err = true; SetLinked(false); } } return ! err; }
void TrackList::UpdatePendingTracks() { auto pUpdater = mUpdaters.begin(); for (const auto &pendingTrack : mPendingUpdates) { // Copy just a part of the track state, according to the update // function const auto &updater = *pUpdater; auto src = FindById( pendingTrack->GetId() ); if (pendingTrack && src) { if (updater) updater( *pendingTrack, *src ); pendingTrack->DoSetY(src->GetY()); pendingTrack->DoSetHeight(src->GetActualHeight()); pendingTrack->DoSetMinimized(src->GetMinimized()); pendingTrack->DoSetLinked(src->GetLinked()); } ++pUpdater; } }
bool Track::IsLeader() const { return !GetLink() || GetLinked(); }