static void rb_query_creator_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { RBQueryCreator *creator = RB_QUERY_CREATOR (object); RBQueryCreatorPrivate *priv = QUERY_CREATOR_GET_PRIVATE (creator); switch (prop_id) { case PROP_DB: g_value_set_object (value, priv->db); break; case PROP_CREATING: g_value_set_boolean (value, priv->creating); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void rb_query_creator_constructed (GObject *object) { RBQueryCreatorPrivate *priv; RBQueryCreator *creator; GtkWidget *mainbox; GtkWidget *content_area; GtkBuilder *builder; RB_CHAIN_GOBJECT_METHOD (rb_query_creator_parent_class, constructed, object); creator = RB_QUERY_CREATOR (object); priv = QUERY_CREATOR_GET_PRIVATE (creator); if (priv->creating) { gtk_dialog_add_button (GTK_DIALOG (creator), _("_Cancel"), GTK_RESPONSE_CLOSE); gtk_dialog_add_button (GTK_DIALOG (creator), _("_New"), GTK_RESPONSE_OK); } else { gtk_dialog_add_button (GTK_DIALOG (creator), _("_Close"), GTK_RESPONSE_CLOSE); } gtk_dialog_set_default_response (GTK_DIALOG (creator), GTK_RESPONSE_CLOSE); priv->property_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); priv->criteria_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); priv->entry_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); priv->button_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); if (priv->creating) gtk_window_set_title (GTK_WINDOW (creator), _("Create Automatic Playlist")); else gtk_window_set_title (GTK_WINDOW (creator), _("Edit Automatic Playlist")); content_area = gtk_dialog_get_content_area (GTK_DIALOG (creator)); gtk_container_set_border_width (GTK_CONTAINER (creator), 5); gtk_box_set_spacing (GTK_BOX (content_area), 2); builder = rb_builder_load ("create-playlist.ui", creator); priv->disjunction_check = GTK_WIDGET (gtk_builder_get_object (builder, "disjunctionCheck")); priv->limit_check = GTK_WIDGET (gtk_builder_get_object (builder, "limitCheck")); priv->limit_entry = GTK_WIDGET (gtk_builder_get_object (builder, "limitEntry")); priv->limit_option = GTK_WIDGET (gtk_builder_get_object (builder, "limitOption")); priv->addbutton = GTK_WIDGET (gtk_builder_get_object (builder, "addButton")); priv->sort_label = GTK_WIDGET (gtk_builder_get_object (builder, "sortLabel")); priv->sort_menu = GTK_WIDGET (gtk_builder_get_object (builder, "sortMenu")); priv->sort_desc = GTK_WIDGET (gtk_builder_get_object (builder, "sortDesc")); gtk_combo_box_set_active (GTK_COMBO_BOX (priv->limit_option), 0); g_signal_connect_object (G_OBJECT (priv->limit_check), "toggled", G_CALLBACK (limit_toggled_cb), creator, 0); limit_toggled_cb (priv->limit_check, creator); gtk_size_group_add_widget (priv->button_size_group, priv->addbutton); g_signal_connect_object (G_OBJECT (priv->addbutton), "clicked", G_CALLBACK (add_button_click_cb), creator, 0); setup_sort_option_menu (creator, priv->sort_menu, sort_options, num_sort_options); priv->vbox = GTK_BOX (gtk_builder_get_object (builder, "sub_vbox")); if (priv->creating) append_row (creator); mainbox = GTK_WIDGET (gtk_builder_get_object (builder, "complex-playlist-creator")); gtk_box_pack_start (GTK_BOX (content_area), mainbox, FALSE, FALSE, 0); gtk_widget_show_all (GTK_WIDGET (creator)); g_object_unref (builder); }
static void query_creator_test_load_query (RhythmDB *db, RhythmDBQuery *query, RhythmDBQueryModelLimitType limit_type, GArray *limit_value, const char *sort_column, gint sort_direction) { GtkWidget *creator; RhythmDBQuery *squery; RhythmDBQuery *query2 = NULL; GArray *limit_value2 = NULL; const char *sort_column2 = NULL; RhythmDBQueryModelLimitType limit_type2; gint sort_direction2; char *str1, *str2; squery = rhythmdb_query_parse (db, RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TYPE, RHYTHMDB_ENTRY_TYPE_SONG, RHYTHMDB_QUERY_SUBQUERY, query, RHYTHMDB_QUERY_END); creator = rb_query_creator_new_from_query (db, squery, limit_type, limit_value, sort_column, sort_direction); str1 = rhythmdb_query_to_string (db, squery); fail_unless (creator != NULL, "could not create query editor for %s", str1); /* check queries */ query2 = rb_query_creator_get_query (RB_QUERY_CREATOR (creator)); str2 = rhythmdb_query_to_string (db, query2); fail_unless (rhythmdb_query_equal (squery, query2), "queries differ: %s; %s", str1, str2); rhythmdb_query_free (query2); g_free (str2); g_free (str1); /* check limits */ rb_query_creator_get_limit (RB_QUERY_CREATOR (creator), &limit_type2, &limit_value2); str1 = rb_gvalue_array_to_string (limit_value); str2 = rb_gvalue_array_to_string (limit_value2); fail_unless (limit_type == limit_type2, "limit types differ: %d; %d", limit_type, limit_type2); fail_unless (rb_value_array_equal (limit_value, limit_value2), "limit values differ: %s; %s", str1, str2); g_free (str2); g_free (str1); if (limit_value2) g_array_unref (limit_value2); /* check sorting */ rb_query_creator_get_sort_order (RB_QUERY_CREATOR (creator), &sort_column2, &sort_direction2); fail_unless (strcmp (sort_column2, sort_column) == 0, "sort columns differ: %s; %s", sort_column, sort_column2); fail_unless (sort_direction2 == sort_direction, "sort directions differ: %d; %d", sort_direction, sort_direction2); rhythmdb_query_free (squery); gtk_widget_destroy (creator); }