~ruther/CTU-FEE-B0B35APO-Semestral-project

49dca4f647ac7a2aac685e0a1a983adda1fbbfb9 — František Boháček 3 years ago af570a0
feat: add gui container info to store container create data
2 files changed, 70 insertions(+), 0 deletions(-)

A lib-gui/include/gui_container_info.h
A lib-gui/src/gui_container_info.c
A lib-gui/include/gui_container_info.h => lib-gui/include/gui_container_info.h +24 -0
@@ 0,0 1,24 @@
#ifndef __GUI_CONTAINER_H__
#define __GUI_CONTAINER_H__

#include "gui.h"

typedef struct {
  container_type_t type;
  union {
    struct {
      uint16_t components_count;
    } group;
    struct {
      render_item render_item_fn;
      render_item render_header_fn;
      uint16_t item_height;
    } list;
  } payload;
} gui_container_info_t;

uint16_t gui_container_info_get_components_count(gui_container_info_t info);
container_t gui_container_info_create(gui_container_info_t info, component_t *components, uint16_t components_count);
void gui_container_info_init(container_t *container, void *state, uint32_t items_count, int16_t x, int16_t y);

#endif // __GUI_CONTAINER_H__

A lib-gui/src/gui_container_info.c => lib-gui/src/gui_container_info.c +46 -0
@@ 0,0 1,46 @@
#include "gui_container_info.h"
#include "gui.h"

uint16_t gui_container_info_get_components_count(gui_container_info_t info) {
  if (info.type == CONT_GROUP) {
    return info.payload.group.components_count;
  }

  return 0;
}

container_t gui_container_info_create(gui_container_info_t info, component_t *components, uint16_t components_count) {
  switch(info.type) {
  case CONT_TABLE:
    {
    container_t container = gui_list_container_create(
        NULL, 0, info.payload.list.item_height,
        info.payload.list.render_item_fn, info.payload.list.render_header_fn);

    return container;
    }
    break;
  case CONT_ONE:
    return gui_one_container_create(0, 0);
  case CONT_GROUP:
    return gui_group_container_create(0, 0, components, components_count);
  }
}

void gui_container_info_init(container_t *container, void *state,
                             uint32_t items_count, int16_t x, int16_t y) {
  container->x = x;
  container->y = y;

  switch(container->type) {
  case CONT_ONE:
    // do nothing
    break;
  case CONT_GROUP:
    // do nothing
    break;
  case CONT_TABLE:
    gui_list_container_set_state(container, state, items_count);
    break;
  }
}

Do not follow this link