JNIEXPORT void JNICALL Java_com_jtxdriggers_android_ventriloid_VentriloInterface_setxmitvolume(JNIEnv* env, jobject obj, jint level) { v3_set_volume_xmit(level); }
/* * Set window properties that are not settable in builder */ settingsWindow->set_keep_above(true); settingsWindow->signal_show().connect(sigc::mem_fun(this, &ManglerSettings::settingsWindow_show_cb)); settingsWindow->signal_hide().connect(sigc::mem_fun(this, &ManglerSettings::settingsWindow_hide_cb)); builder->get_widget("settingsCancelButton", button); button->signal_clicked().connect(sigc::mem_fun(this, &ManglerSettings::settingsCancelButton_clicked_cb)); builder->get_widget("settingsApplyButton", button); button->signal_clicked().connect(sigc::mem_fun(this, &ManglerSettings::settingsApplyButton_clicked_cb)); builder->get_widget("settingsOkButton", button); button->signal_clicked().connect(sigc::mem_fun(this, &ManglerSettings::settingsOkButton_clicked_cb)); builder->get_widget("settingsEnablePTTKeyCheckButton", checkbutton); checkbutton->signal_toggled().connect(sigc::mem_fun(this, &ManglerSettings::settingsEnablePTTKeyCheckButton_toggled_cb)); builder->get_widget("settingsPTTKeyButton", button); button->signal_clicked().connect(sigc::mem_fun(this, &ManglerSettings::settingsPTTKeyButton_clicked_cb)); builder->get_widget("settingsEnablePTTMouseCheckButton", checkbutton); checkbutton->signal_toggled().connect(sigc::mem_fun(this, &ManglerSettings::settingsEnablePTTMouseCheckButton_toggled_cb)); builder->get_widget("settingsPTTMouseButton", button); button->signal_clicked().connect(sigc::mem_fun(this, &ManglerSettings::settingsPTTMouseButton_clicked_cb)); builder->get_widget("settingsEnableAudioIntegrationCheckButton", checkbutton); checkbutton->signal_toggled().connect(sigc::mem_fun(this, &ManglerSettings::settingsEnableAudioIntegrationCheckButton_toggled_cb)); builder->get_widget("settingsAudioIntegrationComboBox", audioPlayerComboBox); audioPlayerTreeModel = Gtk::ListStore::create(audioPlayerColumns); audioPlayerComboBox->set_model(audioPlayerTreeModel); // create a "none" row Gtk::TreeModel::Row audioPlayerNoneRow = *(audioPlayerTreeModel->append()); audioPlayerNoneRow[audioPlayerColumns.id] = MusicClient_None; audioPlayerNoneRow[audioPlayerColumns.name] = "None"; #ifdef HAVE_LIBMPDCLIENT // add MPD row Gtk::TreeModel::Row audioPlayerMPDRow = *(audioPlayerTreeModel->append()); audioPlayerMPDRow[audioPlayerColumns.id] = MusicClient_MPD; audioPlayerMPDRow[audioPlayerColumns.name] = "MPD"; #endif #ifdef HAVE_DBUS // add DBUS client rows // rhythmbox Gtk::TreeModel::Row audioPlayerRBRow = *(audioPlayerTreeModel->append()); audioPlayerRBRow[audioPlayerColumns.id] = MusicClient_Rhythmbox; audioPlayerRBRow[audioPlayerColumns.name] = "Rhythmbox"; // amarok Gtk::TreeModel::Row audioPlayerAmarokRow = *(audioPlayerTreeModel->append()); audioPlayerAmarokRow[audioPlayerColumns.id] = MusicClient_Amarok; audioPlayerAmarokRow[audioPlayerColumns.name] = "Amarok"; #endif audioPlayerComboBox->pack_start(audioPlayerColumns.name); audioPlayerComboBox->set_active(audioPlayerNoneRow); builder->get_widget("settingsEnableVoiceActivationCheckButton", checkbutton); checkbutton->signal_toggled().connect(sigc::mem_fun(this, &ManglerSettings::settingsEnableVoiceActivationCheckButton_toggled_cb)); #ifdef HAVE_XOSD builder->get_widget("settingsOSD", vbox); vbox->set_sensitive(true); builder->get_widget("settingsEnableOnScreenDisplayCheckButton", checkbutton); checkbutton->signal_toggled().connect(sigc::mem_fun(this, &ManglerSettings::settingsEnableOnScreenDisplayCheckButton_toggled_cb)); builder->get_widget("settingsOSDverticalPos", osdPosition); osdPositionModel = Gtk::ListStore::create(osdPositionColumns); osdPosition->set_model(osdPositionModel); osdPosition->pack_start(osdPositionColumns.name); Gtk::TreeModel::Row posrow; posrow = *osdPositionModel->append(); posrow[osdPositionColumns.id] = XOSD_top; posrow[osdPositionColumns.name] = "Top"; posrow = *osdPositionModel->append(); posrow[osdPositionColumns.id] = XOSD_middle; posrow[osdPositionColumns.name] = "Middle"; posrow = *osdPositionModel->append(); posrow[osdPositionColumns.id] = XOSD_bottom; posrow[osdPositionColumns.name] = "Bottom"; builder->get_widget("settingsOSDhorizontalPos", osdAlignment); osdAlignmentModel = Gtk::ListStore::create(osdAlignmentColumns); osdAlignment->set_model(osdAlignmentModel); osdAlignment->pack_start(osdAlignmentColumns.name); Gtk::TreeModel::Row alnrow; alnrow = *osdAlignmentModel->append(); alnrow[osdAlignmentColumns.id] = XOSD_center; alnrow[osdAlignmentColumns.name] = "Center"; alnrow = *osdAlignmentModel->append(); alnrow[osdAlignmentColumns.id] = XOSD_left; alnrow[osdAlignmentColumns.name] = "Left"; alnrow = *osdAlignmentModel->append(); alnrow[osdAlignmentColumns.id] = XOSD_right; alnrow[osdAlignmentColumns.name] = "Right"; builder->get_widget("settingsOSDfontsize", osdFontSize); builder->get_widget("settingsOSDcolor", osdColor); #endif builder->get_widget("audioSubsystemComboBox", audioSubsystemComboBox); audioSubsystemTreeModel = Gtk::ListStore::create(audioSubsystemColumns); audioSubsystemComboBox->set_model(audioSubsystemTreeModel); audioSubsystemComboBox->pack_start(audioSubsystemColumns.name); audioSubsystemComboBox->signal_changed().connect(sigc::mem_fun(this, &ManglerSettings::audioSubsystemComboBox_changed_cb)); builder->get_widget("inputDeviceComboBox", inputDeviceComboBox); inputDeviceTreeModel = Gtk::ListStore::create(inputColumns); inputDeviceComboBox->set_model(inputDeviceTreeModel); inputDeviceComboBox->pack_start(inputColumns.description); inputDeviceComboBox->signal_changed().connect(sigc::mem_fun(this, &ManglerSettings::inputDeviceComboBox_changed_cb)); builder->get_widget("inputDeviceCustomName", inputDeviceCustomName); builder->get_widget("outputDeviceComboBox", outputDeviceComboBox); outputDeviceTreeModel = Gtk::ListStore::create(outputColumns); outputDeviceComboBox->set_model(outputDeviceTreeModel); outputDeviceComboBox->pack_start(outputColumns.description); outputDeviceComboBox->signal_changed().connect(sigc::mem_fun(this, &ManglerSettings::outputDeviceComboBox_changed_cb)); builder->get_widget("outputDeviceCustomName", outputDeviceCustomName); builder->get_widget("notificationDeviceComboBox", notificationDeviceComboBox); notificationDeviceTreeModel = Gtk::ListStore::create(notificationColumns); notificationDeviceComboBox->set_model(notificationDeviceTreeModel); notificationDeviceComboBox->pack_start(notificationColumns.description); notificationDeviceComboBox->signal_changed().connect(sigc::mem_fun(this, &ManglerSettings::notificationDeviceComboBox_changed_cb)); builder->get_widget("notificationDeviceCustomName", notificationDeviceCustomName); mouseInputDevices = getInputDeviceList(); builder->get_widget("settingsMouseDeviceComboBox", mouseDeviceComboBox); mouseDeviceTreeModel = Gtk::ListStore::create(mouseColumns); mouseDeviceComboBox->set_model(mouseDeviceTreeModel); mouseDeviceComboBox->pack_start(mouseColumns.name); // Audio Subsystem audioSubsystemTreeModel->clear(); Gtk::TreeModel::Row audioSubsystemRow; #ifdef HAVE_PULSE audioSubsystemRow = *(audioSubsystemTreeModel->append()); audioSubsystemRow[audioSubsystemColumns.id] = "pulse"; audioSubsystemRow[audioSubsystemColumns.name] = "PulseAudio"; #endif #ifdef HAVE_ALSA audioSubsystemRow = *(audioSubsystemTreeModel->append()); audioSubsystemRow[audioSubsystemColumns.id] = "alsa"; audioSubsystemRow[audioSubsystemColumns.name] = "ALSA"; #endif #ifdef HAVE_OSS audioSubsystemRow = *(audioSubsystemTreeModel->append()); audioSubsystemRow[audioSubsystemColumns.id] = "oss"; audioSubsystemRow[audioSubsystemColumns.name] = "OSS"; #endif // Master Volume volumeAdjustment = new Gtk::Adjustment(79, 0, 158, 1, 10, 10); volumehscale = new Gtk::HScale(*volumeAdjustment); volumehscale->add_mark(148, Gtk::POS_LEFT, "200%"); volumehscale->add_mark(79, Gtk::POS_LEFT, "100%"); volumehscale->add_mark(0, Gtk::POS_LEFT, "0%"); volumehscale->set_inverted(false); volumehscale->set_draw_value(false); builder->get_widget("masterVolumeVbox", vbox); vbox->pack_start(*volumehscale); volumehscale->show(); // Input Gain gainAdjustment = new Gtk::Adjustment(79, 0, 158, 1, 10, 10); gainhscale = new Gtk::HScale(*gainAdjustment); gainhscale->add_mark(148, Gtk::POS_LEFT, "200%"); gainhscale->add_mark(79, Gtk::POS_LEFT, "100%"); gainhscale->add_mark(0, Gtk::POS_LEFT, "0%"); gainhscale->set_inverted(false); gainhscale->set_draw_value(false); builder->get_widget("inputGainVbox", vbox); vbox->pack_start(*gainhscale); gainhscale->show(); }/*}}}*/ void ManglerSettings::applySettings(void) {/*{{{*/ Gtk::TreeModel::iterator iter; GdkWindow *rootwin = gdk_get_default_root_window(); // Key Push to Talk builder->get_widget("settingsEnablePTTKeyCheckButton", checkbutton); Mangler::config["PushToTalkKeyEnabled"] = checkbutton->get_active(); builder->get_widget("settingsPTTKeyValueLabel", label); if (label->get_label() != PTT_KEY_GET && label->get_label() != PTT_KEY_SET) { Mangler::config["PushToTalkKeyValue"] = label->get_text(); } else { Mangler::config["PushToTalkKeyValue"] = ""; } //Mangler::config.parsePushToTalkValue(config.PushToTalkKeyValue); // Mouse Push to Talk builder->get_widget("settingsMouseDeviceComboBox", combobox); iter = combobox->get_active(); if (iter) { Gtk::TreeModel::Row row = *iter; Mangler::config["MouseDeviceName"] = Glib::ustring( row[mouseColumns.name] ); } builder->get_widget("settingsEnablePTTMouseCheckButton", checkbutton); Mangler::config["PushToTalkMouseEnabled"] = checkbutton->get_active(); builder->get_widget("settingsPTTMouseValueLabel", label); if (label->get_label() != PTT_MOUSE_GET && label->get_label() != PTT_MOUSE_SET) { Glib::ustring PushToTalkMouseValue = label->get_text(); if (PushToTalkMouseValue.length() > 6) { Mangler::config["PushToTalkMouseValue"] = PushToTalkMouseValue.substr(6); } else { Mangler::config["PushToTalkMouseValue"] = PushToTalkMouseValue; } } else { Mangler::config["PushToTalkMouseValue"] = ""; } XUngrabButton(GDK_WINDOW_XDISPLAY(rootwin), AnyButton, AnyModifier, GDK_ROOT_WINDOW()); XAllowEvents (GDK_WINDOW_XDISPLAY(rootwin), AsyncBoth, CurrentTime); /* if (checkbutton->get_active()) { XGrabButton(GDK_WINDOW_XDISPLAY(rootwin), config.PushToTalkMouseValueInt, AnyModifier, GDK_ROOT_WINDOW(), False, ButtonPressMask|ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None); } */ // Audio Player Integration builder->get_widget("settingsEnableAudioIntegrationCheckButton", checkbutton); Mangler::config["AudioIntegrationEnabled"] = checkbutton->get_active(); iter = audioPlayerComboBox->get_active(); if (iter) { Gtk::TreeModel::Row row = *iter; uint8_t id = row[audioPlayerColumns.id]; Mangler::config["AudioIntegrationPlayer"] = id; if (Mangler::config["AudioIntegrationEnabled"].toBool()) { mangler->integration->setClient((MusicClient)id); } else { mangler->integration->setClient(MusicClient_None); } } mangler->integration->update(true); // Voice Activation builder->get_widget("settingsEnableVoiceActivationCheckButton", checkbutton); Mangler::config["VoiceActivationEnabled"] = checkbutton->get_active(); builder->get_widget("settingsVoiceActivationSilenceDurationSpinButton", spinbutton); Mangler::config["VoiceActivationSilenceDuration"] = spinbutton->get_value() * 1000.0; builder->get_widget("settingsVoiceActivationSensitivitySpinButton", spinbutton); Mangler::config["VoiceActivationSensitivity"] = spinbutton->get_value_as_int(); #ifdef HAVE_XOSD // On-Screen Display builder->get_widget("settingsEnableOnScreenDisplayCheckButton", checkbutton); Mangler::config["OnScreenDisplayEnabled"] = checkbutton->get_active(); if (checkbutton->get_active()) { Gtk::TreeModel::iterator pos_iter = osdPosition->get_active(); if (pos_iter) { int vert_pos_int = (*pos_iter)[osdPositionColumns.id]; Mangler::config["OnScreenDisplayVerticalPosition"] = vert_pos_int; } Gtk::TreeModel::iterator aln_iter = osdAlignment->get_active(); if (aln_iter) { int horz_aln_int = (*aln_iter)[osdAlignmentColumns.id]; Mangler::config["OnScreenDisplayHorizontalAlignment"] = horz_aln_int; } Mangler::config["OnScreenDisplayFontSize"] = osdFontSize->get_value(); Gdk::Color color = osdColor->get_color(); char colorstr[16]; snprintf(colorstr, 15, "#%02x%02x%02x", color.get_red() / 256, color.get_green() / 256, color.get_blue() / 256); Mangler::config["OnScreenDisplayColor"] = colorstr; mangler->osd->destroyOsd(); } #endif // Audio Devices iter = inputDeviceComboBox->get_active(); if (iter) { Gtk::TreeModel::Row row = *iter; Mangler::config["InputDeviceName"] = Glib::ustring( row[inputColumns.name] ); } Mangler::config["InputDeviceCustomName"] = inputDeviceCustomName->get_text(); iter = outputDeviceComboBox->get_active(); if (iter) { Gtk::TreeModel::Row row = *iter; Mangler::config["OutputDeviceName"] = Glib::ustring( row[outputColumns.name] ); } Mangler::config["OutputDeviceCustomName"] = outputDeviceCustomName->get_text(); iter = notificationDeviceComboBox->get_active(); if (iter) { Gtk::TreeModel::Row row = *iter; Mangler::config["NotificationDeviceName"] = Glib::ustring( row[notificationColumns.name] ); } Mangler::config["NotificationDeviceCustomName"] = notificationDeviceCustomName->get_text(); iter = audioSubsystemComboBox->get_active(); if (iter) { Gtk::TreeModel::Row row = *iter; Mangler::config["AudioSubsystem"] = Glib::ustring( row[audioSubsystemColumns.id] ); } // Master Volume Mangler::config["MasterVolumeLevel"] = volumeAdjustment->get_value(); v3_set_volume_master(Mangler::config["MasterVolumeLevel"].toInt()); mangler->setTooltip(); // Input Gain Mangler::config["InputGainLevel"] = gainAdjustment->get_value(); v3_set_volume_xmit(Mangler::config["InputGainLevel"].toInt()); // Notification Sounds builder->get_widget("notificationLoginLogoutCheckButton", checkbutton); Mangler::config["NotificationLoginLogout"] = checkbutton->get_active(); builder->get_widget("notificationChannelEnterLeaveCheckButton", checkbutton); Mangler::config["NotificationChannelEnterLeave"] = checkbutton->get_active(); builder->get_widget("notificationTalkStartEndCheckButton", checkbutton); Mangler::config["NotificationTransmitStartStop"] = checkbutton->get_active(); builder->get_widget("notificationTTSCheckButton", checkbutton); Mangler::config["NotificationTextToSpeech"] = checkbutton->get_active(); // Debug Level uint32_t debuglevel = 0; builder->get_widget("debugStatus", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_STATUS : 0; builder->get_widget("debugError", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_ERROR : 0; builder->get_widget("debugStack", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_STACK : 0; builder->get_widget("debugInternalNet", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_INTERNAL : 0; builder->get_widget("debugPacketDump", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_PACKET : 0; builder->get_widget("debugPacketParse", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_PACKET_PARSE : 0; builder->get_widget("debugEventQueue", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_EVENT : 0; builder->get_widget("debugSocket", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_SOCKET : 0; builder->get_widget("debugNotice", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_NOTICE : 0; builder->get_widget("debugInfo", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_INFO : 0; builder->get_widget("debugMutex", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_MUTEX : 0; builder->get_widget("debugMemory", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_MEMORY : 0; builder->get_widget("debugEncryptedPacket", checkbutton); debuglevel |= checkbutton->get_active() ? V3_DEBUG_PACKET_ENCRYPTED : 0; Mangler::config["lv3_debuglevel"] = debuglevel; v3_debuglevel(debuglevel); Mangler::config.config.save(); }/*}}}*/