void QueuePool::slotRemoveCurrentQueue() { QueueListView* const queue = currentQueue(); if (!queue) { return; } removeTab(indexOf(queue)); if (count() == 0) { slotAddQueue(); } else { for (int i = 0; i < count(); ++i) { setTabText(i, QString("#%1").arg(i + 1)); } } emit signalQueuePoolChanged(); }
void QueuePool::slotSettingsChanged(const QueueSettings& settings) { QueueListView* queue = currentQueue(); if (queue) { queue->setSettings(settings); } }
void QueuePool::slotAssignedToolsChanged(const AssignedBatchTools& tools4Item) { QueueListView* queue = currentQueue(); if (queue) { queue->slotAssignedToolsChanged(tools4Item); } }
void QueuePool::slotRemoveItemsDone() { QueueListView* queue = currentQueue(); if (queue) { queue->slotRemoveItemsDone(); } }
void QueuePool::slotRemoveSelectedItems() { QueueListView* queue = currentQueue(); if (queue) { queue->slotRemoveSelectedItems(); } }
void QueuePool::slotClearList() { QueueListView* queue = currentQueue(); if (queue) { queue->slotClearList(); } }
/// /// 毎フレーム呼ばれるイベント通達処理 bool EventManager::broadCast( const DeltaTime dt ) { // キューを取得 auto& current_queue = currentQueue(); auto& back_queue = backQueue(); // 全イベントを処理 while (current_queue.size() > 0) { // イベントをキューから取り出す auto event = current_queue.front(); current_queue.pop_front(); // ブロードキャスト時間になっている? if (!event->isReady()) { // まだ時間になっていない event->update(dt); // バックキューに登録しなおし back_queue.push_back(event); // このイベントの処理はここで終了。次へ。 continue; } // イベント発行 const EventType& event_type = event->eventType(); EventListenerMap::iterator map_it =registry_.find(event_type.key()); if (map_it == registry_.end()) { // このイベント型にはリスナーが居ない // 処理の必要がないのでスキップ continue; } // リスナーリスト EventListenerTable& table = map_it->second; // 全リスナーにイベントを通知 auto table_it = table.begin(); auto table_end = table.end(); for (; table_it != table_end; ++table_it) { // 引数を設定 (*table_it)->arg1(&event); // イベントハンドラ呼び出し (*table_it)->invoke(); } } // カレントキューを入れ替え switchQueue(); return true; }
void QueueResourcesDialog::verify() { QString time(m_dialog.walltime->text()); bool ok(false); int n(time.toInt(&ok)); if (ok) time += ":00:00"; m_dialog.walltime->setText(time); if (m_timeValidator.validate(time, n) != QValidator::Acceptable) { QMsgBox::warning(this, "IQmol", "Wall time must be in the format h:mm:ss"); return; } QueueResources* currentQueue((*m_queueResourcesList)[m_dialog.queue->currentIndex()]); QStringList requestedTime(time.split(":", QString::SkipEmptyParts)); time = currentQueue->m_maxWallTime; QStringList maxTime(time.split(":", QString::SkipEmptyParts)); if (requestedTime.size() < 3 || maxTime.size() < 3) { QMsgBox::warning(this, "IQmol", "Validated wall time not in the format h:mm:ss"); return; } int t1, t2; t1 = requestedTime[0].toInt(&ok) * 60 * 60; t1 += requestedTime[1].toInt(&ok) * 60; t1 += requestedTime[2].toInt(&ok); t2 = maxTime[0].toInt(&ok) * 60 * 60; t2 += maxTime[1].toInt(&ok) * 60; t2 += maxTime[2].toInt(&ok); if (t1 > t2) { QMsgBox::warning(this, "IQmol", "Wall time exceeds queue maximum of " + time); return; }else if (m_dialog.memory->value() > currentQueue->m_maxMemory) { QMsgBox::warning(this, "IQmol", "Memory exceeds queue limit of " + QString::number(currentQueue->m_maxMemory)); return; }else if (m_dialog.scratch->value() > currentQueue->m_maxScratch) { QMsgBox::warning(this, "IQmol", "Scratch exceeds queue limit of " + QString::number(currentQueue->m_maxScratch)); return; }else if (m_dialog.ncpus->value() > currentQueue->m_maxCpus) { QMsgBox::warning(this, "IQmol", "Number of CPUs exceeds queue limit of " + QString::number(currentQueue->m_maxCpus)); return; } saveAsDefaults(); accept(); }
void QueuePool::slotRemoveCurrentQueue() { QueueListView* queue = currentQueue(); if (!queue) { return; } removeTab(indexOf(queue)); if (count() == 0) { slotAddQueue(); } emit signalQueuePoolChanged(); }
/// /// イベント登録 bool EventManager::queueEvent( const EventPtr& in_event ) { if (!isValidateEventType(in_event->eventType())) { // 無効なイベント登録はスキップ return false; } // リスナーが存在しないイベントの登録はスキップ auto listener_map = registry_.find(in_event->eventType().key()); if (listener_map == registry_.end()) { // 未登録イベント = このイベントのリスナはいない // スキップ return false; } // イベントキューへ登録 currentQueue().push_back(in_event); return true; }
bool QueuePool::saveWorkflow() const { QueueListView* const queue = currentQueue(); if (queue) { WorkflowManager* const mngr = WorkflowManager::instance(); Workflow wf; wf.qSettings = queue->settings(); wf.aTools = queue->assignedTools().m_toolsList; if (WorkflowDlg::createNew(wf)) { mngr->insert(wf); mngr->save(); return true; } } return false; }