Author: baby-guest
Date: 2007-08-24 11:37:41 +0000 (Fri, 24 Aug 2007)
New Revision: 3803

Modified:
   software/ui/src/Makefile.am
   software/ui/src/filter.cpp
   software/ui/src/filter.h
   software/ui/src/taghandler.h
Log:
Modified filter to use the new tag handler



Modified: software/ui/src/Makefile.am
===================================================================
--- software/ui/src/Makefile.am 2007-08-24 07:49:42 UTC (rev 3802)
+++ software/ui/src/Makefile.am 2007-08-24 11:37:41 UTC (rev 3803)
@@ -9,6 +9,7 @@
        ui.cpp \
        pkgbrowser.cpp \
        filter.cpp \
+       taghandler.cpp \
        windows.cpp \
        aux.cpp \
        games.cpp

Modified: software/ui/src/filter.cpp
===================================================================
--- software/ui/src/filter.cpp  2007-08-24 07:49:42 UTC (rev 3802)
+++ software/ui/src/filter.cpp  2007-08-24 11:37:41 UTC (rev 3803)
@@ -17,6 +17,7 @@
  */
 
 #include "filter.h"
+#include "taghandler.h"
 
 #include <string>
 #include <ept/debtags/tag.h>
@@ -25,12 +26,56 @@
 #define FACET_SEX "rating:sex"
 #define FACET_LANGUAGE "rating:language"
 #define FACET_DISCRIMINATION "rating:discrimination"
-#define FACET_CONTROL "rating:control"
 
 #define GREEN_MINIMUM 2
 
