Skip to content
Snippets Groups Projects
Select Git revision
  • f9ca900a42779c55d2bc87d549408adb33461d8f
  • main default protected
2 results

application.cpp

Blame
  • application.cpp 3.29 KiB
    #include "application.hpp"
    #include "graphics.hpp"
    #include "widget.hpp"
    #include <iostream>
    
    using namespace genv;
    using namespace std;
    
    Application::Application()
    {
        gout.open(910,910);
    
    
    }
    void ellenoriz(vector<Widget> v)
    {
    
    }
    
    void Application::registerWidget(Widget* w)
    {
    
        widgets.push_back(w);
    }
    
    void Application::event_loop()
    {
        int wrongi = -1;
        event ev;
        int focus = -1;
        while(gin >> ev )
        {
            if (ev.type == ev_mouse && ev.button==btn_left)
            {
                for (size_t i=0; i<widgets.size(); i++)
                {
                    if (widgets[i]->isover(ev.pos_x, ev.pos_y))
                    {
                        focus = i;
                    }
                }
            }
            wrongi = -1;
    
    
    
    
    
    
            if (focus != -1) {
                widgets[focus]->handle(ev);
                for (int k = 0; k < 81; k += 9) {
                    for (int i = k; i < 9 + k; ++i) {
                        for (int j = i + 1; j < 9 + k; ++j) {
                            if (widgets[i]->getter() != 0 && widgets[i]->getter() == widgets[j]->getter()) {
                                wrongi = i;
                                break;
                            }
                        }
                        if (wrongi != -1) {
                            break;
                        }
                    }
                    if (wrongi != -1) {
                        break;
                    }
                }
    
                for (int k = 0; k < 9; ++k) {
                    for (int i = k; i < 81; i += 9) {
                        for (int j = i + 9; j < 81; j += 9) {
                            if (widgets[i]->getter() != 0 && widgets[i]->getter() == widgets[j]->getter()) {
                                wrongi = i;
                                break;
                            }
                        }
                        if (wrongi != -1) {
                            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);
    
                        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) {
                if( i == wrongi){
                    widgets[i]->draw();
                }
                else {
                    widgets[i]->draw2();
                }
            }
            gout << refresh;
    
        }
    }