[Debtags-commits] [svn] r2037 - in debtags-edit/1.2: . src

Enrico Zini enrico at alioth.debian.org
Tue Oct 31 22:16:58 CET 2006


Author: enrico
Date: Tue Oct 31 22:16:57 2006
New Revision: 2037

Modified:
   debtags-edit/1.2/   (props changed)
   debtags-edit/1.2/src/TagEditor.cc
   debtags-edit/1.2/src/TagEditor.h
   debtags-edit/1.2/src/TagSelector.cc
   debtags-edit/1.2/src/TagSelector.h
Log:
 r3578 at viaza:  enrico | 2006-10-31 22:16:03 +0100
 Implemented Add relevant and Add discriminant


Modified: debtags-edit/1.2/src/TagEditor.cc
==============================================================================
--- debtags-edit/1.2/src/TagEditor.cc	(original)
+++ debtags-edit/1.2/src/TagEditor.cc	Tue Oct 31 22:16:57 2006
@@ -45,17 +45,78 @@
 template<class DOC>
 bool TagEditor<DOC>::on_titleAdd_event(GdkEvent* e)
 {
-	if (e->type == GDK_BUTTON_PRESS)
+	if (e->type == GDK_BUTTON_PRESS && doc.current() != Package())
+	{
+		TagMenu<DOC>* addMenu = manage(new TagMenu<DOC>());
+		addMenu->populateUnselected(doc, doc.currentTags());
+		addMenu->signal_selected().connect(
+					sigc::mem_fun(*this, &TagEditor<DOC>::on_add_to_selection));
+		addMenu->popup(e->button.button, e->button.time);
+		return true;
+	}
+	return false;
+}
+
+template<class DOC>
+bool TagEditor<DOC>::on_titleAddDiscriminant_event(GdkEvent* e)
+{
+	if (e->type == GDK_BUTTON_PRESS && doc.current() != Package())
 	{
-		if (doc.current() != Package())
+		std::vector<Tag> tags = doc.subCollection.tagsInDiscriminanceOrder();
+		std::set<Tag> current = doc.currentTags();
+		Gtk::Menu* addMenu = manage(new Gtk::Menu());
+
+		int count = 0;
+		for (typename std::vector<Tag>::const_reverse_iterator i = tags.rbegin();
+				i != tags.rend(); ++i)
 		{
-			TagMenu<DOC>* addMenu = manage(new TagMenu<DOC>());
-			addMenu->populateUnselected(doc, doc.currentTags());
-			addMenu->signal_selected().connect(
-						sigc::mem_fun(*this, &TagEditor<DOC>::on_add_to_selection));
-			addMenu->popup(e->button.button, e->button.time);
-			return true;
+			// Only show tags that are not in the package yet
+			if (current.find(*i) != current.end())
+				continue;
+			if (count >= 21)
+				break;
+
+			addMenu->items().push_back(Gtk::Menu_Helpers::MenuElem(
+						"[" + i->fullname() + "] " + i->shortDescription(),
+						sigc::bind<Tag>(
+							sigc::mem_fun(*this, &TagEditor<DOC>::on_add_to_selection), *i)));
+			++count;
 		}
+
+		addMenu->popup(e->button.button, e->button.time);
+		return true;
+	}
+	return false;
+}
+
+template<class DOC>
+bool TagEditor<DOC>::on_titleAddRelevant_event(GdkEvent* e)
+{
+	if (e->type == GDK_BUTTON_PRESS && doc.current() != Package())
+	{
+		std::vector<Tag> tags = doc.subCollection.tagsInRelevanceOrder(doc.debtags());
+		std::set<Tag> current = doc.currentTags();
+		Gtk::Menu* addMenu = manage(new Gtk::Menu());
+
+		int count = 0;
+		for (typename std::vector<Tag>::const_reverse_iterator i = tags.rbegin();
+				i != tags.rend(); ++i)
+		{
+			// Only show tags that are not in the package yet
+			if (current.find(*i) != current.end())
+				continue;
+			if (count >= 21)
+				break;
+
+			addMenu->items().push_back(Gtk::Menu_Helpers::MenuElem(
+						"[" + i->fullname() + "] " + i->shortDescription(),
+						sigc::bind<Tag>(
+							sigc::mem_fun(*this, &TagEditor<DOC>::on_add_to_selection), *i)));
+			++count;
+		}
+
+		addMenu->popup(e->button.button, e->button.time);
+		return true;
 	}
 	return false;
 }
@@ -268,12 +329,25 @@
 
 	pack_start(scrolledItemList, true, true);
 
+	Gtk::HBox* hbox = manage(new Gtk::HBox());
+	pack_start(*hbox, false, false);
+
 	Gtk::Button* titleAdd = manage(new Gtk::Button("Add"));
-	pack_start(*titleAdd, false, false);
+	hbox->pack_start(*titleAdd, true, true);
 	titleAdd->add_events(Gdk::BUTTON_PRESS_MASK);
 	titleAdd->signal_event().connect(sigc::mem_fun(*this, &TagEditor<DOC>::on_titleAdd_event));
 
-	// TODO: add buttons "Add relevant" and "Add discriminant", with different popups
+	Gtk::Button* titleAddDiscriminant = manage(new Gtk::Button("Add discriminant"));
+	hbox->pack_start(*titleAddDiscriminant, true, true);
+	titleAddDiscriminant->add_events(Gdk::BUTTON_PRESS_MASK);
+	titleAddDiscriminant->signal_event().connect(
+			sigc::mem_fun(*this, &TagEditor<DOC>::on_titleAddDiscriminant_event));
+
+	Gtk::Button* titleAddRelevant = manage(new Gtk::Button("Add relevant"));
+	hbox->pack_start(*titleAddRelevant, true, true);
+	titleAddRelevant->add_events(Gdk::BUTTON_PRESS_MASK);
+	titleAddRelevant->signal_event().connect(
+			sigc::mem_fun(*this, &TagEditor<DOC>::on_titleAddRelevant_event));
 
 	updateView();
 
@@ -337,5 +411,7 @@
 
 template class TagEditor<DebtagsDocument>;
 
+#include <tagcoll/coll/fast.tcc>
+#include <tagcoll/coll/patched.tcc>
 
 // vim:set ts=4 sw=4:

Modified: debtags-edit/1.2/src/TagEditor.h
==============================================================================
--- debtags-edit/1.2/src/TagEditor.h	(original)
+++ debtags-edit/1.2/src/TagEditor.h	Tue Oct 31 22:16:57 2006
@@ -69,6 +69,8 @@
 	void updateView();
 
 	bool on_titleAdd_event(GdkEvent* e);
+	bool on_titleAddDiscriminant_event(GdkEvent* e);
+	bool on_titleAddRelevant_event(GdkEvent* e);
 	bool on_facetAdd_event(GdkEvent* e, Facet facet);
 	bool on_tag_popup_event(GdkEvent* e, Tag tag);
 	void on_add_to_selection(Tag tag);

Modified: debtags-edit/1.2/src/TagSelector.cc
==============================================================================
--- debtags-edit/1.2/src/TagSelector.cc	(original)
+++ debtags-edit/1.2/src/TagSelector.cc	Tue Oct 31 22:16:57 2006
@@ -66,6 +66,66 @@
 	return false;
 }
 
+bool TagSelector::on_titleAddDiscriminant_event(GdkEvent* e)
+{
+	if (e->type == GDK_BUTTON_PRESS)
+	{
+		std::vector<Tag> tags = doc.subCollection.tagsInDiscriminanceOrder();
+		Gtk::Menu* addMenu = manage(new Gtk::Menu());
+
+		int count = 0;
+		for (std::vector<Tag>::const_reverse_iterator i = tags.rbegin();
+				i != tags.rend(); ++i)
+		{
+			// Only show tags that are not in the package yet
+			if (_selected.find(*i) != _selected.end())
+				continue;
+			if (count >= 21)
+				break;
+
+			addMenu->items().push_back(Gtk::Menu_Helpers::MenuElem(
+						"[" + i->fullname() + "] " + i->shortDescription(),
+						sigc::bind<Tag>(
+							sigc::mem_fun(*this, &TagSelector::on_add_to_selection), *i)));
+			++count;
+		}
+
+		addMenu->popup(e->button.button, e->button.time);
+		return true;
+	}
+	return false;
+}
+
+bool TagSelector::on_titleAddRelevant_event(GdkEvent* e)
+{
+	if (e->type == GDK_BUTTON_PRESS)
+	{
+		std::vector<Tag> tags = doc.subCollection.tagsInRelevanceOrder(doc.debtags());
+		Gtk::Menu* addMenu = manage(new Gtk::Menu());
+
+		int count = 0;
+		for (std::vector<Tag>::const_reverse_iterator i = tags.rbegin();
+				i != tags.rend(); ++i)
+		{
+			// Only show tags that are not in the package yet
+			if (_selected.find(*i) != _selected.end())
+				continue;
+			if (count >= 21)
+				break;
+
+			addMenu->items().push_back(Gtk::Menu_Helpers::MenuElem(
+						"[" + i->fullname() + "] " + i->shortDescription(),
+						sigc::bind<Tag>(
+							sigc::mem_fun(*this, &TagSelector::on_add_to_selection), *i)));
+			++count;
+		}
+
+		addMenu->popup(e->button.button, e->button.time);
+		return true;
+	}
+	return false;
+}
+
 bool TagSelector::on_facetAdd_event(GdkEvent* e, DebtagsDocument::Facet facet)
 {
 	if (e->type == GDK_BUTTON_PRESS)
@@ -316,11 +376,25 @@
 	//titleAdd->signal_clicked().connect(
 			//SigC::slot(*this, &TagcollEditor::on_titleAdd_clicked));
 
+	Gtk::HBox* hbox = manage(new Gtk::HBox());
+	table->attach(*hbox, 0, 3, row, row+1);
+
 	Gtk::Button* titleAdd = manage(new Gtk::Button("Add"));
-	table->attach(*titleAdd, 0, 3, row, row+1, Gtk::SHRINK);
+	hbox->pack_start(*titleAdd, true, true);
 	titleAdd->add_events(Gdk::BUTTON_PRESS_MASK);
 	titleAdd->signal_event().connect(sigc::mem_fun(*this, &TagSelector::on_titleAdd_event));
 
+	Gtk::Button* titleAddD = manage(new Gtk::Button("Add disc"));
+	hbox->pack_start(*titleAddD, true, true);
+	titleAddD->add_events(Gdk::BUTTON_PRESS_MASK);
+	titleAddD->signal_event().connect(sigc::mem_fun(*this, &TagSelector::on_titleAddDiscriminant_event));
+
+	Gtk::Button* titleAddR = manage(new Gtk::Button("Add rel"));
+	hbox->pack_start(*titleAddR, true, true);
+	titleAddR->add_events(Gdk::BUTTON_PRESS_MASK);
+	titleAddR->signal_event().connect(sigc::mem_fun(*this, &TagSelector::on_titleAddRelevant_event));
+
+
 	table->show();
 	table->show_all_children(true);
 

Modified: debtags-edit/1.2/src/TagSelector.h
==============================================================================
--- debtags-edit/1.2/src/TagSelector.h	(original)
+++ debtags-edit/1.2/src/TagSelector.h	Tue Oct 31 22:16:57 2006
@@ -28,6 +28,11 @@
 
 class TagSelector : public Gtk::VBox
 {
+protected:
+	typedef DebtagsDocument::Facet Facet;
+	typedef DebtagsDocument::Tag Tag;
+	typedef DebtagsDocument::Package Package;
+
 public:
 	typedef SigC::Signal0<void> type_signal_changed;
 	typedef SigC::Signal1<void, DebtagsDocument::Tag> type_signal_add_tag;
@@ -49,6 +54,8 @@
 	void updateView();
 
 	bool on_titleAdd_event(GdkEvent* e);
+	bool on_titleAddDiscriminant_event(GdkEvent* e);
+	bool on_titleAddRelevant_event(GdkEvent* e);
 	bool on_facetAdd_event(GdkEvent* e, DebtagsDocument::Facet facet);
 	bool on_tag_popup_event(GdkEvent* e, DebtagsDocument::Tag tag);
 	void on_add_to_selection(DebtagsDocument::Tag tag);



More information about the Debtags-commits mailing list