summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/whiteboard-sharewithuser.cpp
diff options
context:
space:
mode:
authorMenTaLguY <mental@rydia.net>2006-01-16 02:36:01 +0000
committermental <mental@users.sourceforge.net>2006-01-16 02:36:01 +0000
commit179fa413b047bede6e32109e2ce82437c5fb8d34 (patch)
treea5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/ui/dialog/whiteboard-sharewithuser.cpp
downloadinkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.tar.gz
inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.zip
moving trunk for module inkscape
(bzr r1)
Diffstat (limited to 'src/ui/dialog/whiteboard-sharewithuser.cpp')
-rw-r--r--src/ui/dialog/whiteboard-sharewithuser.cpp214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/ui/dialog/whiteboard-sharewithuser.cpp b/src/ui/dialog/whiteboard-sharewithuser.cpp
new file mode 100644
index 000000000..13dc61a5e
--- /dev/null
+++ b/src/ui/dialog/whiteboard-sharewithuser.cpp
@@ -0,0 +1,214 @@
+/**
+ * Whiteboard share with user dialog
+ *
+ * Authors:
+ * David Yip <yipdw@rose-hulman.edu>
+ * Jason Segal, Jonas Collaros, Stephen Montgomery, Brandi Soggs, Matthew Weinstock (original C/Gtk version)
+ *
+ * Copyright (c) 2004-2005 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include <glibmm/i18n.h>
+
+#include <sigc++/sigc++.h>
+#include <gtk/gtkdialog.h>
+
+#include "message-stack.h"
+#include "message-context.h"
+#include "inkscape.h"
+#include "desktop.h"
+
+#include "jabber_whiteboard/typedefs.h"
+#include "jabber_whiteboard/session-manager.h"
+#include "jabber_whiteboard/buddy-list-manager.h"
+
+#include "jabber_whiteboard/session-file-selector.h"
+
+#include "ui/dialog/whiteboard-sharewithuser.h"
+
+#include "util/ucompose.hpp"
+
+namespace Inkscape {
+
+namespace UI {
+
+namespace Dialog {
+
+WhiteboardShareWithUserDialog*
+WhiteboardShareWithUserDialog::create()
+{
+ return new WhiteboardShareWithUserDialogImpl();
+}
+
+WhiteboardShareWithUserDialogImpl::WhiteboardShareWithUserDialogImpl()
+{
+ this->setSessionManager();
+ this->_construct();
+ this->get_vbox()->show_all_children();
+
+ this->_sm->session_data->buddyList.addInsertListener(sigc::mem_fun(this, &WhiteboardShareWithUserDialogImpl::_insertBuddy));
+ this->_sm->session_data->buddyList.addEraseListener(sigc::mem_fun(this, &WhiteboardShareWithUserDialogImpl::_eraseBuddy));
+
+}
+
+WhiteboardShareWithUserDialogImpl::~WhiteboardShareWithUserDialogImpl()
+{
+
+}
+
+void
+WhiteboardShareWithUserDialogImpl::setSessionManager()
+{
+ this->_desktop = SP_ACTIVE_DESKTOP;
+ this->_sm = SP_ACTIVE_DESKTOP->whiteboard_session_manager();
+
+}
+
+
+void
+WhiteboardShareWithUserDialogImpl::_construct()
+{
+ Gtk::VBox* main = this->get_vbox();
+
+ // Construct dialog interface
+ this->_labels[0].set_markup_with_mnemonic(_("_User's Jabber ID:"));
+ this->_labels[0].set_mnemonic_widget(this->_jid);
+
+ // Buttons
+ this->_share.set_label(_("_Invite user"));
+ this->_cancel.set_label(_("_Cancel"));
+ this->_share.set_use_underline(true);
+ this->_cancel.set_use_underline(true);
+
+ // Button callbacks
+ this->_share.signal_clicked().connect(sigc::bind< 0 >(sigc::mem_fun(*this, &WhiteboardShareWithUserDialogImpl::_respCallback), SHARE));
+ this->_cancel.signal_clicked().connect(sigc::bind< 0 >(sigc::mem_fun(*this, &WhiteboardShareWithUserDialogImpl::_respCallback), CANCEL));
+
+ // Construct ListStore for buddy list information
+ this->_buddylistdata = Gtk::ListStore::create(this->_blm);
+ this->_buddylist.set_model(this->_buddylistdata);
+ this->_buddylist.append_column(_("Buddy List"), this->_blm.jid);
+
+ // Fill buddy list
+ this->_fillBuddyList();
+
+ // Buddy list onclick callback
+ this->_buddylist.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &WhiteboardShareWithUserDialogImpl::_listCallback));
+
+ // Pack widgets into boxes
+ this->_listwindow.add(this->_buddylist);
+ this->_listwindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+ this->_buddylistbox.pack_start(this->_listwindow);
+
+ this->_connecttojidbox.pack_start(this->_labels[0]);
+ this->_connecttojidbox.pack_end(this->_jid);
+
+ this->_buttons.pack_start(this->_cancel);
+ this->_buttons.pack_end(this->_share);
+
+ // Pack boxes into main box
+ main->pack_start(this->_buddylistbox);
+ main->pack_start(this->_connecttojidbox);
+ main->pack_start(this->_sfsbox);
+ main->pack_end(this->_buttons);
+}
+
+
+void
+WhiteboardShareWithUserDialogImpl::_fillBuddyList()
+{
+ Whiteboard::BuddyList& bl = this->_sm->session_data->buddyList.getList();
+
+ for(Whiteboard::BuddyList::iterator i = bl.begin(); i != bl.end(); i++) {
+ this->_insertBuddy(*i);
+ }
+// std::for_each(bl.begin(), bl.end(), std::mem_fun(&WhiteboardShareWithUserDialogImpl::_insertBuddy));
+}
+
+void
+WhiteboardShareWithUserDialogImpl::_insertBuddy(std::string const& jid)
+{
+ // FIXME: need a better way to avoid inserting duplicate rows in the case
+ // of duplicate Jabber presence messages
+ typedef Gtk::TreeModel::Children type_children;
+ type_children children = this->_buddylistdata->children();
+ for(type_children::iterator i = children.begin(); i != children.end(); i++) {
+ if ((*i).get_value(this->_blm.jid) == jid) {
+ return;
+ }
+ }
+
+ Gtk::TreeModel::Row row = *(this->_buddylistdata->append());
+ row[this->_blm.jid] = jid;
+}
+
+void
+WhiteboardShareWithUserDialogImpl::_eraseBuddy(std::string const& jid)
+{
+ // FIXME: Doesn't gtkmm provide a better way to erase rows from a ListStore?
+ typedef Gtk::TreeModel::Children type_children;
+ type_children children = this->_buddylistdata->children();
+ for(type_children::iterator i = children.begin(); i != children.end(); i++) {
+ if ((*i).get_value(this->_blm.jid) == jid) {
+ this->_buddylistdata->erase(i);
+ return;
+ }
+ }
+}
+
+void
+WhiteboardShareWithUserDialogImpl::_respCallback(int resp)
+{
+ switch (resp) {
+ case SHARE:
+ {
+ Glib::ustring jid = this->_jid.get_text();
+ Glib::ustring msg = String::ucompose(_("Sending whiteboard invitation to <b>%1</b>"), jid);
+ this->_sm->desktop()->messageStack()->flash(Inkscape::NORMAL_MESSAGE, msg.data());
+ if (this->_sfsbox.isSelected()) {
+ this->_sm->session_data->sessionFile = this->_sfsbox.getFilename();
+ } else {
+ this->_sm->session_data->sessionFile.clear();
+ }
+ this->_sm->sendRequestToUser(jid);
+ this->hide();
+ break;
+ }
+
+ case CANCEL:
+ this->hide();
+ break;
+
+ default:
+ break;
+ }
+}
+
+void
+WhiteboardShareWithUserDialogImpl::_listCallback()
+{
+ Glib::RefPtr< Gtk::TreeSelection > sel = this->_buddylist.get_selection();
+
+ typedef Gtk::TreeModel::Children type_children;
+ type_children::iterator row = sel->get_selected();
+ this->_jid.set_text((*row).get_value(this->_blm.jid));
+}
+
+}
+
+}
+
+}
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :