if(srr.hasError())
QMessageBox::warning(this,tr("Warning"),tr("Error while setting rights: %1").arg(srr.errorString()));
}
+
+/*****************************************************************************/
+
+MFlagTab::MFlagTab(QString pk)
+{
+ profilekey=pk;
+
+ QHBoxLayout*hl;QVBoxLayout*vl;
+ QPushButton*p;
+ //host tab
+ setLayout(hl=new QHBoxLayout);
+ hl->addWidget(table=new QTableView,10);
+ table->setModel(model=new QStandardItemModel(this));
+ table->setSelectionMode(QAbstractItemView::SingleSelection);
+ table->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ hl->addSpacing(5);
+ hl->addLayout(vl=new QVBoxLayout,0);
+ vl->addWidget(p=new QPushButton(tr("New Flag...")),0);
+ connect(p,SIGNAL(clicked()),this,SLOT(addFlag()));
+ p->setEnabled(req->hasRight(req->RSetFlag));
+ vl->addWidget(p=new QPushButton(tr("Delete Flag...")),0);
+ connect(p,SIGNAL(clicked()),this,SLOT(removeFlag()));
+ p->setEnabled(req->hasRight(req->RDeleteFlag));
+ vl->addSpacing(20);
+ vl->addWidget(p=new QPushButton(tr("Change Description...")),0);
+ connect(p,SIGNAL(clicked()),this,SLOT(changeFlag()));
+ p->setEnabled(req->hasRight(req->RSetFlag));
+ vl->addStretch(10);
+
+ if(req->hasRight(req->RGetValidFlags)){
+ updateFlags();
+ }else{
+ setEnabled(false);
+ }
+}
+
+void MFlagTab::updateFlags()
+{
+ MTGetValidFlags gvf=MTGetValidFlags::query();
+ if(gvf.hasError())return;
+ model->clear();
+ model->insertColumns(0,2);
+ model->setHorizontalHeaderLabels(QStringList()<<tr("Flag")<<tr("Description"));
+ QList<MOFlag> flg=gvf.getflags();
+ model->insertRows(0,flg.size());
+ for(int i=0;i<flg.size();i++){
+ model->setData(model->index(i,0),flg[i].flag().value());
+ model->setData(model->index(i,1),flg[i].description().value());
+ }
+ table->resizeColumnsToContents();
+}
+
+void MFlagTab::addFlag()
+{
+ QString flg;
+ do{
+ bool ok;
+ flg=QInputDialog::getText(this,tr("Create New Flag"),tr("Please enter a name for the flag, it must contain only letters and digits."),QLineEdit::Normal,flg,&ok);
+ if(!ok)return;
+ if(QRegExp("[a-zA-Z0-9]+").exactMatch(flg))break;
+ }while(1);
+ MOFlag f;
+ f.setflag(flg);
+ MTSetFlag cf=MTSetFlag::query(f);
+ if(cf.hasError())
+ QMessageBox::warning(this,tr("Warning"),tr("Error while creating flag: %1").arg(cf.errorString()));
+ else
+ updateFlags();
+}
+
+void MFlagTab::removeFlag()
+{
+ //get flag
+ QModelIndex idx=table->currentIndex();
+ if(!idx.isValid())return;
+ QString flg=model->data(model->index(idx.row(),0)).toString();
+ //sanity check
+ if(flg=="")return;
+ if(flg[0]=='_');//TODO
+ //ask nicely (a'ka "annoy user")
+ if(QMessageBox::question(this,tr("Really Delete?"),tr("Really delete the flag '%1'? Doing so may make some entities visible or invisible unexpectedly.").arg(flg),QMessageBox::Yes|QMessageBox::No)!=QMessageBox::Yes)return;
+ //now attempt deletion
+ MTDeleteFlag df=MTDeleteFlag::query(flg);
+ if(df.hasError())
+ QMessageBox::warning(this,tr("Warning"),tr("Error while attempting to delete flag: %1").arg(df.errorString()));
+ else
+ updateFlags();
+}
+
+void MFlagTab::changeFlag()
+{
+ //get flag
+ QModelIndex idx=table->currentIndex();
+ if(!idx.isValid())return;
+ QString flg=model->data(model->index(idx.row(),0)).toString();
+ QString d=model->data(model->index(idx.row(),1)).toString();
+ //get new text
+ bool ok;
+ d=QInputDialog::getText(this,tr("Change Flag"),tr("Please enter a new description for flag '%1':").arg(flg),QLineEdit::Normal,d,&ok);
+ if(!ok)return;
+ //do it
+ MOFlag f;f.setflag(flg);f.setdescription(d);
+ MTSetFlag sf=MTSetFlag::query(f);
+ if(sf.hasError())
+ QMessageBox::warning(this,tr("Warning"),tr("Error while attempting to alter flag: %1").arg(sf.errorString()));
+ else
+ updateFlags();
+}
class WOFlag extends WOFlagAbstract
{
+ /**GetValidFlags transaction*/
public static function getAll($trans)
{
global $db;
}
$trans->setflags($ret);
}
+
+ /**SetFlag transaction*/
+ public static function setFlagTrn($trans)
+ {
+ global $db;
+ $f=$trans->getflag();
+ //check flag name
+ if(!ereg("^[a-zA-Z0-9]+$",$f->getflag())){
+ $trans->abortWithError("Invalid flag name.");
+ return;
+ }
+ //set it
+ $db->setConfig("Flag ".$f->getflag(),$f->getdescription());
+ }
+ /**DeleteFlag transaction*/
+ public static function deleteFlag($trans)
+ {
+ global $db;
+ $f=$trans->getflag();
+ //check flag name
+ if(!ereg("^[a-zA-Z0-9]+$",$f)){
+ $trans->abortWithError("Invalid flag name or attempt to delete special flag.");
+ return;
+ }
+ //set it
+ $cfg=WTconfig::getFromDb("Flag ".$f);
+ if($cfg instanceof WTconfig)
+ $cfg->deleteFromDb();
+ }
};
?>