aboutsummaryrefslogtreecommitdiff
path: root/src/charselect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/charselect.cpp')
-rw-r--r--src/charselect.cpp135
1 files changed, 66 insertions, 69 deletions
diff --git a/src/charselect.cpp b/src/charselect.cpp
index d6ee0445..e942fbea 100644
--- a/src/charselect.cpp
+++ b/src/charselect.cpp
@@ -8,55 +8,51 @@
class AOCharSelectGenerationThreading : public QRunnable
{
public:
- Courtroom *thisCourtroom;
- int char_num;
- AOCharButton *char_button;
- AOCharSelectGenerationThreading(Courtroom *my_courtroom, int character_number, AOCharButton *charbut){
- thisCourtroom = my_courtroom;
- char_num = character_number;
- char_button = charbut;
- }
- void run()
- {
- AOCharButton* thisCharacterButton = char_button;
- thisCharacterButton->reset();
- thisCharacterButton->hide();
- thisCharacterButton->set_image(thisCourtroom->char_list.at(char_num).name);
- thisCourtroom->ui_char_button_list.append(thisCharacterButton);
-
- thisCourtroom->connect(thisCharacterButton, SIGNAL(clicked()), thisCourtroom->char_button_mapper, SLOT(map()));
- thisCourtroom->char_button_mapper->setMapping(thisCharacterButton, thisCourtroom->ui_char_button_list.size() - 1);
- }
+ Courtroom *thisCourtroom;
+ int char_num;
+ AOCharButton *char_button;
+ AOCharSelectGenerationThreading(Courtroom *my_courtroom, int character_number)
+ {
+ thisCourtroom = my_courtroom;
+ char_num = character_number;
+ }
+ void run()
+ {
+ // we take the button we are supposed to mess with, and not whatever comes
+ // first
+ AOCharButton *thisCharacterButton =
+ thisCourtroom->ui_char_button_list.at(char_num);
+ thisCharacterButton->reset();
+ thisCharacterButton->hide();
+ thisCharacterButton->set_image(thisCourtroom->char_list.at(char_num).name);
+
+ thisCourtroom->connect(thisCharacterButton, SIGNAL(clicked()),
+ thisCourtroom->char_button_mapper, SLOT(map()));
+ thisCourtroom->char_button_mapper->setMapping(thisCharacterButton,
+ char_num);
+ }
};
-class AOCharSelectFilterThreading : public QRunnable
+void AOCharSelectFilter(Courtroom *thisCourtroom, int char_num)
{
-public:
- Courtroom *thisCourtroom;
- int char_num;
- AOCharSelectFilterThreading(Courtroom *my_courtroom, int character_number){
- thisCourtroom = my_courtroom;
- char_num = character_number;
- }
- void run()
- {
- AOCharButton* current_char = thisCourtroom->ui_char_button_list.at(char_num);
+ AOCharButton *current_char = thisCourtroom->ui_char_button_list.at(char_num);
- if (!thisCourtroom->ui_char_taken->isChecked() && thisCourtroom->char_list.at(char_num).taken)
- return;
+ if (!thisCourtroom->ui_char_taken->isChecked() &&
+ thisCourtroom->char_list.at(char_num).taken)
+ return;
- if (!thisCourtroom->char_list.at(char_num).name.contains(thisCourtroom->ui_char_search->text(), Qt::CaseInsensitive))
- return;
+ if (!thisCourtroom->char_list.at(char_num).name.contains(
+ thisCourtroom->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(thisCourtroom->char_list.at(char_num).taken);
+ // 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(thisCourtroom->char_list.at(char_num).taken);
- thisCourtroom->ui_char_button_list_filtered.append(current_char);
- }
-};
+ thisCourtroom->ui_char_button_list_filtered.append(current_char);
+}
void Courtroom::construct_char_select()
{
@@ -246,39 +242,40 @@ void Courtroom::character_loading_finished()
ui_char_button_list.clear();
}
- // First, we'll make all the character buttons in the very beginning.
- // We also hide them all, so they can't be accidentally clicked.
- // Later on, we'll be revealing buttons as we need them.
- for (int n = 0; n < char_list.size(); n++)
- {
- AOCharButton* characterButton = new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken);
- AOCharSelectGenerationThreading *char_generate = new AOCharSelectGenerationThreading(this, n, characterButton);
- QThreadPool::globalInstance()->start(char_generate);
- if(QThreadPool::globalInstance()->activeThreadCount() == QThreadPool::globalInstance()->maxThreadCount())
- {
- QThreadPool::globalInstance()->waitForDone();
- }
+ // First, we'll make all the character buttons in the very beginning.
+ // Since we can't trust what will happen during the multi threading process,
+ // we assign the buttons their locations in the list according to the
+ // character list.
+ for (int n = 0; n < char_list.size(); n++) {
+ AOCharButton *characterButton =
+ new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken);
+ ui_char_button_list.append(characterButton);
+ }
+
+ // We also hide them all, so they can't be accidentally clicked.
+ // Later on, we'll be revealing buttons as we need them.
+ for (int n = 0; n < char_list.size(); n++) {
+ AOCharSelectGenerationThreading *char_generate =
+ new AOCharSelectGenerationThreading(this, n);
+ QThreadPool::globalInstance()->start(char_generate);
+ if (QThreadPool::globalInstance()->activeThreadCount() ==
+ QThreadPool::globalInstance()->maxThreadCount()) {
+ QThreadPool::globalInstance()->waitForDone();
}
- QThreadPool::globalInstance()->waitForDone();
- filter_character_list();
+ }
+ QThreadPool::globalInstance()->waitForDone();
+ filter_character_list();
}
void Courtroom::filter_character_list()
{
- ui_char_button_list_filtered.clear();
- for (int i = 0; i < char_list.size(); i++)
- {
- AOCharSelectFilterThreading *char_filter = new AOCharSelectFilterThreading(this, i);
- QThreadPool::globalInstance()->start(char_filter);
- if(QThreadPool::globalInstance()->activeThreadCount() == QThreadPool::globalInstance()->maxThreadCount())
- {
- QThreadPool::globalInstance()->waitForDone();
- }
- }
- QThreadPool::globalInstance()->waitForDone();
+ ui_char_button_list_filtered.clear();
+ for (int i = 0; i < char_list.size(); i++) {
+ AOCharSelectFilter(this, i);
+ }
- current_char_page = 0;
- set_char_select_page();
+ current_char_page = 0;
+ set_char_select_page();
}
void Courtroom::on_char_search_changed()