initial commit
This commit is contained in:
69
NewDialogs/DlgDropDownList.cpp
Normal file
69
NewDialogs/DlgDropDownList.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <SDL3_image/SDL_image.h>
|
||||
#include <SDL3_ttf/SDL_ttf.h>
|
||||
|
||||
#include "../SDLHelpers.h"
|
||||
|
||||
#include "Item.h"
|
||||
#include "Scrollbar.h"
|
||||
#include "Listbox.h"
|
||||
#include "Frame.h"
|
||||
|
||||
#include "DlgDropDownList.h"
|
||||
|
||||
DlgDropDownList::DlgDropDownList(DropDownList *ddl, SDL_Rect pos, bool add_scrollbar) : Dialog() {
|
||||
this->ddl = ddl;
|
||||
this->pos = pos;
|
||||
setDefaultPos(false);
|
||||
|
||||
background = SDL_CreateSurface(pos.w, pos.h, SDL_GetPixelFormatForMasks(32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000));
|
||||
memset((int *) background->pixels, 0xFFFFFFFF, pos.w * pos.h * 4);
|
||||
surface = SDL_CreateSurface(background->w, background->h, SDL_GetPixelFormatForMasks(32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000));
|
||||
|
||||
int listbox_width = pos.w;
|
||||
if (add_scrollbar)
|
||||
listbox_width -= 18;
|
||||
Item *listbox = new Listbox(ddl->getList(), ddl->getListboxItemSize(), getRect(0, 0, listbox_width, ddl->getListboxHeight()));
|
||||
((Listbox *) listbox)->setValueChangedFunc(&listboxValueChangedCallback, (void *)this);
|
||||
|
||||
Item *item = new Frame(getRect(0, 0, listbox_width, pos.h));
|
||||
((Frame *)item)->addItem(listbox);
|
||||
addItem(item);
|
||||
|
||||
if (add_scrollbar) {
|
||||
item = new Scrollbar(0, ddl->getListboxHeight() - pos.h, 0, getRect(pos.w - 18, 0, 18, pos.h));
|
||||
((Scrollbar *) item)->setValueChangedFunc(&scrollbarValueChangedCallback, (void *)this);
|
||||
addItem(item);
|
||||
}
|
||||
|
||||
setExit(false);
|
||||
}
|
||||
|
||||
DlgDropDownList::~DlgDropDownList() {
|
||||
deleteSurfaceAndBackground();
|
||||
deleteItems();
|
||||
}
|
||||
|
||||
void DlgDropDownList::listboxValueChangedCallback(void *p) {
|
||||
((DlgDropDownList *)p)->listboxValueChanged();
|
||||
}
|
||||
|
||||
void DlgDropDownList::listboxValueChanged() {
|
||||
int selected = ((Listbox *)((Frame *) items[0])->getItem(0))->getSelected();
|
||||
ddl->setSelected(selected);
|
||||
setExit(true);
|
||||
}
|
||||
|
||||
void DlgDropDownList::scrollbarValueChangedCallback(void *p) {
|
||||
((DlgDropDownList *)p)->scrollbarValueChanged();
|
||||
}
|
||||
|
||||
void DlgDropDownList::scrollbarValueChanged() {
|
||||
int value = ((Scrollbar *) items[1])->getValue();
|
||||
SDL_Rect *pos = ((Frame *) items[0])->getItem(0)->getPos();
|
||||
pos->y = 0 - value;
|
||||
}
|
||||
Reference in New Issue
Block a user