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