void repo::gui::RepoDialogUserManager::refresh(const core::RepoBSON &command)
{
    if (cancelAllThreads())
    {
        core::MongoClientWrapper mongo = dbCache->getConnection(ui->hostComboBox->currentText());
        std::string database = ui->databaseComboBox->currentText().toStdString();

        RepoWorkerUsers* worker = new RepoWorkerUsers(mongo, database, command);
        worker->setAutoDelete(true);

        // Direct connection ensures cancel signal is processed ASAP
        QObject::connect(
            this, &RepoDialogUserManager::cancel,
            worker, &RepoWorkerUsers::cancel, Qt::DirectConnection);

        QObject::connect(
            worker, &RepoWorkerUsers::userFetched,
            this, &RepoDialogUserManager::addUser);

        QObject::connect(
            worker, &RepoWorkerUsers::databasesWithProjectsFetched,
            this, &RepoDialogUserManager::addDatabasesWithProjects);

        QObject::connect(
            worker, &RepoWorkerUsers::customRolesFetched,
            this, &RepoDialogUserManager::addCustomRoles);

        QObject::connect(
            worker, &RepoWorkerUsers::finished,
            ui->progressBar, &QProgressBar::hide);

        QObject::connect(
            worker, &RepoWorkerUsers::finished,
            this, &RepoDialogUserManager::finish);

        QObject::connect(
            worker, &RepoWorkerUsers::progressRangeChanged,
            ui->progressBar, &QProgressBar::setRange);

        QObject::connect(
            worker, &RepoWorkerUsers::progressValueChanged,
            ui->progressBar, &QProgressBar::setValue);

        //----------------------------------------------------------------------
        // Clear any previous entries
        clear(true);

        //----------------------------------------------------------------------
        ui->progressBar->show();
        ui->hostComboBox->setEnabled(false);
        ui->databaseComboBox->setEnabled(false);
        threadPool.start(worker);
    }
}
Пример #2
0
void *blockMovement(void *arg) {
    Block *block = (Block *) arg;

    int is_last_move_right = 1;
    int ch;
    // timeout(-1);
    while(1) {
        ch = getch();
        switch(ch) {
        case 'q':
            pthread_mutex_lock(&mutex);
            cancelAllThreads();
            free(block);
            endwin();
            pthread_mutex_unlock(&mutex);
            pthread_exit((void *) 0);
        case 'p': // a hack to pause the game
            pthread_mutex_lock(&mutex);
            getch();
            pthread_mutex_unlock(&mutex);
        case KEY_RIGHT:
            if(!is_last_move_right) {
                ++(block->end);
                is_last_move_right = 1;
            }
            pthread_mutex_lock(&mutex);
            moveBlockToRight(block->row, &(block->start), &(block->end), block->screen_width);
            pthread_mutex_unlock(&mutex);
            is_last_move_right = 1;
            break;
        case KEY_LEFT:
            if(is_last_move_right) {
                --(block->end);
                is_last_move_right = 0;
            }
            pthread_mutex_lock(&mutex);
            moveBlockToLeft(block->row, &(block->start), &(block->end));
            pthread_mutex_unlock(&mutex);
            break;
        }
    }
}