diff options
| author | MenTaLguY <mental@rydia.net> | 2006-01-16 02:36:01 +0000 |
|---|---|---|
| committer | mental <mental@users.sourceforge.net> | 2006-01-16 02:36:01 +0000 |
| commit | 179fa413b047bede6e32109e2ce82437c5fb8d34 (patch) | |
| tree | a5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/ui/dialog/whiteboard-sharewithuser.cpp | |
| download | inkscape-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.cpp | 214 |
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 : |
