Пример #1
0
        public static async Task <bool> TestInternet(Xamarin.Forms.Page whosAsking)
        {
            try {
                if (!await HasInternet())
                {
                    await whosAsking.DisplayAlert("Fehler", "Wir konnten keine Verbindung mit dem Server herstellen", "Schade");

                    return(false);
                }
            }
            catch {
                await whosAsking.DisplayAlert("Fehler", "Wir konnten keine Verbindung mit dem Server herstellen", "Schade");

                return(false);
            }
            return(true);
        }
Пример #2
0
        public override async Task ShareFileAsync(string path, string subject, string mimeType)
        {
            try
            {
                // make file available via external storage
                Xamarin.Forms.Page page = (Xamarin.Forms.Application.Current as App).DetailPage;
                if (await page.DisplayAlert("USB", "Would you like to share using USB?", "Yes", "No"))
                {
                    string externalPath = System.IO.Path.Combine(Application.Context.GetExternalFilesDir(null).Path, Guid.NewGuid().ToString()) + System.IO.Path.GetExtension(path);
                    byte[] bytes        = File.ReadAllBytes(path);
                    File.WriteAllBytes(externalPath, bytes);
                    await page.DisplayAlert("File Shared", "The following file is available using USB:" + System.Environment.NewLine + System.Environment.NewLine + System.IO.Path.GetFileName(externalPath) + System.Environment.NewLine + System.Environment.NewLine + "You can access this file using the Android File Transfer application (https://www.android.com/filetransfer).", "Close");
                }
                // share via app/intent
                else
                {
                    // run from main activity to get a smoother transition back to sensus
                    await RunActionUsingMainActivityAsync(mainActivity =>
                    {
                        Intent intent = new Intent(Intent.ActionSend);
                        intent.SetType(mimeType);
                        intent.AddFlags(ActivityFlags.GrantReadUriPermission);

                        if (!string.IsNullOrWhiteSpace(subject))
                        {
                            intent.PutExtra(Intent.ExtraSubject, subject);
                        }

                        Java.IO.File file           = new Java.IO.File(path);
                        global::Android.Net.Uri uri = FileProvider.GetUriForFile(Application.Context, "edu.virginia.sie.ptl.sensus.fileprovider", file);
                        intent.PutExtra(Intent.ExtraStream, uri);

                        mainActivity.StartActivity(intent);
                    }, true, false);
                }
            }
            catch (Exception ex)
            {
                Logger.Log("Failed to share file \"" + path + "\":  " + ex.Message, LoggingLevel.Normal, GetType());
                await FlashNotificationAsync("Failed to share file:  " + ex.Message);
            }
        }
Пример #3
0
 /// <summary>
 /// Sprawdza czy dane sa w porzadku
 /// </summary>
 /// <param name="page">Strona na ktorej jest wyswietlany komunikat o bledzie</param>
 private void checkifNormOK(Xamarin.Forms.Page page)
 {
     for (int i = 0; i < min_Norm.Count(); i++)
     {
         //Dla kazdego elementu sprawdz czy wartosc minalna jest mniejsza niz maksymalna
         if (min_Norm[i] > max_Norm[i])
         {
             //Jezeli jest zle pokaz komunikat
             page.DisplayAlert("Warning!", "W " + (i + 1).ToString() + " pierwiastku norma minimalna jest większa od maksymalnej.", "Zrozumiałem");
         }
     }
 }
Пример #4
0
        /// <summary>
        /// Sprawdzenie czy suma wszystkich pierwiastkow nie jest większa niż 100%
        /// </summary>
        /// <param name="page">Strona na ktorej pojawi się ewentualny komunikat o błędzie</param>
        private void checkIfOK(Xamarin.Forms.Page page)
        {
            double suma = 0;

            foreach (double x in tabOfElements)
            {
                suma = suma + x;
            }
            if (suma > 100)
            {
                page.DisplayAlert("Warning!", "Suma procentowa wszystkich elementów przekracza 100%", "Zrozumialem");
            }
        }
