void DArray_shuffle(DArray array) { if (!array || !(array->size > 1)) return; size_t i, j; if (array->size == 2) { //unsigned int rand = random_seq(); //i = (size_t) (rand % 2); //if (i == 0) swap(array->contents, array->contents, 0, 1); } else { for (j = array->size - 1; j > 1; j--) { i = (random_seq() % j) + 1; swap(array->contents, array->contents, i - 1, j - 1); } } }
bool on_key_press(char c) { bool bNeedUpdate = false; QVector<word_t*>* vec; vec = bTickMode ? &tick_vec : &word_vec; int& index = bTickMode ? iTickIndex : iCurrIndex; switch(c) { case 't'://tick (*vec)[seq_vec[index]]->tick(); bNeedUpdate = true; break; case '+'://inc marks (*vec)[seq_vec[index]]->inc_marks(); bNeedUpdate = true; break; case '-'://dec marks (*vec)[seq_vec[index]]->dec_marks(); bNeedUpdate = true; break; case 'R'://ramdon if (bRandomMode) init_seq(); else random_seq(); bNeedUpdate = true; break; case 'q'://quit eScrType = scr_confquit; bNeedUpdate = true; break; case '>': eScrType = scr_confexport; bNeedUpdate = true; break; case '~'://remove ticked items eScrType = scr_confdelete; bNeedUpdate = true; break; case 'j'://next if (eScrType == scr_list) { if (++index >= vec->count()) { --index; } bNeedUpdate = true; break; } else if (eScrType == scr_def) { iDefFirstLine++; bNeedUpdate = true; break; } break; case 'k'://previous if (eScrType == scr_list) { if (--index < 0) { ++index; } bNeedUpdate = true; } else if (eScrType == scr_def) { iDefFirstLine --; bNeedUpdate = true; break; } break; case ' '://space if (eScrType == scr_list) { if (++index >= vec->count()) { --index; } bNeedUpdate = true; } bNeedUpdate = true; break; case '\n'://enter if (eScrType == scr_list) { eScrType = scr_def; bNeedUpdate = true; break; } else if (eScrType == scr_def) { eScrType = scr_list; bNeedUpdate = true; break; } else if (eScrType == scr_confquit) { bQuit = true; break; } break; case 27: if (eScrType == scr_list) { eScrType = scr_confquit; bNeedUpdate = true; break; } else if (eScrType == scr_def) { eScrType = scr_list; bNeedUpdate = true; break; } else if (eScrType == scr_confquit) { eScrType = bDefMode ? scr_def : scr_list; bNeedUpdate = true; break; } case '*'://show tick screen iCurrIndex = iTickIndex = 0; if (bTickMode = !bTickMode) gen_tick_vec(); init_seq(); bNeedUpdate = true; break; case 'y': if (eScrType == scr_confquit) { bQuit = true; } else if (eScrType == scr_confexport) { QString file = file_name; int pos = file.lastIndexOf("/"); if (pos > 0) file.replace(pos, -1, "extracted.xml"); else file = "extracted.xml"; //regenerate the tick vec and merge it to the file gen_tick_vec(); merge_vec_to_file(tick_vec, file); eScrType = scr_list; bNeedUpdate = true; } else if (eScrType == scr_confdelete) { //regenerate the tick vec and merge it to the file gen_tick_vec(); remove_ticked(); eScrType = scr_list; bNeedUpdate = true; } break; case 'n': if (eScrType == scr_confquit || eScrType == scr_confexport) { eScrType = bDefMode ? scr_def : scr_list; bNeedUpdate = true; break; } break; case 'C': for (int i = 0; i < word_vec.count(); i++) { word_vec[i]->ticked = false; } bNeedUpdate = true; break; case 'H': bCnMode = !bCnMode; bNeedUpdate = true; break; default: break; } return bNeedUpdate; }