/* * 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 _MANGLERADMIN_H #define _MANGLERADMIN_H #include extern "C" { #include } class iniFile; class adminModelColumns : public Gtk::TreeModel::ColumnRecord { public: adminModelColumns() { add(id); add(name); } Gtk::TreeModelColumn id; Gtk::TreeModelColumn name; }; class adminChannelStore : public Gtk::TreeStore { public: static Glib::RefPtr create(); adminModelColumns c; protected: adminChannelStore() { 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 ManglerAdmin { friend class adminChannelStore; public: static Glib::ustring trimString(Glib::ustring s); ManglerAdmin(Glib::RefPtr builder); ~ManglerAdmin(); bool isOpen; void show(void); void hide(void); void permsUpdated(bool refresh = false); void serverSettingsUpdated(v3_server_prop &prop); void serverSettingsSendDone(void); void channelUpdated(v3_channel *channel); void channelRemoved(uint32_t chanid); void channelRemoved(v3_channel *channel); void channelAdded(v3_channel *channel); void channelSort(bool manual); void channelResort(void); void clearChannels(void); void accountUpdated(v3_account *account); void accountAdded(v3_account *account); void accountRemoved(uint32_t acctid); void accountRemoved(v3_account *account); void clearUsers(void); void rankUpdated(v3_rank *rank); void rankAdded(v3_rank *rank); void rankRemoved(uint16_t rankid); void rankRemoved(v3_rank *rank); void clearRanks(void); void banList(uint16_t id, uint16_t count, uint16_t bitmask_id, uint32_t ip_address, char *user, char *by, char *reason); void clearBans(void); void clear(void); protected: Glib::RefPtr builder; Gtk::Window *adminWindow; Gtk::Notebook *adminNotebook; Gtk::Alignment *ServerTab; Gtk::Alignment *ChannelsTab; Gtk::Alignment *UsersTab; Gtk::Alignment *RanksTab; Gtk::HBox *BansTab; Gtk::Button *UserAdd; Gtk::Statusbar *AdminStatusbar; guint StatusbarCount; time_t StatusbarTime; Glib::ustring tmpldir; Gtk::FileChooserDialog *tmpldialog; Gtk::FileFilter tpl_filter; Gtk::FileFilter all_filter; adminModelColumns adminRecord; /* server settings editor stuff */ Glib::RefPtr SrvChatFilterModel; Glib::RefPtr SrvChanOrderModel; Glib::RefPtr SrvInactActionModel; Glib::RefPtr SrvInactChannelModel; Glib::RefPtr SrvSpamFilterChannelModel; Glib::RefPtr SrvSpamFilterChatModel; Glib::RefPtr SrvSpamFilterCommentModel; Glib::RefPtr SrvSpamFilterTTSModel; Glib::RefPtr SrvSpamFilterWaveModel; bool SrvEditorOpen; bool SrvIsNotUpdating; /* channel editor stuff */ adminModelColumns ChannelEditorColumns; Glib::RefPtr ChannelEditorTreeModel; adminModelColumns ChannelCodecColumns; Glib::RefPtr ChannelCodecModel; adminModelColumns ChannelFormatColumns; Glib::RefPtr ChannelFormatModel; adminModelColumns ChannelProtColumns; Glib::RefPtr ChannelProtModel; adminModelColumns ChannelVoiceColumns; Glib::RefPtr ChannelVoiceModel; Gtk::TreeView *ChannelEditorTree; Gtk::Button *ChannelUpdate; Gtk::VBox *ChannelEditor; Gtk::Button *ChannelRemove; Gtk::Button *ChannelAdd; uint32_t currentChannelID; uint32_t currentChannelParent; bool channelSortManual; bool ChannelAdded; /* user editor stuff */ class adminCheckModelColumns : public Gtk::TreeModel::ColumnRecord { public: adminCheckModelColumns() { add(id); add(on); add(name); } Gtk::TreeModelColumn id; /* Gtk::CellRendererToggle toggle; */ Gtk::TreeModelColumn on; Gtk::TreeModelColumn name; } adminCheckRecord; adminModelColumns UserEditorColumns; Glib::RefPtr UserEditorTreeModel; Gtk::TreeView *UserEditorTree; adminCheckModelColumns UserChanAdminColumns; Glib::RefPtr UserChanAdminModel; Gtk::TreeView *UserChanAdminTree; adminCheckModelColumns UserChanAuthColumns; Glib::RefPtr UserChanAuthModel; Gtk::TreeView *UserChanAuthTree; adminModelColumns UserOwnerColumns; Glib::RefPtr UserOwnerModel; adminModelColumns UserRankColumns; Glib::RefPtr UserRankModel; adminModelColumns UserDuplicateIPsColumns; Glib::RefPtr UserDuplicateIPsModel; adminModelColumns UserDefaultChannelColumns; Glib::RefPtr UserDefaultChannelModel; Gtk::ComboBox *UserTemplate; adminModelColumns UserTemplateColumns; Glib::RefPtr UserTemplateModel; Gtk::Table *UserInfoSection; Gtk::VBox *UserNetworkSection; Gtk::VBox *UserTransmitSection; Gtk::VBox *UserDisplaySection; Gtk::VBox *UserAdminSection; Gtk::Button *UserUpdate; Gtk::VBox *UserEditor; Gtk::Button *UserRemove; bool UserEditorOpen; uint32_t currentUserID; /* rank editor stuff */ class rankModelColumns : public Gtk::TreeModel::ColumnRecord { public: rankModelColumns() { add(id); add(name); add(level); add(description); } Gtk::TreeModelColumn id; Gtk::TreeModelColumn level; Gtk::TreeModelColumn name; Gtk::TreeModelColumn description; } rankRecord; rankModelColumns RankEditorColumns; Glib::RefPtr RankEditorModel; Gtk::TreeView *RankEditorTree; Gtk::VBox *RankEditor; bool RankEditorOpen; uint16_t currentRankID; /* ban editor stuff */ class banModelColumns : public Gtk::TreeModel::ColumnRecord { public: banModelColumns() { add(id); add(ip_val); add(netmask_id); add(ip); add(netmask); add(user); add(by); add(reason); } Gtk::TreeModelColumn id; Gtk::TreeModelColumn ip_val; Gtk::TreeModelColumn netmask_id; Gtk::TreeModelColumn ip; Gtk::TreeModelColumn netmask; Gtk::TreeModelColumn user; Gtk::TreeModelColumn by; Gtk::TreeModelColumn reason; } banRecord; banModelColumns BanEditorColumns; Glib::RefPtr BanEditorModel; Gtk::TreeView *BanEditorTree; Glib::RefPtr BanNetmaskModel; uint16_t BanNetmaskDefault; Gtk::VBox *BanEditor; uint32_t currentBanIP; /* generic pointers and window pointer */ Gtk::Widget *widget; Gtk::Button *button; Gtk::Entry *entry; Gtk::CheckButton *checkbutton; Gtk::ComboBox *combobox; Gtk::Label *label; Gtk::SpinButton *spinbutton; Gtk::ToggleButton *togglebutton; Gtk::Arrow *arrow; /* admin window main functions and callbacks */ void adminWindow_show_cb(void); void adminWindow_hide_cb(void); void CloseButton_clicked_cb(void); void copyToEntry(const char *widgetName, Glib::ustring src); void copyToSpinbutton(const char *widgetName, uint32_t src); void copyToCheckbutton(const char *widgetName, bool src); void copyToCombobox(const char *widgetName, uint32_t src, uint32_t deflt = 0); Glib::ustring getFromEntry(const char *widgetName); uint32_t getFromSpinbutton(const char *widgetName); bool getFromCheckbutton(const char *widgetName); uint32_t getFromCombobox(const char *widgetName, uint32_t deflt = 0); void setWidgetSensitive(const char *widgetName, bool widgetSens = true); void queue_resize(Gtk::TreeView *treeview); void statusbarPush(Glib::ustring msg); bool statusbarPop(void); /* server settings functions and callbacks */ void ServerUpdate_clicked_cb(void); /* channel editor functions and callbacks */ Glib::ustring getChannelPathString(uint32_t id, Gtk::TreeModel::Children children); Gtk::TreeModel::Row getChannel(uint32_t id, Gtk::TreeModel::Children children, bool hasCheckbox = false); void populateChannelEditor(const v3_channel *channel); int channelSortFunction(const Gtk::TreeModel::iterator &left, const Gtk::TreeModel::iterator &right); void ChannelTree_cursor_changed_cb(void); void ChannelAdd_clicked_cb(void); void ChannelRemove_clicked_cb(void); void ChannelUpdate_clicked_cb(void); void LoadCodecFormats(void); void ChannelProtMode_changed_cb(void); void ChannelVoiceMode_changed_cb(void); /* user editor functions and callbacks */ Gtk::TreeModel::Row getAccount(uint32_t id, Gtk::TreeModel::Children children); void populateUserEditor(const v3_account *account, bool isTemplate = false); void setAdminCheckTree(Gtk::TreeModel::Children children, uint16_t *chanids, int chan_count); void getAdminCheckTree(Gtk::TreeModel::Children children, std::vector &chanids); void getAdminCheckTree(Gtk::TreeModel::Children children, uint16_t *&chanids, int &chan_count); void UserTree_cursor_changed_cb(void); void UserAdd_clicked_cb(void); void UserRemove_clicked_cb(void); void UserUpdate_clicked_cb(void); void UserInfoButton_toggled_cb(void); void UserNetworkButton_toggled_cb(void); void UserTransmitButton_toggled_cb(void); void UserDisplayButton_toggled_cb(void); void UserAdminButton_toggled_cb(void); void UserChanAdminButton_toggled_cb(void); void UserChanAuthButton_toggled_cb(void); /* user editor 'profile' stuff */ void loadUserTemplates(void); void UserTemplate_changed_cb(void); void UserTemplateLoad_clicked_cb(void); void UserTemplateDelete_clicked_cb(void); void UserTemplateSave_clicked_cb(void); /* rank editor functions and callbacks */ Gtk::TreeModel::iterator getRank(uint16_t id, Gtk::TreeModel::Children children); void RankEditorTree_cursor_changed_cb(void); void RankAdd_clicked_cb(void); void RankRemove_clicked_cb(void); void RankUpdate_clicked_cb(void); void clearRankEditor(void); /* ban editor functions and callbacks */ void BanEditorTree_cursor_changed_cb(void); void BanAdd_clicked_cb(void); void BanRemove_clicked_cb(void); void BanUpdate_clicked_cb(void); void clearBanEditor(void); }; #endif