/*
* 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 .
*/
#include "config.h"
#include
#include
#include
#include
#include
#include "manglerconfig.h"
class ManglerChannelTree;
class ManglerNetwork;
class ManglerAudio;
class ManglerSettings;
class ManglerServerList;
class ManglerChat;
class ManglerPrivChat;
class ManglerIntegration;
class ManglerAdmin;
class ManglerRecorder;
#ifdef HAVE_XOSD
class ManglerOsd;
#endif
#ifdef HAVE_G15
class ManglerG15;
#endif
extern "C" {
#include
}
#ifndef _MANGLER_H
#define _MANGLER_H
struct _cli_options {
bool uifromfile;
Glib::ustring uifilename;
Glib::ustring qc_server;
Glib::ustring qc_username;
Glib::ustring qc_password;
};
class Mangler
{
public:
Mangler(struct _cli_options *options);
~Mangler();
void onDisconnectHandler(void);
void startTransmit(void);
void stopTransmit(void);
void initialize(void);
Gtk::Window *manglerWindow;
Glib::RefPtr builder;
Gtk::Button *button;
Gtk::ToggleButton *togglebutton;
Gtk::Dialog *dialog;
Gtk::AboutDialog *aboutdialog;
Gtk::MessageDialog *msgdialog;
Gtk::Window *window;
Gtk::ProgressBar *progressbar;
Gtk::Statusbar *statusbar;
Gtk::Label *label;
Gtk::Entry *entry;
Gtk::ComboBox *combobox;
Gtk::TextView *textview;
Gtk::VBox *vbox;
Gtk::CheckMenuItem *checkmenuitem;
Gtk::MenuItem *menuitem;
Gtk::Table *table;
Gtk::CheckButton *checkbutton;
Gtk::ProgressBar *inputvumeter;
std::map > icons;
Glib::RefPtr statusIcon;
Gtk::Menu *statusIconMenu;
ManglerServerList *serverList;
ManglerChat *chat;
ManglerChannelTree *channelTree;
ManglerNetwork *network;
//int32_t connectedServerId;
std::string connectedServerName;
std::map outputAudio;
std::map privateChatWindows;
ManglerAudio *inputAudio;
ManglerAudio *audioControl;
ManglerSettings *settings;
ManglerIntegration *integration;
ManglerAdmin *admin;
ManglerRecorder *recorder;
static ManglerConfig config;
#ifdef HAVE_XOSD
ManglerOsd *osd;
#endif
#ifdef HAVE_G15
ManglerG15 *g15;
#endif
bool isTransmitting;
bool isTransmittingButton;
bool isTransmittingVA;
bool isTransmittingKey;
bool isTransmittingMouse;
bool iconified;
bool isAdmin;
bool isChanAdmin;
bool muteSound;
bool muteMic;
bool motdAlways;
bool wantAdminWindow;
int espeakRate;
Glib::ustring CurrentOpenMouse;
XDevice *dev; // the currently open mouse device pointer
// Autoreconnect feature stuff - Need ID's to kill threads if needed
bool wantDisconnect;
time_t lastAttempt;
uint32_t lastServer;
// These are used by the message of the day window
Gtk::Window *motdWindow;
Gtk::Notebook *motdNotebook;
Gtk::TextView *motdUsers;
Gtk::TextView *motdGuests;
Gtk::CheckButton *motdIgnore;
Gtk::Button *motdOkButton;
// These are used by the password entry dialog
Gtk::Dialog *passwordDialog;
Gtk::Entry *passwordEntry;
Glib::ustring password;
bool passwordStatus;
// These are used by the kick/ban reason entry dialog
Gtk::Dialog *reasonDialog;
Gtk::Entry *reasonEntry;
Glib::ustring reason;
bool reasonStatus;
bool reasonValid;
// These are used by the text string entry dialog
Gtk::Dialog *textStringChangeDialog;
Gtk::Entry *textStringChangeCommentEntry;
Gtk::Entry *textStringChangeURLEntry;
Gtk::Entry *textStringChangeIntegrationEntry;
Gtk::CheckButton *textStringSilenceCommentCheckButton;
Glib::ustring comment;
Glib::ustring url;
Glib::ustring integration_text;
//Glib::Thread *networkThread;
Glib::ustring getPasswordEntry(Glib::ustring title = "Password", Glib::ustring prompt = "Password");
bool getReasonEntry(Glib::ustring title = "Reason", Glib::ustring prompt = "Reason");
uint32_t getActiveServer(void);
void setActiveServer(uint32_t row_number);
void errorDialog(Glib::ustring message);
void setTooltip(void);
std::string stripMotdRtf(const char *input);
protected:
struct _cli_options *options;
// main window callbacks
void mangler_show_cb(void);
bool mangler_quit_cb(void);
// connection handlers
void onConnectHandler(
Glib::ustring hostname,
Glib::ustring port,
Glib::ustring username,
Glib::ustring password,
Glib::ustring phonetic = "",
Glib::ustring charset = "",
bool acceptPages = true,
bool acceptU2U = true,
bool acceptPrivateChat = true,
bool allowRecording = true);
bool reconnectStatusHandler(void);
// button signal handlers
void quickConnectButton_clicked_cb(void);
void serverListButton_clicked_cb(void);
void connectButton_clicked_cb(void);
void commentButton_clicked_cb(void);
void chatButton_clicked_cb(void);
void bindingsButton_clicked_cb(void);
void adminButton_clicked_cb(void);
void settingsButton_clicked_cb(void);
void aboutButton_clicked_cb(void);
void xmitButton_toggled_cb(void);
void statusIcon_activate_cb(void);
void statusIcon_scroll_event_cb(GdkEventScroll* event);
void statusIcon_buttonpress_event_cb(GdkEventButton* event);
void errorOKButton_clicked_cb(void);
// menu bar signal handlers
void buttonMenuItem_toggled_cb(void);
void hideServerInfoMenuItem_toggled_cb(void);
void hideGuestFlagMenuItem_toggled_cb(void);
void motdMenuItem_activate_cb(void);
void recorderMenuItem_activate_cb(void);
void quitMenuItem_activate_cb(void);
void adminLoginMenuItem_activate_cb(void);
void adminWindowMenuItem_activate_cb(void);
bool getNetworkEvent(void);
bool updateIntegration(void); // music player integration
bool checkPushToTalkKeys(void);
bool checkVoiceActivation(void);
bool checkPushToTalkMouse(void);
bool updateXferAmounts(void);
// quick mute options
void muteSoundCheckButton_toggled_cb(void);
void muteMicCheckButton_toggled_cb(void);
void muteSoundCheckMenuItem_toggled_cb(void);
void muteMicCheckMenuItem_toggled_cb(void);
// quick connect signal handlers
void qcConnectButton_clicked_cb(void);
void qcCancelButton_clicked_cb(void);
// message of the day window signal handlers
void motdIgnore_toggled_cb(void);
void motdOkButton_clicked_cb(void);
// password dialog signal handlers
void passwordDialogOkButton_clicked_cb(void);
void passwordDialogCancelButton_clicked_cb(void);
// kick/ban reason dialog signal handlers
void reasonDialogOkButton_clicked_cb(void);
void reasonDialogCancelButton_clicked_cb(void);
// text string change dialog signal handlers
void textStringChangeDialogOkButton_clicked_cb(void);
void textStringChangeDialogCancelButton_clicked_cb(void);
};
class ManglerError
{
public:
uint32_t code;
Glib::ustring message;
Glib::ustring module;
ManglerError(uint32_t code, Glib::ustring message, Glib::ustring module = "");
};
GdkFilterReturn ptt_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data);
extern Mangler *mangler;
#endif