19 #include <QtGui/QContextMenuEvent>
20 #include <QtGui/QCloseEvent>
21 #include <QtGui/QMouseEvent>
22 #include <QtCore/QEvent>
67 {21, 21}, {211, 21}, {23, 23}, {231, 23}, {24, 24},
68 {241, 24} , {31, 31}, {32, 32}, {321, 32}, {33, 33},
69 {331, 33}, {35, 35}, {28, 28}, {281, 28}
84 mSliderValueChanged(false),
85 mSliderPressed(false),
97 setObjectName(QString::fromUtf8(name));
98 setWindowTitle(
"Slider Window");
100 mpSliderBox->layout()->addItem(
new QSpacerItem(0, 5, QSizePolicy::Minimum, QSizePolicy::Expanding));
109 this->
mSliderMap[
C_INVALID_INDEX].push_back(
new QLabel(
"<p>There are no sliders available for this task. If you select one of the tasks that supports sliders in the copasi object tree, this dialog will become active.</p>", mpSliderBox));
120 connect(this->mpRunTaskButton, SIGNAL(clicked()),
this, SLOT(
runTask()));
121 connect(this->mpNewSliderButton, SIGNAL(clicked()),
this, SLOT(
createNewSlider()));
159 QWidget* pWidget = childAt(p);
162 while (pWidget && pWidget !=
this && !pSlider)
165 pWidget = (QWidget*)pWidget->parent();
178 std::vector<const CCopasiObject*>::const_iterator it = objects.begin(), endit = objects.end();
179 bool yesToAll =
false;
180 bool noToAll =
false;
194 assert((*it) != NULL);
207 if (pEquivalentSlider != NULL)
218 assert(pCopasiSlider != NULL);
220 if (pCopasiSlider != NULL)
229 "A slider for this object already exists.\n\nDo you want to reset the range of the slider?",
230 QMessageBox::Yes | QMessageBox::No | QMessageBox::YesToAll | QMessageBox::NoToAll, QMessageBox::No);
235 case QMessageBox::YesToAll:
239 case QMessageBox::Yes:
244 assert(pCopasiSlider != NULL);
246 if (pCopasiSlider != NULL)
253 case QMessageBox::NoToAll:
258 case QMessageBox::No:
272 std::vector<CCopasiContainer*> listOfContainers;
275 pCSlider->
compile(listOfContainers);
294 size_t i, maxCount = pSliderList->
size();
296 for (i = 0; i < maxCount; ++i)
298 CSlider* pTmpSlider = (*pSliderList)[i];
317 std::vector<QWidget*>::iterator it = v->begin();
318 std::vector<QWidget*>::iterator end = v->end();
332 mpSliderBox->layout()->removeWidget(pSlider);
355 if (pSettingsDialog->exec() == QDialog::Accepted)
367 delete pSettingsDialog;
375 delete mpRunTaskButton;
376 delete mpAutoRunCheckBox;
377 delete mpAutoModifyRangesCheckBox;
385 size_t j, maxWidgets;
387 std::map< size_t, std::vector< QWidget* > >::iterator it =
mSliderMap.begin();
391 std::vector<QWidget*> v = it->second;
392 maxWidgets = v.size();
394 for (j = 0; j < maxWidgets; ++j)
420 std::vector<CCopasiContainer*> listOfContainers;
423 pSlider->
compile(listOfContainers);
439 QBoxLayout* layout =
static_cast<QBoxLayout*
>(mpSliderBox->layout());
440 int childCount = layout->count() - 1;
464 for (i = 0; i < maxCount; ++i)
470 pResult = pTmpSlider;
482 size_t i, maxCount = v.size();
485 for (i = 0; i < maxCount; ++i)
489 if (!pTmpSlider)
break;
493 pResult = pTmpSlider;
520 QString thisWindowTitle =
"Sliders";
525 thisWindowTitle =
"Time Course " + thisWindowTitle;
529 thisWindowTitle =
"Steady-State " + thisWindowTitle;
533 thisWindowTitle =
"Parameter Scan " + thisWindowTitle;
537 thisWindowTitle =
"Metabolic Control Analysis " + thisWindowTitle;
541 thisWindowTitle =
"Linear Noise Approximation " + thisWindowTitle;
545 thisWindowTitle =
"Parameter Estimation " + thisWindowTitle;
549 thisWindowTitle =
"Optimization " + thisWindowTitle;
553 thisWindowTitle =
"Cross Section " + thisWindowTitle;
557 setWindowTitle(thisWindowTitle);
566 if (!pTmpSlider)
return NULL;
568 std::vector<CSlider*>::const_iterator it;
570 for (it = v.begin(); it != v.end(); ++it)
583 std::vector<QWidget*>::const_iterator it;
585 for (it = v.begin(); it != v.end(); ++it)
589 if (!pTmpSlider)
break;
606 std::vector<CSlider*>::const_iterator it;
607 std::vector<QWidget*>::const_iterator wIt;
612 bool issueWarning =
false;
614 for (it = pVector->begin(); it != pVector->end(); ++it)
621 if (pTmpSlider != NULL)
continue;
639 for (wIt = v.begin(); wIt != v.end(); ++wIt)
655 "One or more sliders are invalid and have been disabled!",
656 QMessageBox::Ok, QMessageBox::NoButton);
673 size_t i, maxCount = v.size();
675 for (i = maxCount; i != 0; --i)
677 QWidget* widget = v[i - 1];
678 widget->setHidden(
true);
679 static_cast<QBoxLayout*
>(mpSliderBox->layout())->insertWidget(0, widget);
696 this->
mpCurrSlider->setToolTip(
"This value is determined by an initial expression.");
713 widget->setHidden(
false);
745 assert(pWidget != NULL);
747 if (pWidget == NULL)
return;
869 CWindowInterface::closeEvent(e);
945 bool autoModify = mpAutoModifyRangesCheckBox->isChecked();
948 std::vector<QWidget*>::iterator wit = v.begin(), wendit = v.end();
963 while (wit != wendit)
1000 assert(pDataModel != NULL);
1003 bool sliderDeleted =
false;
1005 assert(pSliderList);
1007 size_t i, iMax = pSliderList->
size();
1008 bool issueWarning =
false;
1010 for (i = iMax; i > 0; --i)
1012 CSlider* pSlider = (*pSliderList)[i - 1];
1019 "One or more objects that had sliders defined have been deleted. Sliders will therefore be deleted as well.",
1020 QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton);
1023 pSliderList->
remove(i - 1);
1024 sliderDeleted =
true;
1032 issueWarning =
true;
1035 pVector->insert(pVector->begin(), pSlider);
1046 std::vector<QWidget*>::const_reverse_iterator it;
1048 for (it = v.rbegin(); it != v.rend(); ++it)
1050 QWidget* widget = *it;
1051 widget->setHidden(
true);
1052 mpSliderBox->layout()->removeWidget(widget);
1060 if (!
object)
return NULL;
1062 std::vector<CSlider*>* pVector =
new std::vector<CSlider*>();
1076 if (event->type() == QEvent::EnabledChange && isEnabled() &&
mpCurrSlider != NULL)
1078 setFocus(Qt::OtherFocusReason);
1079 mpScrollView->setFocus(Qt::OtherFocusReason);
1080 mpSliderBox->setFocus(Qt::OtherFocusReason);
1087 QMouseEvent* pQME =
dynamic_cast<QMouseEvent*
>(event);
1089 if (pQME && pQME->type() == QEvent::MouseButtonPress && pQME->button() == Qt::LeftButton)
1113 std::vector<CCopasiContainer*> listOfContainers;
1114 listOfContainers.push_back(pModel);
1115 return !pSlider->
compile(listOfContainers);
1130 if (pObject == NULL)
1136 CMetab* pMetab =
dynamic_cast<CMetab*
>((pObject)->getObjectParent());
1155 assert(pResult != NULL);
1166 assert(pResult != NULL);
1183 bool changed =
false;
1186 std::map<size_t, std::vector<QWidget*> >::iterator it = this->
mSliderMap.begin(), endit = this->
mSliderMap.end();
1187 std::vector<QWidget*>::iterator it2, endit2;
1192 it2 = it->second.begin();
1193 endit2 = it->second.end();
1195 while (it2 != endit2)
1199 if (pSlider != NULL)
1204 if (pSlider->
object() != pTmpObj && !changed)
1218 if (changed ==
true)
1232 if (pSlider == NULL)
1236 pObject = pSlider->
object();
1238 if (pObject == NULL)
1243 if (pTmpObject != pObject)
1246 double oldMin = pSlider->
minValue();
1247 double oldMax = pSlider->
maxValue();
1248 double oldValue = pSlider->
value();
1251 double newValue = pSlider->
value();
1252 double newMin = (oldMin / oldValue) * newValue;
1253 double newMax = (oldMax / oldValue) * newValue;
1265 this->CWindowInterface::showEvent(pEvent);
1271 std::vector<QWidget*>::iterator wit = v.begin(), wendit = v.end();
1272 bool sliderDeleted =
false;
1275 while (wit != wendit)
1279 if (pCopasiSlider && !pCopasiSlider->
isValid())
1285 sliderDeleted =
true;
1295 "One or more sliders are invalid and have been deleted!",
1296 QMessageBox::Ok, QMessageBox::NoButton);
1309 this->
mSliderMap[
C_INVALID_INDEX].push_back(
new QLabel(
"<p>There are no sliders available for this task.<br>If you select one of the tasks that supports<br>sliders in the copasi object tree, this dialog<br>will become active.</p>", NULL));
1327 return mpWindowMenu;
bool compile(const std::vector< CCopasiContainer * > &listOfContainer=CCopasiContainer::EmptyList)
SteadyStateWidget * getSteadyStateWidget()
CCopasiVector< CSlider > * getSliderList()
CSlider * getCSlider() const
SliderDialog(QWidget *parent, const char *name=0, bool modal=false, Qt::WFlags fl=0)
CQLNAWidget * getLNAWidget()
void removeFromMainWindow(CopasiUI3Window *window=NULL)
virtual void runLNATask()
void setFramework(int index)
CopasiSlider * findCopasiSliderAtPosition(const QPoint &p)
CQFittingWidget * getFittingWidget()
virtual void runParameterEstimationTask()
virtual void showEvent(QShowEvent *pEvent)
void setCurrentSlider(CopasiSlider *pSlider)
bool setSliderObject(CCopasiObject *pObject)
virtual size_t size() const
CQMCAWidget * getMCAWidget()
void slotShowSliders(bool flag)
CSlider * equivalentSliderExists(CSlider *pCSlider)
virtual void setSlider(CSlider *slider)
CCopasiObject * object() const
std::map< size_t, void(SliderDialog::*)() > mTaskMap
CCopasiObject * getInitialValueReference() const
virtual void runCrossSectionTask()
static std::vector< const CCopasiObject * > getObjectVector(QWidget *pParent, const CQSimpleSelectionTree::ObjectClasses &classes, const std::vector< const CCopasiObject * > *pCurrentSelection=NULL)
bool setCorrectSliderObject(CopasiSlider *pSlider)
const std::string & getAssociatedEntityKey() const
virtual void runScanTask()
virtual QMenu * getWindowMenu() const
static StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=Ok, StandardButton defaultButton=NoButton)
CopasiSlider * mpCurrSlider
QAction * mpaRemoveSlider
std::vector< CSlider * > * getCSlidersForCurrentFolderId()
std::map< size_t, std::vector< QWidget * > > mSliderMap
virtual void runTimeCourse()
CSlider * getCSliderForCopasiSlider(std::vector< CSlider * > &v, QWidget *slider)
void updateValue(bool modifyRange, bool updateDependencies)
bool sliderObjectChanged(CSlider *pSlider) const
virtual void runMCATask()
void setCurrentFolderId(size_t id)
void createSlidersForFolder(std::vector< QWidget * > &v)
virtual const std::string & getKey() const
static CConfigurationFile * getConfiguration()
void setOriginalValue(C_FLOAT64 value)
bool useAdvancedSliders() const
virtual void setDefinedSliders(std::vector< CSlider * > sliderVect)
bool setAssociatedEntityKey(const std::string &associatedEntityKey)
CopasiWidget * findWidgetFromId(const size_t &id) const
virtual void closeEvent(QCloseEvent *e)
void deleteSlider(CopasiSlider *pSlider)
virtual bool add(const CType &src)
std::string getInitialExpression() const
static const QIcon & icon(const IconID &id)
void setChanged(bool changed)
void setParentWindow(CopasiUI3Window *pPW)
static CCopasiVector< CCopasiDataModel > * getDatamodelList()
void refreshInitialValues()
virtual void setModel(CModel *model)
const std::string & getKey() const
virtual void runSteadyStateTask()
CQCrossSectionTaskWidget * getCrossSectionWidget()
void sliderValueChanged()
CopasiUI3Window * mpParentWindow
void deleteInvalidSliders()
virtual void remove(const size_t &index)
void setMinValue(C_FLOAT64 value)
C_FLOAT64 minValue() const
CopasiSlider * findCopasiSliderForCSlider(CSlider *pCSlider)
CQTrajectoryWidget * getTrajectoryWidget()
static size_t numMappings
bool fl(const C_FLOAT64 &d1, const C_FLOAT64 &d2)
ListViews * getMainWidget()
void setObject(CCopasiObject *object)
size_t mapFolderId2EntryId(size_t folderId) const
virtual CCopasiTask * getTaskForFolderId(size_t folderId)
C_FLOAT64 maxValue() const
DataModelGUI * getDataModel()
virtual CSlider * getSlider()
void addSlider(CSlider *slider)
CQOptimizationWidget * getOptimizationWidget()
void addToMainWindow(CopasiUI3Window *window=NULL)
std::vector< CSlider * > * getCSlidersForObject(CCopasiObject *pObject, std::vector< CSlider * > *pVector) const
virtual void changeEvent(QEvent *)
virtual void updateAllSliders()
void setMaxValue(C_FLOAT64 value)
ScanWidget * getScanWidget()
virtual void contextMenuEvent(QContextMenuEvent *e)
CCopasiContainer * getObjectParent() const
QAction * mpaCreateNewSlider
const CCopasiObject * determineCorrectObjectForSlider(const CCopasiObject *pObject)
CCopasiObject * getSliderObject()
CopasiSlider * getCopasiSliderForCSlider(std::vector< QWidget * > &v, CSlider *slider)
virtual bool eventFilter(QObject *, QEvent *event)
static size_t folderMappings[][2]
virtual void runOptimizationTask()