+PackageFilter::PackageFilter()
+{
+       tagdata.SetTag(&green_tags,  "rating:violence::none");
+       tagdata.SetTag(&green_tags,  "rating:violence::minor:optional");
+       tagdata.SetTag(&yellow_tags, "rating:violence::minor");
+       tagdata.SetTag(&yellow_tags, "rating:violence::brief");
+       tagdata.SetTag(&red_tags,    "rating:violence::non-realistic:optional");
+       tagdata.SetTag(&red_tags,    "rating:violence::non-realistic");
+       tagdata.SetTag(&red_tags,    "rating:violence::realistic:optional");
+       tagdata.SetTag(&red_tags,    "rating:violence::realistic");
+
+       tagdata.SetTag(&green_tags,  "rating:sex::none");
+       tagdata.SetTag(&green_tags,  "rating:sex::nudity:optional");
+       tagdata.SetTag(&yellow_tags, "rating:sex::nudity");
+       tagdata.SetTag(&yellow_tags, "rating:sex::non-realistic:optional");
+       tagdata.SetTag(&red_tags,    "rating:sex::non-realistic");
+       tagdata.SetTag(&red_tags,    "rating:sex::realistic:optional");
+       tagdata.SetTag(&red_tags,    "rating:sex::realistic");
+       tagdata.SetTag(&red_tags,    "rating:sex::hard:optional");
+       tagdata.SetTag(&red_tags,    "rating:sex::hard");
+       tagdata.SetTag(&red_tags,    "rating:sex::violence:optional");
+       tagdata.SetTag(&black_tags,  "rating:sex::violence");
+
+       //tagdata.SetTag(&green_tags,  "rating:language::benign");
+
+       //tagdata.SetTag(&green_tags,  "rating:discrimination::none");
+
+       tagdata.SetTag(&yellow_tags, "rating:theme::death");
+       tagdata.SetTag(&yellow_tags, "rating:theme::horror");
+       tagdata.SetTag(&red_tags,    "rating:theme::cruelty");
+
+       std::cerr << "Green Tags: "; tagdata.Print(&green_tags);
+       std::cerr << "Yellow Tags: "; tagdata.Print(&yellow_tags);
+       std::cerr << "Red Tags: "; tagdata.Print(&red_tags);
+       std::cerr << "Black Tags: "; tagdata.Print(&black_tags);
+}
+
+PackageFilter::~PackageFilter()
+{
+}
+
 int PackageFilter::TagValue(const Tag &tag)
 {
+       //std::string name = tag.fullname();
+       //std::string facet_name = tag.facet().name();
+       //std::string tag_name = tag.name();
+
        // The order is important to minimize calculation costs
        if (GreenTag(tag)) return PackageFilter::Green;
        if (BlackTag(tag)) return PackageFilter::Black;
@@ -42,76 +87,34 @@
 bool PackageFilter::GreenTag(const Tag &tag)
 {
        std::string name = tag.fullname();
-       if (name == FACET_VIOLENCE "::none") return true;
-       if (name == FACET_SEX "::none") return true;
-       if (name == FACET_LANGUAGE "::benign") return true;
-       if (name == FACET_DISCRIMINATION "::none") return true;
-       return false;
+       return tagdata.CheckTag(&green_tags, name);
 }
 
 bool PackageFilter::YellowTag(const Tag &tag)
 {
        std::string name = tag.fullname();
-       if (name == FACET_VIOLENCE "::minor") return true;
-       if (name == FACET_VIOLENCE "::brief") return true;
-       if (name == FACET_SEX "::minor") return true;
-       if (name == FACET_SEX "::nudity") return true;
-       return false;
+       return tagdata.CheckTag(&yellow_tags, name);
 }
 
 bool PackageFilter::RedTag(const Tag &tag)
 {
-       std::string facet_name = tag.facet().name();
-       std::string tag_name = tag.name();
-       if (facet_name == FACET_VIOLENCE)
-       {
-               if (tag_name == "none") return false;
-               if (tag_name == "brief") return false;
-               if (tag_name == "minor") return false;
-               return true;
-       }
-       else if (facet_name == FACET_SEX)
-       {
-               if (tag_name == "none") return false;
-               if (tag_name == "nudity") return false;
-               return true;
-       }
-       else if (facet_name == FACET_LANGUAGE)
-       {
-               if (tag_name == "benign") return false;
-               return true;
-       }
-       else if (facet_name == FACET_DISCRIMINATION)
-       {
-               if (tag_name == "none") return false;
-               return true;
-       }
-       return false;
+       std::string name = tag.fullname();
+       return tagdata.CheckTag(&red_tags, name);
 }
 
 bool PackageFilter::BlackTag(const Tag &tag)
 {
        std::string name = tag.fullname();
-       if (name == FACET_VIOLENCE "::hard") return true;
-       if (name == FACET_SEX "::hard") return true;
-       if (name == FACET_SEX "::violence") return true;
-       return false;
+       return tagdata.CheckTag(&black_tags, name);
 }
 
 int PackageFilter::TagsValue(const TagSet &tags)
 {
-       int black = 0, red = 0, yellow = 0, green = 1 - GREEN_MINIMUM, control 
= 0;
+       int black = 0, red = 0, yellow = 0, green = 1 - GREEN_MINIMUM;
        for (TagSet::const_iterator i = tags.begin(); i != tags.end(); ++i)
        {
-               const char *facet_name = i->facet().name().c_str();
-               if (strcmp(facet_name, FACET_CONTROL) == 0)
+               switch (TagValue(*i))
                {
-                       const char *tag_name = i->name().c_str();
-                       if (strcmp(tag_name, "all") == 0) control = 2;
-                       if (strcmp(tag_name, "some") == 0) control = 1;
-               }
-               else switch (TagValue(*i))
-               {
                        case PackageFilter::Black: black++; break;
                        case PackageFilter::Red: red++; break;
                        case PackageFilter::Yellow: yellow++; break;
@@ -120,14 +123,10 @@
                }
        }
 
-       if (black > 0) return PackageFilter::Black;
-       if (control == 2) return PackageFilter::Green;
-       if (red > 0)
-       {
-               if (control == 1) return PackageFilter::Yellow;
-               return PackageFilter::Red;
-       }
+       if (black > 0)  return PackageFilter::Black;
+       if (red > 0)    return PackageFilter::Red;
        if (yellow > 0) return PackageFilter::Yellow;
-       if (green > 0) return PackageFilter::Green;
+       if (green > 0)  return PackageFilter::Green;
+
        return PackageFilter::Unknown;
 }

Modified: software/ui/src/filter.h
===================================================================
--- software/ui/src/filter.h    2007-08-24 07:49:42 UTC (rev 3802)
+++ software/ui/src/filter.h    2007-08-24 11:37:41 UTC (rev 3803)
@@ -19,12 +19,17 @@
 #ifndef _games_filter_h
 #define _games_filter_h
 
+#include "taghandler.h"
+
 #include <set>
 #include <ept/debtags/tag.h>
 
 class PackageFilter
 {
 public:
+       PackageFilter();
+       ~PackageFilter();
+
        enum {
                Green = 1, // Green light, the tag/package is safe
                Unknown,   // The calification for the tag/package is unknown
@@ -42,6 +47,13 @@
        bool BlackTag(const Tag &tag);
        int TagValue(const Tag &tag);
        int TagsValue(const TagSet &tags);
+
+protected:
+       FilterTagHandler tagdata;
+       FilterTagHandler::Result green_tags;
+       FilterTagHandler::Result yellow_tags;
+       FilterTagHandler::Result red_tags;
+       FilterTagHandler::Result black_tags;
 };
 
 #endif

Modified: software/ui/src/taghandler.h
===================================================================
--- software/ui/src/taghandler.h        2007-08-24 07:49:42 UTC (rev 3802)
+++ software/ui/src/taghandler.h        2007-08-24 11:37:41 UTC (rev 3803)
@@ -153,6 +153,13 @@
                result->ResetTag(e->position, e->flag);
        }
 
+       inline bool CheckTag(Result *result, const std::string name)
+       {
+               AddTag(name);
+               const Element *e = GetTag(name);
+               return result->CheckAny(e->position, e->flag);
+       }
+
 protected:
        std::vector<Element> elements;
 


_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to