summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/session-player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/dialog/session-player.cpp')
-rw-r--r--src/ui/dialog/session-player.cpp229
1 files changed, 229 insertions, 0 deletions
diff --git a/src/ui/dialog/session-player.cpp b/src/ui/dialog/session-player.cpp
new file mode 100644
index 000000000..48c3ff5ef
--- /dev/null
+++ b/src/ui/dialog/session-player.cpp
@@ -0,0 +1,229 @@
+/**
+ * Whiteboard session playback control dialog
+ *
+ * Authors:
+ * David Yip <yipdw@rose-hulman.edu>
+ *
+ * Copyright (c) 2005 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glibmm.h>
+#include <glibmm/i18n.h>
+#include <gtk/gtkdialog.h>
+#include <gtkmm.h>
+
+#include "inkscape.h"
+#include "path-prefix.h"
+
+#include "desktop.h"
+#include "desktop-handles.h"
+#include "document.h"
+
+#include "ui/stock.h"
+
+#include "jabber_whiteboard/node-tracker.h"
+#include "jabber_whiteboard/session-manager.h"
+#include "jabber_whiteboard/session-file-player.h"
+
+#include "ui/dialog/session-player.h"
+
+#include "util/ucompose.hpp"
+
+namespace Inkscape {
+
+namespace UI {
+
+namespace Dialog {
+
+SessionPlaybackDialog*
+SessionPlaybackDialog::create()
+{
+ return new SessionPlaybackDialogImpl();
+}
+
+SessionPlaybackDialogImpl::SessionPlaybackDialogImpl()
+ : _delay(100, 1, 5000, 10, 100), _delayentry(_delay)
+{
+ this->_desktop = SP_ACTIVE_DESKTOP;
+ this->_sm = this->_desktop->whiteboard_session_manager();
+ this->_sfp = this->_sm->session_player();
+ this->_openfile.set_text(this->_sfp->filename());
+
+ this->_construct();
+ this->get_vbox()->show_all_children();
+}
+
+SessionPlaybackDialogImpl::~SessionPlaybackDialogImpl()
+{
+
+}
+
+void
+SessionPlaybackDialogImpl::_construct()
+{
+ Gtk::VBox* main = this->get_vbox();
+
+ // Dialog organization
+ this->_filemanager.set_label(_("Session file"));
+ this->_playback.set_label(_("Playback controls"));
+ this->_currentmsgbox.set_label(_("Message information"));
+
+ this->_filemanager.set_border_width(4);
+ this->_playback.set_border_width(4);
+ this->_fm.set_border_width(4);
+ this->_toolbarbox.set_border_width(4);
+
+ // Active session file display
+ // fixme: Does this mean the active file for the session, or the file for the active session?
+ // Please indicate which with a TRANSLATORS comment.
+ this->_labels[0].set_text(_("Active session file:"));
+ this->_labels[1].set_text(_("Delay (milliseconds):"));
+
+ this->_openfile.set_editable(false);
+
+ this->_filebox.pack_start(this->_labels[0], true, false, 8);
+ this->_filebox.pack_end(this->_openfile, true, true, 0);
+
+ // Unload/load buttons
+ this->_close.set_label(_("Close file"));
+ this->_open.set_label(_("Open new file"));
+ this->_setdelay.set_label(_("Set delay"));
+
+ // Attach callbacks
+ this->_close.signal_clicked().connect(sigc::bind< 0 >(sigc::mem_fun(*this, &SessionPlaybackDialogImpl::_respCallback), CLOSE_FILE));
+ this->_open.signal_clicked().connect(sigc::bind< 0 >(sigc::mem_fun(*this, &SessionPlaybackDialogImpl::_respCallback), OPEN_FILE));
+ this->_setdelay.signal_clicked().connect(sigc::bind< 0 >(sigc::mem_fun(*this, &SessionPlaybackDialogImpl::_respCallback), RESET_DELAY));
+
+ // Button box
+ this->_filebuttons.pack_start(this->_close, true, false, 0);
+ this->_filebuttons.pack_start(this->_open, true, false, 0);
+
+ // Message information box
+ this->_currentmsgbuffer = Gtk::TextBuffer::create();
+ this->_currentmsgview.set_buffer(this->_currentmsgbuffer);
+ this->_currentmsgview.set_editable(false);
+ this->_currentmsgview.set_cursor_visible(false);
+ this->_currentmsgview.set_wrap_mode(Gtk::WRAP_WORD);
+ this->_currentmsgscroller.add(this->_currentmsgview);
+ this->_currentmsgbox.add(this->_currentmsgscroller);
+ this->_sfp->setMessageOutputWidget(this->_currentmsgbuffer);
+
+ // Delay setting
+ // parameters: initial lower upper single-incr page-incr
+ this->_delayentry.set_numeric(true);
+
+ // Playback controls
+ this->_playbackcontrols.set_show_arrow(false);
+
+ /* these are waiting for the Gtkmm conversion
+ this->_controls[0].set_stock_id(Stock::SESSION_PLAYBACK_REW);
+ this->_controls[1].set_stock_id(Stock::SESSION_PLAYBACK_STEPBACK);
+ this->_controls[2].set_stock_id(Stock::SESSION_PLAYBACK_PAUSE);
+ this->_controls[3].set_stock_id(Stock::SESSION_PLAYBACK_STEPFORWARD);
+ this->_controls[4].set_stock_id(Stock::SESSION_PLAYBACK_PLAY);
+ */
+
+ this->_controls[0].set_label("Rewind");
+ this->_controls[1].set_label("Go back one");
+ this->_controls[2].set_label("Pause");
+ this->_controls[3].set_label("Go forward one");
+ this->_controls[4].set_label("Play");
+
+ this->_controls[0].set_tooltip(this->_tooltips, _("Rewind"));
+ this->_controls[1].set_tooltip(this->_tooltips, _("Go back one change"));
+ this->_controls[2].set_tooltip(this->_tooltips, _("Pause"));
+ this->_controls[3].set_tooltip(this->_tooltips, _("Go forward one change"));
+ this->_controls[4].set_tooltip(this->_tooltips, _("Play"));
+
+ for(int i = 0; i < 5; i++) {
+ this->_playbackcontrols.append(this->_controls[i], sigc::bind< 0 >(sigc::mem_fun(*this, &SessionPlaybackDialogImpl::_respCallback), TOOLBAR_BASE + i));
+ }
+
+ this->_delaybox.pack_start(this->_labels[1]);
+ this->_delaybox.pack_start(this->_delayentry);
+ this->_delaybox.pack_end(this->_setdelay);
+
+ this->_toolbarbox.pack_start(this->_delaybox);
+ this->_toolbarbox.pack_end(this->_playbackcontrols);
+
+ // Pack widgets into frames
+ this->_fm.pack_start(this->_filebox);
+ this->_fm.pack_end(this->_filebuttons);
+
+ this->_filemanager.add(this->_fm);
+ this->_playback.add(this->_toolbarbox);
+
+ // Pack widgets into main vbox
+ main->pack_start(this->_filemanager);
+ main->pack_start(this->_playback);
+ main->pack_end(this->_currentmsgbox);
+}
+
+void
+SessionPlaybackDialogImpl::_respCallback(int resp)
+{
+ g_log(NULL, G_LOG_LEVEL_DEBUG, "_respCallback: %u", resp);
+ switch(resp) {
+ case CLOSE_FILE:
+ this->_sfp->unload();
+ break;
+ case OPEN_FILE: {
+ Gtk::FileChooserDialog sessionfiledlg(_("Open session file"), Gtk::FILE_CHOOSER_ACTION_OPEN);
+ sessionfiledlg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+ sessionfiledlg.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
+
+ int result = sessionfiledlg.run();
+ switch (result) {
+ case Gtk::RESPONSE_OK:
+ this->_sm->clearDocument();
+ sp_document_done(SP_DT_DOCUMENT(this->_desktop));
+ this->_sm->loadSessionFile(sessionfiledlg.get_filename());
+ this->_openfile.set_text(this->_sfp->filename());
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+ case RESET_DELAY:
+ this->_sfp->setDelay(this->_delayentry.get_value_as_int());
+ break;
+ case REWIND:
+ if (this->_sfp->_playing) {
+ this->_sfp->stop();
+ }
+ this->_sfp->_curdir = Whiteboard::SessionFilePlayer::BACKWARD;
+ this->_sfp->start();
+ break;
+ case STEP_REWIND:
+ this->_sfp->step(Whiteboard::SessionFilePlayer::BACKWARD);
+ break;
+ case PAUSE:
+ this->_sfp->stop();
+ break;
+ case STEP_PLAY:
+ this->_sfp->step(Whiteboard::SessionFilePlayer::FORWARD);
+ break;
+ case PLAY:
+ if (this->_sfp->_playing) {
+ this->_sfp->stop();
+ }
+ this->_sfp->_curdir = Whiteboard::SessionFilePlayer::FORWARD;
+ this->_sfp->start();
+ break;
+ default:
+ break;
+ }
+}
+
+}
+
+}
+
+}