mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Generate date string for the dive list dynamically
.. and sort based on the 'time_t' value itself. This allows us to use a more compact date format that doesn't need to sort alphabetically, because sorting by date is always based on the date value. So we can use just a two-digit year, and skip the seconds, to keep the column narrow, while still sorting correctly. Also, "Depth" is a nice header string, but it is wider than the column itself, which makes the whole column wider than necessary. So put the units in the header instead of in the string, keeping things narrow. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									230a13476d
								
							
						
					
					
						commit
						aab4d593bd
					
				
					 4 changed files with 30 additions and 43 deletions
				
			
		
							
								
								
									
										1
									
								
								dive.c
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								dive.c
									
										
									
									
									
								
							|  | @ -253,7 +253,6 @@ struct dive *try_to_merge(struct dive *a, struct dive *b) | ||||||
| 	memset(res, 0, dive_size(alloc_samples)); | 	memset(res, 0, dive_size(alloc_samples)); | ||||||
| 
 | 
 | ||||||
| 	res->when = a->when; | 	res->when = a->when; | ||||||
| 	res->name = merge_text(a->name, b->name); |  | ||||||
| 	res->location = merge_text(a->location, b->location); | 	res->location = merge_text(a->location, b->location); | ||||||
| 	res->notes = merge_text(a->notes, b->notes); | 	res->notes = merge_text(a->notes, b->notes); | ||||||
| 	MERGE_MAX(res, a, b, maxdepth.mm); | 	MERGE_MAX(res, a, b, maxdepth.mm); | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								dive.h
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								dive.h
									
										
									
									
									
								
							|  | @ -111,7 +111,6 @@ struct sample { | ||||||
| #define MAX_CYLINDERS (4) | #define MAX_CYLINDERS (4) | ||||||
| 
 | 
 | ||||||
| struct dive { | struct dive { | ||||||
| 	const char *name; |  | ||||||
| 	time_t when; | 	time_t when; | ||||||
| 	char *location; | 	char *location; | ||||||
| 	char *notes; | 	char *notes; | ||||||
|  |  | ||||||
							
								
								
									
										49
									
								
								divelist.c
									
										
									
									
									
								
							
							
						
						
									
										49
									
								
								divelist.c
									
										
									
									
									
								
							|  | @ -14,7 +14,7 @@ static void selection_cb(GtkTreeSelection *selection, GtkTreeModel *model) | ||||||
| 	if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) | 	if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	gtk_tree_model_get_value(model, &iter, 5, &value); | 	gtk_tree_model_get_value(model, &iter, 6, &value); | ||||||
| 	selected_dive = g_value_get_int(&value); | 	selected_dive = g_value_get_int(&value); | ||||||
| 	repaint_dive(); | 	repaint_dive(); | ||||||
| } | } | ||||||
|  | @ -28,26 +28,36 @@ static void fill_dive_list(GtkListStore *store) | ||||||
| 		struct dive *dive = dive_table.dives[i]; | 		struct dive *dive = dive_table.dives[i]; | ||||||
| 
 | 
 | ||||||
| 		int len; | 		int len; | ||||||
| 		char buffer[256], *depth, *duration; | 		char buffer[256], *datestr, *depth, *duration; | ||||||
|  | 		struct tm *tm; | ||||||
| 		 | 		 | ||||||
|  | 		tm = gmtime(&dive->when); | ||||||
| 		len = snprintf(buffer, sizeof(buffer), | 		len = snprintf(buffer, sizeof(buffer), | ||||||
| 		               "%d ft", to_feet(dive->maxdepth)); | 			"%02d.%02d.%02d %02d:%02d", | ||||||
|  | 			tm->tm_mday, tm->tm_mon+1, tm->tm_year % 100, | ||||||
|  | 			tm->tm_hour, tm->tm_min); | ||||||
|  | 		datestr = malloc(len+1); | ||||||
|  | 		memcpy(datestr, buffer, len+1); | ||||||
|  | 
 | ||||||
