void MainWindow::msgACL(const MumbleProto::ACL &msg) { if (aclEdit) { aclEdit->reject(); delete aclEdit; aclEdit = NULL; } if (Channel::get(msg.channel_id())) { aclEdit = new ACLEditor(msg.channel_id(), msg, this); aclEdit->show(); } }
ACLEditor::ACLEditor(int channelid, const MumbleProto::ACL &mea, QWidget *p) : QDialog(p) { QLabel *l; bAddChannelMode = false; iChannel = channelid; Channel *pChannel = Channel::get(iChannel); if (pChannel == NULL) { g.l->log(Log::Warning, tr("Failed: Invalid channel")); QDialog::reject(); return; } msg = mea; setupUi(this); qcbChannelTemporary->hide(); iId = mea.channel_id(); setWindowTitle(tr("Mumble - Edit %1").arg(Channel::get(iId)->qsName)); qlChannelID->setText(tr("ID: %1").arg(iId)); qleChannelName->setText(pChannel->qsName); if (channelid == 0) qleChannelName->setEnabled(false); rteChannelDescription->setText(pChannel->qsDesc); qsbChannelPosition->setRange(INT_MIN, INT_MAX); qsbChannelPosition->setValue(pChannel->iPosition); QGridLayout *grid = new QGridLayout(qgbACLpermissions); l = new QLabel(tr("Deny"), qgbACLpermissions); grid->addWidget(l, 0, 1); l = new QLabel(tr("Allow"), qgbACLpermissions); grid->addWidget(l, 0, 2); int idx = 1; for (int i = 0; i < ((iId == 0) ? 30 : 16); ++i) { ChanACL::Perm perm = static_cast<ChanACL::Perm>(1 << i); QString name = ChanACL::permName(perm); if (! name.isEmpty()) { QCheckBox *qcb; l = new QLabel(name, qgbACLpermissions); grid->addWidget(l, idx, 0); qcb = new QCheckBox(qgbACLpermissions); qcb->setToolTip(tr("Deny %1").arg(name)); qcb->setWhatsThis(tr("This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2").arg(name).arg(ChanACL::whatsThis(perm))); connect(qcb, SIGNAL(clicked(bool)), this, SLOT(ACLPermissions_clicked())); grid->addWidget(qcb, idx, 1); qlACLDeny << qcb; qcb = new QCheckBox(qgbACLpermissions); qcb->setToolTip(tr("Allow %1").arg(name)); qcb->setWhatsThis(tr("This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2").arg(name).arg(ChanACL::whatsThis(perm))); connect(qcb, SIGNAL(clicked(bool)), this, SLOT(ACLPermissions_clicked())); grid->addWidget(qcb, idx, 2); qlACLAllow << qcb; qlPerms << perm; ++idx; } }