/*
* Copyright (C) 2020 Linux Studio Plugins Project
* (C) 2020 Vladimir Sadovnikov
*
* This file is part of lsp-plugins
* Created on: 13 авг. 2017 г.
*
* lsp-plugins is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* lsp-plugins is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with lsp-plugins. If not, see .
*/
#include
namespace lsp
{
namespace ctl
{
const ctl_class_t CtlListBox::metadata = { "CtlListBox", &CtlWidget::metadata };
CtlListBox::CtlListBox(CtlRegistry *src, LSPListBox *widget): CtlWidget(src, widget)
{
pClass = &metadata;
pDialog = NULL;
// char str[32];
LSPItemList *items = widget->items();
LSPItem *item;
#define MP(x) items->add(&item); item->text()->set_raw(#x); item->set_value(x);
MP(MP_NONE);
MP(MP_ARROW);
MP(MP_HAND);
MP(MP_CROSS);
MP(MP_IBEAM);
MP(MP_DRAW);
MP(MP_PLUS);
MP(MP_SIZE_NESW);
MP(MP_SIZE_NS);
MP(MP_SIZE_WE);
MP(MP_SIZE_NWSE);
MP(MP_UP_ARROW);
MP(MP_HOURGLASS);
MP(MP_DRAG);
MP(MP_NO_DROP);
MP(MP_DANGER);
MP(MP_HSPLIT);
MP(MP_VSPLIT);
MP(MP_MULTIDRAG);
MP(MP_APP_START);
MP(MP_HELP);
#undef MP
/*for (size_t i=0; i<20; ++i)
{
sprintf(str, "item %d", int(i));
items->add(str, i);
}*/
// widget->selection()->set_value(1);
widget->selection()->set_value(MP_DEFAULT);
widget->slots()->bind(LSPSLOT_SUBMIT, slot_submit, this);
}
CtlListBox::~CtlListBox()
{
if (pDialog != NULL)
{
pDialog->destroy();
delete pDialog;
pDialog = NULL;
}
}
status_t CtlListBox::slot_submit(LSPWidget *sender, void *ptr, void *data)
{
CtlListBox *_this = static_cast(ptr);
return (_this != NULL) ? _this->on_submit() : STATUS_OK;
}
status_t CtlListBox::slot_on_ok(LSPWidget *sender, void *ptr, void *data)
{
CtlListBox *_this = static_cast(ptr);
return (_this != NULL) ? _this->on_ok() : STATUS_OK;
}
status_t CtlListBox::on_submit()
{
/* if (pDialog == NULL)
{
pDialog = new LSPMessageBox(pWidget->display());
pDialog->init();
pDialog->set_title("Notification");
pDialog->set_heading("ListBox value has been changed");
pDialog->add_button("Okay", slot_on_ok, this);
pDialog->add_button("Not okay");
pDialog->add_button("Cancel");
}
char text[256];
LSPListBox *lb = static_cast(pWidget);
ssize_t index = lb->selection()->value();
LSPItem *itm = (index >= 0) ? lb->items()->get(index) : NULL;
sprintf(text, "You've selected item '%s', it's value is %f, selected index = %d",
(itm != NULL) ? itm->text() : NULL, (itm != NULL) ? itm->value() : 0.0f,
int(index)
);
pDialog->set_message(text);
pDialog->show(pWidget);*/
LSPListBox *lb = widget_cast(pWidget);
if (lb == NULL)
return STATUS_OK;
// LSPWindow *wnd = widget_cast(pWidget->toplevel());
// if (wnd == NULL)
// return STATUS_OK;
size_t index = lb->selection()->value();
LSPItem *item = lb->items()->get(index);
if (item != NULL)
lb->set_cursor(mouse_pointer_t(item->value()));
return STATUS_OK;
}
status_t CtlListBox::on_ok()
{
lsp_trace("OK button pressed");
return STATUS_OK;
}
}
} /* namespace lsp */