Multithreaded filtering of the character list
This commit is contained in:
parent
906c9016bb
commit
f750328404
@ -91,6 +91,9 @@ public:
|
|||||||
QSignalMapper *char_button_mapper;
|
QSignalMapper *char_button_mapper;
|
||||||
QVector<AOCharButton*> ui_char_button_list;
|
QVector<AOCharButton*> ui_char_button_list;
|
||||||
QVector<AOCharButton*> ui_char_button_list_filtered;
|
QVector<AOCharButton*> ui_char_button_list_filtered;
|
||||||
|
QLineEdit *ui_char_search;
|
||||||
|
QCheckBox *ui_char_passworded;
|
||||||
|
QCheckBox *ui_char_taken;
|
||||||
void mt_pre_framegetter(int frameNumber);
|
void mt_pre_framegetter(int frameNumber);
|
||||||
void mt_framegetter(int frameNumber);
|
void mt_framegetter(int frameNumber);
|
||||||
void reset_music_list()
|
void reset_music_list()
|
||||||
@ -548,10 +551,6 @@ private:
|
|||||||
|
|
||||||
AOButton *ui_spectator;
|
AOButton *ui_spectator;
|
||||||
|
|
||||||
QLineEdit *ui_char_search;
|
|
||||||
QCheckBox *ui_char_passworded;
|
|
||||||
QCheckBox *ui_char_taken;
|
|
||||||
|
|
||||||
void construct_char_select();
|
void construct_char_select();
|
||||||
void set_char_select();
|
void set_char_select();
|
||||||
void set_char_select_page();
|
void set_char_select_page();
|
||||||
|
@ -29,6 +29,35 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AOCharSelectFilterThreading : public QRunnable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Courtroom *mycourt_fuck;
|
||||||
|
int char_num;
|
||||||
|
AOCharSelectFilterThreading(Courtroom *my_courtroom, int character_number){
|
||||||
|
mycourt_fuck = my_courtroom;
|
||||||
|
char_num = character_number;
|
||||||
|
}
|
||||||
|
void run()
|
||||||
|
{
|
||||||
|
AOCharButton* current_char = mycourt_fuck->ui_char_button_list.at(char_num);
|
||||||
|
|
||||||
|
if (!mycourt_fuck->ui_char_taken->isChecked() && mycourt_fuck->char_list.at(char_num).taken)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!mycourt_fuck->char_list.at(char_num).name.contains(mycourt_fuck->ui_char_search->text(), Qt::CaseInsensitive))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// We only really need to update the fact that a character is taken
|
||||||
|
// for the buttons that actually appear.
|
||||||
|
// You'd also update the passwordedness and etc. here later.
|
||||||
|
current_char->reset();
|
||||||
|
current_char->set_taken(mycourt_fuck->char_list.at(char_num).taken);
|
||||||
|
|
||||||
|
mycourt_fuck->ui_char_button_list_filtered.append(current_char);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void Courtroom::construct_char_select()
|
void Courtroom::construct_char_select()
|
||||||
{
|
{
|
||||||
ui_char_select_background = new AOImage(this, ao_app);
|
ui_char_select_background = new AOImage(this, ao_app);
|
||||||
@ -234,27 +263,10 @@ void Courtroom::filter_character_list()
|
|||||||
ui_char_button_list_filtered.clear();
|
ui_char_button_list_filtered.clear();
|
||||||
for (int i = 0; i < char_list.size(); i++)
|
for (int i = 0; i < char_list.size(); i++)
|
||||||
{
|
{
|
||||||
AOCharButton* current_char = ui_char_button_list.at(i);
|
AOCharSelectFilterThreading *char_filter = new AOCharSelectFilterThreading(this, i);
|
||||||
|
QThreadPool::globalInstance()->start(char_filter);
|
||||||
// It seems passwording characters is unimplemented yet?
|
|
||||||
// Until then, this will stay here, I suppose.
|
|
||||||
//if (ui_char_passworded->isChecked() && character_is_passworded??)
|
|
||||||
// continue;
|
|
||||||
|
|
||||||
if (!ui_char_taken->isChecked() && char_list.at(i).taken)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!char_list.at(i).name.contains(ui_char_search->text(), Qt::CaseInsensitive))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// We only really need to update the fact that a character is taken
|
|
||||||
// for the buttons that actually appear.
|
|
||||||
// You'd also update the passwordedness and etc. here later.
|
|
||||||
current_char->reset();
|
|
||||||
current_char->set_taken(char_list.at(i).taken);
|
|
||||||
|
|
||||||
ui_char_button_list_filtered.append(current_char);
|
|
||||||
}
|
}
|
||||||
|
QThreadPool::globalInstance()->waitForDone();
|
||||||
|
|
||||||
current_char_page = 0;
|
current_char_page = 0;
|
||||||
set_char_select_page();
|
set_char_select_page();
|
||||||
|
Loading…
Reference in New Issue
Block a user