~ubuntu-branches/ubuntu/karmic/me-tv/karmic

« back to all changes in this revision

Viewing changes to src/scheduled_recordings_dialog.cc

  • Committer: Bazaar Package Importer
  • Author(s): Michael Lamothe
  • Date: 2007-12-19 23:30:16 UTC
  • Revision ID: james.westby@ubuntu.com-20071219233016-2ng2clfh00xtlevc
Tags: upstream-0.4.19
ImportĀ upstreamĀ versionĀ 0.4.19

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2007 Michael Lamothe
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License as published by
 
6
 * the Free Software Foundation; either version 2 of the License, or
 
7
 * (at your option) any later version.
 
8
 * 
 
9
 * This program is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
 * GNU Library General Public License for more details.
 
13
 * 
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program; if not, write to the Free Software
 
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
 
17
 */
 
18
 
 
19
#include "scheduled_recordings_dialog.h"
 
20
#include "application.h"
 
21
#include "exception_handler.h"
 
22
#include "recording_manager.h"
 
23
#include "xml.h"
 
24
 
 
25
#define EVENT_DESCRIPTION_LINE_LENGTH 60
 
26
 
 
27
#define COLUMN_CHANNEL_NAME             0
 
28
#define COLUMN_TYPE                             1
 
29
#define COLUMN_START_TIME               2
 
30
#define COLUMN_DURATION                 3
 
31
#define COLUMN_DESCRIPTION              4
 
32
 
 
33
ScheduledRecordingsTreeViewIterator::ScheduledRecordingsTreeViewIterator(GtkTreeModel* model, GtkTreeIter* parent_iter)
 
34
{
 
35
        this->model = model;
 
36
        has_row = gtk_tree_model_iter_children(model, &iter,  parent_iter);
 
37
}
 
38
 
 
39
void ScheduledRecordingsTreeViewIterator::next()
 
40
{
 
41
        has_row = gtk_tree_model_iter_next(model, &iter);
 
42
}
 
43
 
 
44
GtkTreeIter& ScheduledRecordingsTreeViewIterator::get_current_row()
 
45
{
 
46
        return iter;
 
47
}
 
48
 
 
49
bool ScheduledRecordingsTreeViewIterator::get_has_row() const
 
50
{
 
51
        return has_row;
 
52
}
 
53
 
 
54
ScheduledRecordingsTreeViewRowCollection::ScheduledRecordingsTreeViewRowCollection(GtkTreeModel* model, GtkTreeIter* parent_iter)
 
55
{
 
56
        this->parent_iter = parent_iter;
 
57
        this->model = model;
 
58
}
 
59
 
 
60
void ScheduledRecordingsTreeViewRowCollection::add_row(ScheduledRecordingsTreeViewRow& row)
 
61
{
 
62
        gtk_tree_store_append(GTK_TREE_STORE(model), &iter, parent_iter);
 
63
        row.attach(model, &iter);
 
64
        row.update();
 
65
}
 
66
 
 
67
ScheduledRecordingsDialog::ScheduledRecordingsDialog()
 
68
{
 
69
        Glade& glade = Application::get_current().get_glade();
 
70
        scheduled_recordings_dialog = glade.get_widget("scheduled_recordings_dialog");
 
71
        tree_view = new ScheduledRecordingsTreeView(GTK_TREE_VIEW(glade.get_widget("treeview_scheduled_recordings")));
 
72
 
 
73
        g_signal_connect( G_OBJECT ( glade.get_widget("button_scheduled_recordings_add") ), "clicked", G_CALLBACK ( on_button_scheduled_recordings_add_clicked ), this );
 
74
}
 
75
 
 
76
void ScheduledRecordingsDialog::on_button_scheduled_recordings_add_clicked(GtkButton* button, ScheduledRecordingsDialog* scheduled_recordings_dialog)
 
77
{
 
78
        Application::get_current().show_scheduled_recording_dialog();
 
79
        scheduled_recordings_dialog->tree_view->load();
 
80
}
 
81
 
 
82
void ScheduledRecordingsDialog::show()
 
