- GtkWidget *fixed_frame;
- PangoFontDescription *pango_font;
- char *memdummy[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
- fixed_frame = gtk_frame_new(0);
- gtk_frame_set_shadow_type(GTK_FRAME(fixed_frame),
- GTK_SHADOW_ETCHED_OUT);
- gtk_widget_set_usize(GTK_WIDGET(fixed_frame), width, height);
-
- memclist = gtk_clist_new(18);
- gtk_clist_set_selection_mode(GTK_CLIST(memclist), GTK_SELECTION_SINGLE);
- gtk_widget_set_usize(GTK_WIDGET(memclist), 620, 250);
-
- for (i = 0; i < 18; i++) {
- gtk_clist_set_column_justification(
- GTK_CLIST(memclist), i, GTK_JUSTIFY_LEFT);
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ /* Columns and cell renderers */
+ renderer = gtk_cell_renderer_text_new();
+
+ /* Add address column */
+ column = gtk_tree_view_column_new_with_attributes(
+ "Address", renderer, "text", COL_ADDRESS, NULL);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column);
+
+ for (i = COL_DATA0; i < (COL_DATA0 + cfg->bits_per_row); i++) {
+ char col_name[8];
+
+ /* Create new renderer for each editable cell. */
+ renderer = gtk_cell_renderer_text_new();
+
+ /* Allow edition, align to left side. */
+ g_object_set(renderer, "editable", TRUE, "xalign", 0, NULL);
+
+ g_signal_connect(renderer, "edited",
+ G_CALLBACK(memwin_cell_edited),
+ gtk_tree_view_get_model(
+ GTK_TREE_VIEW(listview)));
+
+ /* Add column index and memory_id, used when editing the cell. */
+ g_object_set_data(G_OBJECT(renderer), "column",
+ GUINT_TO_POINTER(i));
+ g_object_set_data(G_OBJECT(renderer), "memory_id",
+ GUINT_TO_POINTER(memory_id));
+
+ /* Use two digits only if DATA_ROWS > 10 */
+ if (cfg->bits_per_row < 10)
+ sprintf(col_name, "B%1d", i - COL_DATA0);
+ else
+ sprintf(col_name, "B%02d", i - COL_DATA0);
+
+ column = gtk_tree_view_column_new_with_attributes(
+ col_name, renderer, "text", i, NULL);
+ gtk_tree_view_column_set_sizing(column,
+ GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column);
+ }
+
+ /* Add ASCII column, using fixed-font. */
+ renderer = gtk_cell_renderer_text_new();
+ g_object_set(renderer, "family", "Monospace", NULL);
+ column = gtk_tree_view_column_new_with_attributes(
+ "ASCII", renderer, "text", COL_ASCII, NULL);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column);
+}
+
+static int
+compute_data_rows(int memory_id)
+{
+ int data_rows;
+
+ if (memory_id == INT_MEM_ID) {
+ data_rows = options.iram_size / cfg->bits_per_row;
+ } else if (memory_id == EXT_MEM_ID) {
+ data_rows = options.xram_size / cfg->bits_per_row;
+ } else {
+ log_fail("Invalid memory type");
+ exit(1);