diff --git a/cell-selector/cell-statistics-renderer.c b/cell-selector/cell-statistics-renderer.c new file mode 100644 index 0000000..42588fa --- /dev/null +++ b/cell-selector/cell-statistics-renderer.c @@ -0,0 +1,105 @@ +/* + * GDSII-Converter + * Copyright (C) 2022 Mario Hüttel + * + * This file is part of GDSII-Converter. + * + * GDSII-Converter is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * GDSII-Converter 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GDSII-Converter. If not, see . + */ + +/** + * @file cell-statistics-renderer.c + * @brief CellStatisticsRenderer GObject Class + * @author Mario Hüttel + */ + +/** + * @addtogroup CellStatisticsRenderer + * @{ + */ + +#include + +G_DEFINE_TYPE(CellStatisticsRenderer, cell_statistics_renderer, GTK_TYPE_CELL_RENDERER_TEXT) + +enum { + PROP_CELL_STAT = 1, + PROP_COUNT +}; + +static void cell_statistics_renderer_set_property(GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + GValue val = G_VALUE_INIT; + GString *string; + const struct gds_cell_statistics *cell_stat; + + switch (param_id) { + case PROP_CELL_STAT: + cell_stat = (const struct gds_cell_statistics *)g_value_get_pointer(value); + g_value_init(&val, G_TYPE_STRING); + string = g_string_new_len("", 5); + if (cell_stat) + g_string_printf(string, "%zu", cell_stat->vertex_count); + g_value_set_string(&val, string->str); + g_object_set_property(object, "text", &val); + g_value_unset(&val); + g_string_free(string, TRUE); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); + break; + } +} + +static void cell_statistics_renderer_get_property(GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + (void)value; + + switch (param_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); + break; + } +} + +static GParamSpec *properties[PROP_COUNT]; + +void cell_statistics_renderer_class_init(CellStatisticsRendererClass *klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS(klass); + + oclass->set_property = cell_statistics_renderer_set_property; + oclass->get_property = cell_statistics_renderer_get_property; + + properties[PROP_CELL_STAT] = g_param_spec_pointer("cell-stat", "cell-stat", + "Cell statistics", G_PARAM_WRITABLE); + g_object_class_install_properties(oclass, PROP_COUNT, properties); +} + +void cell_statistics_renderer_init(CellStatisticsRenderer *self) +{ + (void)self; +} + +GtkCellRenderer *cell_statistics_renderer_new(void) +{ + return GTK_CELL_RENDERER(g_object_new(TYPE_GDS_RENDER_CELL_STAT_RENDERER, NULL)); +} + +/** @} */ diff --git a/gds-render-gui.c b/gds-render-gui.c index d29062f..adf02ac 100644 --- a/gds-render-gui.c +++ b/gds-render-gui.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -224,7 +225,7 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self) GtkTreeViewColumn *column; self->cell_tree_store = gtk_tree_store_new(CELL_SEL_COLUMN_COUNT, G_TYPE_POINTER, - G_TYPE_POINTER, G_TYPE_UINT, G_TYPE_STRING); + G_TYPE_POINTER, G_TYPE_UINT, G_TYPE_POINTER); /* Searching */ self->cell_filter = GTK_TREE_MODEL_FILTER( @@ -240,7 +241,7 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self) render_cell = lib_cell_renderer_new(); render_lib = lib_cell_renderer_new(); - render_vertex_count = gtk_cell_renderer_text_new(); + render_vertex_count = cell_statistics_renderer_new(); column = gtk_tree_view_column_new_with_attributes(_("Library"), render_lib, "gds-lib", CELL_SEL_LIBRARY, NULL); gtk_tree_view_append_column(self->cell_tree_view, column); @@ -249,7 +250,7 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self) "error-level", CELL_SEL_CELL_ERROR_STATE, NULL); gtk_tree_view_append_column(self->cell_tree_view, column); - column = gtk_tree_view_column_new_with_attributes(_("Vertex Count"), render_vertex_count, "text", CELL_SEL_STAT, + column = gtk_tree_view_column_new_with_attributes(_("Vertex Count"), render_vertex_count, "cell-stat", CELL_SEL_STAT, NULL); gtk_tree_view_append_column(self->cell_tree_view, column); @@ -262,6 +263,10 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self) return 0; } +const struct gds_cell_statistics cc = { + .vertex_count = 12, +}; + /** * @brief Callback function of Load GDS button * @param button @@ -360,6 +365,7 @@ static void on_load_gds(gpointer button, gpointer user) CELL_SEL_CELL, gds_c, CELL_SEL_CELL_ERROR_STATE, cell_error_level, CELL_SEL_LIBRARY, gds_c->parent_library, + CELL_SEL_STAT, &cc, -1); } /* for cells */ } /* for libraries */ diff --git a/include/gds-render/cell-selector/cell-statistics-renderer.h b/include/gds-render/cell-selector/cell-statistics-renderer.h new file mode 100644 index 0000000..d45870a --- /dev/null +++ b/include/gds-render/cell-selector/cell-statistics-renderer.h @@ -0,0 +1,56 @@ +/* + * GDSII-Converter + * Copyright (C) 2022 Mario Hüttel + * + * This file is part of GDSII-Converter. + * + * GDSII-Converter is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * GDSII-Converter 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GDSII-Converter. If not, see . + */ + +/** + * @file cell-statistics-renderer.h + * @brief Header file for the CellStatisticsRenderer GObject Class + * @author Mario Hüttel + */ + +/** + * @addtogroup CellStatisticsRenderer + * @{ + */ + +#ifndef _CELL_STATISTICS_RENDERER_H_ +#define _CELL_STATISTICS_RENDERER_H_ + +#include +#include + +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE(CellStatisticsRenderer, cell_statistics_renderer, GDS_RENDER, CELL_STAT_RENDERER, GtkCellRendererText) +#define TYPE_GDS_RENDER_CELL_STAT_RENDERER (cell_statistics_renderer_get_type()) + +typedef struct _CellStatisticsRenderer { + GtkCellRendererText super; +} CellStatisticsRenderer; + +/** + * @brief New Cell statistics renderer + * @return GObject + */ +GtkCellRenderer *cell_statistics_renderer_new(void); + +G_END_DECLS + +#endif /* _CELL_STATISTICS_RENDERER_H_ */ + +/** @} */