Mini Kabibi Habibi
using System;
using System.Collections;
using System.Drawing;
using System.Globalization;
using DevExpress.Web.ASPxEditors;
using DevExpress.XtraCharts;
public static class ComboBoxHelper {
const string defaultMarker = "Default";
const string percentMarker = "%";
const int defaultDoughnutHole = 60;
static readonly MarkerKindItemCollection markerKinds = MarkerKindItemCollection.CreateCollection();
static string[] AppendPercentMarker(string[] items) {
return AppendPercentMarker(items, 0);
}
static string[] AppendPercentMarker(string[] items, int startIndex) {
string[] result = new string[items.Length];
for(int i = 0; i < startIndex; i++)
result[i] = items[i];
for(int i = startIndex; i < items.Length; i++)
result[i] = items[i] + percentMarker;
return result;
}
static string DeletePercentMarker(string item) {
return item.TrimEnd(new char[] { percentMarker[0] });
}
public static void PrepareComboBox(ASPxComboBox comboBox, string[] items) {
PrepareComboBox(comboBox, items, null);
}
public static void PrepareComboBox(ASPxComboBox comboBox, string[] items, object defaultItem) {
comboBox.Items.AddRange(items);
comboBox.SelectedIndex = defaultItem != null ? comboBox.Items.IndexOfText(defaultItem.ToString()) : 0;
}
public static void PrepareComboBox(ASPxComboBox comboBox, double[] items, double defaultItem) {
comboBox.Items.AddRange(items);
comboBox.SelectedIndex = comboBox.Items.IndexOfText(defaultItem.ToString());
}
public static void PrepareComboBox(ASPxComboBox comboBox, Enum defaultValue) {
PrepareComboBox(comboBox, Enum.GetNames(defaultValue.GetType()), defaultValue);
}
public static void PrepareComboBox(ASPxComboBox comboBox, IDictionary dictionary) {
PrepareComboBox(comboBox, dictionary, 0);
}
public static void PrepareComboBox(ASPxComboBox comboBox, IDictionary dictionary, int selectedIndex) {
foreach(DictionaryEntry entry in dictionary)
comboBox.Items.Add((string)entry.Key, entry.Value);
comboBox.SelectedIndex = selectedIndex;
}
public static void PrepareLabelAngleComboBox(ASPxComboBox comboBox, int defaultAngle) {
string[] items = new string[] { "0", "45", "90", "135", "180", "225", "270", "315" };
PrepareComboBox(comboBox, items, defaultAngle);
}
public static void PrepareTransparencyComboBox(ASPxComboBox comboBox, int defaultTransparency) {
string[] items = new string[] { "0", "45", "90", "135", "180", "225", "255" };
PrepareComboBox(comboBox, items, defaultTransparency);
}
public static void PrepareZoomPercentComboBox(ASPxComboBox comboBox, int defaultZoomPercent) {
string[] items = new string[] { "50", "75", "100", "120", "140", "170", "200", "250", "300" };
PrepareComboBox(comboBox, items, defaultZoomPercent);
}
public static void PreparePerspectiveAngleComboBox(ASPxComboBox comboBox) {
string[] items = new string[] { defaultMarker, "0", "30", "45", "60", "90", "120", "135", "150" };
PrepareComboBox(comboBox, items);
}
public static void PrepareBar3DModelComboBox(ASPxComboBox comboBox) {
string[] items = new string[] { "Box", "Cylinder", "Cone", "Pyramid" };
PrepareComboBox(comboBox, items);
}
public static void PrepareRegressionLineColorComboBox(ASPxComboBox comboBox) {
comboBox.Items.Add("Default");
Color[] colors = new Color[] { Color.Black, Color.Red, Color.Green, Color.Blue, Color.Yellow };
foreach(Color color in colors)
comboBox.Items.Add(color.Name);
comboBox.SelectedIndex = 0;
}
public static void PrepareDashStyleCombobox(ASPxComboBox comboBox, DashStyle defaultDashStyle) {
foreach(DashStyle dashStyle in Enum.GetValues(defaultDashStyle.GetType()))
if(dashStyle != DashStyle.Empty)
comboBox.Items.Add(dashStyle.ToString());
comboBox.SelectedIndex = comboBox.Items.IndexOfText(defaultDashStyle.ToString());
}
public static void PrepareLogarithmicBaseComboBox(ASPxComboBox comboBox, double defaultLogarithmicBase) {
string[] items = new string[] { "2", "5", "10", "20", "50", "100" };
PrepareComboBox(comboBox, items, defaultLogarithmicBase);
}
public static void PrepareFunctionTypeComboBox(ASPxComboBox comboBox) {
const string lemniscate = "Lemniscate";
string[] items = new string[] { "Circles", "Cardioid", lemniscate };
PrepareComboBox(comboBox, items, lemniscate);
}
public static void PrepareFunctionTypeScatterLineComboBox(ASPxComboBox comboBox) {
const string archimedianSpiral = "Archimedian Spiral";
string[] items = new string[] { archimedianSpiral, "Cardioid", "Cartesian Folium", };
PrepareComboBox(comboBox, items, archimedianSpiral);
}
public static void PrepareChartTypeComboBox(ASPxComboBox comboBox) {
const string line = "Line";
string[] items = new string[] { line, "Bar" };
PrepareComboBox(comboBox, items, line);
}
public static void PrepareSeriesAxisXComboBox(ASPxComboBox comboBox) {
const string primaryAxis = "Primary Axis X";
string[] items = new string[] { primaryAxis, "Secondary Axis X" };
PrepareComboBox(comboBox, items, primaryAxis);
}
public static void PrepareSeriesAxisYComboBox(ASPxComboBox comboBox) {
const string secondaryAxisY = "Secondary Axis Y";
string[] items = new string[] { "Primary Axis Y", secondaryAxisY };
PrepareComboBox(comboBox, items, secondaryAxisY);
}
public static void PrepareViewTypeComboBox(ASPxComboBox comboBox) {
string[] items = new string[] {
"Lines",
"Stacked Lines",
"Full-Stacked Lines",
"Step Lines",
"Areas",
"Step Areas",
"Stacked Areas",
"Full-Stacked Areas",
"3D Lines",
"3D Stacked Lines",
"3D Full-Stacked Lines",
"3D Step Lines",
"3D Areas",
"3D Stacked Areas",
"3D Full-Stacked Areas",
"3D Step Areas",
"Spline",
"Spline Area",
"Stacked Spline",
"Full-Stacked Spline",
"Spline 3D",
"Spline Area 3D",
"Stacked Spline 3D",
"Full-Stacked Spline 3D" };
PrepareComboBox(comboBox, items);
}
public static void PreparePieViewTypeComboBox(ASPxComboBox comboBox) {
string[] items = new string[] { "Pie", "Pie 3D", "Doughnut", "Doughnut 3D" };
PrepareComboBox(comboBox, items);
}
public static void PrepareMarkerKindComboBox(ASPxComboBox comboBox, MarkerKind defaultKind, int defaultStarPointCount) {
PrepareComboBox(comboBox, markerKinds.GetNames(), markerKinds.FindName(defaultKind, defaultStarPointCount));
}
public static void PrepareMarkerSizeComboBox(ASPxComboBox comboBox, int defaultSize) {
PrepareComboBox(comboBox, MarkerKindItemCollection.GetSizeArray(), defaultSize);
}
public static void PrepareLegendPercentComboBox(ASPxComboBox comboBox, double defaultPercent) {
string[] items = AppendPercentMarker(new string[] { "25", "50", "75", "100" });
PrepareComboBox(comboBox, items, defaultPercent.ToString() + percentMarker);
}
public static void PrepareLineTensionComboBox(ASPxComboBox comboBox, int defaultLineTension) {
string[] items = AppendPercentMarker(new string[] { "0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100" });
PrepareComboBox(comboBox, items, defaultLineTension.ToString() + percentMarker);
}
public static void PreparePieLabelsComboBox(ASPxComboBox comboBox) {
string[] items = new string[] { "Inside", "Outside", "TwoColumns", "Radial" };
PrepareComboBox(comboBox, items);
}
public static void PrepareDoughnutHolePercentComboBox(ASPxComboBox comboBox) {
string defaultHoleString = defaultMarker + " (" + defaultDoughnutHole.ToString() + "%)";
string[] items = AppendPercentMarker(new string[] { defaultHoleString, "0", "15", "30", "50", "75", "90", "100" }, 1);
PrepareComboBox(comboBox, items);
}
public static void PrepareExplodedPointsComboBox(ASPxComboBox comboBox, SeriesPointCollection points, bool supportCustom) {
string[] items = PieExplodingHelper.GetNames(points, supportCustom);
PrepareComboBox(comboBox, items);
}
public static void PrepareSummaryFunctionsComboBox(ASPxComboBox comboBox) {
string[] items = new string[] { "SUM", "MIN", "MAX", "AVERAGE", "COUNT", "STDDEV (Custom)" };
PrepareComboBox(comboBox, items);
}
public static void PrepareResolveOverlappingModeComboBox(ASPxComboBox comboBox, ResolveOverlappingMode defaultMode) {
PrepareComboBox(comboBox, defaultMode);
}
public static Enum GetSelectedItem(ASPxComboBox comboBox, Type enumType) {
if(!enumType.IsEnum)
throw new ArgumentException();
try {
return (Enum)Enum.Parse(enumType, comboBox.SelectedItem.Text);
}
catch {
}
return (Enum)Enum.Parse(enumType, (string)comboBox.SelectedItem.Value);
}
public static ResolveOverlappingMode GetSelectedResolveOverlappingMode(ASPxComboBox comboBox) {
return (ResolveOverlappingMode)GetSelectedItem(comboBox, typeof(ResolveOverlappingMode));
}
public static int GetSelectedPerspectiveAngle(ASPxComboBox comboBox) {
return comboBox.SelectedItem.Text == defaultMarker ? 50 : Int32.Parse(comboBox.SelectedItem.Text);
}
public static MarkerKindItem GetSelectedMarkerKindItem(ASPxComboBox comboBox) {
return markerKinds.Find(comboBox.SelectedItem.Text);
}
public static double GetSelectedLegendPercent(ASPxComboBox comboBox) {
return double.Parse(DeletePercentMarker(comboBox.SelectedItem.Text));
}
public static int GetSelectedLineTension(ASPxComboBox comboBox) {
return Convert.ToInt32(DeletePercentMarker(comboBox.SelectedItem.Text));
}
public static int GetSelectedDoughnutHolePercent(ASPxComboBox comboBox) {
string selectedText = comboBox.SelectedItem.Text;
return
selectedText.StartsWith(defaultMarker) ?
defaultDoughnutHole :
Convert.ToInt32(DeletePercentMarker(selectedText));
}
public static void ApplySelectedExplodingMode(ASPxComboBox comboBox, PieSeriesViewBase view) {
PieExplodingHelper.ApplyMode(view, comboBox.SelectedItem.Text);
}
public static Color GetSelectedRegressionLineColor(ASPxComboBox comboBox) {
return comboBox.SelectedItem.Text == "Default" ? Color.Empty : Color.FromName(comboBox.SelectedItem.Text);
}
}
public static class NumericOptionsHelper {
public static void CalcNumericFormat(bool valueAsPercent, out NumericFormat format, out int precision) {
if (valueAsPercent) {
format = NumericFormat.Percent;
precision = 0;
}
else {
format = NumericFormat.FixedPoint;
precision = 1;
}
}
public static void SetNumericOptions(Series series, NumericFormat format, int precision) {
series.Label.PointOptions.ValueNumericOptions.Format = format;
series.Label.PointOptions.ValueNumericOptions.Precision = precision;
}
}
public static class DataHelper {
static DateTime StringToDateTime(string str) {
return DateTime.Parse(str, CultureInfo.InvariantCulture);
}
public static void AddPoint(Series series, string argument, double value) {
DateTime argumentDT = StringToDateTime(argument);
series.Points.Add(new SeriesPoint(argumentDT, new double[] { value }));
}
public static void AddPoint(Series series, string argument, double value1, double value2) {
DateTime argumentDT = StringToDateTime(argument);
series.Points.Add(new SeriesPoint(argumentDT, new double[] { value1, value2 }));
}
}
public static class PieExplodingHelper {
public const string None = "None";
public const string All = "All";
public const string MinValue = "Min Value";
public const string MaxValue = "Max Value";
public const string Custom = "Custom";
public static void ApplyMode(PieSeriesViewBase view, string mode) {
switch (mode) {
case Custom:
view.ExplodeMode = PieExplodeMode.UsePoints;
break;
case None:
view.ExplodeMode = PieExplodeMode.None;
break;
case All:
view.ExplodeMode = PieExplodeMode.All;
break;
case MinValue:
view.ExplodeMode = PieExplodeMode.MinValue;
break;
case MaxValue:
view.ExplodeMode = PieExplodeMode.MaxValue;
break;
default:
view.ExplodedPointsFilters.Clear();
view.ExplodedPointsFilters.Add(new SeriesPointFilter(SeriesPointKey.Argument, DataFilterCondition.Equal, mode));
view.ExplodeMode = PieExplodeMode.UseFilters;
break;
}
}
public static string[] GetNames(SeriesPointCollection points, bool supportCustom) {
int itemsCount = points.Count + 4;
if(supportCustom)
itemsCount++;
string[] items = new string[itemsCount];
items[0] = None;
items[1] = All;
items[2] = MinValue;
items[3] = MaxValue;
for(int i = 0; i < points.Count; i++)
items[i + 4] = points[i].Argument;
if(supportCustom)
items[points.Count + 4] = Custom;
return items;
}
}
public static class PolarFunctionCalculator {
static double GetLineFactor(int index) {
switch (index) {
case 0:
return 1;
case 1:
return 0.5;
case 2:
return 2;
default:
return 2;
}
}
static double ToRadian(double angle) {
return angle * Math.PI / 180.0;
}
static double Function(double m, double angle) {
double cos = Math.Cos(m * ToRadian(90.0 + angle));
return Math.Pow(Math.Abs(cos), m);
}
public static SeriesPoint[] GenerateFunctionPoints(int index, int pointCount) {
double m = GetLineFactor(index);
int step = 360 / pointCount;
SeriesPoint[] points = new SeriesPoint[pointCount];
for (int i = 0; i < pointCount; i++)
points[i] = new SeriesPoint(step * i, new double[] { Function(m, step * i) });
return points;
}
}