static void single_code_window_load(Window *window) {
	window_set_click_config_provider(single_code_main_window, (ClickConfigProvider) window_config_provider);
	
	Layer *window_layer = window_get_root_layer(single_code_main_window);
	display_bounds = layer_get_frame(window_layer);

  Layer *countdown_layer = layer_create(display_bounds);
  layer_add_child(window_layer, countdown_layer);
	//add_countdown_layer(s_layer);
  start_managing_countdown_layer(countdown_layer);
	
	text_label_rect = single_text_label_rect;
	GRect text_label_start = text_label_rect;
	text_label_start.origin.x = display_bounds.size.w;
	text_label_layer = text_layer_create(text_label_start);
	text_layer_set_background_color(text_label_layer, GColorClear);
	text_layer_set_text_alignment(text_label_layer, single_text_label_alignment);
	text_layer_set_overflow_mode(text_label_layer, GTextOverflowModeWordWrap);
	text_layer_set_text(text_label_layer, label_text);
	layer_add_child(window_layer, text_layer_get_layer(text_label_layer));
	
	text_pin_rect = single_text_pin_rect;
	GRect text_pin_start = text_pin_rect;
	text_pin_start.origin.x = display_bounds.size.w;
	text_pin_layer = text_layer_create(text_pin_start);
	text_layer_set_background_color(text_pin_layer, GColorClear);
	text_layer_set_text_alignment(text_pin_layer, GTextAlignmentCenter);
	text_layer_set_text(text_pin_layer, pin_text);
	layer_add_child(window_layer, text_layer_get_layer(text_pin_layer));
	
	apply_display_colors();
	set_fonts();
	loading_complete = true;
}
void animation_control(void) {	
	if (animation_count > 0) {
		animation_count--;
		return;
	}
	
	switch (animation_state) {
		case 0: // initial launch, animate the code and label on screen
			animation_state = 10;
			if (fonts_changed)
				set_fonts();
			animate_code_on();
			animate_label_on();
			show_countdown_layer();
			break;
		case 20: // animate the code off screen
			animation_state = 30;
			animation_direction = DOWN;
			animate_code_off();
			break;
		case 30: // animate the code on screen
			animation_state = 10;
			animation_direction = LEFT;
			animate_code_on();
			break;
		case 40: // animate the code and label off screen
			animation_state = 0;
			animation_count = 1;
			animate_code_off();
			animate_label_off();
			break;
		case 50: // animate the code and label and second counter off screen
			animation_state = 60;
			animation_unschedule_all();
			animation_count = 1;
			animation_direction = RIGHT;
			hide_countdown_layer();
			animate_code_off();
			animate_label_off();
			break;
		case 60: // animate the swipe layer on screen using the background color
			animation_state = 70;
			GRect start = GRect(0, display_bounds.size.h*-1, display_bounds.size.w, display_bounds.size.h);
			swipe_layer = text_layer_create(start);
			text_layer_set_background_color(swipe_layer, bg_color);
			Layer *window_layer = window_get_root_layer(single_code_main_window);
			layer_add_child(window_layer, text_layer_get_layer(swipe_layer));
			animate_layer(text_layer_get_layer(swipe_layer), AnimationCurveEaseInOut, &start, &display_bounds, 500, on_animation_stopped_callback);
			break;
		case 70: // set the new colors and clear the swipe layer
			apply_display_colors();
			text_layer_destroy(swipe_layer);
			animation_state = 0;
			animation_control();
			break;
	}
}
WindowCheckKeyterms::WindowCheckKeyterms(GtkWidget * parent_layout, GtkAccelGroup *accelerator_group, bool startup):
  FloatingWindow(parent_layout, widCheckKeyterms, _("Check keyterms"), startup)
