pedrogui.h revision 9982f495cde2750b1c6446bfb152af73ab981512
871fccc39b870543073d7015a9d8c701252b68f9joncruz#ifndef __PEDROGUI_H__
871fccc39b870543073d7015a9d8c701252b68f9joncruz#define __PEDROGUI_H__
871fccc39b870543073d7015a9d8c701252b68f9joncruz/*
871fccc39b870543073d7015a9d8c701252b68f9joncruz * Simple demo GUI for the Pedro mini-XMPP client.
871fccc39b870543073d7015a9d8c701252b68f9joncruz *
9dc68827cbd515262ecb8d5ae8547d9e82c72e00Jon A. Cruz * Authors:
9dc68827cbd515262ecb8d5ae8547d9e82c72e00Jon A. Cruz * Bob Jamison
871fccc39b870543073d7015a9d8c701252b68f9joncruz *
871fccc39b870543073d7015a9d8c701252b68f9joncruz * Copyright (C) 2005 Bob Jamison
871fccc39b870543073d7015a9d8c701252b68f9joncruz *
871fccc39b870543073d7015a9d8c701252b68f9joncruz * This library is free software; you can redistribute it and/or
871fccc39b870543073d7015a9d8c701252b68f9joncruz * modify it under the terms of the GNU Lesser General Public
871fccc39b870543073d7015a9d8c701252b68f9joncruz * License as published by the Free Software Foundation; either
871fccc39b870543073d7015a9d8c701252b68f9joncruz * version 2.1 of the License, or (at your option) any later version.
871fccc39b870543073d7015a9d8c701252b68f9joncruz *
871fccc39b870543073d7015a9d8c701252b68f9joncruz * This library is distributed in the hope that it will be useful,
871fccc39b870543073d7015a9d8c701252b68f9joncruz * but WITHOUT ANY WARRANTY; without even the implied warranty of
871fccc39b870543073d7015a9d8c701252b68f9joncruz * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
871fccc39b870543073d7015a9d8c701252b68f9joncruz * Lesser General Public License for more details.
871fccc39b870543073d7015a9d8c701252b68f9joncruz *
ef494f75ca77f36881ad59e94263a07c146c3649Krzysztof Kosiński * You should have received a copy of the GNU Lesser General Public
871fccc39b870543073d7015a9d8c701252b68f9joncruz * License along with this library; if not, write to the Free Software
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński */
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński
ed422cc32e064690397f1e4aeb526ebda5fbca77Krzysztof Kosiński
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński#include <gtkmm.h>
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński#include "ui/widget/spinbutton.h"
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński#include "pedro/pedroxmpp.h"
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński#include "pedro/pedroconfig.h"
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński
871fccc39b870543073d7015a9d8c701252b68f9joncruznamespace Pedro
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński{
871fccc39b870543073d7015a9d8c701252b68f9joncruz
9dc68827cbd515262ecb8d5ae8547d9e82c72e00Jon A. Cruz
871fccc39b870543073d7015a9d8c701252b68f9joncruzclass PedroGui;
871fccc39b870543073d7015a9d8c701252b68f9joncruzclass GroupChatWindow;
871fccc39b870543073d7015a9d8c701252b68f9joncruz
9dc68827cbd515262ecb8d5ae8547d9e82c72e00Jon A. Cruz//#########################################################################
871fccc39b870543073d7015a9d8c701252b68f9joncruz//# R O S T E R
871fccc39b870543073d7015a9d8c701252b68f9joncruz//#########################################################################
871fccc39b870543073d7015a9d8c701252b68f9joncruzclass Roster : public Gtk::ScrolledWindow
871fccc39b870543073d7015a9d8c701252b68f9joncruz{
871fccc39b870543073d7015a9d8c701252b68f9joncruzpublic:
c32a5405bae84de22982c7007511f2a21a8c9046JazzyNico
871fccc39b870543073d7015a9d8c701252b68f9joncruz Roster()
871fccc39b870543073d7015a9d8c701252b68f9joncruz { doSetup(); }
d5ad05ac17abfd7d2eae333a8c1233971e1c1a8fAbhishek Sharma Public
871fccc39b870543073d7015a9d8c701252b68f9joncruz virtual ~Roster()
871fccc39b870543073d7015a9d8c701252b68f9joncruz {}
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz /**
9dc68827cbd515262ecb8d5ae8547d9e82c72e00Jon A. Cruz * Clear all roster items from the list
871fccc39b870543073d7015a9d8c701252b68f9joncruz */
871fccc39b870543073d7015a9d8c701252b68f9joncruz virtual void clear();
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz /**
871fccc39b870543073d7015a9d8c701252b68f9joncruz * Regenerate the roster
871fccc39b870543073d7015a9d8c701252b68f9joncruz */
871fccc39b870543073d7015a9d8c701252b68f9joncruz virtual void refresh();
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz void setParent(PedroGui *val)
871fccc39b870543073d7015a9d8c701252b68f9joncruz { parent = val; }
09ba3247163582bf2e30e17c4c154aa259ce038acilix
871fccc39b870543073d7015a9d8c701252b68f9joncruzprivate:
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz class CustomTreeView : public Gtk::TreeView
871fccc39b870543073d7015a9d8c701252b68f9joncruz {
871fccc39b870543073d7015a9d8c701252b68f9joncruz public:
871fccc39b870543073d7015a9d8c701252b68f9joncruz CustomTreeView()
871fccc39b870543073d7015a9d8c701252b68f9joncruz { parent = NULL; }
871fccc39b870543073d7015a9d8c701252b68f9joncruz virtual ~CustomTreeView()
871fccc39b870543073d7015a9d8c701252b68f9joncruz {}
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz bool on_button_press_event(GdkEventButton* event)
871fccc39b870543073d7015a9d8c701252b68f9joncruz {
871fccc39b870543073d7015a9d8c701252b68f9joncruz Gtk::TreeView::on_button_press_event(event);
871fccc39b870543073d7015a9d8c701252b68f9joncruz if (parent)
871fccc39b870543073d7015a9d8c701252b68f9joncruz parent->buttonPressCallback(event);
871fccc39b870543073d7015a9d8c701252b68f9joncruz return true;
871fccc39b870543073d7015a9d8c701252b68f9joncruz }
b0a706debff59200299511d55822722c5cb3e15fbuliabyak void setParent(Roster *val)
871fccc39b870543073d7015a9d8c701252b68f9joncruz { parent = val; }
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz private:
871fccc39b870543073d7015a9d8c701252b68f9joncruz Roster *parent;
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib };
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib void doubleClickCallback(const Gtk::TreeModel::Path &path,
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib Gtk::TreeViewColumn *col);
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib void sendFileCallback();
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib void chatCallback();
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib void shareCallback();
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib bool buttonPressCallback(GdkEventButton* event);
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib bool doSetup();
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib
6c28c26c5dc911196633a0c332b56f712085fa3ftheAdib Glib::RefPtr<Gdk::Pixbuf> pixbuf_available;
871fccc39b870543073d7015a9d8c701252b68f9joncruz Glib::RefPtr<Gdk::Pixbuf> pixbuf_away;
09ba3247163582bf2e30e17c4c154aa259ce038acilix Glib::RefPtr<Gdk::Pixbuf> pixbuf_chat;
871fccc39b870543073d7015a9d8c701252b68f9joncruz Glib::RefPtr<Gdk::Pixbuf> pixbuf_dnd;
479ed85bac2b7467a6678bae572404e33465a5d9acspike Glib::RefPtr<Gdk::Pixbuf> pixbuf_error;
871fccc39b870543073d7015a9d8c701252b68f9joncruz Glib::RefPtr<Gdk::Pixbuf> pixbuf_offline;
871fccc39b870543073d7015a9d8c701252b68f9joncruz Glib::RefPtr<Gdk::Pixbuf> pixbuf_xa;
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz class RosterColumns : public Gtk::TreeModel::ColumnRecord
e375f7b0799058a61b78199acdbc9b82696f1ae2Krzysztof Kosiński {
871fccc39b870543073d7015a9d8c701252b68f9joncruz public:
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński RosterColumns()
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński {
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński add(groupColumn);
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński add(statusColumn); add(userColumn);
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński add(nameColumn); add(subColumn);
871fccc39b870543073d7015a9d8c701252b68f9joncruz }
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
871fccc39b870543073d7015a9d8c701252b68f9joncruz Gtk::TreeModelColumn<Glib::ustring> groupColumn;
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > statusColumn;
871fccc39b870543073d7015a9d8c701252b68f9joncruz Gtk::TreeModelColumn<Glib::ustring> userColumn;
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński Gtk::TreeModelColumn<Glib::ustring> nameColumn;
871fccc39b870543073d7015a9d8c701252b68f9joncruz Gtk::TreeModelColumn<Glib::ustring> subColumn;
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński };
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
871fccc39b870543073d7015a9d8c701252b68f9joncruz RosterColumns rosterColumns;
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński Glib::RefPtr<Gtk::UIManager> uiManager;
871fccc39b870543073d7015a9d8c701252b68f9joncruz
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński Glib::RefPtr<Gtk::TreeStore> treeStore;
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński CustomTreeView rosterView;
871fccc39b870543073d7015a9d8c701252b68f9joncruz
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński PedroGui *parent;
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński};
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński//#########################################################################
871fccc39b870543073d7015a9d8c701252b68f9joncruz//# M E S S A G E L I S T
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński//#########################################################################
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosińskiclass MessageList : public Gtk::ScrolledWindow
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński{
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosińskipublic:
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
871fccc39b870543073d7015a9d8c701252b68f9joncruz MessageList()
ed422cc32e064690397f1e4aeb526ebda5fbca77Krzysztof Kosiński { doSetup(); }
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
871fccc39b870543073d7015a9d8c701252b68f9joncruz virtual ~MessageList()
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński {}
871fccc39b870543073d7015a9d8c701252b68f9joncruz
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński /**
ed422cc32e064690397f1e4aeb526ebda5fbca77Krzysztof Kosiński * Clear all messages from the list
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński */
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński virtual void clear();
d1bde559850436556ebee2e70e10f1cfc8aff636Krzysztof Kosiński
871fccc39b870543073d7015a9d8c701252b68f9joncruz /**
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński * Post a message to the list
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński */
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński virtual void postMessage(const DOMString &from, const DOMString &msg);
e375f7b0799058a61b78199acdbc9b82696f1ae2Krzysztof Kosiński
e375f7b0799058a61b78199acdbc9b82696f1ae2Krzysztof Kosińskiprivate:
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński
00cd8cdd29c4bcef32835fb75ed803cefeec6d10theAdib bool doSetup();
00cd8cdd29c4bcef32835fb75ed803cefeec6d10theAdib
00cd8cdd29c4bcef32835fb75ed803cefeec6d10theAdib Gtk::TextView messageList;
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński Glib::RefPtr<Gtk::TextBuffer> messageListBuffer;
c97348400fa86585534b463cc1a3f70ecd9f4c72scislac
ec3cef722801728184cc83bd46740d0fdcadf908Krzysztof Kosiński};
00cd8cdd29c4bcef32835fb75ed803cefeec6d10theAdib
8a0a34615f080ecd1c09986d8963d6afe5937a25Jon A. Cruz//#########################################################################
b0a706debff59200299511d55822722c5cb3e15fbuliabyak//# U S E R L I S T
f71fc608082707d67d010ff860df1a7df67da884buliabyak//#########################################################################
871fccc39b870543073d7015a9d8c701252b68f9joncruzclass UserList : public Gtk::ScrolledWindow
871fccc39b870543073d7015a9d8c701252b68f9joncruz{
871fccc39b870543073d7015a9d8c701252b68f9joncruzpublic:
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz UserList()
871fccc39b870543073d7015a9d8c701252b68f9joncruz { doSetup(); }
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz virtual ~UserList()
871fccc39b870543073d7015a9d8c701252b68f9joncruz {}
871fccc39b870543073d7015a9d8c701252b68f9joncruz
871fccc39b870543073d7015a9d8c701252b68f9joncruz /**
871fccc39b870543073d7015a9d8c701252b68f9joncruz * Clear all messages from the list
871fccc39b870543073d7015a9d8c701252b68f9joncruz */
871fccc39b870543073d7015a9d8c701252b68f9joncruz virtual void clear();
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan
/**
* Post a message to the list
*/
virtual void addUser(const DOMString &user, const DOMString &show);
void setParent(GroupChatWindow *val)
{ parent = val; }
private:
class CustomTreeView : public Gtk::TreeView
{
public:
CustomTreeView()
{ parent = NULL; }
virtual ~CustomTreeView()
{}
bool on_button_press_event(GdkEventButton* event)
{
Gtk::TreeView::on_button_press_event(event);
if (parent)
parent->buttonPressCallback(event);
return true;
}
void setParent(UserList *val)
{ parent = val; }
private:
UserList *parent;
};
void doubleClickCallback(const Gtk::TreeModel::Path &path,
Gtk::TreeViewColumn *col);
void sendFileCallback();
void chatCallback();
void shareCallback();
bool buttonPressCallback(GdkEventButton* event);
bool doSetup();
Glib::RefPtr<Gdk::Pixbuf> pixbuf_available;
Glib::RefPtr<Gdk::Pixbuf> pixbuf_away;
Glib::RefPtr<Gdk::Pixbuf> pixbuf_chat;
Glib::RefPtr<Gdk::Pixbuf> pixbuf_dnd;
Glib::RefPtr<Gdk::Pixbuf> pixbuf_error;
Glib::RefPtr<Gdk::Pixbuf> pixbuf_offline;
Glib::RefPtr<Gdk::Pixbuf> pixbuf_xa;
class UserListColumns : public Gtk::TreeModel::ColumnRecord
{
public:
UserListColumns()
{ add(statusColumn); add(userColumn); }
Gtk::TreeModelColumn<Glib::ustring> userColumn;
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > statusColumn;
};
UserListColumns userListColumns;
Glib::RefPtr<Gtk::UIManager> uiManager;
Glib::RefPtr<Gtk::ListStore> userListStore;
CustomTreeView userList;
GroupChatWindow *parent;
};
//#########################################################################
//# C H A T W I N D O W
//#########################################################################
class ChatWindow : public Gtk::Window
{
public:
ChatWindow(PedroGui &par, const DOMString jid);
virtual ~ChatWindow();
virtual DOMString getJid()
{ return jid; }
virtual void setJid(const DOMString &val)
{ jid = val; }
virtual bool postMessage(const DOMString &data);
private:
DOMString jid;
void leaveCallback();
void hideCallback();
void shareCallback();
void textEnterCallback();
bool doSetup();
Gtk::VBox vbox;
Gtk::VPaned vPaned;
MessageList messageList;
Gtk::Entry inputTxt;
PedroGui &parent;
};
//#########################################################################
//# G R O U P C H A T W I N D O W
//#########################################################################
class GroupChatWindow : public Gtk::Window
{
public:
GroupChatWindow(PedroGui &par, const DOMString &groupJid,
const DOMString &nick);
virtual ~GroupChatWindow();
virtual DOMString getGroupJid()
{ return groupJid; }
virtual void setGroupJid(const DOMString &val)
{ groupJid = val; }
virtual DOMString getNick()
{ return nick; }
virtual void setNick(const DOMString &val)
{ nick = val; }
virtual bool receiveMessage(const DOMString &from,
const DOMString &data);
virtual bool receivePresence(const DOMString &nick,
bool presence,
const DOMString &show,
const DOMString &status);
virtual void doSendFile(const DOMString &nick);
virtual void doChat(const DOMString &nick);
virtual void doShare(const DOMString &nick);
private:
void textEnterCallback();
void leaveCallback();
void hideCallback();
void shareCallback();
bool doSetup();
Gtk::VBox vbox;
Gtk::VPaned vPaned;
Gtk::HPaned hPaned;
MessageList messageList;
UserList userList;
Gtk::Entry inputTxt;
DOMString groupJid;
DOMString nick;
PedroGui &parent;
};
//#########################################################################
//# C O N F I G D I A L O G
//#########################################################################
class ConfigDialog : public Gtk::Dialog
{
public:
ConfigDialog (PedroGui &par) : parent(par)
{ doSetup(); }
virtual ~ConfigDialog ()
{}
DOMString getPass()
{ return passField.get_text(); }
DOMString getNewPass()
{ return newField.get_text(); }
DOMString getConfirm()
{ return confField.get_text(); }
protected:
//Overloaded from Gtk::Dialog
virtual void on_response(int response_id);
private:
void okCallback();
void cancelCallback();
bool doSetup();
Gtk::Table table;
Gtk::Label passLabel;
Gtk::Entry passField;
Gtk::Label newLabel;
Gtk::Entry newField;
Gtk::Label confLabel;
Gtk::Entry confField;
PedroGui &parent;
};
//#########################################################################
//# P A S S W O R D D I A L O G
//#########################################################################
class PasswordDialog : public Gtk::Dialog
{
public:
PasswordDialog (PedroGui &par) : parent(par)
{ doSetup(); }
virtual ~PasswordDialog ()
{}
DOMString getPass()
{ return passField.get_text(); }
DOMString getNewPass()
{ return newField.get_text(); }
DOMString getConfirm()
{ return confField.get_text(); }
protected:
//Overloaded from Gtk::Dialog
virtual void on_response(int response_id);
private:
void okCallback();
void cancelCallback();
bool doSetup();
Gtk::Table table;
Gtk::Label passLabel;
Gtk::Entry passField;
Gtk::Label newLabel;
Gtk::Entry newField;
Gtk::Label confLabel;
Gtk::Entry confField;
PedroGui &parent;
};
//#########################################################################
//# C H A T D I A L O G
//#########################################################################
class ChatDialog : public Gtk::Dialog
{
public:
ChatDialog(PedroGui &par) : parent(par)
{ doSetup(); }
virtual ~ChatDialog()
{}
DOMString getUser()
{ return userField.get_text(); }
DOMString getText()
{ return textField.get_text(); }
private:
void okCallback();
void cancelCallback();
bool doSetup();
Gtk::Table table;
Gtk::Label userLabel;
Gtk::Entry userField;
Gtk::Entry textField;
PedroGui &parent;
};
//#########################################################################
//# G R O U P C H A T D I A L O G
//#########################################################################
class GroupChatDialog : public Gtk::Dialog
{
public:
GroupChatDialog(PedroGui &par) : parent(par)
{ doSetup(); }
virtual ~GroupChatDialog()
{}
DOMString getGroup()
{ return groupField.get_text(); }
DOMString getHost()
{ return hostField.get_text(); }
DOMString getPass()
{ return passField.get_text(); }
DOMString getNick()
{ return nickField.get_text(); }
private:
void okCallback();
void cancelCallback();
bool doSetup();
Gtk::Table table;
Gtk::Label groupLabel;
Gtk::Entry groupField;
Gtk::Label hostLabel;
Gtk::Entry hostField;
Gtk::Label passLabel;
Gtk::Entry passField;
Gtk::Label nickLabel;
Gtk::Entry nickField;
PedroGui &parent;
};
//#########################################################################
//# C O N N E C T D I A L O G
//#########################################################################
class ConnectDialog : public Gtk::Dialog
{
public:
ConnectDialog (PedroGui &par) : parent(par)
{ doSetup(); }
virtual ~ConnectDialog ()
{}
DOMString getHost()
{ return hostField.get_text(); }
void setHost(const DOMString &val)
{ hostField.set_text(val); }
int getPort()
{ return (int)portSpinner.get_value(); }
void setPort(int val)
{ portSpinner.set_value(val); }
DOMString getUser()
{ return userField.get_text(); }
void setUser(const DOMString &val)
{ userField.set_text(val); }
DOMString getPass()
{ return passField.get_text(); }
void setPass(const DOMString &val)
{ passField.set_text(val); }
DOMString getResource()
{ return resourceField.get_text(); }
void setResource(const DOMString &val)
{ resourceField.set_text(val); }
bool getRegister()
{ return registerButton.get_active(); }
/**
* Regenerate the account list
*/
virtual void refresh();
private:
void okCallback();
void saveCallback();
void cancelCallback();
void doubleClickCallback(
const Gtk::TreeModel::Path &path,
Gtk::TreeViewColumn *col);
void selectedCallback();
bool doSetup();
Gtk::Table table;
Gtk::Label hostLabel;
Gtk::Entry hostField;
Gtk::Label portLabel;
Inkscape::UI::Widget::SpinButton portSpinner;
Gtk::Label userLabel;
Gtk::Entry userField;
Gtk::Label passLabel;
Gtk::Entry passField;
Gtk::Label resourceLabel;
Gtk::Entry resourceField;
Gtk::Label registerLabel;
Gtk::CheckButton registerButton;
Glib::RefPtr<Gtk::UIManager> uiManager;
//## Account list
void buttonPressCallback(GdkEventButton* event);
Gtk::ScrolledWindow accountScroll;
void connectCallback();
void modifyCallback();
void deleteCallback();
class AccountColumns : public Gtk::TreeModel::ColumnRecord
{
public:
AccountColumns()
{
add(nameColumn);
add(hostColumn);
}
Gtk::TreeModelColumn<Glib::ustring> nameColumn;
Gtk::TreeModelColumn<Glib::ustring> hostColumn;
};
AccountColumns accountColumns;
Glib::RefPtr<Gtk::UIManager> accountUiManager;
Glib::RefPtr<Gtk::ListStore> accountListStore;
Gtk::TreeView accountView;
PedroGui &parent;
};
//#########################################################################
//# F I L E S E N D D I A L O G
//#########################################################################
class FileSendDialog : public Gtk::Dialog
{
public:
FileSendDialog(PedroGui &par) : parent(par)
{ doSetup(); }
virtual ~FileSendDialog()
{}
DOMString getFileName()
{ return fileName; }
DOMString getJid()
{ return jidField.get_text(); }
void setJid(const DOMString &val)
{ return jidField.set_text(val); }
private:
void okCallback();
void cancelCallback();
void buttonCallback();
bool doSetup();
Gtk::Table table;
Gtk::Label jidLabel;
Gtk::Entry jidField;
DOMString fileName;
Gtk::Entry fileNameField;
Gtk::Button selectFileButton;
PedroGui &parent;
};
//#########################################################################
//# F I L E R E C E I V E D I A L O G
//#########################################################################
class FileReceiveDialog : public Gtk::Dialog
{
public:
FileReceiveDialog(PedroGui &par,
const DOMString &jidArg,
const DOMString &iqIdArg,
const DOMString &streamIdArg,
const DOMString &offeredNameArg,
const DOMString &descArg,
long sizeArg,
const DOMString &hashArg
) : parent(par)
{
jid = jidArg;
iqId = iqIdArg;
streamId = streamIdArg;
offeredName = offeredNameArg;
desc = descArg;
fileSize = sizeArg;
hash = hashArg;
doSetup();
}
virtual ~FileReceiveDialog()
{}
DOMString getJid()
{ return jid; }
DOMString getIq()
{ return iqId; }
DOMString getStreamId()
{ return streamId; }
DOMString getOfferedName()
{ return offeredName; }
DOMString getFileName()
{ return fileName; }
DOMString getDescription()
{ return desc; }
long getSize()
{ return fileSize; }
DOMString getHash()
{ return hash; }
private:
void okCallback();
void cancelCallback();
void buttonCallback();
bool doSetup();
Gtk::Table table;
Gtk::Label jidLabel;
Gtk::Entry jidField;
Gtk::Label offeredLabel;
Gtk::Entry offeredField;
Gtk::Label descLabel;
Gtk::Entry descField;
Gtk::Label sizeLabel;
Gtk::Entry sizeField;
Gtk::Label hashLabel;
Gtk::Entry hashField;
Gtk::Entry fileNameField;
Gtk::Button selectFileButton;
DOMString jid;
DOMString iqId;
DOMString streamId;
DOMString offeredName;
DOMString desc;
long fileSize;
DOMString hash;
DOMString fileName;
PedroGui &parent;
};
//#########################################################################
//# M A I N W I N D O W
//#########################################################################
class PedroGui : public Gtk::Window
{
public:
PedroGui();
virtual ~PedroGui();
//Let everyone share these
XmppClient client;
XmppConfig config;
virtual void error(const char *fmt, ...) G_GNUC_PRINTF(2,3);
virtual void status(const char *fmt, ...) G_GNUC_PRINTF(2,3);
void handleConnectEvent();
void handleDisconnectEvent();
/**
*
*/
virtual void doEvent(const XmppEvent &event);
/**
*
*/
bool checkEventQueue();
bool chatCreate(const DOMString &userJid);
bool chatDelete(const DOMString &userJid);
bool chatDeleteAll();
bool chatMessage(const DOMString &jid, const DOMString &data);
bool groupChatCreate(const DOMString &groupJid,
const DOMString &nick);
bool groupChatDelete(const DOMString &groupJid,
const DOMString &nick);
bool groupChatDeleteAll();
bool groupChatMessage(const DOMString &groupJid,
const DOMString &from, const DOMString &data);
bool groupChatPresence(const DOMString &groupJid,
const DOMString &nick,
bool presence,
const DOMString &show,
const DOMString &status);
void doChat(const DOMString &jid);
void doSendFile(const DOMString &jid);
void doReceiveFile(const DOMString &jid,
const DOMString &iqId,
const DOMString &streamId,
const DOMString &offeredName,
const DOMString &desc,
long size,
const DOMString &hash);
void doShare(const DOMString &jid);
void doGroupShare(const DOMString &groupJid);
//# File menu
void connectCallback();
void chatCallback();
void groupChatCallback();
void disconnectCallback();
void quitCallback();
//# Edit menu
void fontCallback();
void colorCallback();
//# Transfer menu
void sendFileCallback();
//# Registration menu
void regPassCallback();
void regCancelCallback();
//# Help menu
void aboutCallback();
//# Configuration file
bool configLoad();
bool configSave();
private:
bool doSetup();
Gtk::VBox mainBox;
Gtk::HBox menuBarBox;
Gtk::Image padlockIcon;
void padlockEnable();
void padlockDisable();
Pango::FontDescription fontDesc;
Gdk::Color foregroundColor;
Gdk::Color backgroundColor;
Gtk::VPaned vPaned;
MessageList messageList;
Roster roster;
Glib::RefPtr<Gtk::UIManager> uiManager;
void actionEnable(const DOMString &name, bool val);
std::vector<ChatWindow *>chats;
std::vector<GroupChatWindow *>groupChats;
};
} //namespace Pedro
#endif /* __PEDROGUI_H__ */
//#########################################################################
//# E N D O F F I L E
//#########################################################################