ProgramList MidiDevice::getPrograms0thVariation(bool percussion, const MidiBank &bank) const { // If we aren't in variations mode, just use getPrograms(). if (m_variationType == NoVariations) return getPrograms(bank); // Get the variation bank list for this bank BankList bankList; if (m_variationType == VariationFromMSB) { bankList = getBanksByLSB(percussion, bank.getLSB()); } else { bankList = getBanksByMSB(percussion, bank.getMSB()); } if (!bankList.empty()) { MidiBank firstBank = bankList.front(); return getPrograms(firstBank); } return ProgramList(); }
void ViewScheduled::LoadList(bool useExistingData) { if (m_inFill) return; m_inFill = true; MythUIButtonListItem *currentItem = m_schedulesList->GetItemCurrent(); QString callsign; QDateTime startts, recstartts; if (currentItem) { ProgramInfo *currentpginfo = qVariantValue<ProgramInfo*> (currentItem->GetData()); if (currentpginfo) { callsign = currentpginfo->GetChannelSchedulingID(); startts = currentpginfo->GetScheduledStartTime(); recstartts = currentpginfo->GetRecordingStartTime(); } } QDateTime now = QDateTime::currentDateTime(); QMap<int, int> toomanycounts; m_schedulesList->Reset(); if (m_groupList) m_groupList->Reset(); m_recgroupList.clear(); if (!useExistingData) LoadFromScheduler(m_recList, m_conflictBool); ProgramList::iterator pit = m_recList.begin(); QString currentDate; m_recgroupList[m_defaultGroup] = ProgramList(false); m_recgroupList[m_defaultGroup].setAutoDelete(false); while (pit != m_recList.end()) { ProgramInfo *pginfo = *pit; const RecStatusType recstatus = pginfo->GetRecordingStatus(); if ((pginfo->GetRecordingEndTime() >= now || pginfo->GetScheduledEndTime() >= now) && (m_showAll || recstatus <= rsWillRecord || recstatus == rsDontRecord || (recstatus == rsTooManyRecordings && ++toomanycounts[pginfo->GetRecordingRuleID()] <= 1) || (recstatus > rsTooManyRecordings && recstatus != rsRepeat && recstatus != rsNeverRecord))) { m_cardref[pginfo->GetCardID()]++; if (pginfo->GetCardID() > m_maxcard) m_maxcard = pginfo->GetCardID(); m_inputref[pginfo->GetInputID()]++; if (pginfo->GetInputID() > m_maxinput) m_maxinput = pginfo->GetInputID(); QDate date = (pginfo->GetRecordingStartTime()).date(); m_recgroupList[date].push_back(pginfo); m_recgroupList[date].setAutoDelete(false); m_recgroupList[m_defaultGroup].push_back(pginfo); ++pit; } else { pit = m_recList.erase(pit); continue; } } if (m_groupList) { QString label; QMap<QDate,ProgramList>::iterator dateit = m_recgroupList.begin(); while (dateit != m_recgroupList.end()) { if (dateit.key().isNull()) label = tr("All"); else label = dateit.key().toString(m_dateFormat); new MythUIButtonListItem(m_groupList, label, qVariantFromValue(dateit.key())); ++dateit; } if (!m_recgroupList.contains(m_currentGroup)) m_groupList->SetValueByData(qVariantFromValue(m_currentGroup)); } FillList(); // Restore position after a list update if (!callsign.isEmpty()) { ProgramList plist; if (!m_recgroupList.contains(m_currentGroup)) m_currentGroup = m_defaultGroup; plist = m_recgroupList[m_currentGroup]; int listPos = ((int) plist.size()) - 1; int i; for (i = listPos; i >= 0; --i) { ProgramInfo *pginfo = plist[i]; if (callsign == pginfo->GetChannelSchedulingID() && startts == pginfo->GetScheduledStartTime()) { listPos = i; break; } else if (recstartts <= pginfo->GetRecordingStartTime()) listPos = i; } m_schedulesList->SetItemCurrent(listPos); } m_inFill = false; m_needFill = false; }
template<> int Cylinder::tBase::s_instances = 0; Cylinder::Cylinder(QObject* parent) : Geometry(parent) { setObjectName(QString(tr("Cylinder %1")).arg(Cylinder::tBase::s_instances)); colors({ QColor(255, 0, 0), QColor(0, 255, 0), QColor(0, 0, 255) }); } template<> QOpenGLVertexArrayObject* Cylinder::tBase::s_vao = nullptr; template<> ProgramList Cylinder::tBase::s_programList = ProgramList(); template<> QHash<QString, QOpenGLBuffer*> Cylinder::tBase::s_buffers = {}; int sides = 30; QVector<GLfloat> calcCylinderVertices() { QVector<GLfloat> vertices; vertices.reserve(sides* 4 * 3); qreal theta = 0; for (int j = 0; j < sides; j++) { for(int i = 0; i < 2; i++) { vertices.append(qCos(theta)); vertices.append(1.0f); vertices.append(qSin(theta));