// Window for checking keyterms.
{
  // Save / initialize variables.
  keyword_id = 0;
  text_changed_event_id = 0;
  my_editor = NULL;
  
  // Build gui.
  vbox = gtk_vbox_new(FALSE, 0);
  gtk_widget_show(vbox);
  gtk_container_add(GTK_CONTAINER(vbox_client), vbox);

  // Produce the signal to be given on a new reference.
  signal = gtk_button_new();
  gtk_box_pack_start(GTK_BOX(vbox), signal, FALSE, FALSE, 0);

  hbox_collection = gtk_hbox_new (FALSE, 5);
  gtk_widget_show (hbox_collection);
  gtk_box_pack_start (GTK_BOX (vbox), hbox_collection, FALSE, FALSE, 0);

  label_collection = gtk_label_new_with_mnemonic (_("_Collection"));
  gtk_widget_show (label_collection);
  gtk_box_pack_start (GTK_BOX (hbox_collection), label_collection, FALSE, FALSE, 0);
  gtk_misc_set_alignment (GTK_MISC (label_collection), 0, 0.5);

  combobox_collection = gtk_combo_box_new_text ();
  gtk_widget_show (combobox_collection);
  gtk_box_pack_start (GTK_BOX (hbox_collection), combobox_collection, TRUE, TRUE, 0);

  connect_focus_signals (combobox_collection);
  
  label_list = gtk_label_new_with_mnemonic (_("_List"));
  gtk_widget_show (label_list);
  gtk_box_pack_start (GTK_BOX (vbox), label_list, FALSE, FALSE, 0);
  gtk_misc_set_alignment (GTK_MISC (label_list), 0, 0.5);

  scrolledwindow_terms = gtk_scrolled_window_new (NULL, NULL);
  gtk_widget_show (scrolledwindow_terms);
  gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow_terms, TRUE, TRUE, 0);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow_terms), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow_terms), GTK_SHADOW_IN);

  webview_terms = webkit_web_view_new();
  gtk_widget_show (webview_terms);
  gtk_container_add (GTK_CONTAINER (scrolledwindow_terms), webview_terms);

  connect_focus_signals (webview_terms);
  
  // Store for the renderings.
  treestore_renderings = gtk_tree_store_new(4, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_BOOLEAN);

  treeview_renderings = gtk_tree_view_new_with_model(GTK_TREE_MODEL(treestore_renderings));
  gtk_widget_show(treeview_renderings);
  gtk_box_pack_start(GTK_BOX(vbox), treeview_renderings, false, false, 0);

  connect_focus_signals (treeview_renderings);

  // Renderer, column and selection.
  GtkCellRenderer *renderer_renderings = gtk_cell_renderer_toggle_new();
  g_signal_connect(renderer_renderings, "toggled", G_CALLBACK(keyterm_whole_word_toggled), gpointer(this));
  GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes("Whole\nword", renderer_renderings, "active", 0, NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_renderings), column);
  renderer_renderings = gtk_cell_renderer_toggle_new();
  g_signal_connect(renderer_renderings, "toggled", G_CALLBACK(keyterm_case_sensitive_toggled), gpointer(this));
  column = gtk_tree_view_column_new_with_attributes(_("Case\nsensitive"), renderer_renderings, "active", 1, NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_renderings), column);
  renderer_renderings = gtk_cell_renderer_text_new();
  g_signal_connect(renderer_renderings, "edited", G_CALLBACK(cell_edited), gpointer(this));
  column = gtk_tree_view_column_new_with_attributes(_("Rendering"), renderer_renderings, "text", 2, "editable", 3, NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_renderings), column);
  treeselect_renderings = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_renderings));
  gtk_tree_selection_set_mode(treeselect_renderings, GTK_SELECTION_SINGLE);

  g_signal_connect((gpointer) webview_terms, "navigation-policy-decision-requested", G_CALLBACK(on_navigation_policy_decision_requested), gpointer(this));
  g_signal_connect((gpointer) combobox_collection, "changed", G_CALLBACK(on_combobox_keyterm_collection_changed), gpointer(this));

  gtk_label_set_mnemonic_widget(GTK_LABEL(label_collection), combobox_collection);
  gtk_label_set_mnemonic_widget(GTK_LABEL(label_list), webview_terms);

  // Load the categories.
  reload_collections ();

  // Load the keyterms.
  on_combobox_keyterm_collection ();
  
  // Main focused widget.
  last_focused_widget = combobox_collection;
  gtk_widget_grab_focus (last_focused_widget);
  
  set_fonts ();
}