83
{
 
84
        int response = 0;
 
85
        tree_view->load();
 
86
        gtk_dialog_run(GTK_DIALOG(scheduled_recordings_dialog));
 
87
        gtk_widget_hide(scheduled_recordings_dialog);
 
88
}
 
89
 
 
90
ScheduledRecordingsTreeViewRow::ScheduledRecordingsTreeViewRow()
 
91
{
 
92
        model           = NULL;
 
93
        iter.stamp      = 0;
 
94
}
 
95
 
 
96
Glib::ustring ScheduledRecordingsTreeViewRow::get_tree_view_column_text(gchar* s)
 
97
{
 
98
        Glib::ustring result = (s == NULL) ? "" : s;
 
99
        g_free(s);
 
100
        return result;
 
101
}
 
102
 
 
103
void ScheduledRecordingsTreeViewRow::attach(GtkTreeModel* model, GtkTreeIter* iter)
 
104
{
 
105
        this->model = model;
 
106
        this->iter = *iter;
 
107
}
 
108
 
 
109
void ScheduledRecordingsTreeViewRow::update()
 
110
{
 
111
        if (model == NULL)
 
112
        {
 
113
                throw Exception("Row was not attached to a table");
 
114
        }
 
115
        
 
116
        Glib::ustring type = scheduled_recording.get_type_text();
 
117
        Glib::ustring start_time = scheduled_recording.get_start_time_text();
 
118
        Glib::ustring duration = scheduled_recording.get_duration_text();
 
119
 
 
120
        gtk_tree_store_set (GTK_TREE_STORE(model), &iter,
 
121
                COLUMN_CHANNEL_NAME,    scheduled_recording.channel_name.c_str(),
 
122
                COLUMN_TYPE,                    type.c_str(),
 
123
                COLUMN_START_TIME,              start_time.c_str(),
 
124
                COLUMN_DURATION,                duration.c_str(),
 
125
                COLUMN_DESCRIPTION,             scheduled_recording.description.c_str(),
 
126
                -1);
 
127
}
 
128
 
 
129
ScheduledRecordingsTreeView::ScheduledRecordingsTreeView(GtkTreeView* tree_view_epg) : tree_view(tree_view_epg)
 
130
{
 
131
        GtkTreeStore* tree_store = gtk_tree_store_new(5,
 
132
                G_TYPE_STRING,  // COLUMN_CHANNEL_NAME
 
133
                G_TYPE_STRING,  // COLUMN_TYPE
 
134
                G_TYPE_STRING,  // COLUMN_START_TIME
 
135
                G_TYPE_STRING,  // COLUMN_DURATION
 
136
                G_TYPE_STRING   // COLUMN_DESCRIPTION
 
137
                );
 
138
        
 
139
        gtk_tree_view_set_model(tree_view_epg, GTK_TREE_MODEL(tree_store));
 
140
        GtkTreeSelection* selection = gtk_tree_view_get_selection(tree_view_epg);
 
141
        gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
 
142
 
 
143
        GtkCellRenderer* text_renderer                  = gtk_cell_renderer_text_new();
 
144
        GtkTreeViewColumn* column_channel               = gtk_tree_view_column_new_with_attributes (N_("Channel"), text_renderer, "text", COLUMN_CHANNEL_NAME, NULL);
 
145
        GtkTreeViewColumn* column_type                  = gtk_tree_view_column_new_with_attributes (N_("Type"), text_renderer, "text", COLUMN_TYPE, NULL);
 
146
        GtkTreeViewColumn* column_start_time    = gtk_tree_view_column_new_with_attributes (N_("Start Time"), text_renderer, "text", COLUMN_START_TIME, NULL);
 
147
        GtkTreeViewColumn* column_duration              = gtk_tree_view_column_new_with_attributes (N_("Duration"), text_renderer, "text", COLUMN_DURATION, NULL);
 
148
        GtkTreeViewColumn* column_description   = gtk_tree_view_column_new_with_attributes (N_("Description"), text_renderer, "text", COLUMN_DESCRIPTION, NULL);
 
149
 
 
150
        gtk_tree_view_column_set_resizable(column_description, true);
 
151
        gtk_tree_view_column_set_max_width(column_description, 1000);
 
152
        
 
153
        gtk_tree_view_append_column(tree_view_epg, column_channel);
 
154
        gtk_tree_view_append_column(tree_view_epg, column_type);
 
155
        gtk_tree_view_append_column(tree_view_epg, column_start_time);
 
156
        gtk_tree_view_append_column(tree_view_epg, column_duration);
 
157
        gtk_tree_view_append_column(tree_view_epg, column_description);
 
158
 
 
159
        g_signal_connect ( G_OBJECT ( tree_view ), "row-activated", G_CALLBACK ( on_tree_view_row_activated ), this );
 
160
        
 
161
        gtk_tree_view_set_search_column(tree_view, COLUMN_DESCRIPTION);
 
162
}
 
