/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2013 Red Hat, Inc.
 */

#ifndef NMT_WIDGET_LIST_H
#define NMT_WIDGET_LIST_H

#include "libnmt-newt/nmt-newt-grid.h"

#define NMT_TYPE_WIDGET_LIST (nmt_widget_list_get_type())
#define NMT_WIDGET_LIST(obj) \
    (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NMT_TYPE_WIDGET_LIST, NmtWidgetList))
#define NMT_WIDGET_LIST_CLASS(klass) \
    (G_TYPE_CHECK_CLASS_CAST((klass), NMT_TYPE_WIDGET_LIST, NmtWidgetListClass))
#define NMT_IS_WIDGET_LIST(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NMT_TYPE_WIDGET_LIST))
#define NMT_IS_WIDGET_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NMT_TYPE_WIDGET_LIST))
#define NMT_WIDGET_LIST_GET_CLASS(obj) \
    (G_TYPE_INSTANCE_GET_CLASS((obj), NMT_TYPE_WIDGET_LIST, NmtWidgetListClass))

typedef struct {
    NmtNewtGrid parent;

} NmtWidgetList;

typedef struct {
    NmtNewtGridClass parent;

    /* signals */
    void (*add_clicked)(NmtWidgetList *list);
    void (*remove_clicked)(NmtWidgetList *list, int n);

    /* methods */
    NmtNewtWidget *(*create_widget)(NmtWidgetList *list, int n);

} NmtWidgetListClass;

GType nmt_widget_list_get_type(void);

typedef NmtNewtWidget *(*NmtWidgetListCallback)(NmtWidgetList *list, int n, gpointer user_data);

NmtNewtWidget *nmt_widget_list_new(NmtWidgetListCallback create_callback,
                                   gpointer              user_data,
                                   GDestroyNotify        destroy_notify,
                                   NmtNewtWidget        *empty_widget);

int  nmt_widget_list_get_length(NmtWidgetList *list);
void nmt_widget_list_set_length(NmtWidgetList *list, int length);

#endif /* NMT_WIDGET_LIST_H */
