/// <summary> /// Получить свойства представления по идентификатору /// </summary> /// <remarks>Используется таблица объектов интерфейса</remarks> public ViewProps GetViewProps(int viewID) { lock (baseLock) { try { dataCache.RefreshBaseTables(); DataTable tblInterface = dataCache.BaseTables.InterfaceTable; BaseTables.CheckIsNotEmpty(tblInterface, true); tblInterface.DefaultView.RowFilter = "ItfID = " + viewID; if (tblInterface.DefaultView.Count > 0) { ViewProps viewProps = new ViewProps(viewID); viewProps.FileName = (string)tblInterface.DefaultView[0]["Name"]; viewProps.ViewTypeCode = Path.GetExtension(viewProps.FileName); return(viewProps); } else { return(null); } } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при получении свойств представления по ид.={0}" : "Error getting view properties by ID={0}", viewID); return(null); } } }
public static Bitmap getRoundedShape(ViewProps props) { Bitmap scaleBitmapImage = props.image; int targetWidth = props.size; int targetHeight = props.size; Bitmap targetBitmap = Bitmap.CreateBitmap(targetWidth, targetHeight, Bitmap.Config.Argb8888); Canvas canvas = new Canvas(targetBitmap); Android.Graphics.Path path = new Android.Graphics.Path(); path.AddCircle(((float)targetWidth - 1) / 2, ((float)targetHeight - 1) / 2, (Math.Min(((float)targetWidth), ((float)targetHeight)) / 2), Android.Graphics.Path.Direction.Ccw); canvas.ClipPath(path); Bitmap sourceBitmap = scaleBitmapImage; canvas.DrawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.Width, sourceBitmap.Height), new Rect(0, 0, targetWidth, targetHeight), null); return(targetBitmap); }
public RandomShapeAndSizeGenerator(ViewProps props) { props.isCircle = isCircleImage(); props.size = GetRandomSize(); props.RandomColor = GetRandomColor(); prop = props; }
public static Bitmap getRandomBitmap(ViewProps props) { Bitmap bitmap = Bitmap.CreateBitmap(props.size, props.size, Bitmap.Config.Argb8888); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); paint.SetARGB(props.RandomColor.A, props.RandomColor.R, props.RandomColor.G, props.RandomColor.B); paint.SetStyle(Paint.Style.Fill); canvas.DrawPaint(paint); return(bitmap); }
public static ViewProps SetViewProperty(ViewProps props) { RandomShapeAndSizeGenerator generator = new RandomShapeAndSizeGenerator(props); if (generator.prop.isCircle) { generator.prop.image = getRandomBitmap(generator.prop); generator.prop.image = getRoundedShape(generator.prop); } else { generator.prop.image = getRandomBitmap(generator.prop); } return(generator.prop); }
public static async Task <ViewProps> SetProperties(ViewProps props) { RandomShapeAndSizeGenerator generator = new RandomShapeAndSizeGenerator(props); if (generator.prop.isCircle) { if (CheckConnection.iSConnected() == true) { var root = RetrieveXml.GetXml("http://www.colourlovers.com/api/colors/random"); if (root != null && root.GetElementsByTagName("imageUrl").Count != 0) { generator.prop.imageURL = root.GetElementsByTagName("imageUrl")[0].InnerText; generator.prop.title = root.GetElementsByTagName("title")[0].InnerText; DownloadImage download = new DownloadImage(generator.prop); generator.prop = await download.downloadAsync(); generator.prop.image = getRoundedShape(generator.prop); } } } else { if (CheckConnection.iSConnected() == true) { var root = RetrieveXml.GetXml("http://www.colourlovers.com/api/patterns/random"); if (root != null && root.GetElementsByTagName("imageUrl").Count != 0) { generator.prop.imageURL = root.GetElementsByTagName("imageUrl")[0].InnerText; generator.prop.title = root.GetElementsByTagName("title")[0].InnerText; DownloadImage download = new DownloadImage(generator.prop); generator.prop = await download.downloadAsync(); } } } return(generator.prop); }
/// <summary> /// Получить представление из кэша или от сервера /// </summary> public T GetView <T>(int viewID, bool throwOnError = false) where T : BaseView { try { T view = null; // получение представления из кеша DateTime utcNowDT = DateTime.UtcNow; Cache <int, BaseView> .CacheItem cacheItem = cache.GetItem(viewID, utcNowDT); BaseView viewFromCache; DateTime viewAge; // время изменения файла представления bool viewIsNotValid; // представление могло устареть if (cacheItem == null) { viewFromCache = null; viewAge = DateTime.MinValue; viewIsNotValid = true; } else { viewFromCache = cacheItem.Value; viewAge = cacheItem.ValueAge; viewIsNotValid = utcNowDT - cacheItem.ValueRefrDT > ViewValidSpan; } // получение представления от сервера if (viewFromCache == null || viewIsNotValid) { ViewProps viewProps = dataAccess.GetViewProps(viewID); if (viewProps == null) { if (throwOnError) { throw new ScadaException(Localization.UseRussian ? "Отсутствуют свойства представления." : "View properties are missing."); } } else { DateTime newViewAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Itf, viewProps.FileName); if (newViewAge == DateTime.MinValue) { if (throwOnError) { throw new ScadaException(Localization.UseRussian ? "Не удалось принять время изменения файла представления." : "Unable to receive view file modification time."); } } else if (newViewAge != viewAge) // файл представления изменён { // создание и загрузка нового представления view = (T)Activator.CreateInstance(typeof(T)); if (serverComm.ReceiveView(viewProps.FileName, view)) { if (cacheItem == null) { // добавление представления в кеш cache.AddValue(viewID, view, newViewAge, utcNowDT); } else { // обновление представления в кеше cache.UpdateItem(cacheItem, view, newViewAge, utcNowDT); } } else { if (throwOnError) { throw new ScadaException(Localization.UseRussian ? "Не удалось принять представление." : "Unable to receive view."); } } } } } // использование представление из кеша if (view == null && viewFromCache != null) { view = viewFromCache as T; if (view == null && throwOnError) { throw new ScadaException(Localization.UseRussian ? "Несоответствие типа представления." : "View type mismatch."); } } return(view); } catch (Exception ex) { string errMsg = string.Format(Localization.UseRussian ? "Ошибка при получении представления с ид.={0} из кэша или от сервера" : "Error getting view with ID={0} from the cache or from the server", viewID); log.WriteException(ex, errMsg); if (throwOnError) { throw new ScadaException(errMsg); } else { return(null); } } }
public DownloadImage(ViewProps prop) { props = prop; }