Beispiel #1
0
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();
}
Beispiel #2
0
void QueuePool::slotSettingsChanged(const QueueSettings& settings)
{
    QueueListView* queue = currentQueue();

    if (queue)
    {
        queue->setSettings(settings);
    }
}
Beispiel #3
0
void QueuePool::slotAssignedToolsChanged(const AssignedBatchTools& tools4Item)
{
    QueueListView* queue = currentQueue();

    if (queue)
    {
        queue->slotAssignedToolsChanged(tools4Item);
    }
}
Beispiel #4
0
void QueuePool::slotRemoveItemsDone()
{
    QueueListView* queue = currentQueue();

    if (queue)
    {
        queue->slotRemoveItemsDone();
    }
}
Beispiel #5
0
void QueuePool::slotRemoveSelectedItems()
{
    QueueListView* queue = currentQueue();

    if (queue)
    {
        queue->slotRemoveSelectedItems();
    }
}
Beispiel #6
0
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();
}
Beispiel #9
0
void QueuePool::slotRemoveCurrentQueue()
{
    QueueListView* queue = currentQueue();

    if (!queue)
    {
        return;
    }

    removeTab(indexOf(queue));

    if (count() == 0)
    {
        slotAddQueue();
    }

    emit signalQueuePoolChanged();
}
Beispiel #10
0
///
/// イベント登録
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;
}
Beispiel #11
0
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;
}