Beispiel #1
0
    private void RatingCellEdited(object o, EditedArgs args)
    {
        TreeIter iter;

        treeview1.Model.GetIter(out iter, new TreePath(args.Path));

        Movie  movie = (Movie)treeview1.Model.GetValue(iter, 0);
        string input = args.NewText.Trim();

        if (input == string.Empty)
        {
            Console.Error.WriteLine("Remove rating.");
            if (ratings.Remove(movie.ID))
            {
                rating_predictor.RemoveRating(current_user_id, movie.ID);
            }

            PredictAllRatings();
            return;
        }

        input = input.Replace(',', '.');         // also allow "German" floating point numbers

        try
        {
            double rating = double.Parse(input, CultureInfo.InvariantCulture);

            if (rating > rating_predictor.MaxRating)
            {
                rating = rating_predictor.MaxRating;
            }
            if (rating < rating_predictor.MinRating)
            {
                rating = rating_predictor.MinRating;
            }

            // if rating already exists, remove it first
            if (ratings.ContainsKey(movie.ID))
            {
                rating_predictor.RemoveRating(current_user_id, movie.ID);
            }

            // add the new rating
            rating_predictor.AddRating(current_user_id, movie.ID, rating);
            ratings[movie.ID] = rating;

            // recompute ratings
            PredictAllRatings();
        }
        catch (FormatException)
        {
            Console.Error.WriteLine("Could not parse input '{0}' as a number.", input);
        }
    }