#include "list.h"
#include "container.h"
#include <QTreeView>
#include <QTreeWidgetItem>
#include <QListView>
#include <QComboBox>
extern "C" void* ui_strmodel_getvalue(
void *elm,
int column) {
return column ==
0 ? elm :
NULL;
}
static void* getvalue_wrapper(UiList *list,
void *elm,
int row,
int col,
void *userdata, UiBool *freeResult) {
ui_getvaluefunc getvalue = (ui_getvaluefunc)userdata;
return getvalue(elm, col);
}
static void* null_getvalue(UiList *list,
void *elm,
int row,
int col,
void *userdata, UiBool *freeResult) {
return NULL;
}
UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
QListView *view = new QListView();
ui_getvaluefunc2 getvalue = nullptr;
void *getvaluedata = nullptr;
if(args->getvalue2) {
getvalue = args->getvalue2;
getvaluedata = args->getvalue2data;
}
else if(args->getvalue) {
getvalue = getvalue_wrapper;
getvaluedata = (
void*)args->getvalue;
}
else {
getvalue = getvalue_wrapper;
getvaluedata = (
void*)ui_strmodel_getvalue;
}
UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname,
UI_VAR_LIST);
ListModel *model = new ListModel(obj, view, var, getvalue, getvaluedata);
view->setModel(model);
if(var) {
UiList *list = (UiList*)var->value;
list->update = ui_listmodel_update;
list->getselection = ui_listmodel_getselection;
list->setselection = ui_listmodel_setselection;
list->obj = model;
}
model->setActivationCallback(args->onactivate, args->onactivatedata);
model->setSelectionCallback(args->onselection, args->onselectiondata);
QItemSelectionModel *s = view->selectionModel();
QObject::connect(
s,
SIGNAL(selectionChanged(
const QItemSelection &,
const QItemSelection &)),
model,
SLOT(selectionChanged(
const QItemSelection &,
const QItemSelection &)));
UiLayout layout =
UI_ARGS2LAYOUT(args);
ctn->add(view, layout);
return view;
}
UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
QTreeView *view = new QTreeView();
view->setItemsExpandable(false);
view->setRootIsDecorated(false);
if(args->multiselection) {
view->setSelectionMode(QAbstractItemView::ExtendedSelection);
}
UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname,
UI_VAR_LIST);
ui_getvaluefunc2 getvalue = args->getvalue2;
void *getvaluedata = args->getvalue2data;
if(!getvalue) {
if(args->getvalue) {
getvalue = getvalue_wrapper;
getvaluedata = (
void*)args->getvalue;
}
else {
getvalue = null_getvalue;
}
}
TableModel *model = new TableModel(obj, view, var, args->model, getvalue, getvaluedata);
view->setModel(model);
if(var) {
UiList *list = (UiList*)var->value;
list->update = ui_listmodel_update;
list->getselection = ui_listmodel_getselection;
list->setselection = ui_listmodel_setselection;
list->obj = model;
}
model->setActivationCallback(args->onactivate, args->onactivatedata);
model->setSelectionCallback(args->onselection, args->onselectiondata);
QItemSelectionModel *s = view->selectionModel();
QObject::connect(
s,
SIGNAL(selectionChanged(
const QItemSelection &,
const QItemSelection &)),
model,
SLOT(selectionChanged(
const QItemSelection &,
const QItemSelection &)));
UiLayout layout =
UI_ARGS2LAYOUT(args);
ctn->add(view, layout);
return view;
}
UIWIDGET ui_dropdown_create(UiObject *obj, UiListArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
QComboBox *view = new QComboBox();
UiLayout layout =
UI_ARGS2LAYOUT(args);
ctn->add(view, layout);
ui_getvaluefunc2 getvalue = nullptr;
void *getvaluedata = nullptr;
if(args->getvalue2) {
getvalue = args->getvalue2;
getvaluedata = args->getvalue2data;
}
else if(args->getvalue) {
getvalue = getvalue_wrapper;
getvaluedata = (
void*)args->getvalue;
}
else {
getvalue = getvalue_wrapper;
getvaluedata = (
void*)ui_strmodel_getvalue;
}
UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname,
UI_VAR_LIST);
ListModel *model = new ListModel(obj, view, var, getvalue, getvaluedata);
view->setModel(model);
if(var) {
UiList *list = (UiList*)var->value;
list->update = ui_listmodel_update;
list->getselection = ui_listmodel_getselection;
list->setselection = ui_listmodel_setselection;
list->obj = model;
}
model->setActivationCallback(args->onactivate, args->onactivatedata);
model->setSelectionCallback(args->onselection, args->onselectiondata);
return view;
}