163
 
 
164
gboolean ScheduledRecordingsTreeView::get_selected(GtkTreeModel** tree_model, GtkTreeIter* iter)
 
165
{
 
166
        gboolean result = false;
 
167
        GtkTreeSelection* selection = gtk_tree_view_get_selection(tree_view);
 
168
        if (selection != NULL)
 
169
        {
 
170
                if (gtk_tree_selection_get_selected(selection, tree_model, iter) > 0)
 
171
                {
 
172
                        result = true;
 
173
                }
 
174
        }
 
175
        
 
176
        return result;
 
177
}
 
178
 
 
179
void ScheduledRecordingsTreeView::expand(ScheduledRecordingsTreeViewRow& row)
 
180
{
 
181
        GtkTreePath* path = gtk_tree_model_get_path(row.get_model(), row.get_iter());
 
182
        gtk_tree_view_expand_row(tree_view, path, FALSE);
 
183
}
 
184
 
 
185
void ScheduledRecordingsTreeView::clear()
 
186
{
 
187
        GtkTreeModel* tree_model = gtk_tree_view_get_model(tree_view);
 
188
        gtk_tree_store_clear(GTK_TREE_STORE(tree_model));
 
189
}
 
190
 
 
191
void ScheduledRecordingsTreeView::load()
 
192
{
 
193
        RecordingManager& recording_manager = Application::get_current().get_recording_manager();
 
194
        XPathResult scheduled_recordings(recording_manager.get_scheduled_recordings());
 
195
        clear();        
 
196
        int count = scheduled_recordings.get_count();
 
197
        for (int i = 0; i < count; i++)
 
198
        {
 
199
                ScheduledRecordingsTreeViewRow row;
 
200
                row.scheduled_recording.load(scheduled_recordings.get_result(i));
 
201
                add_row(row);
 
202
        }
 
203
}
 
204
 
 
205
void ScheduledRecordingsTreeView::add_row(ScheduledRecordingsTreeViewRow& row)
 
206
{
 
207
        ScheduledRecordingsTreeViewRowCollection rows = get_rows();
 
208
        return rows.add_row(row);
 
209
}
 
210
 
 
211
void ScheduledRecordingsTreeView::on_tree_view_row_activated(
 
212
                GtkTreeView* tree_view,
 
213
                GtkTreePath       *path,
 
214
                GtkTreeViewColumn *column,
 
215
                ScheduledRecordingsTreeView* scheduled_recordings_tree_view)
 
216
{
 
217
        GtkTreeIter iter;
 
218
        GtkTreeModel* model = gtk_tree_view_get_model(tree_view);
 
219
        gtk_tree_model_get_iter(model, &iter, path);
 
220
 
 
221
        const gchar* description = NULL;
 
222
 
 
223
        gtk_tree_model_get(model, &iter, COLUMN_DESCRIPTION, &description, -1);
 
224
        
 
225
        Application::get_current().show_scheduled_recording_dialog(description);
 
226
        scheduled_recordings_tree_view->load();
 
227
}
 
228
 
 
229
ScheduledRecordingsTreeViewRowCollection ScheduledRecordingsTreeView::get_rows()
 
230
{
 
231
        return ScheduledRecordingsTreeViewRowCollection(gtk_tree_view_get_model(tree_view));
 
232
}
 
233
 
 
234
ScheduledRecordingsTreeViewIterator ScheduledRecordingsTreeView::get_iterator()
 
235
{
 
236
        ScheduledRecordingsTreeViewRowCollection rows = get_rows();
 
237
        return rows.get_iterator();
 
238
}