- char TextTmp[255];
- int row, column, TextLength;
-
- gtk_clist_freeze( GTK_CLIST( memclist ) );
- for ( row = 0; row < 16; row++ ) {
- sprintf( TextTmp, "%.4X", Address );
- gtk_clist_set_text( GTK_CLIST( memclist ), row, 0, TextTmp );
-
- for ( column = 0; column < 16; column++ ) {
- sprintf( TextTmp, "%.2X", ( int ) cpu8051_ReadD( Address + column ) );
- gtk_clist_set_text( GTK_CLIST( memclist ), row, column + 1, TextTmp );
- }
-
- TextLength = 0;
- for ( column = 0; column < 16; column++ ) {
- if ( ( ( int ) cpu8051_ReadD( Address + column ) >= 32 ) && ( ( int ) cpu8051_ReadD( Address + column ) <= 126 ) )
- TextLength += sprintf( &TextTmp[ TextLength ], "%c", cpu8051_ReadD( Address + column ) );
- else TextLength += sprintf( &TextTmp[ TextLength ], "." );
- }
- gtk_clist_set_text( GTK_CLIST( memclist ), row, 17, TextTmp );
-
- Address += 16;
- }
-
- gtk_clist_select_row( GTK_CLIST( memclist ), 0, 0 );
- gtk_clist_thaw( GTK_CLIST( memclist ) );
+ int i;
+ 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);