void Slider::SetValue(int value) { if (value < GetMinValue()) { value = GetMinValue(); } else if (value > GetMaxValue()) { value = GetMaxValue(); } _value = value; (onValueChanged != 0) ? onValueChanged(this) : OnValueChangedEvent(); if (GetOrientation() == ORIENTATION_VERTICAL) { GetMarker()->SetX(GetMarkerOffsetX()); GetMarker()->SetY(static_cast<sint>(GetMarkerOffsetY() + GetHeight() / ((GetMaxValue() - GetMinValue()) / static_cast<float>(GetValue())) - GetMarker()->GetHeight() / 2.0f)); } else { GetMarker()->SetX(static_cast<sint>(GetMarkerOffsetX() + GetWidth() / ((GetMaxValue() - GetMinValue()) / static_cast<float>(GetValue())) - GetMarker()->GetWidth() / 2.0f)); GetMarker()->SetY(GetMarkerOffsetY()); } }
void ScrollBar::SetValue(int32_t value) { if (value < GetMinValue()) { value = GetMinValue(); } else if (value > GetMaxValue()) { value = GetMaxValue(); } _value = value; (onValueChanged != 0) ? onValueChanged(this) : OnValueChanged(); if (GetOrientation() == ORIENTATION_HORIZONTAL) { GetMarker()->SetX(static_cast<PosType>(GetMarkerOffsetX() + (Slider::GetWidth() - GetMarker()->GetWidth()) / ((GetMaxValue() - GetMinValue()) / static_cast<float>(GetValue())))); GetMarker()->SetY(GetMarkerOffsetY()); } else { GetMarker()->SetX(GetMarkerOffsetX()); GetMarker()->SetY(static_cast<PosType>(GetMarkerOffsetY() + (Slider::GetHeight() - GetMarker()->GetHeight()) / ((GetMaxValue() - GetMinValue()) / static_cast<float>(GetValue())))); } }
void Slider::MarkerOnMouseButtonDown(Control* control, int x, int y, uchar button) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } }
void pgSequence::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane) { UpdateValues(); if (properties) { CreateListColumns(properties); properties->AppendItem(_("Name"), GetName()); properties->AppendItem(_("OID"), GetOid()); properties->AppendItem(_("Owner"), GetOwner()); properties->AppendItem(_("ACL"), GetAcl()); properties->AppendItem(_("Current value"), GetLastValue()); properties->AppendItem(_("Next value"), GetNextValue()); properties->AppendItem(_("Minimum"), GetMinValue()); properties->AppendItem(_("Maximum"), GetMaxValue()); properties->AppendItem(_("Increment"), GetIncrement()); properties->AppendItem(_("Cache"), GetCacheValue()); properties->AppendYesNoItem(_("Cycled?"), GetCycled()); properties->AppendYesNoItem(_("Called?"), GetCalled()); properties->AppendYesNoItem(_("System sequence?"), GetSystemObject()); properties->AppendItem(_("Comment"), firstLineOnly(GetComment())); if (!GetLabels().IsEmpty()) { wxArrayString seclabels = GetProviderLabelArray(); if (seclabels.GetCount() > 0) { for (unsigned int index = 0 ; index < seclabels.GetCount() - 1 ; index += 2) { properties->AppendItem(seclabels.Item(index), seclabels.Item(index + 1)); } } } } }
wxString pgSequence::GetSql(ctlTree *browser) { if (sql.IsNull()) { UpdateValues(); sql = wxT("-- Sequence: ") + GetQuotedFullIdentifier() + wxT("\n\n") + wxT("-- DROP SEQUENCE ") + GetQuotedFullIdentifier() + wxT(";") + wxT("\n\nCREATE SEQUENCE ") + GetQuotedFullIdentifier() + wxT("\n INCREMENT ") + GetIncrement().ToString() + wxT("\n MINVALUE ") + GetMinValue().ToString() + wxT("\n MAXVALUE ") + GetMaxValue().ToString() + wxT("\n START ") + GetLastValue().ToString() + wxT("\n CACHE ") + GetCacheValue().ToString(); if (GetCycled()) sql += wxT("\n CYCLE"); sql += wxT(";\n") + GetOwnerSql(7, 3, wxT("TABLE ") + GetQuotedFullIdentifier()); if (!GetConnection()->BackendMinimumVersion(8, 2)) sql += GetGrant(wxT("arwdRxt"), wxT("TABLE ") + GetQuotedFullIdentifier()); else sql += GetGrant(wxT("rwU"), wxT("TABLE ") + GetQuotedFullIdentifier()); sql += GetCommentSql(); if (GetConnection()->BackendMinimumVersion(9, 1)) sql += GetSeqLabelsSql(); } return sql; }
void LogarithmicNumberAxis::UpdateBounds() { if (m_fixedBounds) { return ; // bounds are fixed, so don't update } m_hasLabels = false; for (size_t n = 0; n < m_datasets.Count(); n++) { double minValue = GetMinValue(m_datasets[n]); double maxValue = GetMaxValue(m_datasets[n]); if (n == 0) { m_minValue = minValue; m_maxValue = maxValue; } else { m_minValue = wxMin(m_minValue, minValue); m_maxValue = wxMax(m_maxValue, maxValue); } } if (m_minValue == m_maxValue) { if (m_maxValue > 0) { m_minValue = 0; } else { m_maxValue = 0; } } UpdateTickValues(); FireBoundsChanged(); }
void Slider::MarkerOnMouseMove(Control* control, int x, int y) { if (GetMarker()->IsPressed()) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } } }
Control* Slider::MouseButtonDownEvent(int x, int y, uchar button) { Control* control = Control::MouseButtonDownEvent(x, y, button); if (control == this) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } } return control; }
Control* Slider::MouseMoveEvent(int x, int y) { Control* control = Control::MouseMoveEvent(x, y); if (control == this && IsPressed()) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } } return control; }
wxPolarAreaChart::wxPolarAreaChart(const wxPolarAreaChartData &data, const wxSize &size) : m_grid(size, GetMinValue(data.GetSlices()), GetMaxValue(data.GetSlices()), m_options.GetGridOptions()) { const wxVector<wxChartSliceData>& slices = data.GetSlices(); for (size_t i = 0; i < slices.size(); ++i) { Add(slices[i], size); } }
void SpinButton::Draw(const Point2i & mousePosition) { txtLabel->DrawCenterTop(position + Point2i(0, 6)); uint center = m_plus->GetPositionX() - (m_plus->GetPositionX() - (m_minus->GetPositionX() + m_minus->GetSizeX())) / 2; txtValue->DrawCenterTop(Point2i(center, position.y)); //CenterTop if (GetValue() != GetMinValue()) { m_minus->Draw(mousePosition); } if (GetValue() != GetMaxValue()) { m_plus->Draw(mousePosition); } }
void pgSequence::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane) { UpdateValues(); if (properties) { CreateListColumns(properties); properties->AppendItem(_("Name"), GetName()); properties->AppendItem(_("OID"), GetOid()); properties->AppendItem(_("Owner"), GetOwner()); properties->AppendItem(_("ACL"), GetAcl()); properties->AppendItem(_("Current value"), GetLastValue()); properties->AppendItem(_("Minimum"), GetMinValue()); properties->AppendItem(_("Maximum"), GetMaxValue()); properties->AppendItem(_("Increment"), GetIncrement()); properties->AppendItem(_("Cache"), GetCacheValue()); properties->AppendItem(_("Cycled?"), GetCycled()); properties->AppendItem(_("Called?"), GetCalled()); properties->AppendItem(_("System sequence?"), GetSystemObject()); properties->AppendItem(_("Comment"), firstLineOnly(GetComment())); } }
// ***************************************************************** // GenerateCategories() // ***************************************************************** vector<CategoriesData>* FieldClassification::GenerateCategories(CString fieldName, FieldType fieldType, vector<VARIANT*>& srcValues, tkClassificationType ClassificationType, long numClasses, long& errorCode) { CComVariant minValue, maxValue; minValue.vt = VT_EMPTY; maxValue.vt = VT_EMPTY; long numShapes = srcValues.size(); /* we won't define intervals for string values */ if (ClassificationType != ctUniqueValues && fieldType == STRING_FIELD) { errorCode = tkNOT_UNIQUE_CLASSIFICATION_FOR_STRINGS; return NULL; } if ((numClasses <= 0 || numClasses > 1000) && (ClassificationType != ctUniqueValues)) { errorCode = tkTOO_MANY_CATEGORIES; return NULL; } if (ClassificationType == ctStandardDeviation) { errorCode = tkINVALID_PARAMETER_VALUE; return NULL; } // natural breaks aren't designed to work otherwise if (numShapes < numClasses && ClassificationType == ctNaturalBreaks) { numClasses = numShapes; } // values in specified range should be classified bool useRange = minValue.vt != VT_EMPTY && maxValue.vt != VT_EMPTY && fieldType == DOUBLE_FIELD; if (useRange) //fieldType == DOUBLE_FIELD) { double max, min; dVal(minValue, min); dVal(maxValue, max); minValue.vt = VT_R8; maxValue.vt = VT_R8; minValue.dblVal = min; maxValue.dblVal = max; } //bool useRange = minValue.vt == VT_R8 && maxValue.vt == VT_R8 && fieldType != STRING_FIELD; std::vector<CategoriesData>* result = new std::vector<CategoriesData>; if (ClassificationType == ctUniqueValues) { std::set<CComVariant> dict; CComVariant val; for (long i = 0; i < numShapes; i++) { VariantCopy(&val, srcValues[i]); if (useRange && (val.dblVal < minValue.dblVal || val.dblVal > maxValue.dblVal)) continue; if (dict.find(val) == dict.end()) dict.insert(val); } /* creating categories */ std::vector<CComVariant> values; copy(dict.begin(), dict.end(), inserter(values, values.end())); for (int i = 0; i < (int)values.size(); i++) { CategoriesData data; data.minValue = values[i]; data.maxValue = values[i]; result->push_back(data); } dict.clear(); values.clear(); } else if (ClassificationType == ctEqualSumOfValues) { CComVariant val; // sorting the values std::vector<double> values; double totalSum = 0, dValue; for (int i = 0; i < numShapes; i++) { VariantCopy(&val, srcValues[i]); if (useRange && (val.dblVal < minValue.dblVal || val.dblVal > maxValue.dblVal)) continue; dVal(val, dValue); val.Clear(); values.push_back(dValue); totalSum += dValue; } sort(values.begin(), values.end()); double step = totalSum / (double)numClasses; int index = 1; double sum = 0; for (int i = 0; i < (int)values.size(); i++) { sum += values[i]; if (sum >= step * (double)index || i == numShapes - 1) { CategoriesData data; if (index == numClasses) data.maxValue = values[values.size() - 1]; else if (i != 0) data.maxValue = (values[i] + values[i - 1]) / 2; else data.maxValue = values[0]; if (index == 1) data.minValue = values[0]; else data.minValue = (*result)[result->size() - 1].maxValue; result->push_back(data); index++; } } } else if (ClassificationType == ctEqualIntervals) { CComVariant vMin, vMax; if (useRange) { vMin = minValue; vMax = maxValue; } else { GetMinValue(srcValues, vMin, true); GetMinValue(srcValues, vMax, false); } double dMin, dMax; dVal(vMin, dMin); dVal(vMax, dMax); vMin.Clear(); vMax.Clear(); /* creating classes */ double dStep = (dMax - dMin) / (double)numClasses; while (dMin < dMax) { CategoriesData data; data.minValue = dMin; data.maxValue = dMin + dStep; result->push_back(data); dMin += dStep; } } else if (ClassificationType == ctEqualCount) { CComVariant vMin, vMax; if (useRange) { vMin = minValue; vMax = maxValue; } else { GetMinValue(srcValues, vMin, true); GetMinValue(srcValues, vMax, false); } double dMin, dMax; dVal(vMin, dMin); dVal(vMax, dMax); vMin.Clear(); vMax.Clear(); // sorting the values std::vector<double> values; for (int i = 0; i < numShapes; i++) { VariantCopy(&vMin, srcValues[i]); dVal(vMin, dMin); vMin.Clear(); values.push_back(dMin); } sort(values.begin(), values.end()); /* creating classes */ int i = 0; int count = numShapes / numClasses; for (int i = 0; i < numShapes; i += count) { dMin = values[i]; if (i + count < numShapes) dMax = values[i + count]; else dMax = values[numShapes - 1]; CategoriesData data; data.minValue = dMin; data.maxValue = dMax; result->push_back(data); } values.clear(); } else if (ClassificationType == ctNaturalBreaks) { CComVariant vMin; double dMin; // sorting the values std::vector<double> values; for (int i = 0; i < numShapes; i++) { VariantCopy(&vMin, srcValues[i]); if (useRange && (vMin.dblVal < minValue.dblVal || vMin.dblVal > maxValue.dblVal)) continue; dVal(vMin, dMin); vMin.Clear(); values.push_back(dMin); } sort(values.begin(), values.end()); CJenksBreaks breaks(&values, numClasses); if (breaks.Initialized()) { breaks.Optimize(); std::vector<long>* startIndices = breaks.get_Results(); //std::vector<int>* startIndices = breaks.TestIt(&values, numClasses); if (startIndices) { for (unsigned int i = 0; i < startIndices->size(); i++) { CategoriesData data; data.minValue = values[(*startIndices)[i]]; if (i == startIndices->size() - 1) data.maxValue = values[values.size() - 1]; else data.maxValue = values[(*startIndices)[i + 1]]; result->push_back(data); } delete startIndices; } } } // TODO: implement this as well; then it can be used in table class //else if (ClassificationType == ctStandardDeviation) // ------------------------------------------------------ // generating text expressions // ------------------------------------------------------ if (ClassificationType == ctUniqueValues) { USES_CONVERSION; for (int i = 0; i < (int)result->size(); i++) { //CString strExpression; CString strValue; CComVariant* val = &(*result)[i].minValue; switch (val->vt) { case VT_BSTR: strValue = OLE2CA(val->bstrVal); (*result)[i].name = strValue; (*result)[i].expression = "[" + fieldName + "] = \"" + strValue + "\""; break; case VT_R8: strValue.Format("%g", val->dblVal); (*result)[i].name = strValue; (*result)[i].expression = "[" + fieldName + "] = " + strValue; break; case VT_I4: strValue.Format("%i", val->lVal); (*result)[i].name = strValue; (*result)[i].expression = "[" + fieldName + "] = " + strValue; break; } } } else //if (ClassificationType == ctEqualIntervals || ClassificationType == ctEqualCount) { // in case % is present, we need to put to double it for proper formatting fieldName.Replace("%", "%%"); for (int i = 0; i < (int)result->size(); i++) { CategoriesData* data = &((*result)[i]); CString strExpression, strName, sFormat; if (i == 0) { data->minValue.dblVal = floor(data->minValue.dblVal); } else if (i == result->size() - 1) { data->maxValue.dblVal = ceil(data->maxValue.dblVal); } CString upperBound = (i == result->size() - 1) ? "<=" : "<"; switch (data->minValue.vt) { case VT_R8: sFormat = "%g"; data->name = Utility::FormatNumber(data->minValue.dblVal, sFormat) + " - " + Utility::FormatNumber(data->maxValue.dblVal, sFormat); data->expression.Format("[" + fieldName + "] >= %f AND [" + fieldName + "] " + upperBound + " %f", data->minValue.dblVal, data->maxValue.dblVal); break; case VT_I4: sFormat = "%i"; data->name = Utility::FormatNumber(data->minValue.dblVal, sFormat) + " - " + Utility::FormatNumber(data->maxValue.dblVal, sFormat); data->expression.Format("[" + fieldName + "] >= %i AND [" + fieldName + "] " + upperBound + " %i", data->minValue.lVal, data->maxValue.lVal); break; } } } if (result->size() > 0) { return result; } else { delete result; return NULL; } }
void PluginPreference::SetValue(const wxString& value) { hasBeenSet_ = true; if (value_ == value) return; if (GetType() == PluginPreferenceType::Spinner) { double dValue; bool converted = value.ToDouble(&dValue); if (!converted) { ELOG(_T("PluginPreference: value is not a number")); return; } double fValue = (double)dValue; if (minValue_ != maxValue_) { if (fValue < minValue_ || fValue > maxValue_) { ELOG(wxString::Format(_T("PluginPreference: value of '%s' is not within correct range (%d, %d)."), GetName(), GetMinValue(), GetMaxValue())); return; } } } value_ = value; Invalidate(); }