|  | 		len = snprintf(buffer, sizeof(buffer), | ||||||
|  | 		               "%d", to_feet(dive->maxdepth)); | ||||||
| 		depth = malloc(len + 1); | 		depth = malloc(len + 1); | ||||||
| 		memcpy(depth, buffer, len+1); | 		memcpy(depth, buffer, len+1); | ||||||
| 		 | 		 | ||||||
| 		len = snprintf(buffer, sizeof(buffer), | 		len = snprintf(buffer, sizeof(buffer), | ||||||
| 		               "%d min", dive->duration.seconds / 60); | 		               "%d", dive->duration.seconds / 60); | ||||||
| 		duration = malloc(len + 1); | 		duration = malloc(len + 1); | ||||||
| 		memcpy(duration, buffer, len+1); | 		memcpy(duration, buffer, len+1); | ||||||
| 
 | 
 | ||||||
| 		gtk_list_store_append(store, &iter); | 		gtk_list_store_append(store, &iter); | ||||||
| 		gtk_list_store_set(store, &iter, | 		gtk_list_store_set(store, &iter, | ||||||
| 			0, dive->name, | 			0, datestr, | ||||||
| 			1, depth, | 			1, dive->when, | ||||||
| 			2, dive->maxdepth, | 			2, depth, | ||||||
| 			3, duration, | 			3, dive->maxdepth, | ||||||
| 			4, dive->duration.seconds, | 			4, duration, | ||||||
| 			5, i, | 			5, dive->duration.seconds, | ||||||
|  | 			6, i, | ||||||
| 			-1); | 			-1); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -61,7 +71,8 @@ GtkWidget *create_dive_list(void) | ||||||
| 	GtkTreeViewColumn *col; | 	GtkTreeViewColumn *col; | ||||||
| 	GtkWidget         *scroll_window; | 	GtkWidget         *scroll_window; | ||||||
| 
 | 
 | ||||||
| 	model = gtk_list_store_new(6, G_TYPE_STRING, | 	model = gtk_list_store_new(7, | ||||||
|  | 				   G_TYPE_STRING, G_TYPE_INT, | ||||||
| 	                           G_TYPE_STRING, G_TYPE_INT,  | 	                           G_TYPE_STRING, G_TYPE_INT,  | ||||||
| 	                           G_TYPE_STRING, G_TYPE_INT, | 	                           G_TYPE_STRING, G_TYPE_INT, | ||||||
| 	                           G_TYPE_INT); | 	                           G_TYPE_INT); | ||||||
|  | @ -75,8 +86,8 @@ GtkWidget *create_dive_list(void) | ||||||
| 
 | 
 | ||||||
