diff --git a/application.cpp b/application.cpp index d7533d94c2019a374814225b25b1329ecda66a87..6a8a4c84e867498a9cacbdbc1a880ee9eae37836 100644 --- a/application.cpp +++ b/application.cpp @@ -19,7 +19,7 @@ void ellenoriz(vector<Widget> v) void Application::registerWidget(Widget* w) { - // Az új widgetet közvetlenül hozzáadjuk a widgets vektorhoz + widgets.push_back(w); } @@ -42,11 +42,22 @@ void Application::event_loop() } wrongi = -1; - for (int k = 0; k < 81; k += 9) { - for (int i = k; i < 9+k; ++i) { - for (size_t j = i+1; j < 9+k; ++j) { - if (widgets[i]->getter() == widgets[j]->getter()) { - wrongi = j; + + + + + + if (focus != -1) { + widgets[focus]->handle(ev); + for (int k = 0; k < 81; k += 9) { + for (int i = k; i < 9+k; ++i) { + for (size_t j = i+1; j < 9+k; ++j) { + if (widgets[i]->getter() == widgets[j]->getter()) { + wrongi = j; + break; + } + } + if (wrongi != -1) { break; } } @@ -54,16 +65,17 @@ void Application::event_loop() break; } } - if (wrongi != -1) { - break; - } - } - for (int k = 0; k < 9; ++k) { - for (int i = k; i < 81; i += 9) { - for (size_t j = i+9; j < 81; j += 9) { - if (widgets[i]->getter() == widgets[j]->getter()) { - wrongi = j; + + for (int k = 0; k < 9; ++k) { + for (int i = k; i < 81; i += 9) { + for (size_t j = i+9; j < 81; j += 9) { + if (widgets[i]->getter() == widgets[j]->getter()) { + wrongi = j; + break; + } + } + if (wrongi != -1) { break; } } @@ -71,14 +83,35 @@ void Application::event_loop() break; } } - if (wrongi != -1) { - break; - } - } + for (int row_offset = 0; row_offset < 9; row_offset += 3) { + for (int col_offset = 0; col_offset < 9; col_offset += 3) { + std::vector<bool> seen(10, false); - if (focus != -1) { - widgets[focus]->handle(ev); + for (int i = row_offset; i < row_offset + 3; ++i) { + for (int j = col_offset; j < col_offset + 3; ++j) { + int num = widgets[i * 9 + j]->getter(); + if (num != 0) { + if (seen[num]) { + wrongi = i * 9 + j; + break; + } else { + seen[num] = true; + } + } + } + if (wrongi != -1) { + break; + } + } + if (wrongi != -1) { + break; + } + } + if (wrongi != -1) { + break; + } + } } for (int i = 0; i < widgets.size(); ++i) {