/*
* vim: softtabstop=4 shiftwidth=4 cindent foldmethod=marker expandtab
*
* $LastChangedDate$
* $Revision$
* $LastChangedBy$
* $URL$
*
* Copyright 2009-2011 Eric Connell
*
* This file is part of Mangler.
*
* Mangler is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Mangler is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Mangler. If not, see .
*/
#ifndef _CHANNELTREE_H
#define _CHANNELTREE_H
#include
class channelModelColumns : public Gtk::TreeModel::ColumnRecord/*{{{*/
{
public:
channelModelColumns() {
add(displayName);
add(icon);
add(isUser);
add(isGuest);
add(id);
add(parent_id);
add(name);
add(comment);
add(phonetic);
add(url);
add(integration_text);
add(rank);
add(last_transmit);
add(password);
add(muted);
add(phantom);
}
Gtk::TreeModelColumn displayName;
Gtk::TreeModelColumn > icon;
Gtk::TreeModelColumn isUser;
Gtk::TreeModelColumn isGuest;
Gtk::TreeModelColumn id;
Gtk::TreeModelColumn parent_id;
Gtk::TreeModelColumn name;
Gtk::TreeModelColumn comment;
Gtk::TreeModelColumn phonetic;
Gtk::TreeModelColumn url;
Gtk::TreeModelColumn integration_text;
Gtk::TreeModelColumn rank;
Gtk::TreeModelColumn last_transmit;
Gtk::TreeModelColumn password;
Gtk::TreeModelColumn muted;
Gtk::TreeModelColumn phantom;
};/*}}}*/
class ManglerChannelStore : public Gtk::TreeStore
{
public:
static Glib::RefPtr create();
channelModelColumns c;
protected:
ManglerChannelStore() {
set_column_types(c);
}
virtual bool row_draggable_vfunc(const Gtk::TreeModel::Path& path) const;
virtual bool row_drop_possible_vfunc(const Gtk::TreeModel::Path& dest, const Gtk::SelectionData& selection_data) const;
virtual bool drag_data_received_vfunc(const Gtk::TreeModel::Path& dest, const Gtk::SelectionData& selection_data);
};
class ManglerChannelTree
{
private:
Glib::RefPtr builder;
channelModelColumns channelRecord;
Glib::RefPtr channelStore;
Gtk::TreeModel::iterator channelIter;
Gtk::TreeModel::Row channelRow;
Gtk::TreeViewColumn *column;
Gtk::CellRendererPixbuf *pixrenderer;
Gtk::CellRendererText *textrenderer;
Gtk::MenuItem *menuitem;
Gtk::CheckMenuItem *checkmenuitem;
void renderCellData(Gtk::CellRenderer *cell, const Gtk::TreeModel::iterator& iter);
public:
ManglerChannelTree(Glib::RefPtr builder);
Gtk::TreeView *channelView;
Gtk::Menu *rcmenu_user;
sigc::connection signalMute;
sigc::connection signalChannelMute;
sigc::connection signalGlobalMute;
Gtk::Menu *rcmenu_channel;
sigc::connection signalDefaultChannel;
Gtk::Window *window;
Gtk::Label *label;
Gtk::LinkButton *linkbutton;
Gtk::VScale *volumevscale;
Gtk::Adjustment *volumeAdjustment;
sigc::connection volumeAdjustSignalConnection;
Gtk::VBox *vbox;
bool sortManual;
void addChannel(uint8_t protect_mode, uint32_t id, uint32_t parent_id, Glib::ustring name, Glib::ustring comment = "", Glib::ustring phonetic = "");
void addUser(uint32_t id, uint32_t channel, Glib::ustring name, Glib::ustring comment = "", Glib::ustring phonetic = "", Glib::ustring url = "", Glib::ustring integration_text = "", bool guest = false, bool phantom = false, Glib::ustring rank = "");
void updateLobby(Glib::ustring name, Glib::ustring comment = "", Glib::ustring phonetic = "");
void updateUser(uint32_t id, uint32_t parent_id, Glib::ustring name, Glib::ustring comment, Glib::ustring phonetic, Glib::ustring url, Glib::ustring integration_text, bool guest, bool phantom, Glib::ustring rank = "");
void updateChannel(uint8_t protect_mode, uint32_t id, uint32_t parent_id, Glib::ustring name, Glib::ustring comment, Glib::ustring phonetic);
void refreshChannel(uint32_t id);
void _refreshAllChannels(Gtk::TreeModel::Children children);
void refreshAllChannels();
void refreshUser(uint32_t id);
void _refreshAllUsers(Gtk::TreeModel::Children children);
void refreshAllUsers();
int sortFunction(const Gtk::TreeModel::iterator& a, const Gtk::TreeModel::iterator& b);
Glib::ustring getLastTransmit(uint16_t userid);
void setLastTransmit(uint16_t userid, Glib::ustring last_transmit);
void removeUser(uint32_t id);
void removeChannel(uint32_t id);
void setUserIcon(uint16_t id, Glib::ustring color, bool updateLastTransmit = false);
Gtk::TreeModel::Row getChannel(uint32_t id, Gtk::TreeModel::Children children);
Gtk::TreeModel::Row getUser(uint32_t id);
bool _getUser(const Gtk::TreeModel::iterator &iter, uint32_t id, Gtk::TreeModel::iterator *r_iter);
uint16_t getUserChannelId(uint16_t userid);
Glib::ustring getChannelSavedPassword(uint16_t channel_id);
void setChannelSavedPassword(uint16_t channel_id, Glib::ustring password);
void forgetChannelSavedPassword(uint16_t channel_id);
bool isMuted(uint16_t userid);
void muteUserToggle(uint16_t userid);
void queue_resize(void);
void expand_all(void);
void collapse_all(void);
void clear(void);
void channelView_row_activated_cb(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column);
void channelView_columns_changed_cb(void);
void userSettingsMenuItem_activate_cb(void);
void channelView_buttonpress_event_cb(GdkEventButton* event);
void copyCommentMenuItem_activate_cb(void);
void copyURLMenuItem_activate_cb(void);
void privateChatMenuItem_activate_cb(void);
void addPhantomMenuItem_activate_cb(void);
void removePhantomMenuItem_activate_cb(void);
void kickUserMenuItem_activate_cb(void);
void banUserMenuItem_activate_cb(void);
void muteUserMenuItem_activate_cb(void);
void muteUserChannelMenuItem_activate_cb(void);
void muteUserGlobalMenuItem_activate_cb(void);
void pageUserMenuItem_activate_cb(void);
void setDefaultChannelMenuItem_activate_cb(void);
Glib::ustring volumevscale_format_value_cb(double value);
void volumeAdjustment_value_changed_cb(uint16_t id);
void userSettingsWindow(Gtk::TreeModel::Row row);
};
Glib::ustring getTimeString(void);
int natsort(const char *l, const char *r);
#endif