Пример #5
0
        /// <summary>
        /// Funkcja tworzacy produkt metal z wypelnionymi danymi ktore pobiera z pol tekstowych
        /// </summary>
        /// <param name="page">Strona na ktorej moze sie pojawic error</param>
        /// <param name="name">nazwa produktu</param>
        /// <param name="price">cena produktu</param>
        /// <param name="fe">zawartosc zelaza w produkcie</param>
        /// <param name="c">zawartosc wegla w produkcie</param>
        /// <param name="si">zawartosc krzemu w produkcie</param>
        /// <param name="mn">zawartosc manganu</param>
        /// <param name="p">zawartosc fosforu w produkcie</param>
        /// <param name="s"></param>
        /// <param name="cr"></param>
        /// <param name="mo"></param>
        /// <param name="ni"></param>
        /// <param name="al">zawartosc aluminium w produkcie</param>
        /// <param name="co"></param>
        /// <param name="cu">zawartosc miedzi w produkcie</param>
        /// <param name="nb"></param>
        /// <param name="ti"></param>
        /// <param name="v"></param>
        /// <param name="w"></param>
        /// <param name="pb">zawartosc olowiu w produkcie</param>
        /// <returns>Gotowy metal z wypelnionymi danymi</returns>
        public static Alloy addNewAlloy(Xamarin.Forms.Page page, string name, string price, string fe, string c, string si, string mn, string p, string s, string cr, string mo, string ni, string al, string co, string cu, string nb, string ti, string v, string w, string pb, string sn, string b, string ca, string zr, string aas, string bi, string sb, string zn, string mg, string n, string h, string o)
        {
            Alloy metal = new Alloy();

            //parsuj najwazniejsze dane
            try
            {
                metal.name  = name;
                metal.Price = metal.parseThatValue(page, price);

                //parsuj dane skladnikow
                metal.Fe = metal.parseThatValue(page, fe);
                metal.C  = metal.parseThatValue(page, c);
                metal.Si = metal.parseThatValue(page, si);
                metal.Mn = metal.parseThatValue(page, mn);
                metal.P  = metal.parseThatValue(page, p);
                metal.S  = metal.parseThatValue(page, s);
                metal.Cr = metal.parseThatValue(page, cr);
                metal.Mo = metal.parseThatValue(page, mo);
                metal.Ni = metal.parseThatValue(page, ni);
                metal.Al = metal.parseThatValue(page, al);
                metal.Co = metal.parseThatValue(page, co);
                metal.Cu = metal.parseThatValue(page, cu);
                metal.Nb = metal.parseThatValue(page, nb);
                metal.Ti = metal.parseThatValue(page, ti);
                metal.V  = metal.parseThatValue(page, v);
                metal.W  = metal.parseThatValue(page, w);
                metal.Pb = metal.parseThatValue(page, pb);
                metal.Sn = metal.parseThatValue(page, sn);
                metal.B  = metal.parseThatValue(page, b);
                metal.Ca = metal.parseThatValue(page, ca);
                metal.Zr = metal.parseThatValue(page, zr);
                metal.As = metal.parseThatValue(page, aas);
                metal.Bi = metal.parseThatValue(page, bi);
                metal.Sb = metal.parseThatValue(page, sb);
                metal.Zn = metal.parseThatValue(page, zn);
                metal.Mg = metal.parseThatValue(page, mg);
                metal.N  = metal.parseThatValue(page, n);
                metal.H  = metal.parseThatValue(page, h);
                metal.O  = metal.parseThatValue(page, o);

                metal.createTabOfElements(metal);      //Wszystkie pierwiastki leca do tablicy
                metal.checkIfOK(page);                 //Sprawdzam czy suma wszystkich stopow nie przekaracza 100%
            }
            catch (Exception ex)
            {
                page.DisplayAlert("Dziwny error", ex.ToString(), "OK");
            }

            return(metal);
        }
Пример #6
0
        /// <summary>
        /// Funkcja zamieniajaca stringi na double, jezeli to mozliwe
        /// </summary>
        /// <param name="page">Strona na ktorej wyswietlany bedzie komunikat</param>
        /// <param name="element">tekst ktory ma byc zmieniony na liczbe</param>
        /// <param name="isMax">Jezeli true to zwraca 100% (maks), a nie 0</param>
        /// <returns>Zmieniona liczba</returns>
        private Double parseThatValue(Xamarin.Forms.Page page, string element, bool isMax)
        {
            double num = 0;

            //Jezeli string nic nie zawiera to zwroc po prostu zero
            if (string.IsNullOrWhiteSpace(element))
            {
                if (isMax)
                {
                    return(100);
                }
                else
                {
                    return(0);
                }
            }
            //W innym razie sproboj przeparsowac liczbe
            else if (Double.TryParse(element, out num))
            {
                //Jezeli jest ok to zwroc do produktu poprawna liczbe
                //TODO: Sprobowac znalezc sposb na poprawienie . i ,
                //TODO: Wartosci nieujemne i mniejsze od 100
                double tmp = double.Parse(element, NumberStyles.AllowDecimalPoint);
                if (tmp > 100)
                {
                    page.DisplayAlert("Warning!", "Wartość " + tmp + "przekracza 100%!", "Zrozumiałem");
                }
                return(tmp);
            }
            else
            {
                //Jezeli liczba to glupoty to wywal error w ktorym pokazesz jaka zawartosc jest zle, a do metalu zwroc NaN
                page.DisplayAlert("Error", "Nie udało się przetworzyć zawartości: " + element, "OK");
                return(0);
            }
        }
