r3803 - software/ui/src

Miriam Ruiz baby-guest at alioth.debian.org
Fri Aug 24 11:37:42 UTC 2007


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;
 




More information about the Pkg-games-commits mailing list