From 018d90b580740f518f2e03bd6b00707bd12cbe02 Mon Sep 17 00:00:00 2001 From: Glenn Rice Date: Tue, 18 Dec 2012 09:03:31 -0600 Subject: Update the annots demo to be able to toggle flags. --- examples/demo/annots.cc | 82 +++++++++++++++++++++++++++++++++++++++++++++++-- examples/demo/annots.h | 6 ++++ 2 files changed, 85 insertions(+), 3 deletions(-) diff --git a/examples/demo/annots.cc b/examples/demo/annots.cc index 34c7089..1b09a1e 100644 --- a/examples/demo/annots.cc +++ b/examples/demo/annots.cc @@ -317,9 +317,21 @@ Annots::Annots(const Glib::RefPtr& document) : m_TreeView.append_column_numeric("Y2", m_StoreColumns.m_Y2, "%.2f"); m_TreeView.append_column("Type", m_StoreColumns.m_AnnotType); m_TreeView.append_column("Color", m_StoreColumns.m_Color); - m_TreeView.append_column("Invisible", m_StoreColumns.m_FlagInvisible); - m_TreeView.append_column("Hidden", m_StoreColumns.m_FlagHidden); - m_TreeView.append_column("Print", m_StoreColumns.m_FlagPrint); + + int col_num = m_TreeView.append_column("Invisible", m_StoreColumns.m_FlagInvisible); + Gtk::CellRendererToggle* cell_renderer = (Gtk::CellRendererToggle*)m_TreeView.get_column_cell_renderer(col_num - 1); + cell_renderer->set_activatable(); + cell_renderer->signal_toggled().connect(sigc::mem_fun(*this, &Annots::invisible_flag_toggled)); + + col_num = m_TreeView.append_column("Hidden", m_StoreColumns.m_FlagHidden); + cell_renderer = (Gtk::CellRendererToggle*)m_TreeView.get_column_cell_renderer(col_num - 1); + cell_renderer->set_activatable(); + cell_renderer->signal_toggled().connect(sigc::mem_fun(*this, &Annots::hidden_flag_toggled)); + + col_num = m_TreeView.append_column("Print", m_StoreColumns.m_FlagPrint); + cell_renderer = (Gtk::CellRendererToggle*)m_TreeView.get_column_cell_renderer(col_num - 1); + cell_renderer->set_activatable(); + cell_renderer->signal_toggled().connect(sigc::mem_fun(*this, &Annots::print_flag_toggled)); m_TreeView.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &Annots::selection_changed)); @@ -543,4 +555,68 @@ void Annots::selection_changed() else m_AnnotView.set_annot(Glib::RefPtr()); } +void Annots::flags_toggled(const std::string& path_str, + const Gtk::TreeModelColumn& column, + const Poppler::AnnotFlag flag_bit) +{ + Gtk::TreeIter iter = m_AnnotStore->get_iter(path_str); + + bool fixed = (*iter)[column]; + Glib::RefPtr annot = (*iter)[m_StoreColumns.m_Annot]; + + fixed ^= true; + Poppler::AnnotFlag flags = annot->get_flags(); + + if (fixed) + flags |= flag_bit; + else + flags &= ~flag_bit; + + annot->set_flags(flags); + (*iter)[column] = fixed; + + m_AnnotView.set_annot(annot); + +#if 0 + GtkTreeIter iter; + gboolean fixed; + PopplerAnnot *annot; + PopplerAnnotFlag flags; + GtkTreePath *path = gtk_tree_path_new_from_string (path_str); + GtkTreeModel *model = GTK_TREE_MODEL (demo->model); + + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, column, &fixed, ANNOTS_COLUMN, &annot,-1); + + fixed ^= 1; + flags = poppler_annot_get_flags (annot); + + if (fixed) + flags |= flag_bit; + else + flags &= ~flag_bit; + + poppler_annot_set_flags (annot, flags); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, fixed, -1); + + pgd_annot_view_set_annot (demo, annot); + gtk_tree_path_free (path); +#endif +} + +void Annots::hidden_flag_toggled(const Glib::ustring& path_str) +{ + flags_toggled(path_str, m_StoreColumns.m_FlagHidden, Poppler::ANNOT_FLAG_HIDDEN); +} + +void Annots::print_flag_toggled(const Glib::ustring& path_str) +{ + flags_toggled(path_str, m_StoreColumns.m_FlagPrint, Poppler::ANNOT_FLAG_PRINT); +} + +void Annots::invisible_flag_toggled(const Glib::ustring& path_str) +{ + flags_toggled(path_str, m_StoreColumns.m_FlagInvisible, Poppler::ANNOT_FLAG_INVISIBLE); +} + } diff --git a/examples/demo/annots.h b/examples/demo/annots.h index 988e8f5..b6beb5e 100644 --- a/examples/demo/annots.h +++ b/examples/demo/annots.h @@ -61,6 +61,12 @@ class Annots : public Gtk::Box void remove_annot(); void get_annots(); void selection_changed(); + void flags_toggled(const std::string& path_str, + const Gtk::TreeModelColumn& column, + const Poppler::AnnotFlag flag_bit); + void hidden_flag_toggled(const Glib::ustring& path_str); + void print_flag_toggled(const Glib::ustring& path_str); + void invisible_flag_toggled(const Glib::ustring& path_str); const Glib::RefPtr m_Document; int m_Page; -- cgit v1.2.3