Пример #7
0
        /// <summary>
        /// Funkcja parsujaca dane i wyswietlajaca error na ekranie jezeli cos jest nie tak
        /// </summary>
        /// <param name="page">Strona na ktorej wyswietli sie error</param>
        /// <param name="element">liczba ktora chcemy przekonwertowac na double</param>
        /// <returns>Wartosc zalezna od stringu</returns>
        private Double parseThatValue(Xamarin.Forms.Page page, string element)
        {
            double num = 0;

            //Jezeli string nic nie zawiera to zwroc po prostu zero
            if (string.IsNullOrWhiteSpace(element))
            {
                return(0);
            }
            //W innym razie sproboj przeparsowac liczbe
            else if (Double.TryParse(element, out num))
            {
                //Jezeli jest ok to zwroc do produktu poprawna liczbe
                //TODO: Sprobowac znalezc sposb na poprawienie . i ,
                return(double.Parse(element, NumberStyles.AllowDecimalPoint));
            }
            else
            {
                //Jezeli liczba to glupoty to wywal error w ktorym pokazesz jaka zawartosc jest zle, a do metalu zwroc NaN
                page.DisplayAlert("Error", "Nie udało się przetworzyć zawartości: " + element, "OK");
                return(0);
            }
        }
Пример #8
0
        /// <summary>
        /// 1 修复 page, handle 的处理方式
        /// 2 去掉 string.FormatWith 的字符串转换方式
        /// </summary>
        /// <param name="uri">Web Service Uri</param>
        /// <param name="requestData">参数</param>
        /// <param name="page">UI Page</param>
        /// <param name="handle">UI Handler</param>
        /// <param name="isCompress">是否压缩(默认不压缩)</param>
        /// <param name="isEncrypt">是否加密(默认不加密)</param>
        public void ExecuteV5
        (
            Uri uri,
            Util.WebService.RequestData requestData,
            Xamarin.Forms.Page page = null,
            Action <Util.WebService.SOAPResult> handle = null,
            bool isCompress = false,
            bool isEncrypt  = false
        )
        {
            var current = Xamarin.Essentials.Connectivity.NetworkAccess;

            if (current == Xamarin.Essentials.NetworkAccess.None)
            {
                string msg = "检测设备没有可用的网络,请开启 数据 或 Wifi。";
                if (handle == null)
                {
                    if (page == null)
                    {
                        System.Diagnostics.Debug.WriteLine(msg);
                    }
                    else
                    {
                        page.DisplayAlert("Error", msg, "确定");
                    }
                }
                else // handle != null
                {
                    Util.WebService.SOAPResult soapResultHasError = new Util.WebService.SOAPResult();

                    soapResultHasError.IsComplete    = false;
                    soapResultHasError.ExceptionInfo = $"{msg}";
                    soapResultHasError.IsSuccess     = false;
                    handle.Invoke(soapResultHasError);
                    return;
                }
                return;
            }

            System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker();

            bw.DoWork += (s, e) =>
            {
                string data = string.Empty;
                try
                {
                    #region 先压缩, 后加密

                    requestData.IsCompress = isCompress;
                    if (requestData.IsCompress)
                    {
                        requestData.CompressType = "GZip"; // 默认使用GZip压缩
                        for (int i = 0; i < requestData.JsonArgs.Count; i++)
                        {
                            requestData.JsonArgs[i] = requestData.JsonArgs[i].GZip_Compress2String();
                        }
                    }

                    requestData.IsEncrypt = isEncrypt;
                    if (requestData.IsEncrypt)
                    {
                        requestData.EncryptType = "RSA"; // 默认使用RSA加密
                        for (int i = 0; i < requestData.JsonArgs.Count; i++)
                        {
                            requestData.JsonArgs[i] = requestData.JsonArgs[i].RSA_Encrypt();
                        }
                    }

                    #endregion

                    data = mClient.UploadString(uri, "POST", Util.JsonUtils.SerializeObject(requestData));
                }
                catch (System.Net.WebException webEx)
                {
                    string msg = $"执行 {requestData.MethodName} 发生未知错误";
                    throw new Exception(msg, webEx);
                }
                finally
                {
                    mClient.Dispose();
                }

                Util.WebService.SOAPResult soapResult = Util.JsonUtils.DeserializeObject <Util.WebService.SOAPResult>(data);
                e.Result = soapResult;
            };


            bw.RunWorkerCompleted += async(obj, args) =>
            {
                if (handle == null)
                {
                    if (args.Error != null)
                    {
                        string msg = $"{args.Error.GetFullInfo()}";
                        if (page == null)
                        {
                            System.Diagnostics.Debug.WriteLine(msg);
                        }
                        else
                        {
                            await page.DisplayAlert("Error", msg, "确定");
                        }
                        return;
                    }

                    if (args.Result == null)
                    {
                        string msg = $"执行 {requestData.MethodName} 发生未知错误:args.Result为空值";
                        if (page == null)
                        {
                            System.Diagnostics.Debug.WriteLine(msg);
                        }
                        else
                        {
                            await page.DisplayAlert("Error", msg, "确定");
                        }
                        return;
                    }

                    // 程序员没有传入返回结果的后续处理, 就此结束
                    return;
                }
                else // Handle != null
                {
                    if (args.Error != null)
                    {
                        Util.WebService.SOAPResult soapResultHasError = new Util.WebService.SOAPResult();

                        soapResultHasError.IsComplete    = false;
                        soapResultHasError.ExceptionInfo = args.Error.GetFullInfo();
                        soapResultHasError.IsSuccess     = false;
                        handle.Invoke(soapResultHasError);
                        return;
                    }

                    if (args.Result == null)
                    {
                        string msg = $"执行 {requestData.MethodName} 发生未知错误:args.Result为空值";

                        Util.WebService.SOAPResult soapResultHasError = new Util.WebService.SOAPResult();

                        soapResultHasError.IsComplete    = false;
                        soapResultHasError.ExceptionInfo = $"{msg}\r\n{args.Error.GetFullInfo()}";
                        soapResultHasError.IsSuccess     = false;
                        handle.Invoke(soapResultHasError);
                        return;
                    }

                    Util.WebService.SOAPResult soapResult = args.Result as Util.WebService.SOAPResult;

                    #region soapResult.ReturnObjectJson 解密 & 解压

                    // 1 是否经过加密, 若是进行解密
                    if (soapResult.IsEncrypt == true)
                    {
                        switch (soapResult.EncryptType.ToUpper())
                        {
                        case "RSA": soapResult.ReturnObjectJson = soapResult.ReturnObjectJson.RSA_Decrypt(); break;

                        case "DES": soapResult.ReturnObjectJson = soapResult.ReturnObjectJson.DES_Decrypt(); break;

                        default: break;
                        }

                        soapResult.IsEncrypt = false; // 解密后设置为False
                    }

                    // 2 是否经过压缩, 若是进行解压
                    if (soapResult.IsCompress == true)
                    {
                        switch (soapResult.CompressType.ToUpper())
                        {
                        case "GZIP": soapResult.ReturnObjectJson = soapResult.ReturnObjectJson.GZip_Decompress2String(); break;

                        default: break;
                        }

                        soapResult.IsEncrypt = false; // 解压后设置为False
                    }

                    #endregion

                    handle.Invoke(soapResult);
                }
            };

            bw.RunWorkerAsync();
        }
