UNPKG

nativescript-taskpie

Version:

A NativeScript module for drawing Microsoft Planner like progress charts.

442 lines (441 loc) 12.8 kB
import Color = require('color'); import Grid = require('ui/layouts/grid-layout'); import { Image } from 'ui/image'; import { Label } from 'ui/label'; import Observable = require('data/observable'); import { ObservableArray } from 'data/observable-array'; import { Property } from "ui/core/dependency-observable"; import Stack = require('ui/layouts/stack-layout'); import { View } from 'ui/core/view'; import { VirtualArray } from 'data/virtual-array'; /** * Name of the field that determines if TaskPie is in edit mode or not. */ export declare const TASKPIE_FIELD_ISEDITING: string; /** * Describes a bitmap. */ export interface IBitmap { /** * Applies that bitmap over an image view. * * @param {Image} view The target view. * @param {Boolean} [disposeOld] Dispose old bitmap of view or not. * * @return {Boolean} Operation was successful or not. */ apply(view: Image, disposeOld?: boolean): boolean; /** * Frees memory. */ dispose(): any; /** * Draw the specified arc, which will be scaled to fit inside the specified oval. * * @chainable * * @param {Number} left * @param {Number} top * @param {Number} right * @param {Number} bottom * @param {Number} startAngle Starting angle (in degrees) where the arc begins. * @param {Number} sweepAngle Sweep angle (in degrees) measured clockwise. * @param {IArgb} [color] The border color. * @param {IArgb} [fillColor] The fill color. */ drawArc(left: number, top: number, right: number, bottom: number, startAngle: number, sweepAngle: number, color?: string | number | Color.Color, fillColor?: string | number | Color.Color): IBitmap; /** * Draws a circle. * * @chainable * * @param {Number} cx The x coordinate of the center of the circle. * @param {Number} cy The y coordinate of the center of the circle. * @param {IArgb} [color] The border color. * @param {IArgb} [fillColor] The fill color. */ drawCircle(cx: number, cy: number, radius: number, color?: string | number | Color.Color, fillColor?: string | number | Color.Color): IBitmap; /** * Returns that bitmap as data url in PNG format. * * @return {String} The bitmap as data url. */ toDataUrl(): string; } /** * Describes a task category. */ export interface ITaskCategory { /** * The color. */ color?: string | number | Color.Color; /** * Number of tasks. */ count?: number; /** * The name. */ name: string; /** * The type. */ type?: TaskCategoryType; } /** * A task pie view. */ export declare class TaskPie extends Grid.GridLayout { /** * Dependency property for 'categories' */ static categoriesProperty: Property; /** * Dependency property for 'categoryStyle' */ static categoryStyleProperty: Property; /** * Dependency property for 'countChanged' */ static countChangedProperty: Property; /** * Dependency property for 'counts' */ static countsProperty: Property; /** * Dependency property for 'description' */ static descriptionProperty: Property; /** * Dependency property for 'descriptionStyle' */ static descriptionStyleProperty: Property; /** * Dependency property for 'pieGridStyle' */ static pieGridStyleProperty: Property; /** * Dependency property for 'pieSize' */ static pieSizeProperty: Property; /** * Dependency property for 'pieStyle' */ static pieStyleProperty: Property; /** * Dependency property for 'pieSubText' */ static pieSubTextProperty: Property; /** * Dependency property for 'pieSubTextStyle' */ static pieSubTextStyleProperty: Property; /** * Dependency property for 'pieText' */ static pieTextProperty: Property; /** * Dependency property for 'pieTextAreaStyle' */ static pieTextAreaStyleProperty: Property; /** * Dependency property for 'pieTextStyle' */ static pieTextStyleProperty: Property; private _categories; private _categoryGetter; private _categoryLength; private _categoryListener; private _categoryGrid; private _categoryStyle; private _descriptionField; private _pieGrid; private _pieImage; private _pieSize; private _pieSubTextField; private _pieTextArea; private _pieTextField; /** * Initializes a new instance of that class. */ constructor(json?: any); /** * Adds a task category. * * @chainable * * @param {String} name The name of the category. * @param {Color.Color} color The color. * @param {Number} [count] The name of the category. */ addCategory(name: string, color: string | Color.Color | number, type?: TaskCategoryType, count?: number): TaskPie; /** * Gets or sets the list of categories. */ categories: ITaskCategory[] | ObservableArray<ITaskCategory> | VirtualArray<ITaskCategory>; /** * Sets a custom function that creates a view from a task category. */ categoryFactory: (category: ITaskCategory, index: number, pie: TaskPie) => View; /** * Gets the grid that stores the category views. */ categoryGrid: Grid.GridLayout; /** * Sets the style for the category grid. */ categoryStyle: string; /** * Clears all categories. */ clearCategories(): TaskPie; /** * Gets or sets the callback that is invoked when the count value of a task category has been changed. */ countChanged: (cat: ITaskCategory, newValue: number, oldValue: number, pie: TaskPie) => void | string; /** * Gets or sets the 'count' values of the underlying task categories. * * @throws At least one new value is no valid number. */ counts: string | number[] | ObservableArray<number> | VirtualArray<number>; /** * Increases the count value of a category. * * @chainable * * @param {Number} index The zero based index of the category. * @param any [decreaseBy] The custom value to use or the function provides it. * * @throws Decrease value is NOT valid. */ decrease(index: number, decreaseBy?: (curVal: number, category: ITaskCategory, index: number, pie: TaskPie) => number | number): TaskPie; /** * Gets or sets the description. */ description: string; /** * Gets the field with the description. */ descriptionField: Label; /** * Sets the style for the description field. */ descriptionStyle: string; /** * Switches the view in 'edit' mode what means that * 'refresh' method will be ignored until that view * leaves that mode. * * @chainable * * @param {Function} action The action to invoke. * @param {Boolean} [refresh] Call 'refresh' method after action was invoked or not. */ edit(action: (pie: TaskPie) => void, refresh?: boolean): TaskPie; /** * Returns a category by index. * * @param {Number} index The zero based index. * * @return {ITaskCategory} The category. */ getCategory(index: number): ITaskCategory; /** * Increases the count value of a category. * * @chainable * * @param {Number} index The zero based index of the category. * @param any [increaseBy] The custom value to use or the function provides it. * * @throws Increase value is NOT valid. */ increase(index: number, increaseBy?: (curVal: number, category: ITaskCategory, index: number, pie: TaskPie) => number | number): TaskPie; /** * Initializes that instance. */ protected init(): void; /** * Gets the number of categories. */ length: number; /** * Gets the grid that contains the anything of the pie * like image and text fields. */ pieGrid: Grid.GridLayout; /** * Sets the style for the pie grid. */ pieGridStyle: string; /** * Gets the image with the pie. */ pieImage: Image; /** * Gets or sets the pie size. */ pieSize: number; /** * Sets the style for the pie image. */ pieStyle: string; /** * Gets or sets the pie sub text. */ pieSubText: string; /** * Gets the text field with the pie sub text. */ pieSubTextField: Label; /** * Sets the style for the pie sub text field. */ pieSubTextStyle: string; /** * Gets or sets the pie text. */ pieText: string; /** * Gets the view that contains the pie texts. */ pieTextArea: Stack.StackLayout; /** * Sets the style for the pie text area. */ pieTextAreaStyle: string; /** * Gets the text field with the pie text. */ pieTextField: Label; /** * Sets the style for the pie text field. */ pieTextStyle: string; /** * Raises all property changes that refer to the categories. * * @param {Boolean} [withCategories] Also raise property change for 'categories' or not. */ raiseCategoryProperties(withCategories?: boolean): void; /** * Raises the 'count changed' event callback. */ raiseCountChanged(category: ITaskCategory, oldValue: number): void; /** * Refreshs the view. */ refresh(): void; /** * Removes a category at a specific position. * * @chainable * * @param {Number} index The zero based index. */ removeCategory(index: number): TaskPie; /** * Returns the total number of tasks by type. * * @param {TaskType} type The type. * * @return {Number} The number of tasks. */ total(type: TaskCategoryType): number; /** * Gets the total number of completed tasks. */ totalCompleted: number; /** * Gets the total count of all categories. */ totalCount: number; /** * Gets the total number of items that are not finished. */ totalLeft: number; /** * Updates anything for the category storage. */ protected updateCategories(): void; /** * Updates the getter callbacks for the current list of categories. */ protected updateCategoryGetters(): void; /** * Updates the listeners for the category storage. */ protected updateCategoryListeners(): void; /** * Updates the style of the current category grid. */ protected updateCategoryStyle(): void; /** * Updates the visibility of a view by a string. * * @param {String} str The string. * @param {View} view The view to update. * @param {String} [ifEmpty] The custom visibility value if 'str' is empty. * @param {String} [ifNotEmpty] The custom visibility value if 'str' is NOT empty. */ updateVisibilityOfViewByString(str: string, view: View, ifEmpty?: string, ifNotEmpty?: string): void; } /** * List of task category types. */ export declare enum TaskCategoryType { /** * Pending */ NotStarted = 1, /** * In progress */ InProgress = 2, /** * Completed */ Completed = 3, /** * Skipped */ Skipped = 4, /** * Failed */ Failed = 5, } /** * A notifiable task category. */ export declare class TaskCategory extends Observable.Observable implements ITaskCategory { private _color; private _count; private _name; private _parent; private _type; /** * Initializes a new instance of that class. * * @param {TaskPie} parent The parent element. * @param {String} name The name. * @param {Color.Color} [color] The color. * @param {TaskType} [type] The type. * @param {Number} [count] The count. */ constructor(parent: TaskPie, name: string, color?: string | number | Color.Color, type?: TaskCategoryType, count?: number); /** @inheritdoc */ color: string | number | Color.Color; /** @inheritdoc */ count: number; /** @inheritdoc */ name: string; /** * Gets the parent element. */ parent: TaskPie; /** @inheritdoc */ type: TaskCategoryType; }