File: taskspage.h

package info (click to toggle)
subtitleeditor 0.56.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 8,880 kB
  • sloc: cpp: 26,446; makefile: 1,713; perl: 434; sh: 259; xml: 149
file content (98 lines) | stat: -rw-r--r-- 3,416 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#pragma once

// subtitleeditor -- a tool to create or edit subtitle
//
// https://subtitleeditor.github.io/subtitleeditor/
// https://github.com/subtitleeditor/subtitleeditor/
//
// Copyright @ 2005-2018, kitone
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

#include "page.h"
#include "patternspage.h"

class TasksPage : public AssistantPage {
   class Column : public Gtk::TreeModel::ColumnRecord {
     public:
      Column() {
         add(enabled);
         add(label);
         add(page);
      }
      Gtk::TreeModelColumn<bool> enabled;
      Gtk::TreeModelColumn<Glib::ustring> label;
      Gtk::TreeModelColumn<PatternsPage*> page;
   };

  public:
   TasksPage(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& builder) : AssistantPage(cobject, builder) {
      builder->get_widget("treeview-tasks", m_treeview);
      create_treeview();
   }

   void create_treeview() {
      m_liststore = Gtk::ListStore::create(m_column);
      m_treeview->set_model(m_liststore);

      // column display
      {
         Gtk::TreeViewColumn* column = manage(new Gtk::TreeViewColumn(_("Display")));
         m_treeview->append_column(*column);

         Gtk::CellRendererToggle* toggle = manage(new Gtk::CellRendererToggle);
         column->pack_start(*toggle);
         column->add_attribute(toggle->property_active(), m_column.enabled);
         toggle->signal_toggled().connect(sigc::mem_fun(*this, &TasksPage::on_enabled_toggled));
      }
      // column label
      {
         Gtk::TreeViewColumn* column = manage(new Gtk::TreeViewColumn(_("Name")));
         m_treeview->append_column(*column);

         Gtk::CellRendererText* label = manage(new Gtk::CellRendererText);
         column->pack_start(*label);
         column->add_attribute(label->property_markup(), m_column.label);
      }
      m_treeview->signal_row_activated().connect(sigc::mem_fun(*this, &TasksPage::on_row_activated));
   }

   void on_enabled_toggled(const Glib::ustring& path) {
      Gtk::TreeIter it = m_liststore->get_iter(path);
      if (it) {
         bool enabled = !static_cast<bool>((*it)[m_column.enabled]);
         PatternsPage* page = (*it)[m_column.page];

         (*it)[m_column.enabled] = enabled;
         page->set_enable(enabled);
      }
   }

   void on_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn*) {
      on_enabled_toggled(path.to_string());
   }

   void add_task(PatternsPage* page) {
      Gtk::TreeIter it;
      it = m_liststore->append();
      (*it)[m_column.enabled] = page->is_enable();
      (*it)[m_column.label] = Glib::ustring::compose("<b>%1</b>\n%2", page->get_page_label(), page->get_page_description());
      (*it)[m_column.page] = page;
   }

  protected:
   Gtk::TreeView* m_treeview;
   Column m_column;
   Glib::RefPtr<Gtk::ListStore> m_liststore;
};