Пример #9
0
        /// <summary>
        /// 待优化: 支持压缩与加密 requestData.JsonArgs
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="requestData"></param>
        /// <param name="page"></param>
        /// <param name="handle"></param>
        public void ExecuteV3
        (
            Uri uri,
            Util.WebService.RequestData requestData,
            Xamarin.Forms.Page page = null,
            Action <Util.WebService.SOAPResult> handle = null
        )
        {
            //var current = Xamarin.Essentials.Connectivity.NetworkAccess;
            //if (current == Xamarin.Essentials.NetworkAccess.None)
            //{
            //    string msg = "检测设备没有可用的网络,请开启 数据 或 Wifi。".FormatWith(requestData.MethodName);
            //    if (page == null)
            //    {
            //        System.Diagnostics.Debug.WriteLine(msg);
            //    }
            //    else
            //    {
            //        page.DisplayAlert("Error", msg, "确定");
            //    }
            //    return;
            //}


            System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker();

            bw.DoWork += (s, e) =>
            {
                string data = string.Empty;
                try
                {
                    data = mClient.UploadString(uri, "POST", Util.JsonUtils.SerializeObject(requestData));
                }
                catch (System.Net.WebException webEx)
                {
                    string msg = string.Format("{0}", webEx.Message);
                    System.Diagnostics.Debug.WriteLine(msg);
                }
                finally
                {
                    mClient.Dispose();
                }

                Util.WebService.SOAPResult soapResult = Util.JsonUtils.DeserializeObject <Util.WebService.SOAPResult>(data);
                e.Result = soapResult;
            };


            bw.RunWorkerCompleted += (obj, args) =>
            {
                if (args.Error != null)
                {
                    string msg = "{0}".FormatWith(args.Error.GetFullInfo());
                    if (page == null)
                    {
                        System.Diagnostics.Debug.WriteLine(msg);
                    }
                    else
                    {
                        page.DisplayAlert("Error", msg, "确定");
                    }
                    return;
                }

                if (args.Result == null)
                {
                    string msg = "执行 {0} 发生未知错误:args.Result为空值".FormatWith(requestData.MethodName);
                    if (page == null)
                    {
                        System.Diagnostics.Debug.WriteLine(msg);
                    }
                    else
                    {
                        page.DisplayAlert("Error", msg, "确定");
                    }
                    return;
                }

                if (handle == null)
                {
                    return;
                }

                Util.WebService.SOAPResult soapResult = args.Result as Util.WebService.SOAPResult;
                handle.Invoke(soapResult);
            };

            bw.RunWorkerAsync();
        }