| 	renderer = gtk_cell_renderer_text_new(); | 	renderer = gtk_cell_renderer_text_new(); | ||||||
| 	col = gtk_tree_view_column_new(); | 	col = gtk_tree_view_column_new(); | ||||||
| 	gtk_tree_view_column_set_title(col, "Name"); | 	gtk_tree_view_column_set_title(col, "Date"); | ||||||
| 	gtk_tree_view_column_set_sort_column_id(col, 0); | 	gtk_tree_view_column_set_sort_column_id(col, 1); | ||||||
| 	gtk_tree_view_column_set_resizable (col, TRUE); | 	gtk_tree_view_column_set_resizable (col, TRUE); | ||||||
| 	gtk_tree_view_column_pack_start(col, renderer, TRUE); | 	gtk_tree_view_column_pack_start(col, renderer, TRUE); | ||||||
| 	gtk_tree_view_column_add_attribute(col, renderer, "text", 0); | 	gtk_tree_view_column_add_attribute(col, renderer, "text", 0); | ||||||
|  | @ -84,18 +95,18 @@ GtkWidget *create_dive_list(void) | ||||||
| 	 | 	 | ||||||
| 	renderer = gtk_cell_renderer_text_new(); | 	renderer = gtk_cell_renderer_text_new(); | ||||||
| 	col = gtk_tree_view_column_new(); | 	col = gtk_tree_view_column_new(); | ||||||
| 	gtk_tree_view_column_set_title(col, "Depth"); | 	gtk_tree_view_column_set_title(col, "ft"); | ||||||
| 	gtk_tree_view_column_set_sort_column_id(col, 2); | 	gtk_tree_view_column_set_sort_column_id(col, 3); | ||||||
| 	gtk_tree_view_column_pack_start(col, renderer, TRUE); | 	gtk_tree_view_column_pack_start(col, renderer, TRUE); | ||||||
| 	gtk_tree_view_column_add_attribute(col, renderer, "text", 1); | 	gtk_tree_view_column_add_attribute(col, renderer, "text", 2); | ||||||
| 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); | 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); | ||||||
| 	 | 	 | ||||||
| 	renderer = gtk_cell_renderer_text_new(); | 	renderer = gtk_cell_renderer_text_new(); | ||||||
| 	col = gtk_tree_view_column_new(); | 	col = gtk_tree_view_column_new(); | ||||||
| 	gtk_tree_view_column_set_title(col, "Duration"); | 	gtk_tree_view_column_set_title(col, "min"); | ||||||
| 	gtk_tree_view_column_set_sort_column_id(col, 4); | 	gtk_tree_view_column_set_sort_column_id(col, 5); | ||||||
| 	gtk_tree_view_column_pack_start(col, renderer, TRUE); | 	gtk_tree_view_column_pack_start(col, renderer, TRUE); | ||||||
| 	gtk_tree_view_column_add_attribute(col, renderer, "text", 3); | 	gtk_tree_view_column_add_attribute(col, renderer, "text", 4); | ||||||
| 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); | 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); | ||||||
| 
 | 
 | ||||||
| 	g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE, | 	g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE, | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								parse-xml.c
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								parse-xml.c
									
										
									
									
									
								
							|  | @ -683,26 +683,6 @@ static void dive_start(void) | ||||||
| 	memset(&tm, 0, sizeof(tm)); | 	memset(&tm, 0, sizeof(tm)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static char *generate_name(struct dive *dive) |  | ||||||
| { |  | ||||||
| 	int len; |  | ||||||
| 	struct tm *tm; |  | ||||||
| 	char buffer[256], *p; |  | ||||||
| 
 |  | ||||||
| 	tm = gmtime(&dive->when); |  | ||||||
| 
 |  | ||||||
| 	len = snprintf(buffer, sizeof(buffer), |  | ||||||
| 		"%04d-%02d-%02d " |  | ||||||
| 		"%02d:%02d:%02d", |  | ||||||
| 		tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, |  | ||||||
| 		tm->tm_hour, tm->tm_min, tm->tm_sec); |  | ||||||
| 	p = malloc(len+1); |  | ||||||
| 	if (!p) |  | ||||||
| 		exit(1); |  | ||||||
| 	memcpy(p, buffer, len+1); |  | ||||||
| 	return p; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void sanitize_gasmix(gasmix_t *mix) | static void sanitize_gasmix(gasmix_t *mix) | ||||||
| { | { | ||||||
| 	unsigned int o2, he; | 	unsigned int o2, he; | ||||||
|  | @ -770,8 +750,6 @@ static void dive_end(void) | ||||||
| { | { | ||||||
| 	if (!dive) | 	if (!dive) | ||||||
| 		return; | 		return; | ||||||
| 	if (!dive->name) |  | ||||||
| 		dive->name = generate_name(dive); |  | ||||||
| 	sanitize_cylinder_info(dive); | 	sanitize_cylinder_info(dive); | ||||||
| 	record_dive(dive); | 	record_dive(dive); | ||||||
| 	dive = NULL; | 	dive = NULL; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue