[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