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

dropdown.cpp

Blame
  • dropdown.cpp 3.89 KiB
    #include "dropdown.hpp"
    #include "graphics.hpp"
    #include <iostream>
    
    using namespace genv;
    using namespace std;
    
    Dropdown::Dropdown(int x, int y, int extentx, int extenty, vector<string> options, int limit)
        : Konyvtar(x, y, extentx, extenty), _options(options), _limit(limit)
    {
        _x = x;
        _y = y;
        _extentx = extentx;
        _extenty = extenty;
        _mod = 1;
        _number = -1;
        _scroll = 0;
    }
    
    int Dropdown::ret()
    {
        return  _number ;
    }
    
    void Dropdown::image()
    {
        gout << move_to(_x, _y) << color(128, 128, 128) << box(_extentx, _extenty) << move_to(_x, _y + _extenty * 0.8) << color(255, 255, 255) << text(_options[_number]);
        gout << move_to(_x + _extentx - _extenty + 3, _y + 3) << color(255, 255, 255) << box(_extenty - 6, _extenty - 6);
    }
    
    void Dropdown::operate(event ev)
    {
        bool run = true;
        while (gin >> ev && run)
        {
            // Drawing dropdown items
            for (int i = 0; i < 4; ++i) {
                int y_offset = _y + (i * (_extenty + 5));
                gout << move_to(_x, y_offset) << color(128, 128, 128) << box(_extentx, _extenty);
                gout << move_to(_x, y_offset + _extenty * 0.8) << color(255, 255, 255) << text(_options[i]);
            }
            gout << refresh;
    
            // Event handling
            if (ev.type == ev_mouse && ev.button == btn_left)
            {
                cout << "Mouse clicked at: " << ev.pos_x << " , " << ev.pos_y << endl;
                for (int i = 0; i < 4; ++i)
                {
                    int y_offset = _y + (i * (_extenty + 5));
                    if (ev.pos_x >= _x && ev.pos_x <= _x + _extentx &&
                        ev.pos_y >= y_offset && ev.pos_y <= y_offset + _extenty)
                    {
                        cout << "Option " << i << " clicked" << endl; // Debug print
                        _number = i;
                        run = false; // Set run to false to exit the loop
                        break; // Break the loop as we found the clicked option
                    }
                }
            }
            if(_number != -1)
            {
                run = false;
                break;
    
            }
        }
        /*
        bool run = true;
        while (gin >> ev and run)
        {
            // Drawing dropdown items
            for (int i = 0; i < 4; ++i) {
                int y_offset = _y + (i * (_extenty + 5));
                gout << move_to(_x, y_offset) << color(128, 128, 128) << box(_extentx, _extenty);
                gout << move_to(_x, y_offset + _extenty * 0.8) << color(255, 255, 255) << text(_options[i]);
            }
            gout << refresh;
    
            // Event handling
            if (ev.type == ev_mouse && ev.button == btn_left)
            {
                cout << "Mouse clicked at: " << ev.pos_x << " , " << ev.pos_y << endl;
                for (int i = 0; i < 4; ++i)
                {
                    int y_offset = _y + (i * (_extenty + 5));
                    if (ev.pos_x >= _x && ev.pos_x <= _x + _extentx &&
                        ev.pos_y >= y_offset && ev.pos_y <= y_offset + _extenty)
                    {
                        _number = i;
                        run = false;
                        break;
                    }
                }
            }
        }
        */
    }
    
    void Dropdown::reset(event ev)
    {
        gout << move_to(_x, _y) << color(0, 0, 0) << box((_extentx), (_extenty + 3) * 5);
        image();
        cout << _number << "igazsag asd" <<endl;
        if (_mod == 2)
        {
            int szam = _scroll;
            for (int i = _y + _extenty + 2; i < _y + _limit * (_extenty + 2); i += _extenty + 2)
            {
                if(ev.type == ev_mouse && ev.button == btn_left)
                {
                    if (ev.pos_x >= _x and ev.pos_x <= _x + _extentx)
                    {
                        if (ev.pos_y >= i and ev.pos_y <= i + _extenty)
                        {
                            _number = szam;
                            cout << _number << "igazsag" <<endl;
                            break;
                        }
                    }
                }
    
                szam += 1;
            }
        }
    }
    
    bool Dropdown::is_chosen(int mx, int my, event ev)
    {
        return false;
    }