Пример #10
0
        /// <summary>
        /// 缺点 : 逻辑处理不方便, 报错时页面不知道接下去要做什么
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="requestData"></param>
        /// <param name="page"></param>
        /// <param name="handle"></param>
        public void ExecuteV2
        (
            Uri uri,
            Util.WebService.RequestData requestData,
            Xamarin.Forms.Page page = null,
            Action <string> handle  = null
        )
        {
            System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker();

            bw.DoWork += (s, e) =>
            {
                string data = string.Empty;
                try
                {
                    data = mClient.UploadString(uri, "POST", Util.JsonUtils.SerializeObject(requestData));
                }
                catch (System.Net.WebException webEx)
                {
                    string msg = string.Format("{0}", webEx.Message);
                    System.Diagnostics.Debug.WriteLine(msg);
                }
                finally
                {
                    mClient.Dispose();
                }

                Util.WebService.SOAPResult soapResult = Util.JsonUtils.DeserializeObject <Util.WebService.SOAPResult>(data);
                e.Result = soapResult;
            };


            bw.RunWorkerCompleted += (obj, args) =>
            {
                if (args.Error != null)
                {
                    string msg = "{0}".FormatWith(args.Error.GetFullInfo());
                    if (page == null)
                    {
                        System.Diagnostics.Debug.WriteLine(msg);
                    }
                    else
                    {
                        page.DisplayAlert("Error", msg, "确定");
                    }
                    return;
                }

                if (args.Result == null)
                {
                    string msg = "执行 {0} 发生未知错误:args.Result为空值".FormatWith(requestData.MethodName);
                    if (page == null)
                    {
                        System.Diagnostics.Debug.WriteLine(msg);
                    }
                    else
                    {
                        page.DisplayAlert("Error", msg, "确定");
                    }
                    return;
                }


                Util.WebService.SOAPResult soapResult = args.Result as Util.WebService.SOAPResult;
                if (soapResult.IsComplete == false)
                {
                    if (page == null)
                    {
                        System.Diagnostics.Debug.WriteLine(soapResult.ExceptionInfo);
                    }
                    else
                    {
                        page.DisplayAlert("Error", soapResult.ExceptionInfo, "确定");
                    }
                    return;
                }
                else if (soapResult.IsSuccess == false)
                {
                    if (page == null)
                    {
                        System.Diagnostics.Debug.WriteLine(soapResult.BusinessExceptionInfo);
                    }
                    else
                    {
                        page.DisplayAlert("Error", soapResult.BusinessExceptionInfo, "确定");
                    }
                    return;
                }
                else
                {
                    if (handle != null)
                    {
                        handle.Invoke(soapResult.ReturnObjectJson);
                    }
                }
            };

            bw.RunWorkerAsync();
        }
