status_t Preferences::SetBool (const char *name, bool b) { if (HasBool (name) == true) return ReplaceBool (name, 0, b); return AddBool(name, b); }
bool ecConfigItem::IsModifiable() const { const CdlValuable valuable = GetCdlValuable(); if (valuable && ((GetOptionType() != ecOptionTypeNone) || HasBool())) { return (valuable->is_modifiable () && valuable->is_active ()); } else return GetCdlItem()->is_active(); }
/*! * \brief Check if this item is active. * * An option is activated by the user or automatically by active_if. * Only options may become incative, components are always active. */ bool CConfigItem::IsActive() const { if (m_option) { if (HasBool()) { if(m_option->nco_active == 0) { if(m_option->nco_active_if) { CNutConfDoc *pDoc = wxGetApp().GetNutConfDoc(); m_option->nco_active = pDoc->IsOptionActive(m_option->nco_active_if); } } return m_option->nco_active != 0; } m_option->nco_active = 1; } return true; }
status_t TPreferences::SetBool(const char *name, bool b) { if (HasBool(name)) { return ReplaceBool(name, 0, b); } return AddBool(name, b); }
// Bump by specified amount, or toggle if a boolean value bool ecConfigItem::BumpItem(int nInc) { bool rc = FALSE; // Take an action for clicking on the icon ecConfigToolDoc* pDoc = wxGetApp().GetConfigToolDoc(); // do not modify the option value if it is inactive or not modifiable const CdlValuable valuable = GetCdlValuable(); if (!valuable || (valuable->is_modifiable () && valuable->is_active ())) { if (0 == nInc) // if a toggle request { if (HasBool () && ! (HasRadio () && IsEnabled ())) { // only enable (not disable) a radio button rc = pDoc->SetEnabled (*this, ! this->IsEnabled ()); // toggle enabled/disabled state } } else if (IsEnabled ()) { // the item is enabled... switch(GetOptionType()) { case ecOptionTypeNone: case ecString: case ecDouble: break; case ecEnumerated: { wxArrayString arEnum; EvalEnumStrings (arEnum); // calculate legal values just in time if (0==arEnum.Count()) // if no legal values... break; // ...do nothing int nIndex = -1; const wxString strCurrent = StringValue (); int nEnum; for (nEnum = 0; (nEnum < arEnum.Count()) && (nIndex == -1); nEnum++) if (strCurrent == arEnum[nEnum]) nIndex = nEnum; // the index of the current value if (nIndex != -1) // if the current value is still legal nIndex += (nInc < 0 ? -1 : 1); // increment/decrement the index else nIndex = 0; // otherwise select the first enum if (nIndex < 0) // if the new index is negative nIndex = arEnum.Count()-1; // make it positive rc=pDoc->SetValue (*this, arEnum[nIndex % arEnum.Count()]); } break; case ecLong: { // TODO: if we're editing, we should get the value in the edit item // and not the ecConfigItem. long nOldValue = Value(); if(nInc==1 && nOldValue==-1){ nOldValue=0; } else if(nInc==-1 && nOldValue==0){ nOldValue=-1; } else { nOldValue+=nInc; } rc=pDoc->SetValue(*this, nOldValue); break; } break; /* case CConfigItem::Boolean: { ItemIntegerType nOldValue=Value(h); pDoc->SetValue(ti,nOldValue^1); } break; case CConfigItem::Radio: if(0==Value(h)){ pDoc->SetValue(ti, (ItemIntegerType) 1); } break; */ default: break; } } } return rc; }