Пример #1
0
term* normalize_fuel_lambda(context *Sigma, typing_context* Delta, term* t, int fuel) {
  term* b = NULL;
  term* A = normalize_fuel(Sigma, Delta, t->left, fuel-1);

  context* extend = context_add(variable_dup(t->var), NULL, Sigma);
  b = normalize_fuel(extend, Delta, t->right, fuel-1);
  context_pop(extend);
  if (!b) goto error;
  return make_lambda(variable_dup(t->var), A, b);
 error:
  free_term(A);
  free_term(b);
  return NULL;
}
Пример #2
0
term* normalize_fuel_pi(context *Sigma, typing_context* Delta, term* t, int fuel) {
  term* B = NULL;
  term* A = normalize_fuel(Sigma, Delta, t->left, fuel-1);
  if (!A) goto error;
  context* extend = context_add(variable_dup(t->var), NULL, Sigma);
  B = normalize_fuel(extend, Delta, t->right, fuel-1);
  context_pop(extend);
  if (!B) goto error;
  return make_pi(variable_dup(t->var), A, B);
 error:
  free_term(A);
  free_term(B);
  return NULL;
}
Пример #3
0
GtkWidget *tracksearch_window( void )
{
	GtkWidget *win;
	GtkWidget *winbox;
	GtkWidget *search_box;
	GtkWidget *search_label;
	GtkWidget *search_button;
	GtkWidget *scroll;
	GtkTreeSelection *sel;
	search_widgets *wg;
	GtkActionGroup *ag_always, *ag_track_one, *ag_track_any;
	GtkAction *close;
	GtkUIManager *ui;
	GtkWidget *context;


	/* TODO: use g_object_set_data() */
	wg = g_malloc(sizeof(search_widgets));
	memset(wg, 0, sizeof(search_widgets));


	/* top box */
	winbox = gtk_vbox_new( FALSE, 0 );



	/* input */
	search_box = gtk_hbox_new( FALSE, 0 );
	gtk_box_pack_start( GTK_BOX(winbox), search_box, FALSE, FALSE, 1 );
	gtk_widget_show( search_box );

	search_label = gtk_label_new("filter:");
	gtk_box_pack_start( GTK_BOX(search_box), search_label, FALSE, FALSE, 1 );
	gtk_widget_show( search_label );

	/* TODO: give some hint about filter syntax */
	/* TODO: input history for filter */
	/* TODO: auto complete for filter */
	wg->input = gtk_entry_new();
	g_object_set( wg->input, "activates-default", TRUE, NULL );
	gtk_box_pack_start( GTK_BOX(search_box), wg->input, TRUE, TRUE, 1 );
	gtk_widget_show( wg->input );

	search_button = gtk_button_new_with_label("search");
	gtk_signal_connect( GTK_OBJECT(search_button), "clicked",
		G_CALLBACK(search_button_on_click), wg );
	gtk_box_pack_start( GTK_BOX(search_box), search_button, FALSE, FALSE, 1 );
	GTK_WIDGET_SET_FLAGS( search_button, GTK_CAN_DEFAULT);

	gtk_widget_show( search_button );



	/* scrolled result list */
	scroll = gtk_scrolled_window_new( GTK_ADJUSTMENT(NULL), GTK_ADJUSTMENT(NULL) );
	gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(scroll),
		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );

	wg->list = track_list_new_with_list( TRUE, NULL );
	sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(wg->list) );
	gtk_tree_selection_set_mode( GTK_TREE_SELECTION(sel), GTK_SELECTION_MULTIPLE );
	g_signal_connect( G_OBJECT(sel), "changed",
		G_CALLBACK(selection_on_change), NULL );
	gtk_container_add( GTK_CONTAINER(scroll), wg->list );
	gtk_widget_show( wg->list );

	gtk_box_pack_start( GTK_BOX( winbox ), scroll, TRUE, TRUE, 0 );
	gtk_widget_show( scroll );


	/* status bar */
	wg->status = gtk_statusbar_new();
	gtk_box_pack_start( GTK_BOX(winbox), wg->status, FALSE, FALSE, 0 );
	gtk_widget_show( wg->status );


	/* actions + uimanager for menu, toolbar + hotkeys */
	ag_always = gtk_action_group_new("TracksearchAlways");
        gtk_action_group_add_actions(ag_always, action_always,
		G_N_ELEMENTS(action_always), NULL );
	close = gtk_action_group_get_action( ag_always, "Close" );

	ag_track_one = gtk_action_group_new("TracksearchOne");
	g_object_set_data( G_OBJECT(sel), "agroup-one", ag_track_one);
	gtk_action_group_set_sensitive(ag_track_one, FALSE );
        gtk_action_group_add_actions(ag_track_one, action_track_one,
		G_N_ELEMENTS(action_track_one), wg->list );

	ag_track_any = gtk_action_group_new("TracksearchAny");
	g_object_set_data( G_OBJECT(sel), "agroup-any", ag_track_any);
	gtk_action_group_set_sensitive(ag_track_any, FALSE );
        gtk_action_group_add_actions(ag_track_any, action_track_any,
		G_N_ELEMENTS(action_track_any), wg->list );

	ui = gtk_ui_manager_new();
	gtk_ui_manager_insert_action_group(ui, ag_always, 0);
	gtk_ui_manager_insert_action_group(ui, ag_track_one, 1);
	gtk_ui_manager_insert_action_group(ui, ag_track_any, 2);

	/* top window */
	win = childwindow_new( "search tracks", winbox, ui, uidesc );
	gtk_window_set_default_size(GTK_WINDOW(win), 600, 300);
	g_object_set_data( G_OBJECT(close), "topwindow", win );
	gtk_window_set_default( GTK_WINDOW(win), search_button );

	gtk_signal_connect( GTK_OBJECT(win), "destroy",
		G_CALLBACK(tracksearch_on_destroy), wg);


	/* context menu */
	context = gtk_ui_manager_get_widget( ui, "/TrackPopup" );
	context_add( GTK_TREE_VIEW(wg->list), GTK_MENU(context) );

	/* free ui_manager */
	g_object_unref( G_OBJECT(ui) );


	return win;
}