ParameterWidget::ParameterWidget(QWidget *pParent, const char *pName) : QWidget(pParent) { setupUi(this); if(pName) setObjectName(pName); _initialized = false; _shared = false; setSavedFilters(-1); _filterSignalMapper = new QSignalMapper(this); _saveButton->setDisabled(true); _filterGroup->setVisible(false); _filterButton->setChecked(false); connect(_addFilterRow, SIGNAL(clicked()), this, SLOT( addParam() ) ); connect(_filterButton, SIGNAL(clicked()), this, SLOT( setFiltersVisabiltyPreference() ) ); connect(_filterSignalMapper, SIGNAL(mapped(int)), this, SLOT( removeParam(int) )); connect(_saveButton, SIGNAL(clicked()), this, SLOT( save() ) ); connect(_manageButton, SIGNAL(clicked()), this, SLOT( sManageFilters() ) ); connect(_filterList, SIGNAL(currentIndexChanged(int)), this, SLOT( applySaved(int) ) ); connect(_filterList, SIGNAL(currentIndexChanged(int)), this, SLOT( setFiltersDefault() ) ); connect(this, SIGNAL(updated()), this, SLOT( toggleSave() ) ); }
filterManager::filterManager(QWidget* parent, const char* name) : QDialog(parent) { if(name) setObjectName(name); setupUi(this); _filterSet->addColumn(tr("Filter Set Name"), -1, Qt::AlignLeft, true, "filter_name" ); _filterSet->addColumn(tr("Shared"), _ynColumn, Qt::AlignLeft, true, "shared"); connect(_filterSet, SIGNAL(valid(bool)), this, SLOT( handleButtons(bool) )); connect(_share, SIGNAL(clicked()), this, SLOT( shareFilter() )); connect(_unshare, SIGNAL(clicked()), this, SLOT( unshareFilter() )); connect(_delete, SIGNAL(clicked()), this, SLOT( deleteFilter() ) ); connect(this, SIGNAL(filterDeleted()), parent, SLOT(setSavedFilters()) ); shortcuts::setStandardKeys(this); }
void ParameterWidget::save() { QString filter; QString filtersetname; QString variantString; QString username; QString query; QVariant tempVar; int filter_id; QMessageBox msgBox; filtersetname = _filterSetName->text(); if ( filtersetname.isEmpty() ) { msgBox.setText(tr("Please enter a name for this filter set before saving.")); msgBox.exec(); return; } else { QMapIterator<int, QPair<QString, QVariant> > i(_filterValues); while (i.hasNext()) { i.next(); QPair<QString, QVariant> tempPair = i.value(); tempVar = tempPair.second; QLayoutItem *test = _filtersLayout->itemAtPosition(i.key(), 0)->layout()->itemAt(0); XComboBox* mybox = (XComboBox*)test->widget(); QStringList split = mybox->itemData(mybox->currentIndex()).toString().split(":"); if ( tempVar.canConvert<QString>() ) { variantString = tempVar.toString(); filter = filter + tempPair.first + ":" + variantString + ":" + split[1] + "|"; } } const QMetaObject *metaobject = this->parent()->metaObject(); QString classname(metaobject->className()); XSqlQuery qry, qry2, qry3; qry.exec("SELECT current_user;"); if (qry.first()) username = qry.value("current_user").toString(); //check to see if filter name exists for this screen QString filter_query = "select filter_name " "from filter " "where filter_name=:name and filter_username=:username " " and filter_screen=:screen"; qry2.prepare(filter_query); qry2.bindValue(":name", filtersetname); qry2.bindValue(":username" , username); qry2.bindValue(":screen", classname); qry2.exec(); //if the filter name is found, update it if (qry2.first() && !qry2.isNull(0)) query = "update filter set filter_value=:value " "where filter_screen=:screen " " and filter_name=:name " " and filter_username=:username"; else query = "insert into filter (filter_screen, filter_name, filter_value, filter_username) " " values (:screen, :name, :value, :username) "; qry.prepare(query); qry.bindValue(":screen", classname); qry.bindValue(":value", filter); qry.bindValue(":username" , username); qry.bindValue(":name", filtersetname ); if (qry.exec()) { query = "select filter_id " "from filter " "where filter_name=:name " " and filter_username=:username " " and filter_screen=:screen"; qry3.prepare(query); qry3.bindValue(":screen", classname); qry3.bindValue(":username" , username); qry3.bindValue(":name", filtersetname ); qry3.exec(); if (qry3.first()) filter_id = qry.value("filter_id").toInt(); emit filterSetSaved(); } } setSavedFilters(); _filterList->setCurrentIndex(_filterList->findText(filtersetname)); }
void ParameterWidget::applySaved(int pId, int filter_id) { QWidget *found = 0; QDate tempdate; XSqlQuery qry; QString query; QString filterValue; QDate today = QDate::currentDate(); int xid, init_filter_id; init_filter_id = filter_id; QMapIterator<int, QPair<QString, QVariant> > j(_filterValues); QPair<QString, ParameterWidgetTypes> tempPair; clearFilters(); if (!parent()) return; if (_filterList->id() == -1) { emit updated(); return; } if (filter_id == 0 && _filterList->id() != -1) filter_id = _filterList->id(_filterList->currentIndex()); QString classname(parent()->objectName()); if (classname.isEmpty()) classname = parent()->metaObject()->className(); query = " SELECT filter_value, " " CASE WHEN (filter_username IS NULL) THEN true " " ELSE false END AS shared " " FROM filter " " WHERE filter_id=:id "; qry.prepare(query); qry.bindValue(":id", filter_id ); qry.exec(); if (qry.first()) { filterValue = qry.value("filter_value").toString(); _shared = qry.value("shared").toBool(); } QStringList filterRows = filterValue.split("|"); QString tempFilter = QString(); int windowIdx = _filtersLayout->rowCount(); if (filterRows.size() == 1 && pId == 0 && filter_id != 0) { emit updated(); return; } for (int i = 0; i < filterRows.size(); ++i) { tempFilter = filterRows[i]; if ( !(tempFilter.isEmpty()) ) { //0 is filterType, 1 is filterValue, 2 is parameterwidgettype QStringList tempFilterList = tempFilter.split(":"); QString key = this->getParameterTypeKey(tempFilterList[0]); if (key.isEmpty()) { //parametertype is no longer found, prompt user to delete filter if (QMessageBox::question(this, tr("Invalid Filter Set"), tr("This filter set contains an obsolete filter and will be deleted. Do you want to do this?"), QMessageBox::No | QMessageBox::Default, QMessageBox::Yes) == QMessageBox::No) return; else { QString query = "delete from filter where filter_id=:filter_id"; XSqlQuery qry; qry.prepare(query); qry.bindValue(":filter_id", filter_id); qry.exec(); setSavedFilters(); return; } } else { this->addParam(); QLayoutItem *test = _filtersLayout->itemAtPosition(windowIdx, 0)->layout()->itemAt(0); XComboBox *mybox = (XComboBox*)test->widget(); int idx = mybox->findText(key); mybox->setCurrentIndex(idx); found = getFilterWidget(windowIdx); int widgetType = tempFilterList[2].toInt(); //grab pointer to newly created filter object switch (widgetType) { case Date: DLineEdit *dLineEdit; dLineEdit = qobject_cast<DLineEdit*>(found); if (dLineEdit != 0) dLineEdit->setDate(today.addDays(tempFilterList[1].toInt()), true); break; case User: UsernameCluster *usernameCluster; usernameCluster = qobject_cast<UsernameCluster*>(found); if (usernameCluster != 0) usernameCluster->setUsername(tempFilterList[1]); break; case Crmacct: CRMAcctCluster *crmacctCluster; crmacctCluster = qobject_cast<CRMAcctCluster*>(found); if (crmacctCluster != 0) crmacctCluster->setId(tempFilterList[1].toInt()); break; case Contact: ContactCluster *contactCluster; contactCluster = qobject_cast<ContactCluster*>(found); if (contactCluster != 0) contactCluster->setId(tempFilterList[1].toInt()); break; case XComBox: XComboBox *xBox; xBox = qobject_cast<XComboBox*>(found); if (xBox != 0) { //fix for setid not emitting id signal if id found for filter is first in list //set to any other valid id first to fix it xBox->setId(2); xid = tempFilterList[1].toInt(); xBox->setId(xid); } break; case Multiselect: { QTableWidget *tab; tab = qobject_cast<QTableWidget*>(found); if (tab != 0) { QStringList savedval = tempFilterList[1].split(","); bool oldblk = tab->blockSignals(true); /* the obvious, loop calling tab->selectRow(), gives one selected row, so try this to get multiple selections: make only the desired values selectable, select everything, and connect to a slot that can clean up after us. yuck. */ for (int j = 0; j < tab->rowCount(); j++) { if (! savedval.contains(tab->item(j, 0)->data(Qt::UserRole).toString())) tab->item(j, 0)->setFlags(tab->item(j, 0)->flags() & (~ Qt::ItemIsSelectable)); } QTableWidgetSelectionRange range(0, 0, tab->rowCount() - 1, tab->columnCount() - 1); tab->setRangeSelected(range, true); connect(tab, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(resetMultiselect(QTableWidgetItem*))); tab->blockSignals(oldblk); storeFilterValue(-1, tab); } } break; default: { QLineEdit *lineEdit; lineEdit = qobject_cast<QLineEdit*>(found); if (lineEdit != 0) { lineEdit->setText(tempFilterList[1]); storeFilterValue(-1, lineEdit); } } break; }//end of switch }//end of not empty key else windowIdx++; }//end of if tempfilter not empty