Пример #11
0
 public Task DisplayAlert(object sender, string title, string message, string buttonMessage)
 {
     Xamarin.Forms.Page page = (Xamarin.Forms.Page)sender;
     return(page.DisplayAlert(title, message, buttonMessage));
 }
Пример #12
0
        /// <summary>
        /// Funkcja tworzaca nowy wytop z danymi
        /// </summary>
        /// <param name="page">Strona na ktorej jest wyswietlany ewentualny error</param>
        /// <param name="name">Nazwa wytopu</param>
        /// <param name="femin">Minimalna zawartosc zelaza w wytopie</param>
        /// <param name="femax">Maks. zaw. zelaza w wytopie</param>
        /// <param name="feevo">Wsp. parowania zelaza</param>
        /// <param name="cmin"></param>
        /// <param name="cmax"></param>
        /// <param name="cevo">Wsp. parowania wegla</param>
        /// <param name="simin"></param>
        /// <param name="simax">Max. zaw. krzemu</param>
        /// <param name="sievo"></param>
        /// <param name="mnmin"></param>
        /// <param name="mnmax"></param>
        /// <param name="mnevo">Wsp. parowania manganu</param>
        /// <param name="pmin"></param>
        /// <param name="pmax">Max. zaw.fosforu</param>
        /// <param name="pevo"></param>
        /// <param name="smin"></param>
        /// <param name="smax"></param>
        /// <param name="sevo">Wsp. parowania krzemu</param>
        /// <param name="crmin"></param>
        /// <param name="crmax">Max. zaw. chromu</param>
        /// <param name="crevo"></param>
        /// <param name="momin">Min. zaw. molibdenu</param>
        /// <param name="momax">Max. zaw. molibdenu</param>
        /// <param name="moevo"></param>
        /// <param name="nimin">Min. zaw. niklu</param>
        /// <param name="nimax">Max. zaw. niklu</param>
        /// <param name="nievo"></param>
        /// <param name="almin">Min. zaw. aluminium</param>
        /// <param name="almax">Max. zaw. alum</param>
        /// <param name="alevo">Wsp. parowania aluminium</param>
        /// <param name="comin"></param>
        /// <param name="comax"></param>
        /// <param name="coevo"></param>
        /// <param name="cumin"></param>
        /// <param name="cumax"></param>
        /// <param name="cuevo">Wsp. parowania miedzi</param>
        /// <param name="nbmin"></param>
        /// <param name="nbmax"></param>
        /// <param name="nbevo"></param>
        /// <param name="timin">Min. zaw. tytanu</param>
        /// <param name="timax"></param>
        /// <param name="tievo"></param>
        /// <param name="vmin"></param>
        /// <param name="vmax"></param>
        /// <param name="vevo"></param>
        /// <param name="wmin"></param>
        /// <param name="wmax"></param>
        /// <param name="wevo"></param>
        /// <param name="pbmin"></param>
        /// <param name="pbmax"></param>
        /// <param name="pbevo">Wsp. parowania olowiu</param>
        /// <param name="snmin"></param>
        /// <param name="snmax"></param>
        /// <param name="snevo"></param>
        /// <param name="bmin"></param>
        /// <param name="bmax"></param>
        /// <param name="bevo"></param>
        /// <param name="camin">Min. zaw. wapnia</param>
        /// <param name="camax"></param>
        /// <param name="caevo"></param>
        /// <param name="zrmin"></param>
        /// <param name="zrmax"></param>
        /// <param name="zrevo"></param>
        /// <param name="asmin"></param>
        /// <param name="asmax"></param>
        /// <param name="asevo"></param>
        /// <param name="bimin"></param>
        /// <param name="bimax"></param>
        /// <param name="bievo"></param>
        /// <param name="sbmin"></param>
        /// <param name="sbmax"></param>
        /// <param name="sbevo"></param>
        /// <param name="znmin"></param>
        /// <param name="znmax"></param>
        /// <param name="znevo"></param>
        /// <param name="mgmin"></param>
        /// <param name="mgmax"></param>
        /// <param name="mgevo">Wsp. parowania magnezu</param>
        /// <param name="nmin">Min. zaw. azotu</param>
        /// <param name="nmax"></param>
        /// <param name="nevo"></param>
        /// <param name="hmin">Min. zaw. wodoru</param>
        /// <param name="hmax"></param>
        /// <param name="hevo"></param>
        /// <param name="omin"></param>
        /// <param name="omax"></param>
        /// <param name="oevo"></param>
        /// <returns>Stop z danymi</returns>
        public static Smelt addNewSmelt(Xamarin.Forms.Page page, string name,
                                        string femin, string femax, string feevo,
                                        string cmin, string cmax, string cevo,
                                        string simin, string simax, string sievo,
                                        string mnmin, string mnmax, string mnevo,
                                        string pmin, string pmax, string pevo,
                                        string smin, string smax, string sevo,
                                        string crmin, string crmax, string crevo,
                                        string momin, string momax, string moevo,
                                        string nimin, string nimax, string nievo,
                                        string almin, string almax, string alevo,
                                        string comin, string comax, string coevo,
                                        string cumin, string cumax, string cuevo,
                                        string nbmin, string nbmax, string nbevo,
                                        string timin, string timax, string tievo,
                                        string vmin, string vmax, string vevo,
                                        string wmin, string wmax, string wevo,
                                        string pbmin, string pbmax, string pbevo,
                                        string snmin, string snmax, string snevo,
                                        string bmin, string bmax, string bevo,
                                        string camin, string camax, string caevo,
                                        string zrmin, string zrmax, string zrevo,
                                        string asmin, string asmax, string asevo,
                                        string bimin, string bimax, string bievo,
                                        string sbmin, string sbmax, string sbevo,
                                        string znmin, string znmax, string znevo,
                                        string mgmin, string mgmax, string mgevo,
                                        string nmin, string nmax, string nevo,
                                        string hmin, string hmax, string hevo,
                                        string omin, string omax, string oevo)
        {
            Smelt sm = new Smelt();

            try
            {
                //nazwa z pola jest nazwa wytopu
                sm.name   = name;
                sm.Fe_min = sm.parseThatValue(page, femin, false);
                sm.Fe_max = sm.parseThatValue(page, femax, true);
                sm.Fe_evo = sm.parseThatValue(page, feevo, false);

                sm.C_min = sm.parseThatValue(page, cmin, false);
                sm.C_max = sm.parseThatValue(page, cmax, true);
                sm.C_evo = sm.parseThatValue(page, cevo, false);

                sm.Si_min = sm.parseThatValue(page, simin, false);
                sm.Si_max = sm.parseThatValue(page, simax, true);
                sm.Si_evo = sm.parseThatValue(page, sievo, false);

                sm.Mn_min = sm.parseThatValue(page, mnmin, false);
                sm.Mn_max = sm.parseThatValue(page, mnmax, true);
                sm.Mn_evo = sm.parseThatValue(page, mnevo, false);

                sm.P_min = sm.parseThatValue(page, pmin, false);
                sm.P_max = sm.parseThatValue(page, pmax, true);
                sm.P_evo = sm.parseThatValue(page, pevo, false);

                sm.S_min = sm.parseThatValue(page, smin, false);
                sm.S_max = sm.parseThatValue(page, smax, true);
                sm.S_evo = sm.parseThatValue(page, sevo, false);

                sm.Cr_min = sm.parseThatValue(page, crmin, false);
                sm.Cr_max = sm.parseThatValue(page, crmax, true);
                sm.Cr_evo = sm.parseThatValue(page, crevo, false);

                sm.Mo_min = sm.parseThatValue(page, momin, false);
                sm.Mo_max = sm.parseThatValue(page, momax, true);
                sm.Mo_evo = sm.parseThatValue(page, moevo, false);

                sm.Ni_min = sm.parseThatValue(page, nimin, false);
                sm.Ni_max = sm.parseThatValue(page, nimax, true);
                sm.Ni_evo = sm.parseThatValue(page, nievo, false);

                sm.Al_min = sm.parseThatValue(page, almin, false);
                sm.Al_max = sm.parseThatValue(page, almax, true);
                sm.Al_evo = sm.parseThatValue(page, alevo, false);

                sm.Co_min = sm.parseThatValue(page, comin, false);
                sm.Co_max = sm.parseThatValue(page, comax, true);
                sm.Co_evo = sm.parseThatValue(page, coevo, false);

                sm.Cu_min = sm.parseThatValue(page, cumin, false);
                sm.Cu_max = sm.parseThatValue(page, cumax, true);
                sm.Cu_evo = sm.parseThatValue(page, cuevo, false);

                sm.Nb_min = sm.parseThatValue(page, nbmin, false);
                sm.Nb_max = sm.parseThatValue(page, nbmax, true);
                sm.Nb_evo = sm.parseThatValue(page, nbevo, false);

                sm.Ti_min = sm.parseThatValue(page, timin, false);
                sm.Ti_max = sm.parseThatValue(page, timax, true);
                sm.Ti_evo = sm.parseThatValue(page, tievo, false);

                sm.V_min = sm.parseThatValue(page, vmin, false);
                sm.V_max = sm.parseThatValue(page, vmax, true);
                sm.V_evo = sm.parseThatValue(page, vevo, false);

                sm.W_min = sm.parseThatValue(page, wmin, false);
                sm.W_max = sm.parseThatValue(page, wmax, true);
                sm.W_evo = sm.parseThatValue(page, wevo, false);

                sm.Pb_min = sm.parseThatValue(page, pbmin, false);
                sm.Pb_max = sm.parseThatValue(page, pbmax, true);
                sm.Pb_evo = sm.parseThatValue(page, pbevo, false);

                sm.Sn_min = sm.parseThatValue(page, snmin, false);
                sm.Sn_max = sm.parseThatValue(page, snmax, true);
                sm.Sn_evo = sm.parseThatValue(page, snevo, false);

                sm.B_min = sm.parseThatValue(page, bmin, false);
                sm.B_max = sm.parseThatValue(page, bmax, true);
                sm.B_evo = sm.parseThatValue(page, bevo, false);

                sm.Ca_min = sm.parseThatValue(page, camin, false);
                sm.Ca_max = sm.parseThatValue(page, camax, true);
                sm.Ca_evo = sm.parseThatValue(page, caevo, false);

                sm.Zr_min = sm.parseThatValue(page, zrmin, false);
                sm.Zr_max = sm.parseThatValue(page, zrmax, true);
                sm.Zr_evo = sm.parseThatValue(page, zrevo, false);

                sm.As_min = sm.parseThatValue(page, asmin, false);
                sm.As_max = sm.parseThatValue(page, asmax, true);
                sm.As_evo = sm.parseThatValue(page, asevo, false);

                sm.Bi_min = sm.parseThatValue(page, bimin, false);
                sm.Bi_max = sm.parseThatValue(page, bimax, true);
                sm.Bi_evo = sm.parseThatValue(page, bievo, false);

                sm.Sb_min = sm.parseThatValue(page, sbmin, false);
                sm.Sb_max = sm.parseThatValue(page, sbmax, true);
                sm.Sb_evo = sm.parseThatValue(page, sbevo, false);

                sm.Zn_min = sm.parseThatValue(page, znmin, false);
                sm.Zn_max = sm.parseThatValue(page, znmax, true);
                sm.Zn_evo = sm.parseThatValue(page, znevo, false);

                sm.Mg_min = sm.parseThatValue(page, mgmin, false);
                sm.Mg_max = sm.parseThatValue(page, mgmax, true);
                sm.Mg_evo = sm.parseThatValue(page, mgevo, false);

                sm.N_min = sm.parseThatValue(page, nmin, false);
                sm.N_max = sm.parseThatValue(page, nmax, true);
                sm.N_evo = sm.parseThatValue(page, nevo, false);

                sm.H_min = sm.parseThatValue(page, hmin, false);
                sm.H_max = sm.parseThatValue(page, hmax, true);
                sm.H_evo = sm.parseThatValue(page, hevo, false);

                sm.O_min = sm.parseThatValue(page, omin, false);
                sm.O_max = sm.parseThatValue(page, omax, true);
                sm.O_evo = sm.parseThatValue(page, oevo, false);

                //wypelnij tablice wszystkich danych
                sm.createTabofMinNorm(sm);
                sm.createTabofMaxNorm(sm);
                sm.createTabofEvoporation(sm);

                //Spprawdzenie czy zawartosci w wytopie sa poprawne [min < max]
                sm.checkifNormOK(page);
            }
            catch (Exception ex)
            {
                //Jezeli cokolwiek pojdzie zle to wyswietl blad
                page.DisplayAlert("Dziwny error", ex.ToString(), "OK");
            }
            //zwroc wytop
            return(sm);
        }