Select Git revision
dropdown.cpp
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;
}