Quantcast
Channel: Infragistics Community
Viewing all 2223 articles
Browse latest View live

How to express your data using Ignite UI’s jQuery Linear Gauge control.

$
0
0

When it comes to Data Visualization, there is an abundance of controls in the Ignite UI package, which can help you provide the best user interface. Depending on the type of information you wish to display you can choose which chart to use. In the new release of Ignite UI there are few new controls and the one we are going to focus on in the current blog is the Linear Gauge. It supports a great amount of options and features , by the use of which you can customize this chart and adapt it to your data.

basic linear gauge

 

Basic Configuration

If you consider adding this control to a HTML page then you will need an element on which to instantiate the control.

HTML:

  1. <divid="linearGauge"></div>

After that include the following JS  code:

JS:

  1. $("#linearGauge").igLinearGauge({
  2.     width: "500px",
  3.     height: "80px",
  4.     minimumValue: "0",
  5.     maximumValue: "50",
  6.     value: "20"
  7. });

 

Example image:

linear gauge

If you are making a MVC project first add the Infragistics references and then use the following lines:

MVC:

  1. @(Html.Infragistics().LinearGauge()
  2.         .Width("100%")
  3.         .Height("80px")
  4.         .MinimumValue(0)
  5.         .MaximumValue(40)
  6.         .Value(22)
  7.         .Render()
  8. )

Those are the basic steps to configure the control. Of course you can add some options to the configured chart to make it correspond to your ideas. We are going to cover few of the options that Linear Gauge supports, but the entire list of features you can find in the API documentation.

Features

As we said the igLinearGauge control is an Ignite UI control which displays data in a form of linear gauge. It consists of visual elements like scale, needle, ranges and labels. All of those elements can be customized.

Scale

The scale is composed of tick marks and labels. The size and the positions of the tick marks are relative to the Graph area(a frame of reference for positioning the visual elements of the scale). There are quite a few options related to the scale. For example you can decide whether you want your scale to be inverted or not by setting the isScaleInverted option to ‘true’ or ‘false’. You can manipulate the position of the scale using the scaleStartExtend and scaleEndExtend , having in mind that both- start position and the end position of the scale are relative to the left edge of the graph area. To specify the value range you need to use the maximumValue and minimumValue options and assign them the values you wish. You can set a background color with the backingBrush option.

JS:

  1. minimumValue: "0",
  2. maximumValue: "50",
  3. scaleEndExtent: ".7",
  4. scaleStartExtent: ".2",
  5. isScaleInverted: "true",
  6. backingBrush: "#99CCFF"

MVC:

  1. .MinimumValue(0)
  2. .MaximumValue(50)         
  3. .BackingBrush("#99CCFF")
  4. .IsScaleInverted(true)
  5. .ScaleEndExtent(.7)
  6. .ScaleStartExtent(.2)

Example image:

inverted linear gauge

 

Ticks by themselves can be customized in few different ways. You can change the main ticks brush using the tickBrush option or you can change the mini ticks brush by the minorTickBrush option. You can also change the thickness of the main brushes by assinging them the desired value using the tickStrokeThickness option and respectively the mini brushes using minorTickStrokeThickness. The number of mini ticks that are displayed can be changed with minorTickCount.

JS:

  1. tickStrokeThickness: 4,
  2. minorTickBrush: "blue",
  3. tickBrush: "yellow",
  4. minorTickCount: 5

MVC:

  1. .TickStrokeThickness(4)
  2. .TickBrush("yellow")
  3. .MinorTickBrush("blue")
  4. .MinorTickCount(5)

Example image:

linear gauge with custom ticks

 

Needle

To configure the needle actually means to set its shape, size and position. The position is set by the value option and the size can be changed by needleStrokeThickness option. The shape can be: “needle”, “triangle”,”rectangle”, “trapezoid” and the option that is used is needleShape. If you want a specific shape you can set this option to “custom” and then by using the following options you can create your own needle.

JS:

  1. value: "20",
  2. needleShape: "custom",
  3. needleInnerExtent: 0.3,
  4. needleOuterExtent: 0.7,
  5. needleOuterPointExtent: 0.9,
  6. needleInnerPointExtent: 0.3,
  7. needleInnerPointWidth: 0,
  8. needleOuterPointWidth: 0.3,
  9. needleInnerBaseWidth: 0,
  10. needleOuterBaseWidth: 0.07,
  11. needleBrush:"lightpink"

MVC:

  1. .NeedleShape(LinearGraphNeedleShape.Custom)
  2. .NeedleBrush("lightpink")
  3. .NeedleInnerExtent(0.3)
  4. .NeedleOuterExtent(0.7)
  5. .NeedleOuterPointExtent(0.9)
  6. .NeedleInnerPointExtent(0.3)
  7. .NeedleInnerPointWidth(0)
  8. .NeedleOuterPointWidth(0.3)
  9. .NeedleInnerBaseWidth(0)
  10. .NeedleOuterBaseWidth(.07)

Example image:

custom needle

 

Ranges

The igLinearGauge control supports multiple relative ranges. Each range can be configured individually by specifying its starting and ending value , brush and border thickness.

JS:

  1.   ranges: [
  2. {
  3.     name: 'first',
  4.     startValue: -275,
  5.     endValue: -192.5,
  6.     outerStartExtent: .7,
  7.     outerEndExtent: .55
  8. },
  9. {
  10.     name: 'second',
  11.     startValue: -192.5,
  12.     endValue: -82.5,
  13.     outerStartExtent: .55,
  14.     outerEndExtent: .35
  15. },
  16. {
  17.     name: 'third',
  18.     startValue: - 82.5,
  19.     endValue: 0,
  20.     outerStartExtent: .35,
  21.     outerEndExtent: .25
  22. }
  23.   ]

Example picture:

temperature

You can achieve the sloping effect for scale by changing the outer extent options. The Linear Gauge can be either horizontal or vertical. This change can be made by orientation option:

JS:

  1. orientation: "vertical"

Example image:

vertical linear gauge

 

Labels

Changing the label color can be done by fontBrush option. If you want your label to be more than numbers you can use the following event and change the it.

  1. formatLabel: function (evt, ui) {
  2.     ui.label += 'Kilos';
  3. }

 

custom labels

The position of the labels can be modified with labelExtent . This option gets or sets the position on which to put the label as a value from 0 to 1, measured form the bottom of the scale.

custom scale

 

Tooltips are always useful and you can have tooltips when you hover the needle or when you hover a particular area of the chart. If you want to enable the tooltips – first set the showTooltip option to true and then use the needleToolTipTemplate or the rangeToolTipTemplate like this:

JS:

  1. <!--Needle ToolTip-->
  2. <scriptid="needleToolTip"type="text/x-jquery-tmpl">
  3.     <divclass='ui-lineargauge-needle-tooltip'>
  4.         <span>The needle is on : ${label}</span>
  5.     </div>
  6. </script>
  7.  
  8. <!--Range ToolTip-->
  9. <scriptid="rangeToolTip"type="text/x-jquery-tmpl">
  10.     <span>Range: ${item.startValue} to ${item.endValue}</span>
  11. </script>

  1. showToolTip: true,
  2. needleToolTipTemplate: "needleToolTip",
  3. rangeTooltipTemplate: "rangeToolTip",

Example image:

 

Conclusion

The igLinearGauge control gives you the ability to create attractive data presentations and it provides a simple and concise view of a primary value compared against a scale. This jQuery UI widget visualize data in the form of a linear gauge. Like a classic thermometer, these gauges can read out one or more values over a straight line measurement scale that you can orient vertically or horizontally.

Sample.

Coming soon a sample showing the dynamic use of this control.

 

You can follow us on Twitter @Infragistics and stay in touch on Facebook, Google+ and LinkedIn!


Designing for Any Device

$
0
0

What follows is a primer for the professional who has been tasked with creating a web site or application that may be accessed via multiple devices (aka responsive design). Whether you are a product manager, user experience professional, designer or developer, follow these guidelines and your users will thank you.

Regardless of the platform(s), you must:

  1. Understand the technical requirements
  2. Understand the business requirements
  3. Understand the user requirements

Note that user requirements are morethan a list of new features and functionality! User requirements must include an understanding of how users work and what they are trying to accomplish through their interaction with the artifact you are creating. These include a user’s goals, their known/stated requirements as well as their latent requirements (i.e., requirements that users don’t realize they have). User requirements also include any device-specific constraints (physical or technological) that impact a user’s ability to interact with your artifact.

Informational or Marketing Web Sites

If a responsive design is your goal and the artifact is a straightforward informational or marketing web site, it is sufficient to focus primarilyon 1 and 2 above. Here is why:

  • Informational and marketing web site designs are well understood and have become commoditized. Care to guess the percentage of web sites today that were created using WordPress? The site w3techs.com puts the number at 20.4% of all existing web sites. It remains the task of the UX or design professional to determine the information architecture (a well understood process) but the “problem” of overall site layout, usability and design for simple sites has been largely solved.
  • The goal of such sites is to make all content available under all device constraints (though the device-specific prioritization of such content remains an important task that is routinely ignored).
  • Most importantly, device-specific design and layout decisions are made programmatically in order to support the goal of “one design to fit them all”.

Complex Transactional Web Sites or Business Applications

If a responsive design is your goal and the artifact is a complex, transactional web site or business application, following #3 above becomes critical. In this case, there are multiple sets of task- and device-specific requirements that need to be implemented. Here is why:

  • A user’s expectations, goals and tasks will vary as they move between physical environments.
  • A user’s expectations, goals and tasks will vary as they move between physical devices.
  • It is almost certainly nota requirement of the user to have all content available under all device constraints. Device-specific prioritization of content is critical.
  • Specific designs are required to match specific user requirements on specific devices.

In other words, tasks and processes that may be well-supported in an office environment may be completely inappropriate if translated verbatim to a non-office environment, regardless of device. This isn’t simply a matter of knowing what content to hide or expose. Depending on situational requirements, certain tasks may be done differently, incompletely or not at all. Key to creating an application that alwayssupports users is understanding how and when a user’s requirements change.

Responsive design is a misnomer. It is a development technique. There are no such shortcuts to good design.


Kevin Richardsonhas been working in the area of user experience for over 20 years. With an advanced degree in Cognitive Psychology, he has experience across business verticals in the fields of research, evaluation, design and management of innovative, user-centered solutions.

Kevin’s experience includes web sites, portals and dashboards, enterprise software and custom business applications for medical, pharmaceutical, communications, entertainment, energy, transportation and government users.

On the weekends, you can find Kevin on his motorcycle, riding for Infragistics Racingat a number of different racetracks on the East coast.

IG Racing

Ember.js Basics - What is Ember?

$
0
0

According to the creators of the framework, Ember.js is “a framework for creating ambitious web applications”. What exactly do they mean? Also, with the many (, many, many) JavaScript frameworks that we have to choose from these days, why might I choose Ember? In this post, I’ll introduce Ember.js and some of the core concepts that backed its development. In future posts, I’ll dig in and show you how to build applications with the framework. For now, let’s look at what the framework is made of.

Guiding principles

Before looking at the details of any framework, it helps to understand the core concepts that drove the feature decisions in the first place. Perhaps the biggest factor in the creation of Ember was the belief that what makes the web so unique is the ability to bookmark and share URLs. The team felt that many JavaScript frameworks treated the URL as an afterthought (mostly by treating the concept of a router as an optional add-on). The Ember team also wanted to create an MVC framework that was closer in line with the desktop MVC framework mentality rather than taking a server-side MVC approach (like ASP.NET MVC or Ruby on Rails). So, Ember combines the productivity of a native UI framework while supporting shareable URLs. The following key concepts are what make up the framework from a high-level overview standpoint.

Core concepts

Naming conventions

Ember was written with convention over configuration in mind. This means that much of the framework relies on things being named consistently and in the manner that the framework expects. The naming conventions are summarized nicely here.

Templates

Templates are what describe the user interface in Ember.js. Ember templates are written using the Handlebars templating language which allows for expressions to be added to standard HTML markup within double curly braces: {{}}. Each template is backed by a model and supports databinding such that the template will auto-update when the model changes. The following features are supported in Ember’s Handlebars templates:

  • Plain HTML
  • Expressions - Allow model values to be substituted into the HTML. For instance, {{price}} would substitue the value of the price property on the model into the template where specified
  • Outlets - An outlet (specified by {{outlet}}) is a placeholder for another template. As the user moves around the application, different templates can be loaded into the outlet by the router.
  • Components - Custom HTML elements (technically, custom Handlebars helpers) that help clean up repetitive templates by enabling the creation of reusable controls

Example template:

Name: {{input type="text" value=name placeholder="Enter your name"}}

My name is {{name}} and I want to learn Ember!

Router

The router in Ember is what powers the shareable URLs that are so important to web applications. The router translates the URL of a request into a series of templates. For instance, when I visit /coffee within the application, Ember’s router will translate this to the CoffeeRoute which will set up the appropriate template backed by the appropriate model for that request. As the templates or models being shown to the user change, Ember’s router will automatically keep the URL in the browser up to date. This means that the user can share the URL at any point in the application lifecycle. Whenever someone clicks on this shared URL, they will see the same thing that the original user saw.

Example router:

App.Router.map(function() {
  this.resource('about');
  this.resource('coffees', function() {
    this.resource('coffee', {path: ':coffee_id'});
  });
});

App.CoffeesRoute = Ember.Route.extend({
  model: function () {
    return App.Coffee.find();
  }
});

Models

A model object is used to store persistent state within an Ember application. These model objects are what back the templates and provide data to be displayed within the HTML. Many applications will load these models through a REST API using Ember Data which will store the data in a server database, but Ember doesn’t limit you to just this choice. There are many adapters for Ember Data that allow you to choose the backend that works best for your project. You can even roll your own syncing using the Basic Adapter

Example model:

var attr = DS.attr;

App.Coffee = DS.Model.extend({
  name: attr('string'),
  price: attr('number'),
  ounces: attr('number'),
  description: attr('string'),
  roaster: attr('string'),
  acidity: attr('string'),
  body: attr('number')
});

Controllers

The controller is technically where the templates get their data from. Though optional, a controller will be created by Ember if not directly declared for a route. The controller “decorates” the model object. Properties specified on the controller can be accessed by a template as if they were declared on the model. Methods can be created within the controller that can be called using Handlebars helpers in the template. This enables things like button actions. In general, properties that do not need to be synced to the backend server but are necessary for template logic should be created in the controller. Ember supports the creation of ObjectControllers, which manages a single model object, and ArrayControllers which manage a list of model objects.

Example controller:

Todos.TodoController = Ember.ObjectController.extend({
  isCompleted: function(key, value){
    var model = this.get('model');

    if (value === undefined) {
      // property being used as a getter
      return model.get('isCompleted');
    } else {
      // property being used as a setter
      model.set('isCompleted', value);
      model.save();
      return value;
    }
  }.property('model.isCompleted')
});

Components

Components allow for the creation of reusable controls. The interface for the component is defined using Handlebars templates. The component also has a JavaScript class that is used to store state and handle user interaction. Components are placed into a template using a Handlebars helper with a name based off of the name of the component.

Example component:

App.GravatarImageComponent = Ember.Component.extend({
  size: 200,
  email: '',

  gravatarUrl: function() {
    var email = this.get('email'),
        size = this.get('size');

    return 'http://www.gravatar.com/avatar/' + hex_md5(email) + '?s=' + size;
  }.property('email', 'size')
});

Summary

Ember.js is a relatively young but growing framework. Though in the past it suffered from a lack of documentation and a difficult learning curve, that situation has improved dramatically. The Ember guides are very well-written and will help you get started with the framework in no time. I will also be posting more on how to develop with this framework over the coming weeks.

Contact

If you want to comment or reach out to me, the best place to do that is on Twitter @brentschooley. I can also be reached via email at bschooley@infragistics.com.

Creating a jQuery Music Player using the Ignite UI Linear Gauge.

$
0
0

The Linear gauge widget can be very handy if you want to create a custom music player. In this blog you can see how to use this control to build the volume slider and the player slider while making a Music player like the one described in O'Reilly’s jQuery Cook Book. The example picture demonstrates the final result.

Step one

First of all, we need some HTML tags to host our player elements. We are going to use the HTML5 audio tag to hold our song.

  1. <audiosrc="/Music/song.mp3"></audio>

Then we are going to set the basics for the player. We will need a play and pause button, a volume button and of course the controls for progress and volume. You can use some CSS to style those elements

  1. <divclass="musicPlayer">
  2.     <divclass="buttons">
  3.         <aclass="playpause"href="#">
  4.             <spanclass="ui-icon ui-icon-play"></span>
  5.             <spanclass="ui-icon ui-icon-pause"></span>
  6.             </a>
  7.     </div>
  8.     <spanclass="currenttime"></span>
  9.     <divid="linearGauge"></div>
  10.     <spanclass="duration"></span>
  11.     <divclass="volume-container">
  12.         <divclass="volume">
  13.             <ahref="#">
  14.                 <spanclass="vol ui-icon ui-icon-volume-on"></span>
  15.             </a>
  16.         </div>
  17.     </div>
  18.     <divid="linearGauge1"></div>
  19. </div>

Step two

Now that we have the construction of our music player let’s make it functional. First you will need the following code to enable the play and the pause buttons.

  1. $('.buttons .playpause').click(function () {
  2.     var player = $(this).parents('.musicPlayer');
  3.     if (player.is('.paused')) {
  4.         $('.musicPlayer').removeClass('paused');
  5.         audioEl.play();
  6.     } else {
  7.         $('.musicPlayer').addClass('paused');
  8.         audioEl.pause();
  9.     }
  10.     returnfalse;
  11. }).hover(function () { $(this).addClass('ui-state-hover'); },
  12. function () { $(this).removeClass('ui-state-hover'); })
  13. .focus(function () { $(this).addClass('ui-state-focus'); })
  14. .blur(function () { $(this).removeClass('ui-state-focus'); });
  15.  
  16. $('.musicPlayer').addClass('paused');

For the slider we are using the linear gauge. As you will see from the following lines, the maximum value for the control depends on the song’s duration. That way the chart will always respond to the length of the currently playing song. We will make two ranges: one static and one dynamic, which will change with the progress of the song.

 

  1. var newduration = audioEl.duration / 60;
  2.  
  3. //linear gauge
  4.  
  5. $(".musicPlayer #linearGauge").igLinearGauge({
  6.     width: "65%",
  7.     height: "45px",
  8.     minimumValue: "0",
  9.     maximumValue: newduration,
  10.     minorTickCount: 1,
  11.     needleBreadth: 4,
  12.     interval: 1,
  13.     value: 1.2,
  14.     labelInterval: 1,
  15.     needleShape: "custom",
  16.     needleInnerBaseWidth: 0.1,
  17.     needleOuterBaseWidth: 0.1,
  18.     needleInnerExtent: .6,
  19.     needleOuterExtent: 0.1,
  20.     needleInnerPointExtent: .3,
  21.     needleInnerPointWidth: 0.3,
  22.     needleOuterPointExtent: 0.4,
  23.     needleOuterPointWidth: .3,
  24.     needleBrush: "black",
  25.     backingBrush: "#e6e6e6",
  26.     backingOutline: "#e6e6e6",
  27.     fontBrush: "black",
  28.     ranges: [
  29.     {
  30.         name: "666",
  31.         startValue: 0,
  32.         endValue: newduration,
  33.         brush: "#666",
  34.         innerStartExtent: .2,
  35.         innerEndExtent: .2,
  36.         outerStartExtent: 0.5,
  37.         outerEndExtent: 0.5
  38.     }, {
  39.         name: "track",
  40.         startValue: 0,
  41.         endValue: 0,
  42.         brush: "#19A3A3",
  43.         innerStartExtent: .2,
  44.         innerEndExtent: .2,
  45.         outerStartExtent: 0.5,
  46.         outerEndExtent: 0.5
  47.     }]
  48. });

To take the duration of the tune you need to make sure that its metadata is loaded. To avoid divergence of time we are going to wrap the control in a function which will execute only after the loadmetadata event occurs.

  1. audioEl.addEventListener("loadedmetadata", function () {
  2.     . . .
  3. }

In this function we will initialize the handler function for the timeupdate event where we are going to change the value of the control because we want the needle to show the current time. The other change that we are making is update  end value of the dynamic range. Again, the value that we are assigning is the current time. That way we can color only the part of the scale that corresponds to the  elapsed time of the song.

  1. $('audio').bind('timeupdate', function (event) {
  2.     $('.musicPlayer .currenttime').text(minAndSec(audioEl.currentTime));
  3.     $(".musicPlayer #linearGauge").igLinearGauge("option", "value", audioEl.currentTime / 60);
  4.     $(".musicPlayer #linearGauge").igLinearGauge("option", "ranges", [{
  5.         name: "track",
  6.         endValue: audioEl.currentTime / 60
  7.     }]);
  8. });

In the same way you can add one more range to show the buffer progress.

We want to be able to change the current time of the tune, whenever we want. For that reason we will enable the needle to drag and we will  make audio element’s current time equal to the value at which we drag the needle to.

  1. var lastPointX = 0, lastPointY = 0, isDragging = false, lastPointXVol = 0, lastPointYVol = 0;
  2.  
  3. // Start the needle drag only on a mousedown on the needle
  4. document.getElementById("linearGauge").addEventListener("mousedown", function (e) {
  5.     dragNeedle(e, true);
  6.     document.addEventListener("mousemove", mousemove);
  7.     document.addEventListener("mouseup", mouseup);
  8.  
  9. });
  10.  
  11. // Function that performs the needle drag/tap to the new point
  12. dragNeedle = function (e, isMouseDown) {
  13.     if (!isMouseDown && !isDragging) {
  14.         return;
  15.     }
  16.  
  17.     e.preventDefault();
  18.     var pointX = e.pageX - $("#linearGauge").offset().left;
  19.     var pointY = e.pageY - $("#linearGauge").offset().top;
  20.     if (isMouseDown) {
  21.         var isClickPointValid = $("#linearGauge").igLinearGauge("needleContainsPoint", pointX, pointY);
  22.         if (isClickPointValid) {
  23.             lastPointX = pointX;
  24.             lastPointY = pointY;
  25.         } else {
  26.             isClickPointValid = $("#linearGauge").igLinearGauge("needleContainsPoint", (pointX + 4 * lastPointX) / 5, (pointY + 4 * lastPointY) / 5);
  27.         }
  28.         isDragging = true;
  29.         if (!isClickPointValid) {
  30.             isDragging = false;
  31.             return;
  32.         }
  33.  
  34.     }
  35.  
  36.     var value = $("#linearGauge").igLinearGauge("getValueForPoint", pointX, pointY);
  37.     if (isNaN(value))
  38.         return;
  39.  
  40.     // Prevent needle from dragging beyond the scale bounds
  41.     var minimumValue = $("#linearGauge").igLinearGauge("option", "minimumValue");
  42.     var maximumValue = $("#linearGauge").igLinearGauge("option", "maximumValue");
  43.  
  44.     var startValue = minimumValue <= maximumValue ? minimumValue : maximumValue;
  45.     var endValue = minimumValue > maximumValue ? minimumValue : maximumValue;
  46.  
  47.     if (value > startValue && value < endValue) {
  48.         $("#linearGauge").igLinearGauge("option", "value", value);
  49.         $(".musicPlayer #linearGauge").igLinearGauge("option", "ranges", [{ name: "track", endValue: value }]);
  50.         audioEl['currentTime'] = value * 60;
  51.  
  52.     } else {
  53.         value = value >= endValue ? endValue : startValue;
  54.         $("#linearGauge").igLinearGauge("option", "value", value);
  55.         $(".musicPlayer #linearGauge").igLinearGauge("option", "ranges", [{ name: "track", endValue: value }]);
  56.         audioEl['currentTime'] = value * 60;
  57.  
  58.     }
  59. }

 

Music Player

Step three

As our music player is already functional and playing the last thing to do is control the volume of the song. As we mentioned we are using another linear gauge to take care of the volume. As you can guess it is vertical and the range is set from 0 to 1. We use the hide and toggle jQuery functions to  make it appear only when the user click  on the volume icon.  In the range we set the end value to audio element’s volume.

  1. $("#linearGauge1").hide();
  2. $(".vol").click(function () { $("#linearGauge1").toggle(); });
  3. $("#linearGauge1").igLinearGauge({
  4.     width: "40px",
  5.     height: "110px",
  6.     minimumValue: "0",
  7.     maximumValue: "1",
  8.     orientation: "vertical",
  9.     minorTickCount: 1,
  10.     interval: 1,
  11.     tickEndExtent: 0.5,
  12.     scaleStartExtent: .1,
  13.     scaleEndExtent: 0.9,
  14.     value: 1,
  15.     fontBrush: "black",
  16.     ickStrokeThickness: 1,
  17.     labelInterval: 1,
  18.     backingBrush: "#B2CCCC",
  19.     ranges: [{
  20.         name: "volume",
  21.         startValue: 0,
  22.         endValue: audioEl.volume,
  23.         brush: "#D1E0E0",
  24.         outerStartExtent: 0,
  25.         outerEndExtent: 0.9
  26.     }]
  27. });

We need to be able to drag this needle if we want to change the volume. We use the same function as the above mentioned. The only difference is that we don’t set the current time but we set the volume making it equal to the value of the needle.

  1. audioEl['volume'] = value;

 

Volume

 

Conclusion

The linear gauge is not only a static control for Data Visualization, it can be dynamic and functional. You can use it to create music player, video player , thermometers and whatever else you can think of.  You can find more information about this control and how to add it to your application in my blog: “How to express your data using Ignite UI’s jQuery Linear Gauge control.”

 

Sample.

 

You can follow us on Twitter @Infragistics and stay in touch on Facebook, Google+ and LinkedIn!

NucliOS Release Notes - November: 13.1.234 Service Release

$
0
0

Introduction

With every release comes a set of release notes that reflects the state of resolved bugs and new additions from the previous release. You’ll find the notes useful to help determine the resolution of existing issues from a past release and as a means of determining where to test your applications when upgrading from one version to the next.

Release Notes: NucliOS 2013 Volume 1 Build 234

ComponentProduct ImpactDescription
IGGaugeViewBug FixThe disappearance of the radial gauge backing and ranges during animations was fixed.
IGChartViewBug FixIGChartViewDelegate method viewForTooltipWithItem: will now return a valid item list for the scatter and bubble series.
IGPieChartViewBug FixTapping inside the inner extent of the pie chart will no longer call the tap method of the pie chart.
IGChartViewBug FixFixed exception when using the Spline series over date time axis.
IGGaugeViewBug FixIGGaugeView's container is no longer erroneously offset.

David Ismailov Knows Great UX

$
0
0

Infragistics community member David Ismailov is no stranger to User Experience, design and development. In his role as UX and 3D Technical Manager at Optitex in Israel, David relies on tools that provide quality and efficiency – tools like Infragistics’ Indigo Studio.

We had the opportunity to chat with David about his design process and the impact that prototyping has on the development of great apps. Read on to learn more!

Question:

Thanks for chatting with us, David! How did you get involved in design and UX?

Anwser:

Since my first encounter with the Maya (3D Animation Software) and its hot-menu feature (a true breakthrough UI back then, which allowed you to reach any menu item from anywhere in the software), I became fascinated by how various GUI elements work. I explored different interface solutions to technical constraints. That’s when I understood that software’s UI has big impact on productivity and ease of use.

Later on, as 3D Technical Director at Optitex, I was in charge of developing the technological strategy and defining the most efficient tools and procedures for the projects I worked on.  I was a mix of an artist and a programmer and, as part of my job, dealt with both technical and creative issues, guiding animators and programmers, and finding creative solutions to complex problems. Many times I was dealing with UX issues without even knowing it or calling it UX. Back then, no one used the UX terminology. As I dove deeper into my projects, I couldn't help noticing that our product had many UI and UX issues and suggested ways to solve them. That’s how I gained the UX Manager position in my company.

Question:

How do you approach your UX design process?

Anwser:

When approaching UX design for software, I first try to figure out the workflow/pipeline and the roles of different users in it. My main purpose is to define the problems and understand the technical limitations. Once the problems and limitations are clear, I try out different solutions, creating as many low fidelity prototypes as I can. I believe that interaction design is an important part of any UX solution, no less than aesthetics and functionality, and I use my prototypes to explore different interactions. Eventually, after testing a number of variations, I select the best one and create a high fidelity prototype.

Question:

How does Infragistics’ Indigo Studio help you make good user experience design decisions?

Anwser:

Indigo Studio helps me to find the best solutions, as it makes it easy to create as many variations as I can, quickly and efficiently, without getting into technical issues. The intuitive animation tools enable me to create and test different interactions and flows, to find out which is the best one.

Question:

Can you talk a little bit about how Indigo Studio helps you – both with design and development – in ways that tools like Photoshop don’t?

Anwser:

Indigo Studio includes many useful features that don’t exist in tools like Photoshop. For example, I find value in the ready to use dynamic element set that includes repeaters, radio buttons, check boxes, pre-loaders and other elements you can just drag and drop, instead of creating them yourself. Also, the smart guides in Indigo Studio are much more advanced than in Photoshop, and let me align elements instantly.
Last but not least, Indigo Studio allows me to create animated interactions, which Photoshop does not, so I feel it is the perfect tool for UX designers.

Question:

Aside from UX and design, do you have any other interesting hobbies?

Anwser:

In my spare time I enjoy wood carving, clay sculpturing and downhill cycling.

For more info, David can be reached via email at dima.david@me.com.

IBM Partners with Deutsche Telekom

$
0
0

The role of cloud computing in mobile app development continued to expand recently as IBM and Deutsche Telekom announced that they had joined forces to offer a new cloud-based environment for developers. In order to create this new service, the companies will combine the capabilities of IBM's app development platform Worklight with Deutsche Telekom's Developer Garden. Users will then be able to access the service in the Deutsche Telekom cloud. This new service will be available to small and medium-sized companies in Europe, and will give developers the tools they need to efficiently create apps for all mobile operating systems.

Developer Garden-powered IBM Worklight - the official moniker for the new platform - aims to offer the adaptability, speed and security that are essential for a successful mobile app marketplace.

Developers can use the cloud-based service to build apps across platforms to create hybrid apps with HTML5 or employ Android or iOS controls to build native apps. The solution also includes a geo-location capability that allows companies to provide a wide range of services via their mobile apps. Customers who choose to participate can notify retailers when they are close to a store location, so that retailers can offer promotions on same-day purchased items to customers who use the feature, and hotels can be alerted when guests who opt to use the feature are nearby, the two companies said.

According to Business Cloud News, IBM's general manager of application and integration middleware, Marie Wieck, said that the availability of the IBM technology on the Deutsche Telekom cloud will enable increased speed and ease of delivery within the platform. Business Cloud News also noted that smaller businesses will be able to make use of the cloud to increase efficiency of operations and cut costs.

Much to the delight of its future users both companies boast that security in the cloud-based system will be top notch.

"The data will be securely hosted on Deutsche Telekom's servers in Germany and thus be subject to the strict German data protection provisions, adding a layer of security and assurance to developers and enterprises working in the cloud," Deutsche Telekom's Core Telco Products Senior Vice President Rainer Deutschmann said to customers.

Meanwhile, IBM continues to prove why its own reputation for informational security is so good. Shortly after news of the partnership with Deutsche Telekom, the New York-based technology giant announced a recent inroad in a security-sensitive sector: health care. Nonprofit health IT provider Inland Northwest Health Services is now using IBM's SAN Volume Controller technology to keep more reliable electronic health records, Silicon Angle reported.

As mobile apps continue to access the personal information of their users, developers can expect cloud services to provide them with the same data security standards that healthcare professionals receive.

The role of cloud computing in mobile app development continued to expand recently as IBM and Deutsche Telekom announced that they had joined forces to offer a new cloud-based environment for developers. In order to create this new service, the companies will combine the capabilities of IBM's app development platform Worklight with Deutsche Telekom's Developer Garden. Users will then be able to access the service in the Deutsche Telekom cloud. This new service will be available to small and medium-sized companies in Europe, and will give developers the tools they need to efficiently create apps for all mobile operating systems.

Developer Garden-powered IBM Worklight - the official moniker for the new platform - aims to offer the adaptability, speed and security that are essential for a successful mobile app marketplace.

Developers can use the cloud-based service to build apps across platforms to create hybrid apps with HTML5 or employ Android or iOS controls to build native apps. The solution also includes a geo-location capability that allows companies to provide a wide range of services via their mobile apps. Customers who choose to participate can notify retailers when they are close to a store location, so that retailers can offer promotions on same-day purchased items to customers who use the feature, and hotels can be alerted when guests who opt to use the feature are nearby, the two companies said.

According to Business Cloud News, IBM's general manager of application and integration middleware, Marie Wieck, said that the availability of the IBM technology on the Deutsche Telekom cloud will enable increased speed and ease of delivery within the platform. Business Cloud News also noted that smaller businesses will be able to make use of the cloud to increase efficiency of operations and cut costs.

Much to the delight of its future users both companies boast that security in the cloud-based system will be top notch.

"The data will be securely hosted on Deutsche Telekom's servers in Germany and thus be subject to the strict German data protection provisions, adding a layer of security and assurance to developers and enterprises working in the cloud," Deutsche Telekom's Core Telco Products Senior Vice President Rainer Deutschmann said to customers.

Meanwhile, IBM continues to prove why its own reputation for informational security is so good. Shortly after news of the partnership with Deutsche Telekom, the New York-based technology giant announced a recent inroad in a security-sensitive sector: health care. Nonprofit health IT provider Inland Northwest Health Services is now using IBM's SAN Volume Controller technology to keep more reliable electronic health records, Silicon Angle reported.

As mobile apps continue to access the personal information of their users, developers can expect cloud services to provide them with the same data security standards that healthcare professionals receive.

HTML5 Resource of the Day Round-up

$
0
0

Having written quite a few of these HTML5 Resource of the Day posts, I figured it might be useful to have an aggregate post that listed all of them in the order they were published. I hope you find these helpful.

HTML5 Resource of the Day List

Contact

If you want to comment or reach out to me, the best place to do that is on Twitter @brentschooley. I can also be reached via email at bschooley@infragistics.


Ensuring Quality and Efficiency in a World of Multi-Platform Application Development

$
0
0

     As a component vendor, we are building software that satisfies the same business requirements and runs on multiple platforms. Many of our customers would like to have a chart or a grid on both WPF and Web. What happens in reality, though, is that we usually build this component for a specific platform first - like Win Forms. Then our customers like it a lot, and start asking - is this available for Web, we have to go “web” soon? Do you also have an iOS version of it? So what we can do is ask our development teams to build it for the new platform. Our grids, for example, usually require a couple of cycles to get into market with a decent number of features. Assuming there is a team (or more) of at least 3-4 engineers actively testing the grid, this means we need to double the number of engineers in order to satisfy the new platform requirements. We've been struggling with this for a while, and we have experimented with various approaches. In this blog post, I would like to outline one solution to this problem.

   Using this solution, we have automated most of our Data Chart component, and you all know that the chart is a huge beast in terms of functionality and performance requirements. And that’s just the beginning. This blog post is about writing automated tests for software developed for multiple platforms. It’s also about achieving consistency and transparency of the required features. Having a set of business scenarios upfront, it should be obvious what the feature coverage is on every platform.  One can argue that a native application creates the best UX, and there are many big companies that follow this approach. I am not going to discuss whether going native is better than doing only web & adaptive CSS. That’s a different topic. Web apps written with responsive design in mind can actually create great user experiences. But, sadly, sometimes it’s those 5 or 10 % difference which actually makes the difference between “Great” and “wow!”.

    We all know that native development comes at a big price. You need skillful engineers for every different platform. You need to support multiple IDEs, multiple build and test infrastructures and use multiple tools for everything. There is a nice diagram, courtesy of Scott Hanselman, which depicts the effort vs. user experience when it comes to building apps with different approaches:

   

It’s interesting to see how complex the multi-platform development can be. It’s not just about the number of platforms, but also about the number of devices and the number of different screen sizes. You quickly realize how many combinations you may end up with.

    We have some obvious and easy choices when it comes to multi-platform testing. For example, we can use each platform’s testing framework to write tests. That is, Selenium Web Driver for Web or UIAutomation for WPF. But this requires separate knowledge about those frameworks. It’s also hard to maintain, and you end up with a lot of technical debt to carry on. There is no single place which can serve as a reference point about the core user stories / scenarios that the app implements. There are different IDEs, different tools, and different teams using those tools. Requirements documents may become quite different if they aren’t kept up to date. And even if they are – which is not an easy thing to do – it’s just not as transparent as you’d probably like it to be. We may end up covering only 70% of our intended functionality in iOS, and at the same time have features that we haven’t even planned for in Android, without even knowing it.

    What we could do, though - and this is the main concept I would like to convey – is to abstract the test definitions by using a more high level language. We could borrow from the concepts of Behavior-Driven Development and use Cucumber, and then write our business requirements in Gherkin format. And we could easily reuse those requirements, as well as the implementation of our scenario steps on all platforms. Then we could have platform-specific drivers that implement the core high-level user interactions on every platform. Take an “Add Task” interaction which happens in a TODO Application. The Android TODO Driver will implement the “Add Task” differently than the iOS TODO Driver. Then those drivers will need to use some automation framework, specific to the platform, to execute some core platform interactions such as clicking a button, touching elements, entering text char by char, and so on. The idea of using this approach is not to cover everything - you may still have many unit tests written for the target platform. Unit tests serve a different purpose, and that's OK. We want the highest quality, that's why combining several testing approaches is great.

When I talk about high-level interactions, I usually mean an end user “transaction” that consists of multiple platform-specific actions – and when combined, those actions perform some useful business task. You can immediately see the main benefit of this approach – we end up with the same high level codebase, and use the same development environment, bundled with the cucumber implementation for that Dev environment and platform. Hmm, looks like we could also use the same test runner, and the same Continuous integration tools -;)  In this blog I am going to show how this works using Visual Studio and SpecFlow.NET, but you can apply the same approach to any IDE running on any platform – such as Eclipse & Java.

Some of you may argue that we don’t actually need to have all features implemented on all platforms. That’s a valid argument, but I would like to mention two things:

  • It’s good to write a cucumber scenario, and have it fail on platforms where it’s not implemented. That’s a good thing. It gives you transparency and you can even use the pass/fail rate in order to get some notion of feature coverage
  • Looking at the diagram below, it’s interesting that apps which were developed a couple of years ago already have almost the same functionality on all platforms that they target. Take Facebook, for example. As an end user of mobile apps, you do want the same feature present on web, Android, and iOS, don’t you? When I saw the update which gave one the ability to add pictures as part of comments, I was like “Finally!”

For those of you who are not very familiar with Cucumber/Gherkin, here are two short definitions:

Gherkin - Business Readable, Domain Specific Language that lets you describe software’s behavior without detailing how that behavior is implemented

Cucumber - a tool for running automated acceptance tests written in a behavior-driven development (BDD) style. Cucumber is written in the Ruby programming language.[6][7] Cucumber projects are available for other platforms beyond Ruby.

Sounds pretty natural to what we are trying to achieve. Here is an example of a cucumber scenario:

Scenario: Add new task

    Given The TODO Application has loaded successfully

    And The task list is empty

    When I add a new task with the text 'go to work

    Then The text of the last task in the list should be 'go to work'

Those Given/When/Then statements have different purpose – Givens are used to put the system in a specific state, Whens are used to model user interactions with the system (such as adding a new task), and Thens are used to verify the result of user interactions. Those step definitions are backed up by concrete code which calls into the step implementation. The step implementations can be written in any language. If we use a .NET implementation of cucumber, such as SpecFlow.NET, we can write them in C#.

In the context of multi-platform testing, it’s very important to write good step definitions. Can you see an issue with the following scenario?

When I click the button with ID button1

Yes, there are several obvious ones:

  • We don’t have “click” on mobile, we use touch events instead
  • Button is a platform specific UI component. We don’t  need to use a button to implement parts of a UI, on a particular platform
  • Using IDs to specify components as part of the scenario is wrong – those are implementation details.

Actually, clicking a button with some ID may be part of the implementation of the “Add Task” interaction for a desktop platform like Web/WPF. And the Add Task user interaction is described by the following cucumber scenario step:

When I add a new task with the text 'go to work

Writing cucumber tests for features that are implemented in multiple platforms actually forces you to write good Gherkin code that can be reused.

In order to have our tests do useful and real checks on the target platform app, we also need an API to talk to the target platform app. That’s the purpose of the platform drivers – each one of them depends on a native platform automation framework, which could be:

  •  Selenium Web Driver for Web
  • UIAutomation for WPF
  • The Calabash project – to automate and interact with iOS and Android apps remotely

In my demo app I have implemented four platform drivers for a simple TODO app and those cover WPF, Web, iOS and Android. The TODO App is also implemented on those four platforms.

It’s important to note that a platform driver has two main parts – the part which implements the user interactions for our app, and that’s specific to the platform. Then there is the platform automation “Bridge”, which allows us to execute clicks, touches, keyboard entry, query for components on the visual tree, and so on. For some platforms, I am using existing technologies such as UIAutomation and Selenium Web Driver. For other platforms, like Android and iOS, I’ve written my own drivers (HTTP Clients), which talk to the native instrumented app. It’s instrumented with Calabash, and Calabash is a multi-platform technology which allows you to run user interactions remotely via HTTP. That’s not documented, though. They have a console Ruby app which sends commands with HTTP, and I had to do some packet sniffing / reverse engineering in order to understand what JSON data to send and what to expect in the response. The Calabash guys promise a C# .NET client API in the future, but I just couldn't wait to experiment with this great technology.

Below is the structure of my Visual Studio solution - I have installed SpecFlow.NET via NuGet. I have two apps in the solution, which implement the TODOApp in Web (ASP.NET MVC) and WPF, respectively. Then I have four framework projects, one for each platform, and one common project. Then I also have four test projects, one for every platform. Every test project for platform X, references the framework project for the same platform X. So, when the TODOAppPlatformDriver is referenced from framework X’s DLL, even though the implementation is specific to that platform, the test projects can share the step implementations for the cucumber scenarios because the platform driver class name is the same on all platforms.

Let’s look at the implementation for one of our scenario steps:

[When(@"I add a new task with the text '(.*)'")]publicvoid WhenIAddANewTaskWithTheText(string text){
    TodoAppPlatformDriver driver =(TodoAppPlatformDriver)FeatureContext.Current["platformDriver"];
    driver.AddNewTask(text);}

This code, along with the .feature files is basically the same (it’s linked) for all test projects. We can add it to an arbitrary test project, and then add it as link in other projects.

Let’s look at some of the implementation of the AddNewTask method for a specific platform driver, such as Web:

publicvoid AddNewTask(string text){// enter text in the todo_text input boxthis.driver.FindElement(By.Id("todo_text")).SendKeys(text);// click the Add Task buttonthis.driver.FindElement(By.Id("addtask")).Click();}

You can see that we are using Selenium WebDriver API here. When you compile the solution, since all our tests use the same test runner – MSTest, you end up with a nice Test Explorer view of all your tests, separated by platform – assuming every test project contains tests for the specific platform:

The test runner can be set in a single test project’s App.config:

<?xmlversion="1.0"encoding="utf-8"?><configuration><configSections><sectionname="specFlow"type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>configSections><specFlow> For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config--><unitTestProvidername="MsTest.2010"/>specFlow>configuration>

It’s not necessary to set it in every test project’s App.config,  because our .feature file, the generated code which backs it up – AddingTasks.feature.cs, as well as the step implementation code – AddingTasksSteps.cs, is all shared. The “AddingTasks.feature.cs” is actually generated by SpecFlow.NET’s VS design time support, and it has the correct method attributes based on the selected test runner. So the AddNewTask generated method in it will have a Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute set.

The project which I have attached to this blog post contains everything you need to compile and run the tests, but you will also need the respective Android and iOS environments set up. I am attaching the XCode (iOS) as well as the Eclipse (Android) projects to this blog post. I have used the following versions of these environments:

iOS:

  • XCode 4.6.3
  • iOS 6.1

Android:

  • Eclipse ADT (Android Developer Tools) Build: v22.2.1-833290
  • Build Target – Android 4.3, API Level 18

Apart from importing those projects, you should also install Calabash-Android and Calabash-iOS:

https://github.com/calabash/calabash-android/blob/master/documentation/installation.md

https://github.com/calabash/calabash-iOS

I used latest.

When you import the project and build it & run it on the emulators, you can start the Calabash console in the following way:

Note that on Android you will need to start the test HTTP server for the target app from the console, while for iOS this isn’t necessary because it’s bundled in the app itself:

irb(main):001:0> start_test_server_in_background

nil

irb(main):002:0>

After the test server is started, you can execute queries or perform interactions directly from the console. This URL describes the query format in detail:

http://blog.lesspainful.com/2012/12/18/Android-Query/

Note that the Calabash Android and iOS Platform Drivers implement the Calabash protocol via HTTP by sending JSON in HTTP POST requests. When you run the Android and iOS tests, you can use a packet sniffer like RawCap.exe & WireShark for Windows, or HttpScoop for OS X and listen on the loopback interface and observe the packets that the test driver sends. The HTTP commands are based on the Frankly protocol, which is described here:

http://www.testingwithfrank.com/frankly.html

Additionally, the iOS version uses a number of extra endpoints for playback of interactions (/play), as well as keyboard entries (/keyboard).

Keep in mind that you cannot use WireShark on its own on Windows – you will need to use RawCap first and then open the dump in WireShark - because it doesn’t support listening to loopback interfaces. If your android environment is on a different machine, you can listen on the respective network adapter’s interface.

Here is an example of a command that performs touching a button – it is send from the Android Calabash driver to an Android app running in the emulator. I use RawCap.exe to capture the loopback traffic, since both Visual studio and my android emulator are running on the same machine. Then I open the RawCap saved dump file with WireShark and look at the HTTP POST Requests:

So you can see that the Android Calabash HTTP driver queries the button first, and then sends a touch_coordinate command by passing the center_x and center_y values as arguments. You can also see that the query command is sent to the /map endpoint, why the touch_coordinate command is sent to “/”.

You can also see that the Android HTTP instrumentation server which is running on the device is running on port 34777. This port is different for Calabash iOS, but the default one is encoded in the driver which is part of the Framework.Common project in my VS solution.

In order to change the IP/Host for the iOS and Android devices/emulators, you can modify the TodoAppPlatformDriver.cs files in the Framework.iOS and Framework.Android, respectively:

this.driver = new IOSFranklyDriver("http://10.14.1.137:37265");

The following blog posts describe in more detail the architectures of Calabash-Android and Calabash-iOS:

http://blog.lesspainful.com/2012/03/07/Calabash-iOS/

http://blog.lesspainful.com/2012/03/07/Calabash-Android/

The Calabash HTTP clients (platform protocol drivers) which I have implemented – namely, the AndroidFranklyDriver.cs and the IOSFranklyDriver.cs - have full support for querying elements, sending keyboard keys, and touching platform components like buttons.

The protocol works a bit differently for Calabash-iOS, you need to send keyboard characters to the /keyboard HTTP endpoint, and any touch events to the /play HTTP endpoint. Then if you do that, you also need an “event” value as part of your HTTP request POST data. The value of this “event” property is a base64 string which encodes the exact touch command that you are executing on the device/simulator. Here are all the currently supported commands, and their base64 strings, respectively:

https://github.com/calabash/calabash-ios/blob/master/calabash-jvm/src/resources/events/

Here is an example of a Calabash-iOS HTTP request/response to tap on a button (touch event):

URL: http://10.0.1.10:37265/play

Content-Type: application/json

Request POST data:

{

  "events": "YnBsaXN0MDCiARLVAgMEBQYHCAkOEVRUaW1lVERhdGFeV2luZG93TG9jYXRpb25YTG9jYXRpb25UVHlwZRMAADAlq7xUgk8QQAEAAAABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAICAgAAAIA/AACAPwAALEMAAH5DAECKQAAAAADSCgsMDVFYUVkjQGWAAAAAAAAjQG/AAAAAAADSCgsPECNAZYAAAAAAACNAb8AAAAAAABELudUCAwQFBhMUFRgREwAAMCWuVOtDTxBABgAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgIBAAAAgD8AAIA/AAAsQwAAfkMAAAAAAAAAANIKCxYXI0BlgAAAAAAAI0BvwAAAAAAA0goLGRojQGWAAAAAAAAjQG/AAAAAAAAACAALABYAGwAgAC8AOAA9AEYAiQCOAJAAkgCbAKQAqQCyALsAvgDJANIBFQEaASMBLAExAToAAAAAAAACAQAAAAAAAAAbAAAAAAAAAAAAAAAAAAABQw==",

  "query": "button"

}

Response:

{"results":["<UIRoundedRectButton: 0x7487840; frame = (29 50; 239 44); opaque = NO; autoresize = TM+BM; layer = >"],"outcome":"SUCCESS"}

(the “query”: “button” key/value means querying for controls of type “button”)

Here is an example of a Calabash-iOS HTTP request/response to send a keystroke to an input field – after the keyboard is opened:

URL: http://10.0.1.10:37265/keyboard

Content-Type: application/json

Request POST data:

{

  "key": "y",

  "events": "YnBsaXN0MDCiARLVAgMEBQYHCAkOEVRUaW1lVERhdGFeV2luZG93TG9jYXRpb25YTG9jYXRpb25UVHlwZRMAACxOMOM7BE8QPAEAAAABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRAICAgAAAIA/AACAPwAAAEIAgLBDAdE4ANIKCwwNUVhRWSNAQAAAAAAAACNAdhAAAAAAANIKCw8QI0BAAAAAAAAAI0B2EAAAAAAAEQu51QIDBAUGExQVGBETAAAsTjJSfK5PEDwGAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZECAgEAAACAPwAAgD8AAABCAICwQwEAdUPSCgsWFyNAQAAAAAAAACNAdhAAAAAAANIKCxkaI0BAAAAAAAAAI0B2EAAAAAAAAAgACwAWABsAIAAvADgAPQBGAIUAigCMAI4AlwCgAKUArgC3ALoAxQDOAQ0BEgEbASQBKQEyAAAAAAAAAgEAAAAAAAAAGwAAAAAAAAAAAAAAAAAAATs="

}

Response data:

{"results":["<UIKeyboardAutomatic: 0x72d0610; frame = (0 0; 320 216); opaque = NO; layer = >"],"outcome":"SUCCESS"}

The above sends the “y” character to the keyboard in an iOS app. Visually, this will mean that the “y” character is tapped in the app, in a visible keyboard. If the keyboard is not visible, the response will have a FAILED “outcome” value.

You need to keep in mind several things when compiling and running the attached zip files:

  • All projects are placed in a single, multi-platform.zip
  •  Each folder represents a project for a different platform
  • The TODOApp folder contains the iOS XCode project
  •  I’ve deleted the calabash.framework library from the XCode project, because it’s around 27 MB. If you have troubles compiling and running the project, please refer to this guide, you can run the commands and re-initialize the project (by setting it up again), so that the lib reference is added again:

https://github.com/calabash/calabash-ios => “Fast Track”

  • Note that Calabash follows a different approach with iOS7 and XCode5. The iOS7 support is actually experimental, and I suggest waiting a bit until it’s stabilized, if you really want to use iOS7. This link talks about the differences and the issues with iOS7/Calabash:

https://github.com/calabash/calabash-ios/wiki/A0-UIAutomation---instruments-problems

  •  The TODOApp folder contains the whole Visual studio solution, which contains the apps for WPF and Web, the 4 test projects, as well as the 4 framework projects; it also contains a Framework.Common project which contains the base Frankly protocol driver for the AndroidFranklyDriver and the iOSFranklyDriver
  •  You need to run Visual Studio as an Administrator, otherwise some of the automation framework & code may fail
  • The contents of the bin and obj folders in the VS sln are emptied on purpose, because they make the zip file huge. The same applies to the contents of the NuGet packages folders, you will need to add the missing assembly references either via NuGet, or by hand
  • The Android project is in the Android folder – the actual project is a subfolder called TODOApp
  • If you have any issues running / compiling the android project, please re-initialize the calabash dependencies in the following way:

https://github.com/calabash/calabash-android/wiki/Running-Calabash-Android

Now that you’ve setup everything, you can develop and run the tests from Visual studio – on 4 different platforms!

As a conclusion, I would like to sum up the advantages of this multi-platform testing approach:

  • You achieve complete reuse of both test definitions, as well as test (step) implementations
  • You and your teams are focused on business requirements
  • The multi-platform nature forces test definitions to be good (remember the example I gave you)
  • You use one IDE and all tooling has common usage -  intellisense, autocomplete, etc.
  • You use the same test runner for all your platform tests (MSTest, in my case)
  • Because you use the same test runner, you can easily use the same Continuous Integration framework/platform

Let's see how these advantages could directly translate to ROI. If developing an automated test cost $ 50, and I mean all the costs associated with the development and maintenance, and you have 4 platforms to cover and $1,000 scenario tests in total, this means your organization needs to spend roughly $ 200,000 on those tests. Now, assume that the cost of writing and maintaining a platform driver approximates $ 0, as we are adding more and more tests for our app. Then, since we are writing once, running in  one place, and maintaining once, we need to spend just $ 50,000. Now think about all the extra goodness and reuse you get from being able to easily reuse cucumber steps for your scenarios - just because they are so isolated and self-contained ... oh yeah!

I hope you have enjoyed this content – please let me know if you have any suggestions, questions or comments! If you encounter any issues with the environment setup please let me know – it can be quite overwhelming considering the mere number of different frameworks, platforms and versions involved.

Infragistics Windows Forms - November 2013 Release Notes: 12.2, 13.1, 13.2 Service Releases

$
0
0

With every release comes a set of release notes that reflects the state of resolved bugs and new additions from the previous release. You’ll find these notes useful to help determine the resolution of existing issues from a past release and as a means of determining where to test your applications when upgrading from one version to the next.

Release notes are available in both PDF and Excel formats. The PDF summarizes the changes to this release along with a listing of each item. The Excel sheet includes each change item and makes it easy for you to sort, filter and otherwise manipulate the data to your liking.

In order to download release notes, use the following links:

WinForms 2013 Volume 2 Service Release (Build 13.2.20132.1011)

PDF - Infragistics WinForms 2013 Volume 2
Excel - Infragistics WinForms 2013 Volume 2

WinForms 2013 Volume 1 Service Release (Build 13.1.20131.2089)

PDF - Infragistics WinForms 2013 Volume 1
Excel - Infragistics WinForms 2013 Volume 1

WinForms 2012 Volume 2 Service Release (Build 12.2.20122.2123)

PDF - Infragistics WinForms 2012 Volume 2
Excel - Infragistics WinForms 2012 Volume 2

 

Infragistics Windows Forms: What’s New in 13.2

$
0
0

With more than 100+ controls, Infragistics Windows Forms is the most mature, fully-featured Windows Forms product on the market. With features that cover every aspect of enterprise software development including Microsoft Office style user interfaces, high performance dashboards and reports, and full modern experiences with touch & gestures. In 13.2 we've added exciting UI patterns usually only found in a Window Store modern UI applications. With the new Radial Menu & Live Tile View control, along with full touch & gesture support across controls, developers can build touch-first modern experiences for devices like Microsoft Surface that look & feel like the most modern applications on the market today.

Radial Menu

Inspired by Microsoft OneNote MX, the Radial Menu is a new UI pattern that optimizes the experience of menu navigation & selection on a touch device. The radial menu contains a hierarchical structure of items, such as font selection or color selection that a user can interact with using touch or mouse input.   The control is designed around the concept of Tools, we provide a set of predefined Tools types, but you can create your own tools as well.  Some of the Tools we provide include what you would need to recreate something like the OneNote MX experience:

  • Button Tool

  • Color Tool

  • Numeric Tool

  • Numeric Gauge Tool

  • List Tool

  • Font Name Tool

 

 

The nice thing about this UI pattern is that it can be used for any type of touch experience.  We are shipping a showcase sample called INGear which used the Radial Menu as a data filter tool … in a touch friendly or mouse experience.

 

Here is a nice video of this experience in action.

[youtube] width="560" height="315" src="http://www.youtube.com/embed/DnWAYP4Zen4" [/youtube]

 

Live Tile View

A major player in the UX essentials of delivering a modern app experience in Windows 8 is the Live Tile of the Start Screen. The new LiveTileView enables you to emulate touch digitizer input, gesture support, animations, and multiple tile sizes & high and low DPI scaling that is delivered in the Windows 8.1 Start Screen.

Live Tiles play a key role in the Windows 8 experience - bringing relevant and important data & information to the user - and can now play the same role in Windows Forms application experience:

  • Serve as a "front door" to an application

  • Keep users connected with updated data

  • Paint a complete picture

  • Deliver personal information

  • Draw you into an experience

  • Remind you of something

  • Show what's next up

  • Notes for while you were away

  • An extension to an app

 

Features that can be highlighted in the LiveTileView home page, each one can include a screen shot:

  • Gesture support - Full support for touch digitizer input, with support for gestures such as panning, zooming, and press-and-hold.

  • High Density Displays - Support for multiple pixel densities including:

  • Low (less than 1366)

  • Normal (1366 X 768)

  • High Definition (1920 X 1080)

  • Quad XGA (2048 X 1536)

  • Predefined Template Support - Tiles come in the four Windows 8.1 size options - Small, Medium, Wide, and Large

  • Heading Support - There are four different text sizes for a tile: Block, Heading, Normal, and Small (in descending size order).

  • Badge Support - A "badge" or small informative icon can be displayed on the tile's lower right corner

  • Styling - AppStylist support is built in, as well as support for the new Windows 8 themes we are shipping in 13.2

 

Here is a cool video that demonstrates the features of the INTune showcase sample we are shipping with 13.2 so you can learn how to build a Live Tile experience yourself.

 

[youtube] width="560" height="315" src="http://www.youtube.com/embed/BaxjGrXf3ZU" [/youtube]

 

Touch Experience Across All Controls

With the continued move to tablet's and touch enabled devices, we've completed the touch story for the Windows Forms controls, so you can deliver a modern experience against any touch device that support Windows Forms.   This includes touch friendly gestures for panning and flicking, as well as support for gestures like tap, tap & drag, double tap, tap and hold. 

In 13.1, we included the UltraTouchProvider, which is a code-free way to add a touch experience to any form by expanding any interactive ‘clickable’ area of the control to a minimum of 9mm, which is the standard minimum size for a touch interaction. 

The controls we enabled with touch in 13.1 were:

  • Editors
  • Grid
  • Tabs
  • List View
  • Tree Value List

In 13.2, we finished adding touch features, which includes these controls:

  • Desktop Alert
  • DockManager
  • ExplorerBar
  • Message Box
  • Schedule controls: Day, Week, Month Views and Calendar
  • Timeline
  • GanttView
  • Office Ribbon

Here is an example of the Explorer Bar control, with the Metro Theme applied with Touch Metrics enabled.  You can see that there is plenty of room to touch groups and items on the control when touch is enabled.

 

 

Office 20103 Style with Touch

With the new Office 2013 Microsoft has introduced a new version of the Ribbon, which gives us an opportunity to deliver the same exact user experience in styling & touch as the Office 13 Ribbon. The new Ribbon style is predominantly similar to the previous versions of the Ribbon with a new color scheme, different styles and a few additional features.

Here are some of the features you’ll get with the new Ribbon style:

  • Visual styling - Flat with few borders.

  • Pin/Unpin button has been repositioned from the TabItem area to the RibbonGroup area.

  • Auto-hide mode The new Office 2013 Microsoft Ribbon also introduced a new feature allowing the user to regain precious screen real estate by hiding the entire Ribbon. We've duplicated this functionality as part of our Office 2013 experience, but also expanded the implementation to be available for our many styles of Ribbon.

  • Office 2013 BackStage fills the entire application container, it removes the rendered tab items, and adds a stationary "Back" button above the navigation area to allow the user to close the BackStage.

 

 

Miscellaneous Controls

We’ve also made some incremental updates to existing controls.  Here are some of the highlights:

  • The new UltraTreePrintDocument allows easy printing of the WinTree control.

  • Combo, ComboEditor, WinTree– You can change the delay in between keystrokes when searching these controls.

  • Documents Engine– The new PublishingProgress event returns the progress of the operation so you can update the UI accordingly.

  • UltraGrid - We have added a property to the UltraGridRow to which enables you to insert page breaks when printing the grid.

  • UltraScrollBar - UltraScrollBar now support ScrollTips (tooltips that display based on the currently value while the scrollbar thumb is dragged).

 

Summary

As you can see, this is a huge release for us.  We’ve been focused in delivering a feature set in 2013 that allows you to build modern, touch-friendly applications in Windows Forms.  If you are looking for more features, or have ideas on improving existing controls, let us know on UserVoice, it’s how we track the top requests for every platform.  And if you have any feedback on this release, or need any clarifications, feel free to email me at jasonb@infragistics.com.

Ignite UI: What’s New in jQuery, HTML5 & ASP.NET MVC in 13.2

$
0
0

IgniteUI.comIn our 13.2 release, Infragistics continues to deliver high performance enterprise class ASP.NET MVC, HTML5 & jQuery based controls that can power desktop, tablet & mobile phone applications. This release goes beyond the introduction of new controls and features. Ignite UI now features all the essential features for advanced enterprise development in HTML5 to maximize productivity and encourage best practices via popular design patterns.

Key Areas of Focus in 13.2 for Ignite UI were:

  • Enhanced Professional Look & Feel – Ignite UI already features the most advanced UI controls for HTML5 developers, providing rich interactive features in a responsive design, unparalleled performance and the ability to handle massive volumes of data. In release 13.2, Ignite UI brings developers new visual defaults and features to enhance the overall look & feel of your web sites and applications.

  • Developer Productivity– speed your development with up-front design in Indigo Studio, and then get those assets in HTML & JavaScript Ignite UI pages to kickstart your apps!   That’s right … based on an Indigo design, you can generate HTML5 & JavaScript code assets for your Ignite UI projects.

  • Modern Layouts, Responsive Web Design – with the Layout Manager, a powerful new layout control for managing the overall HTML page layout in Web applications by arranging the page elements in pre-defined (but customizable) layout patterns and the Tile Manager, a popular desktop UI pattern with a container based grid layout that allows the end user to expand, collapse & rearrange their screen, you can design dynamic and modern experiences for the browser.  The Grid control is completely responsive, allowing you to use media queries to customize the render on any device size, as well as use the new vertical render mode that allows users to page records on a mobile device.

  • Data Visualization– Ignite UI features market-leading Data Visualization controls for Business Charting, Financial Charting and Geospatial Mapping applications & dashboards.  This release includes new chart types and features, and introduces new controls like Linear Gauge, Bullet  Graph, QR Barcode, Doughnut Chart.   We’ve also done a ton of work to improve the look & feel of the charts, so the default experience is more in line with what you might expect.  Features like support for chart titles & subtitles, chart axis titles, drop shadows and gradient brushes, zoombar for financial charting, series highlighting, touch & hover interactions, startup animations, KnockoutJS support, enhanced default tooltips, and curved / customizable callout lines on the pie chart.

Features in this Release

Ignite UI Framework New Features

There are a number of new features that can be considered framework level, or non-control specific. Each of these plays an important part in the story of helping developers build modern HTML / JavaScript or ASP.NET MVC applications.

  • jQuery 2.0 Compatibility

  • Browser history support - integrating with the open source history.js library

  • Implement "fast click" functionality on touch devices for all Ignite UI components to eliminate the built-in browser delays designed for double-click.

  • TypeScript type definition files for all UI widgets are included

  • MVC5 compatibility for all controls

  • Updated Ignite UI Starter MVC Project Updates

  • Script Combiner allows more granular control over what script & CSS packages are sent to the browser

  • LESS files shipping for our CSS

  • The Control Configurator is updated to include new controls

 

Radial Gauge

Infragistics is introducing a new Radial Gauge control available on multiple platforms, including WPF, Silverlight, HTML5 & iOS.

Key Features

  • Fully Configurable Radial Scale – The Radial Gauge control lets you control the Start and End positions of the scale, major and minor tick marks, labels, color ranges and sweep direction. You can create full 360 degree scales, or half circular gauges with 180 degree scales, 90 degrees, 45 degrees or any custom value you want.

  • Fully Configurable Needle – The Radial Gauge control lets you control various attributes of the needle, including the needle color, length, point, base, and cap. The following needle shapes are built-in:

    • None

    • Rectangle

    • Triangle

    • Needle

    • Trapezoid

    • Rectangle With Bulb

    • Triangle With Bulb

    • Needle With Bulb

    • Trapezoid With Bulb

  • Fully Configurable Backing – The Radial Gauge backing can be configured to display any custom image. You can also control the transparency level of the backing, colors, shape around the gauge edges (fitted or circular), oversweep and corner radius.

  • Motion Framework Animations Support – The Radial Gauge control supports animated transitions between configuration states. The control gradually animates as it redraws changes to the needle, needle position, scale range, color range and more. You can control the speed of the animations by setting the desired Transition Duration.

Linear Gauge

The Linear Gauge provides a simple and concise view of a primary value compared against a scale and one or more comparative ranges.

Key Features

  • Fully Configurable Scale– The Linear Gauge control lets you control the Start and End positions of the scale, major and minor tick marks, labels, and color ranges.

  • Fully Configurable Range

  • Orientation– can be orientated vertically or horizontally

  • Fully Configurable Needle – The Radial Gauge control lets you control various attributes of the needle, including the needle color, length, point, base, and cap. The following needle shapes are built-in:

    • Custom

    • Rectangle

    • Triangle

    • Needle

    • Trapezoid

  • Motion Framework Animations Support – The Linear Gauge control supports animated transitions between configuration states. The control gradually animates as it redraws changes to the needle, needle position, scale range, color range and more. You can control the speed of the animations by setting the desired Transition Duration.

  • Support for tooltips– The built-in tooltips of the igLinearGauge show the value of the needle, or the values, corresponding to the different ranges respectively. They are initially styled in accordance with the default look of the control, but their look can be customized by templates.

  • Integration into Grid– Provide richer, visualizations by templating an igGrid column to contain the igLinearGauge.

BulletGraph

The igBulletGraph control is a jQuery UI control which allows for visualizing data in the form of a bullet graph. Linear by design, it provides a simple and concise view of a primary measure or measures compared against a scale and, optionally, some other measure.

The igBulletGraph control provides you with the ability to create attractive data presentations, replacing meters and gauges that are used on dashboards with simple yet straightforward and clear bar charts. A bullet graph is one of the most effective and efficient ways to present progress towards goals, good/better/best ranges, or compare multiple measurements in as little horizontal or vertical space as possible.

Key Features

  • Configurable orientation and direction – The igBulletGraph control exposes an API for setting the state of its scale’s orientation and direction, so that the look of the graph can be largely customized.

  • Configurable visual elements – Each of the visual elements of the bullet graph can be configured in several aspects, such as the performance bar, comparative marker, ranges, tick marks, scale, labels, border, background, and titles.

  • Animated transitions – The igBulletGraph control provides built-in support for animation by its TransitionDuration property. The animation effect occurs on loading the control as well as when the value of any of its properties is changed.

  • Support for tooltips– The built-in tooltips of the igBulletGraph control show the values used to create the performance bar, the target value or the values, corresponding to the different ranges respectively. They are initially styled in accordance with the default look of the control, but their look can be customized by templates.

QR Barcode

The QR Barcode control (igQRCodeBarcode) control generates QR (Quick Response) barcode images for use in your web application. The control supports the industry-standard encodings and has several options for optimizing the sizing, positioning, and readability of the generated QR barcodes. The igQRCodeBarcode control is configurable in terms of QR-code-specific settings, as well as in look-and-feel (background color, border color and thickness).

Key Features

  • Configurable Encoding Mode– The igQRCodeBarcode control is capable of encoding large numbers of characters, using compaction, depending on the types of the characters being encoded. The control can also encode data from character sets other than the default UTF-8.

  • Configurable Error Correction Level– The igQRCodeBarcode control is able to restore the encoded data if the barcode is damaged or dirty.

  • Configurable Size Version - The igQRCodeBarcode control allows for specifying the number of its modules by the selection of an appropriate size version.

  • Styling - The igQRCodeBarcode benefits from configurable background and border colors, as well as thickness.

Doughnut Chart

The Doughnut Chart – just like the Pie Chart – is primarily used to show statistics expressed in percentages. Both consist of a circular area divided into sections, where each section has an arc length proportional to its underlying data value. Both are used for representing categorical data, are most effective when there are only a few categories, and when each category makes up a relatively large percentage of the data as a whole.

The primary difference between the Pie Chart and the Doughnut Chart is that the latter has a “hollow” or “empty” center, and will typically display multiple series. A given data series is represented by a ring that is drawn around the “hole” and the data in any given ring totals 100%. These rings are displayed in a concentric pattern where each ring representing a data series. The sections that make up each ring may differ in size or each section within a ring may be the same size.

The Doughnut Chart control was introduced in Ignite UI release 13.1 as a CTP control and now ships as a final RTM control in release 13.2.

Key Features

  • Multiple Ring Series & Data-Binding – The Doughnut Chart supports one or more rings surrounding a hollow or empty center. The center may either be a “blank circle” or may contain a label. The center does not typically represent data. Each ring can either represent a separate data series that you data-bind via the dataSource option on each ring.

  • Configurable Inner Radius – Developers can obtain the center coordinates and radius of the the inner circle of the Doughnut Chart position their canvas and other HTML elements or display any image of their choice.

  • Slice / Section Labeling– The Doughnut Chart allows developers to control how each slice or section is labeled. Options are available to automatically select how the labels are displayed inside or outside of the chart, including:

    • No labels

    • Labels displayed at the center inside of each section / slice

    • Labels displayed around the edges inside of each section / slice

    • Labels displayed outside of each section / slice, with a configurable LabelExtent distance

    • A BestFit method which automatically chooses whether each label should be displayed inside or outside the chart

  • Slice Selection & Slice Explosion– Allow users to select slices and change the color of selected slices. Exploded slices are disconnected and drawn at a distance from the origin. This distance is controlled via a configurable property. Slices can be selected or exploded either programmatically or using touch & mouse gestures.

  • “Others” Category– The underlying data for any Doughnut Chart can often contains small value items, too numerous to display in a significant manner via separate slices. For such occasions, the “Others” category allows for automatic aggregation of several data values into a single slice. Developers can set the threshold to separate which values get their own slice, and which values will get rolled under “Others”.

  • Styling & Themes– The look & feel of the Doughnut Chart is completely customizable, allowing you to style it to your app design and your brand. Simple properties are exposed to easily style the outlines and brush fill colors of the pie slices, allowing you to use solid colors as well as gradients. Alternatively you can use chart themes to give your pie charts and other charts a consistent and color-coordinated look and feel. Simply set the theme property to one of the predefined themes or create your own.

  • Labeling Callout Lines with Curves– This feature adds two types of curves to the straight lines used for the callout lines in the igDoughnutChart and igPieChart. You may choose whether to use a straight line or one of the curves, change the line style and control the spacing between the label and the end of the line.

Data Chart

The Ignite UI jQuery Data Chart is already the most powerful charting control for HTML5 developers. Release 13.2 brings even more goodness to Web and Hybrid app developers with a brand new look & feel, support for gradients, a new range selector, support for the Knockout JavaScript library and more. Release 13.2 also sees the introduction of new features in the jQuery Data Chart to improve the experience as to how users interact with their data in their charts – using the mouse or touch gestures.

 

Key Features

  • New Look & Feel – The Ignite UIigDataChart is already the most advanced HTML5 charting control for developers, providing rich interactive features and over 40 chart types, unparalleled performance and the ability to handle hundres of thousands or even millions of data points. In release 13.2, Ignite UI brings a massive upgrade to the igDataChart visuals and defaults, thus greatly enhancing the overall look & feel of your data visualization web sites and dashboard applications. The visual enhancements include new features, new styles and changes to the defaults in the following areas:

    • Axis Titles

    • Gradients

    • Drop shadows

    • Label Margins

    • Transparencies

    • Gridlines & Aligment

    • Axis Tickmarks

  • Support for Chart Title – The title and subtitle feature of the igDataChart control allows you to add information to the top section of the chart control. When adding a title and/or subtitle to the chart control, the content of the chart is automatically resized to allow for the title and/or subtitle information.

  • Axis Titles– The axis title feature of the igDataChart control allows you to add contextual information to the x-axis and y-axis of the xamDataChart control. You can customize the axis title by specifying properties of the TitleSettings object such as the angle, font size and position.

  • Support for Gradients – igDataChart now support the use of gradient ranges of colors in multiple chart types, including bar, column, area, area spline, waterfall, range area and others.

  • Drop Shadows – igDataChart now supports drop shadows to enhance the visuals of individual series. Developers can control various properties such as the shadow depth/offset/direction, color, and blur.

  • Series Highlighting– This feature allows you to highlight an entire series or individual items within the series. For example, highlights the entire line in a series such as the LineSeries as it is all one shape; however, highlights can be applied to each individual column in a series such as ColumnSeries. Individual markers can be highlighted in all supported series.

The series highlighting feature is supported for the following series types:

  • Category Series

  • Range Category Series

  • Financial Series

  • Hover & Touch Interactions– The Data Chart control supports new interactions you can activate when users hover over chart data series using the mouse or touch gestures. These hover interactions can display crosshairs or bar/column highlights that can snap to actual data points. You can also attach tooltips to these hover interactions and lock them on crosshairs or to axes.Startup Animations– This feature allows you to animate the series as it loads a new data source. The available animation differs depending on the type of series involved. For example, the ColumnSeries animates by rising from the x-axis, a LineSeries animates by drawing from the y-axis. Refer to the following sample to visually see how the different series are animated, .

    • Animated transitions are enabled by setting the IsTransitionInEnabled property to “True”.

    • By default, animated transitions are disabled.

    • Animated transitions can be configured in terms of transition type, speed of the individual data points relative to each other.

  • ZoomBar / Range Selector – The new ZoomBar feature, also known as a Range Selector or Time Navigator, allows developers to attach a second chart window to the data chart to navigate the X-axis range of the chart. Often used to select a date range in financial charting, the ZoomBar is a great tool to visualize a slice of data in a chart without losing sight of the big picture.

  • KnockoutJS Support - Support for the Knockout library in the igDataChart control is intended to make it easier for developers to use the Knockout library and its declarative syntax to instantiate and configure chart controls with a clean underlying data model using the popular MVVM pattern.

  • Performance Optimization – At Infragistics, we always strives to achieve better performance in our controls. The Ignite UI Chart is a real HTML5 work horse capable of displaying millions of data points in real-time with refresh rates measured in a few milliseconds. When we do identify bottle necks or fringe scenarios where performance can be improved, we introduce new techniques to optimize performance. Furthermore, when adding new features and making visual changes, we insure that performance not be compromised. Release 13.2 of igDataChart does feature improved performance compared to prior releases thanks to some of those optimization techniques.

  • Default Tooltips– by setting the showTooltip property to true, a tooltip is displayed which displays all the information relevant to the particular series item (series title, data values, axis values etc.) and is styled to match the series' style.

Pie Chart

Labeling Callout Lines with Curves– This feature adds two types of curves to the straight lines used for the callout lines in the igDoughnutChart and igPieChart. You may choose whether to use a straight line or one of the curves, change the line style and control the spacing between the label and the end of the line.

Layout Manager

TheLayout Manager is a layout control for managing the overall HTML page layout in Web applications by arranging the page elements in pre-defined (but customizable) layout patterns (called “layouts”).

The igLayoutManager achieves this by positioning the containers in the page according to the selected layout. The control can be used for organizing web pages, as well as single-page applications.

The igLayoutManager is a jQuery UI widget which does not have any UI on its own. The layouts can be used for laying out web pages, as well as single page applications. All of the layout modes that are implemented are responsive and fluid by design, meaning the layout adjusts based on the resize events on the browser.

The Layout Manager was introduced in Ignite UI release 2013.1 as a CTP feature, and now ships as a final RTM control in release 2013.2.

Key Features

  • Productivity and Ease of Use - The igLayoutManageris an easy-to-use and efficient alternative to using tables or manually creating a layout through

    elements. Developers can achieve the most popular web page arrangements, in countless variations, in just a fraction of the time that the standard approach would require.
  • Layout Customization– Design Flow, Border, Vertical or Column layouts based on the resizing algorithm that suites your needs.

  • Interactive Grid – Create an absolute positioned layout that can be interactively minimized & maximized in a non-visual Tile Manager like UI.

  • Tile Manager

    The web has evolved into richer experiences for end users. No longer is a static, even responsive UI enough for high-end user experiences. Controls like the new Tile Manager deliver on this new type of richness that can be delivered in HTML pages. Based on our new LayoutManager control, the TileManager gives a touch friendly, tablet-ready, interactive UI that allows the end user to maximize, minimize and move widgets on the page. This is enabled by giving developers the ability to create a grid based layout in HTML that allows widgets to be hosted in defined column spans & row spans.

    The Tile Manager was introduced in Ignite UI release 2013.1 as a CTP feature, and now ships as a final RTM control in release 2013.2.

    Key Features

    • Tile Layout - Arrange tiles explicitly as regimented columns and rows like in a Grid panel, even span multiple columns and rows or display them as a data-bound Items Control that automatically creates a series of tiles.

    • State-Based Customization - Define different states and size to your tiles and have them automatically applied when the state changes between maximized and minimized.

    Grid

    • Column Fixing– CTP to RTM – we’ve expanded the features of column fixing during the CTP period to include more interactive features that are supported by the grid.

      • Multi-column headers support
      • Summaries support

    • Resizing support
    • Updating support
    • Percentage column width support
    • Filter by Date
    • CellMerging support
    • FeatureChooser support
    • RowSelectors support
      • Load on Demand while Scrolling CTP – allows the developer to set the mode of how data is dynamically loaded into the grid as a user scrolls or by clicking a Load More button.

      • jsRender Integration– We’ve opened up templating in the igGrid to include support for the popular open source library jsRender.

      • Responsive Design Vertical Column Rendering– the responsive igGrid can automatically render columns vertically when set to a phone screen size.

      • igGrid / igHieracrhicalGrid Feature Chooser - Re-design appearance to make this the ultimate touch-friendly grid experience.

      Browser’s History Integration

      Manipulating the browser’s history is a highly required task when a developer creates Single-Page Application and wants a complete user experience. IgniteUI controls - their API and events, allows the developer to easily integrate, popular browser history frameworks, like history.js, with our controls. What the IgniteUI controls propose in order to facilitate history.js integration is:

      • Rich event’s context that allows the developer to get the current control state information and add it to the history of the browser.

      • Serialize the current state – either in the browser’s URL or save the serialized data in a file.

      • Control methods and options that allow recovering control state, when the user navigates back and forward in the browser.

      • Common design principles, among all IgniteUI controls, which allows creating better structure of our application design and code.

       

      Geospatial Map

      High Density Scatter Series - Use the igMap control’s geographicHighDensityScatterSeries series to bind and show scatter data ranging from hundreds to millions of data points requiring exceedingly little loading time. Because there are so many data points, the series displays the scatter data as tiny dots as opposed to full size markers, and displays

      New Samples Experience

      We’ve completely redesigned the sample experience for 13.2. With a complete rewritten sample browser, more helpful learning tools, and a beautiful responsive layout, you get up to speed faster using the Ignite UI controls.   Everything you need is installed with the product, or at http://www.igniteui.com.

      • Responsive Web Design to view samples on any device

      • Open in JS Fiddle for any sample

      • Integrated Help Links

      • Sample Navigation with Dynamic Loading

      • New Getting Started Page

      • Updated Showcase Sample - Healthcare Dashboard

      • Updated Showcase Sample - Personal Finance

      • New Showcase Sample - Auto Sales Dashboard

      • New Showcase Sample - Infragistics Finance

       

       

       

      Summary

      Hopefully you get the idea that we’ve done a ton of great stuff that will help you build stunning user experiences easier and faster.  Our focus areas included work on controls that have an enhanced professional look & feel, features that will super charge your developer productivity, the ability to build responsive apps with modern layouts, and a continued focus on data visualization new controls & feature enhancements. 

      To start seeing these new features in action, go to http://igniteui.com, play with the new samples, download the showcase apps I mentioned, and download the new 13.2 bits today!

      If you have any questions or comments, feel free to email me at jasonb@infragistics.com, and of course keep suggesting new features and enhancements at the user voice site.

    Releasing Update 2 for Indigo Studio (v2)

    Next: What’s new in Infragistics WPF and Silverlight in 13.2
    Previous: Ignite UI: What’s New in jQuery, HTML5 & ASP.NET MVC in 13.2
    $
    0
    0

    Today we are releasing an update to Indigo studio, which is bumps it up to version 2 update 2. Like always, each update adds new features and bug fixes aimed at making the Indigo Studio work harder for you.

    With this update we are releasing the following highlight features:

    • iOS 7 pack!
    • Auto recover files
    • Export of HTML code assets (BETA)

    For our Infragistics ULTIMATE customers, this coincides with the release of Infragistics ULTIMATE 13.2.

    iOS 7 Pack

    It's not been long since we released the iOS pack. And then, Apple shipped iOS 7. So naturally, almost all of you have been asking when will Indigo Studio be offering the iOS 7 pack. Well, today!

    iOS 6 vs. iOS7Fig 1. Comparing iOS 7 pack with iOS 6

    iOS 7 pack/style is mostly similar to iOS 6 in terms of functionality, but has a new visual design language. And while you could restyle the iOS 6 pack to get a similar look and feel, we realize this can be tedious. Moreover, some styles are difficult to achieve. You don't have to worry about getting the right iOS 7 look and feel. We took care of it for you!

    How to use the iOS 7 pack after you update? Simple. Fire up your screen designer and choose iPhone or iPad viewport, and Indigo automatically selects the right toolbox for you!

    Auto Recover Files

    The thing we hate most is when our users lose design work because Indigo Studio quit suddenly; before you had a chance to save. Our apologies! Some of it is just the nature of software, and wires do get crossed. Hopefully, no more!

    With this update, if for some reason Indigo quits, next time you restart the application, you will see the following auto-recover dialog:

    Fig 2. The new auto-recover dialog in Indigo Studio

    This feature allows you to review the recovered changes, and then you could either save or discard the changes. Most of you may never see this dialog, but if you are curious about the workflow, make some changes to your design, and force quit Indigo Studio :D.

    Naturally, we hope that you never have to see this dialog! If you do, please send us a note so that we can diagnose what happened.

    Exporting HTML Code Assets (BETA)

    We are also introducing a BETA feature which allows anyone viewing a prototype to export HTML code assets based on what's being shown in the browser.

    This feature should really appeal to our Infragistics ULTIMATE customers! Assume someone designed a screen using controls from the essentials toolbox, and they included all the usual suspects - Grid, Chart, Map, Dropdowns etc. They share the prototype with you. To get code assets, simple look for the code export option in the prototype toolbar, and just like that you can view the HTML code. 

    Fig 3. View HTML Code Assets

    But this goes a step farther if you are already using Ignite UI, our jQuery/HTML 5 controls. When you copy and paste this code in to your HTML editor, you will find that all the simulated controls in the prototype have been replaced with actual IGNITE UI controls! This can give you a running start. That is, you can add features to any of the controls to take it to the next level.

    We also shipped a new samples/demo for Ignite UI. If you are looking to add features to the GRID, for example, simply find the sample, and copy-paste the feature declarations. You can see more on how this done here:

    Watch video on Ignite UI/jQuery & HTML 5 controls

    To use this feature in your prototype, simply allow export of code assets when sharing a prototype. We kept this optional so that you have control over what the user can see or do. Sometimes exporting code assets is highly relevant, and at other times not so much.

    Fig 4. Enabling export of HTML code assets when sharing prototype

    Please bear in mind that this is a BETA feature, and we are looking to improve this based on your feedback. Please reach out to us at indigo AT infragistics.com with your thoughts.

    Other Capabilities We Added

    • You can now decide whether to show annotations or highlight interactive elements when the user views the prototype 
    • Indigo Studio remembers the folder path which you used when sharing a prototype to a folder (e.g., Dropbox Public Folder)
    • When using icons, Indigo Studio will remember the last icon-group used. For example, if you used an icon from the "toolbar" category, the next time you launch the icon picker, the "toolbar" category is automatically selected.

    How to Get This update?

    Here's how to update the version of Indigo Studio installed on your machine:

    • If you have the option to automatically check for updates on startup checked, you should see a dialog box pop up when you launch Indigo. Simply click update, and Indigo Studio will do the rest. This is the easier approach.
    • If for some reason you chose not to automatically check for updates, go to MENU > HELP & ABOUT and use the "CHECK FOR UPDATES" option.

    Fig 5. Checking for updates in Indigo Studio

    Download Indigo Studio or Contact Us for Support

    Don't have Indigo Studio? Download a free 30-day trial which will let you try all of the prototyping goodness. Download Indigo Studio

    Looking to suggest improvements and new ideas for Indigo Studio? Submit a new idea

    For those who have contacted Indigo Studio Support team already know that we are committed to get you up and running. Thank you for all the complements you have been sharing about our support team and the product. If for some reason you are having trouble with Indigo Studio, check out our help topics, forums or contact support. Get Support

    Follow us on Twitter @indigodesigned

    What’s new in Infragistics WPF and Silverlight in 13.2

    Next: What’s New in Windows UI 13.2?
    Previous: Releasing Update 2 for Indigo Studio (v2)
    $
    0
    0

    Shhhh… Do you hear that?  That’s the sound of another mind blowing, face melting, feature packed, Chuck Norris* approved release of Infragistics WPF and Silverlight controls.  That’s right kiddies, this 13.2 release brings a number of new controls, new features, new themes, new styles, and much needed updates to an already industry leading WPF and Silverlight control suite.  Let’s stop wasting time and get to what’s new!

    XamRichTextEditor

    You’ve been asking, we’ve been listening, and now your wait is over.  I am excited to announce our brand new xamRichTextEditor control, which is a highly customizable rich text editing control that provides functionality modeled after the features and behavior of Microsoft Word.  So imagine taking Microsoft Word, removing all the crap you don’t care about or need, and then making a control out of it.  Well, that’s exactly what we did.  Even though this is a v1 release, it is packed with features.

    Formatting Options

    What formatting options do we have?  More like, what formatting options don’t we have!  The XamRichTextEditor has support for a number of text formatting options; such as font styles (bold, italic, underline, strikethrough), font name, font size, superscript and subscript, foreground and background colors, paragraph alignment (left, center, right, justify) and indention, as well as multi-level bulleted and numbered lists.

    xamRichTextEditor formatting options

    Not happy with the built in bullet and numbered lists options?  Why don’t you use your own?  You can easily create custom lists to meet your application requirements. You don’t need to settle for the default options.

    xamRichTextEditor custom lists

    Image Support

    What about image support?  Well, we got that too.  The xamRichTextEditor not only has support for inserting and displaying images, but you can even flip the image horizontally or vertically, crop it, set margins, resize it, and even rotate it.

    xamRichTextEditor image support

    Table Support

    You need tables?  Yeah, we got tables!  If you want, you can even have tables, inside of tables, insides of tables.  That’s a lot of tables.

    xamRichTextEditor table support

    MVVM Support

    What’s that you say?  What about MVVM support?  Don’t you worry, we have your MVVM needs covered.  You can easily data bind your rich text from a property in your ViewModel to the xamRichTextEditor by using one of the DocumentAdapters we have available.  Choose from RTF, plain text, and DOCX.  Don’t think you’re limited to just one DocumentAdapter per xamRichTextEditor control.  Feel free to data bind to multiple formats using all three DocumentAdapers on a single xamRichTextEditor instance.  Not only do we provide data binding to VewModels, but we also provide built-in support for over 34 commands that you can data bind to your buttons to apply many of the formatting options to the target xamRichTextEditor control’s content.

    xamRichTextEditor MVVMsupport

    And More…

    We even have a number of great editor customizations such as view splitting, zooming, capability to show hidden symbols, control over the caret color, control over the text update mode such as insert or overwrite, and more.  Need to export the content?  No problem!  The xamRichTextEditor supports importing and exporting to/from RTF, DOCX, and plain text formats. We also provide an extensible API that allows you to provide support for other custom formats.

    Alight Brian, but what about hyperlinks, undo and redo, multiple selection, tab stops, find and replace, clipboard support, and drop caps? Yes, yes, yes, yes, yes, yes, and YES!  It has all of those features and more.  As you can see, this control is packed with features.  Don’t even get me going on the xamRichTextEditor’s performance.  I challenge you to find a WPF and Silverlight rich text control with better performance!

    The xamRichTextEditor is provided in both WPF and Silverlight versions with an API that is common across both platforms, enabling you to incorporate all of these great rich text editing capabilities into your cross platform applications. 

    XamBulletGraph

    Our next brand new control to make its way into our WPF and Silverlight offering is the highly requested xamBulletGraph.  Linear by design, it provides a simple and concise view of a primary measure, or measures, compared against a scale and, optionally, some other measure.  The xamBulletGraph control provides you with the ability to create attractive data presentations, replacing meters and gauges that are used on dashboards, with simple, yet straightforward and clear bar charts. A bullet graph is one of the most effective and efficient ways to present progress towards goals, good/better/best ranges, or compare multiple measurements in as little horizontal or vertical space as possible.

    xamBulletGraph

    Need your bullet graph to display vertically?  No problem, the xamBulletGraph has configuration options to orient it either horizontal or vertical.  Need control over the visual elements of the xamBulletGraph?  We got you covered!  You have complete control over the performance bar, comparative marker, ranges, tick marks, scale, labels, border, background, titles, and more.  The xamBulletGraph has all the feature you would expect in a bullet graph control. 

    XamLinearGauge

    Now, you may be asking yourself, “don’t you already have a xamLinearGauge control”, and you are absolutely correct.  Let me introduce you to the brand new version of our xamLinearGauge.  This is a complete rewrite from the ground up.  It has all the bells and whistle of the old version, but takes advantages of all of our lessons learned while writing the old one.  We have improved the control API, usability, stability, and performance, as well as added new features and capabilities.

    xamLinearGauge

    Change various attributes of the needle, including the needle color, length, shape. Use one of the predefined shapes – rectangle, triangle, needle, and trapezoid or create one of your own.

    xamLinearGauge customized needle

    You have complete control over scale, including the start and end points, major and minor tick marks, labels, and color ranges.  You can change its’ orientation from horizontal to vertical, as well as take advantage customized tooltips.  With support for the Motion Framework, you can animate transitions between different configuration states and set the speed for those transitions.

    This new xamLinearGauge will ultimately replace our previously released version.  That means, from now on, you will want to use this new xamLinearGauges, and if you’re upgrading, you will want to start switching all the old linear gauges to use this new one.    The new xamLinearGauge API is not backwards compatible with the legacy linear gauge.

    XamRadialGauge

    Yup, that’s right.  We have written a brand new version of the xamRadialGauge control, which replaces the older version. 

    You control the Start and End positions of the scale, major and minor tick marks, labels, color ranges and sweep direction. You can create full 360 degree scales, or half circular gauges with 180 degree scales, 90 degrees, 45 degrees or any custom value you want.

    xamRadialGauge

    Feel free to customize various attributes of the needle, including the needle color, length, point, base, and cap to fit your application needs. The following needle shapes are built-in; None, Rectangle, Triangle, Needle, Trapezoid, Rectangle With Bulb, Triangle With Bulb, Needle With Bulb, and Trapezoid With Bulb.

    xamRadialGauge custom needle

    The xamRadialGauge control also has Motion Framework support built right into the control.  You can easily animate transitions between different configuration states. The control gradually animates as it redraws changes to the needle, needle position, scale range, color range and more. You can control the speed of the animations by setting the desired Transition Duration.

    xamRadialGauge animated transitions

    Same story here.  This new xamRadialGauge replaces the existing xamRadialGauge that was previously released.  The APIs are not compatible, so you should start using this new xamRadialGauge, and migrating your existing radial gauges over to this new version.

    XamDataChart Updates

    We heard you loud and clear!  We gave our industry leading xamDataChart control some much needed love as well.  The xamDataChart is a real work horse, capable of displaying millions of data points in real-time with refresh rates measured in just a few milliseconds, and we spent a lot of time implementing a little “fit, finish, and polish” to our xamDataChart to make it even more feature rich and visual stunning.

    Chart Title and Subtitle

    The title and subtitle feature of the xamDataChart control allows you to add information to the top section of the chart control. When adding a title and/or subtitle to the chart control, the content of the chart is automatically resized to allow for the title and/or subtitle information.

    xamDataChart chart titles and subtitles

    Axis Titles

    The axis title feature of the xamDataChart control allows you to add contextual information to the x-axis and y-axis of the xamDataChart control.  You can customize the axis title by specifying properties of the TitleSettings object such as the angle, font size and position.

    image

    Series Highlighting

    This feature allows you to highlight an entire series or individual items within the series.  For example, highlights the entire line in a series such as the LineSeries as it is all one shape; however, highlights can be applied to each individual column in a series such as ColumnSeries.  Individual markers can be highlighted in all supported series.

    xamDataChart series highlighting

    Drop Shadows

    The xamDataChart now supports drop shadows to enhance the visuals of individual series.  Developers can control various properties such as the shadow depth/offset/direction, color, and blur.

    xamDataChart drop shadows

    New Default Style

    We heard a lot of feedback regarding the xamDataChart’s default look and feel when dragging it from the Visual Studio toolbox onto the design surface, and we made sure to improve your experience.  You no longer have to spend hours setting properties, modify a control template, or creating new styles altogether.  We spent a lot of time creating a new default style to make the xamDataChart kick you in the eyeballs with visual awesomeness.  As of now, we are shipping it as a separate style that you can apply to your application.  In a future release, and after we gather some feedback on our changes, we will officially make it the new default style, and you will never again see those old blue and gray scale colors.  So if you like what we’ve done, you have to let us know!

    xamDataChart new default style

    And More…

    We added a lot of other great features and improvements such as startup animations, nicely styled default tooltips, performance improvements, and more.  There are so many xamDataChart features I could talk about, that a single blog post can’t do it justice.

    XamGeographicMap Updates

    We updated our high performance xamGeographicMap control to include a new High Density Geographic Scatter Series.  A High Density Geographic Scatter Series can be used to show millions of data points without sacrificing performance. The map plot area with more densely populated data points are represented by condensed color pixels, and loosely distributed data points are represented by pixels of another color.  Options are available to control the palette of colors used and to change the min/max heat properties of the series in order to adjust how heat colors are mapped.

    xamGeographicMap high density scatter series

    XamPieChart and XamDoughnutChart Updates

    We made a nice improvement to both our xamPieChart and our xamDoughnutChart which allows you to add curves to your labeling callout lines.  You can now add two types of curves to the straight lines used for the callout lines in the xamDoughnutChart and xamPieChart. You may choose whether to use a straight line or one of the curves, change the line style and control the spacing between the label and the end of the line.

    xamPieChart callout lines with curves

    New Metro Dark Theme

    Our popular Metro theme just got a lot better. The Metro theme, which is a clean, modern, and touch friendly theme inspired by Microsoft’s Design Style has just received a new Dark version. The Dark version helps to reduce eye string that can happen when staring at screens for many hours with lighter themes.  Honestly, it just looks cool!

    Metro Dark Theme

    Themes for Microsoft Controls

    The IG, Offfice 2010, and Metro themes now have support for over 19 standard Microsoft WPF and Silverlight controls.  Your application will no longer look like a Frankenstein of different styles.  Now, your application’s UI will seamlessly integrate with the full range of Infragistics WPF and Silverlight controls.

    IG Theme

    Microsoft controls theming support - IG Theme

    Metro Light and Dark Themes

    Microsoft controls theming support - Metro Light Theme

    Microsoft controls theming support - Metro Dark Theme

    Office 2010 Blue Theme

    Microsoft controls theming support - Office 2010 Blue Theme

    Radial Menu (CTP)

    Even though this release was already packed with a ton of great controls and features, we managed to squeeze in one more new control.  Inspired by the Microsoft OneNote radial menu, the xamRadialMenu provides a circular menu that orients the commands around the user, rather than requiring the user to negotiate a nested hierarchy of drop downs. Most commonly used as a context menu, the xamRadialMenu allows you to drill down into related sub-menu items with the ability to navigate back to the main level menu item. Although the xamRadialMenu is optimized for touch, it works just as well for mouse and keyboard interactions.

    Although this is being released as a CTP control, it is package with functionality.  It’s has configuration options for setting the number of wedges, rotation, size, and more.  It has a number of built in tools such as a radio button, color well, numeric items and gauges, as well as a list tool.  With support for recent items, tooltips, key tips, keyboard navigation, MVVM support, this control has everything you need to build your own touch based applications.

    xamRadialMenu - CTP

    Let’s Wrap This Baby Up!

    This release of Infragistics WPF and Silverlight 13.2 is packed full of new controls, new features, new themes, new styles, and much needed updates.  This is a massive release!  I couldn’t even cover every new feature.  There is just way too many of them.  I hope you are as excited about this release as I am.  We worked hard to bring you the best controls available, and we continue to make investments into the controls you need the most.

    As you have probably noticed, things are changing at Infragistics, and your voice is louder than ever.  If you have ideas about new features we should bring to our controls, important issues we need to fix, or even brand new controls you’d like us to introduce, please let us know by posting them on our Product Ideas website.  Follow and engage with us on Twitter via @infragistics. You can also follow and contact me directly on Twitter at @brianlagunas. Also make sure to connect with our various teams via our Community Forms where you can interact with Infragistics engineers and other customers.

    If you are not using our WPF or Silverlight controls yet, remember that a free evaluation download is only a click away.

    Lastly, when you do build something cool with our controls, please make sure to let us know.

    *Chuck Norris is not affiliated with Infragistics and did not officially approve this release.  This was simply a reference to how awesome this release is.

    What’s New in Windows UI 13.2?

    Next: Exciting Changes at Infragistics - 13.2 Release!
    Previous: What’s new in Infragistics WPF and Silverlight in 13.2
    $
    0
    0

    Roughly 7 months ago, we announced the release of a brand new product from Infragistics for Windows 8 development.  Now, it is time for another update to the Infragistics Windows UI control toolset with the release of 13.2.  In our first release of Windows UI 13.1 back in April, we had put so much awesomeness into a single release, that we had to leave some great features out of the controls and had to leave them as a CTP.  So, most of our 13.2 release is all about finishing what we started in 13.1.  This means giving our xamGrid, Persistence Framework, and Excel Framework some much needed love.  We are also throwing in a new control in the form of a CTP.  Enough of the intro stuff, let’s see what we have been working on.

    XamGrid

    We have spent a lot of time in 13.2 getting the xamGrid just right for Windows 8.  Actually, this is where we spent the majority of our time.  If you have been using the xamGrid since it’s initial release, then you already know that the xamGrid control is a hierarchical data grid control designed to handle large amounts of data. With numerous column features, editors, and capabilities, the xamGrid is the most feature rich and functional data grid available.  It provides support for a true hierarchical data source to the n-level, allowing you to display complex business data with master/detail data relationships and different column layouts at each level. With support for paging and deferred scrolling, the xamGrid handles large data sets with no problem. Besides support for hierarchical data, you can also create n-level groupings on your data. Grouping (GroupBy) in combination with our intuitive filtering capabilities, allows you to shape your data to fit your needs with no compromises.

    xamGrid hierarchy

    With the ability to define as many columns as you want, the xamGrid provides the most column options available in any grid. The xamGrid supports column moving, resizing, grouping (not to be confused with data grouping, aka GroupBy), column fixing (pinning), and even provides your end-users a column chooser all with the touch of a finger.

    xamGrid Colum Grouping

    The xamGrid comes with the largest selection of editors on the market. Built-in editors include a CheckBox column, ComboBox column, DateTime column, Hyperlink column, Image column, and a Text column. Need more than that? No problem, the xamGrid also provides you with Template and Unbound columns to fit any scenario.

    xamGrid Editors

    The xamGrid has been optimized for touch enabling even the most complex actions with the touch of a finger. New touch friendly selection grippers have been added to enable the selection of multiple cells with a simple drag operation. A new touch optimized column menu had been added, giving you access to common column operations such as sorting, group by, summaries, column pinning, access to the column chooser, and more, all with a simple tap gesture.

    xamGrid touch optimizations 

    xamGrid touch selection

    From data annotation support, to summaries, to clipboard support, to exporting to excel, and much more; the xamGrid is packed with features making it the most feature rich and functional data grid available for Windows 8 development.

    Persistence Framework

    With the Persistence Framework, you can persist control settings from any dependency object (including non-Infragistics controls) using Infragistics’ Control Persistence Framework to manage saving and loading the settings you want persisted to any external source. This framework makes it very easy for you to give your end-users the ability to save off their preferences and the layout of your application’s user interface down to the most detailed settings - such as which grid columns are fixes - and then re-load the same layout when they come back again.

    Persistence Framwork sample code

    Excel Framework

    Using the Infragistics Excel Framework allows you to work with spreadsheet data using familiar Microsoft Excel spreadsheet objects like Workbooks, Worksheets, Cells, Formulas and many more. The Excel Library makes it easy for you to represent the data of your application in an Excel spreadsheet as well as transfer data from Excel into your application.  The best part about the Excel Framework is that it is a simple class library that runs completely independent of Microsoft Excel.  That means you don’t need to have Excel installed on the client machine.

    Excel Framwork sample code

    The following is a list of the supported versions of Excel.

    • Microsoft Excel 97
    • Microsoft Excel 2000
    • Microsoft Excel 2002
    • Microsoft Excel 2003
    • Microsoft Excel 2007
    • Microsoft Excel 2010

    XamRadialMenu (CTP)

    Now, for the newest control to join the Windows UI control toolset.  The new xamRadialMenu!  Inspired by the Microsoft OneNote radial menu, the xamRadialMenu provides a circular menu that orients the commands around the user, rather than requiring the user to negotiate a nested hierarchy of drop downs. Most commonly used as a context menu, the xamRadialMenu allows you to drill down into related sub-menu items with the ability to navigate back to the main level menu item. Although the xamRadialMenu is optimized for touch, it works just as well for mouse and keyboard interactions.

    xamRadialMenu examplexamRadialMenu color wheel

    As you can probably tell from the screenshots, this thing is packed with features.  It does just about everything the Microsoft OneNote Radial Menu does, but better.  I’ll cover this control in more detail in a later post.

    That’s It

    If you are not using our Windows UI controls yet, remember that a free evaluation download is only a click away.

    If you have ideas about new features we should bring to our controls, important issues we need to fix, or even brand new controls you’d like us to introduce, please let us know by posting them on our Product Ideas website.  Follow and engage with us on Twitter via @infragistics. You can also follow and contact me directly on Twitter at @brianlagunas. Also make sure to connect with our various teams via our Community Forms where you can interact with Infragistics engineers and other customers.

    Lastly, when you do build something cool with our controls, please make sure to let us know.


    Exciting Changes at Infragistics - 13.2 Release!

    Next: Adding Data to the IGChartView at runtime (Xamarin.iOS / Objective C)
    Previous: What’s New in Windows UI 13.2?
    $
    0
    0

    Exciting Changes at Infragistics

    Wow, we’ve been busy over here. In 13.2 we made lots of changes: we transformed our brands, updated our products and their features, redesigned our website, and updated our pricing structure – all for the better! At Infragistics, we’re proud to be the company that helps you deliver stunning applications easily and we want everything we do to reflect that.

    New Branding and Products

    One thing we think a lot about is simplicity. There is elegance in simplicity. When we looked at our products, we realized that most of our customers were faced with unnecessary complexity. We had more than 20 different products available and we knew that most customers were making the decision to purchase our top two products.  It was time for us to simplify.


    So we turned Infragistics NetAdvantage for .NETversion13.1 into Infragistics Professional 13.2, and Infragistics NetAdvantage Ultimate version 13.1 into Infragistics Ultimate 13.2. We think you’ll agree that these less complicated names truly simplify things and make it much easier to find what you are looking for.

    New Features

    13.2 has a lot to offer. Most importantly, this new release of Infragistics Ultimate now includes our amazing design tool, Indigo Studio. It’s a complete solution for designing interactive prototypes that target mobile, desktop & web scenarios.  With Indigo Studio, designers and developers can focus on the user experience of the application before writing a single line of code. 


    For desktop, web and mobile development, we’ve updated our entire line of controls to bring you the “ultimate” experience from start to finish. We’ve added support for the latest Microsoft Office and Windows 8 inspired user interface, along with support for touch-enabled rich-client desktop & responsive web apps that help you develop for the iPad, iPhone, Android devices and the Surface.


    If you need to reach the broadest set of devices, our Ignite UI HTML5 / JQuery tools help you create a single application that will look native on any mobile device or desktop. And if you need no-compromise performance, only Infragistics has native Objective-C controls for building iOS apps with iOS 7 styles, native Java controls for Android apps and native Windows Phone controls. Finally, when you’re ready to test your applications, we’ve got you covered with automated UI testing tools for both Windows Forms & WPF.

    New Website

    In line with our promise to simplify, we’re doing everything we can to also streamline the experience of trying out our products. Many of our site’s less-visited pages have been shifted out to make it easier to find what you are looking for. But maybe the most exciting thing on our website is the introduction of our new Getting Started Videos on Infragistics’ YouTube channel. I encourage you to subscribe to this channel as we’ll be continually posting new videos – for all skill levels – to ensure you get the most out of your Infragistics controls. We think this will be very helpful to kick start your next project.

    New Pricing

    For the 13.2 release, we’ve modestly increased prices on new license purchases & renewals. But what about existing customers? Are we increasing renewal prices now? No. We have a little something called the Ultimate Gift and as you’ll see we want to make sure this transition is smooth. For example, if you’re a customer who used to have an ASP.NET subscription, congratulations - you just got a free upgrade to our Professional version!  This is our little way of saying thank you to our customers. For more information, check out the Ultimate Gift on our website.

    Summary

    As you can see, there’s a lot going on at Infragistics - and we’re just getting started! There is so much more we want to do to help you build stunning applications quickly. With new brands, new products, new features, new videos and more, we hope you are as excited as we are. We can’t wait to show you what’s IN development.

    Adding Data to the IGChartView at runtime (Xamarin.iOS / Objective C)

    Next: Infragistics Reporting Release Notes – November: 13.2 Volume Release
    Previous: Exciting Changes at Infragistics - 13.2 Release!
    $
    0
    0

    Intro

    Last week a customer asked in our forums how to add data at run time to the IGChartView.  After answering the question I figured I would convert the sample over to Xamarin.

    So attached is a zip file with both the Xamarin-iOS sample with the IGChartView and an Objective -C version written in XCode.

    The different series in the IGChartView all have datasource helper objects which take the array of data and process it for the various series to render.  In this example we are using a IGLineSeries, so the IGCategorySeriesDataSourceHelper will be used.  This data source helper is what we would use for area charts, bar charts, column charts, and line charts. 

    Basic Process


    The basic process for adding more data into the chart is to add the data to the underlying data array which is feeding the datasource helper and then tell chart that data at a particular index has been modified.

    <p >So in Xamarin iOS C#

    // On the Tick, make a new object in the bounds.
    MyDataObject newOb = this.createDataObject ();
    // Since we only want to show the last twenty data points, remove the first if we have hit the threshold
    if (_dataArray.Count >= 21) {
    // remove the data point and tell the chart that the point of data has been removed.
    _dataArray.RemoveAt (0);
    _chart.RemoveItem (0, _helper);
    }

    // now add in our new data point and tell the chart that a new point has been added.
    _dataArray.Add (newOb);
    _convertedData = _dataArray.ToArray ();
    _helper.Data = _convertedData;
    _chart.InsertItem (_convertedData.Length - 1, _helper);

    And in Objective C

    // Since we only want to show the last twenty data points, remove the first if we have hit the threshold
    if (_dataArray.count >= 21) {
    // remove the data point and tell the chart that the point of data has been removed.
    [_dataArray removeObjectAtIndex:0];
    [_chart removeItemAtIndex:0 withSource:_helper];
    }

    // adds a new data object to our underlying data collection
    [_dataArray addObject:[self createDataObject]];

    // tells the chart to put a new point into the view
    [_chart insertItemAtIndex:(_dataArray.count-1) withSource:_helper];

    So what is the above code doing. First it's checking that we are only showing 20 data points. I wanted to show a limited window of data. I could have let it add points indefinitely but that would only clutter the layout over time and make it very difficult to read. After it removes the expired point of data, it tells the chart that the data at that point has been removed. Then it adds a new point and tells the chart a new point has been added.

    So we can add and remove data easily and allow the UI to reflect those changes.

    Now this next part isn't in the sample, but we can also change data in place and have the UI reflect those changes as well.  

    So if we take the existing sample code and make a few modifications we will demonstrate how to update data in the chart rather then add / remove it.

    First we want to change the series being used from an IGLineSeries to and IGColumnSeries.

    Objective C
    IGColumnSeries* lineSeries = (IGColumnSeries*)[_chart addSeriesForType:[IGColumnSeries class] usingKey:@"series1" withDataSource:_helper firstAxisKey:@"xAxis" secondAxisKey:@"yAxis"];
    // adding a transitionDuration (how long an animation will run) onto the series so that when data switches it will animate the change. lineSeries.transitionDuration =0.5;

    Then in the tick we change the code to modify an existing member of our data array and then inform the chart of the change.

    int newValue = rand() % 10;
    int indexToChange = rand() % 10;
    MyDataObject* obj = [_dataArray objectAtIndex:indexToChange];
    obj.value = newValue;
    [_chart updateItemAtIndex:indexToChange withSource:_helper];

    So I hope you liked this little demonstration on how you can update data and have those changes reflect in the IGDataChart. Hopefully I will be able to get back to my book app in the near future.

    By Darrell Kress

    Infragistics Reporting Release Notes – November: 13.2 Volume Release

    Next: NucliOS - What's New in 2013.2
    Previous: Adding Data to the IGChartView at runtime (Xamarin.iOS / Objective C)
    $
    0
    0

    With every release of Infragistics Reporting comes a set of release notes that reflects the state of resolved bugs and new additions from the previous release. You’ll find the notes useful to help determine the resolution of existing issues from a past release and as a means of determining where to test your applications when upgrading from one version to the next.

    Release notes are available in PDF format and summarize the changes to this release along with a listing of each item. In order to download the release notes, use the following link:

     

    Note: There is an issue with the Infragistics Platform Installer that doesn’t allow installing Reporting's plugin for Visual Studio 2013. This issue will be fixed shortly. In the meantime, please follow these steps to successfully install the VS2013 plugin:

    1. Download and install Reporting from the Infragistics Ultimate 2013 Vol. 2 Platform Installer.

    2. Search for the "Setups" folder created by the Platform Installer’s installation.

    3. Run Reporting's installer (located in the Setup Folder) and choose Change.

    4. Select VS 2013 Plugin and install.

    NucliOS - What's New in 2013.2

    Next: Ember.js Basics - Project Structure
    Previous: Infragistics Reporting Release Notes – November: 13.2 Volume Release
    $
    0
    0

    Introduction

    The 2013 Volume 2 release of NucliOS is packed full of new controls and features to help you easily create stunning apps using Xcode or Xamarin.iOS. Without further ado, the following are the new controls and updates included with this new release.

    IGBulletGraphView (New Control)

    IGBulletGraphView (New Control)

    Deliver a simple and concise view of key performance indicators (KPI) to presents progress towards goals and good/better/best ranges in as little horizontal or vertical space as possible.

    FEATURES

    • Configurable Orientation
    • Ranges
    • Animated Transitions
    • Custom Scale Labels
    • Themes

    IGCalendarView (New Control)

    IGCalendarView (New Control)

    The IGCalendarView is the multitool of calendars. It's a 3 in 1 calendar allowing you to effortlessly navigate between year, month and day views. Connect it directly to your device's calendar or connect your custom appointments.

    FEATURES

    • Year View
    • Month View
    • Day View
    • Appointments
    • Calendar Localization
    • Animated Transitions
    • Themes

    IGChartView (Updated)

    IGChartView (Updated)

    Our high performance and feature rich IGChartView was updated for 2013 Volume 2 with the following features:

    • Custom Markers - Allowing you to insert a UIView in place of a marker on a data point.
    • Rounded Corners - You can configure rounded corners on the following series: IGBarSeries, IGColumnSeries, IGRadialColumnSeries, IGRadialPieSeries, IGRangeColumnSeries, IGStacked100BarSeries, IGStackedBarSeries, IGStacked100ColumnSeries, IGStackedColumnSeries and IGWaterfallSeries.
    • Single Axis Zoom - Allowing the IGChartView to restrict its zooming along either the vertical or horizontal axis.

    IGFunnelChartView (New Control)

    IGFunnelChartView (New Control)

    The IGFunnelChartView displays funnel slices with progressively increasing or decreasing values. The funnel chart view supports multiple slice selection, tooltips, tap and long press gestures.

    FEATURES

    • Legend
    • Slice Selection
    • Weighted Slices
    • Animated Transitions
    • Themes

    IGGridView (Updated)

    IGGridView (Updated)

    Our powerful and feature rich IGGridView was updated for 2013 Volume 2 with the following features:

    • Grid Data Entry - Allowing you to place a grid cell into a mode that makes it editable.
    • Swipe Row - Allows a user to swipe their finger on a row and have the row slide in a specific direction, exposing a UIView on the left or right side of the row. This feature was updated, allowing the user to drag rows or performing percentage dragging.

    IGLinearGaugeView (New Control)

    IGLinearGaugeView (New Control)

    Make your data visualizations and dashboards more engaging with a Linear Gauge that shows off KPIs with rich style and interactivity. The gauges are powerful, easy to use, and highly configurable to present dashboards.

    FEATURES

    • Configurable Orientation
    • Preset Needles
    • Ranges
    • Animated Transitions
    • Custom Scale Labels
    • Themes

    IGOverlayView (New Control)

    IGOverlayView (New Control)

    The overlay is a powerful and extremely flexible control for displaying any type of view that will overlay another view, with or without animation, when shown or dismissed. Adding views to overlay another view is a cinch, but if you require more than a quick and simple solution, the overlay was also designed to be extended upon. By deriving from the overlay class, you can tap into your creative psyche while using the overlay to help push your app to the next level.

    FEATURES

    • 12 Enter Animations
    • 12 Exit Animations
    • Custom Animation Support
    • Extensible

    IGProgressView (New Control)

    IGProgressView (New Control)

    The progress is a multifaceted progress control capable of rendering standard, radial, or even custom progress shapes. In addition, to the progress looking great out of the box, nearly every part of its UI can be styled to look great in your app. Properties are exposed to make it simple to adjust the color of the progress. Although, if you require finer tuning; layer properties are exposed to give you complete control over the progress appearance all the way down to the stroke used. The styling doesn't stop at only visual appearance, the properties for the animation duration and animating timing function allow for polishing the animation that occurs when the progress changes value.

    FEATURES

    • 5 Progress Types
    • Custom Progress Shapes
    • Configurable Start/End Angle
    • Animated Transitions

    IGRangeSelectorView (New Control)

    IGRangeSelectorView (New Control)

    While not a standalone control, the IGRangeSelectorView in conjuction with the IGChartView becomes a very powerful tool. Drop it in your application along with a chart, wire them up, and watch the magic begin, as the IGRangeSelectorView will add a simple slider based zoom functionality to your application.

    FEATURES

    • Synchronizes Interaction with the IGChartView
    • Configurable Orientation
    • Themes

    IGSparklineView (New Control)

    IGSparklineView (New Control)

    The IGSparklineView is a lightweight chart that is used within data sets, usually when displayed in a list or grid. Sparklines are non-interactive and support limited display options such as markers, trend lines and value ranges.

    FEATURES

    • 4 Sparkline Types
    • Markers
    • Trendlines
    • Adjustable Ranges
    • Animated Transitions
    • Themes

    IGTreemapView (New Control)

    IGTreemapView (New Control)

    The IGTreeMapView is designed to display a hierarchical data structure of treemap nodes, where each node is represented by a rectangle. Each treemap node can have any number of child nodes and the children are sorted by size, from largest to smallest.

    FEATURES

    • Slice and Dice Layout
    • Squarified Layout
    • Strip Layout
    • Color Mapper
    • CoreGraphics Rendering Mode
    • UIView Rendering Mode
    • Animated Transitions
    • Themes

    Download the Trial

    Try out NucliOS for free by downloading the fully featured trial.

    Ember.js Basics - Project Structure

    Next: Ember.js From the Ground Up Series
    Previous: NucliOS - What's New in 2013.2
    $
    0
    0

    One of the things that tripped me up when I first started using Ember.js was a lack of guidance in project structure. The early guides and samples placed all of the JavaScript into a few files and all of the templates were contained in script blocks inside of a single HTML file. To me, this seemed like a bit of a mess and it was very uncomfortable. Thankfully, as Ember has matured so have the tools around it. In this post, I’ll explain what the project “structure” looks like in a basic “out of the box” Ember.js application and then explore a few better approaches using build tools.

    This is post #2 in a series on Ember.js. You can find the other posts here.

    ember-basics-project-structure

    “Out of the box” structure

    I use the word “structure” loosely here as there is very little structure imposed by the framework in terms of filenames or folder structure in the application. Essentially, if named and ordered properly, all of your JavaScript code could go in one file and many early samples did just that. Even now, the Ember Starter Kit comes with a structure that looks like this:

    starter-kit-structure

    The guidance in TODO.txt states “Start writing your app in js/app.js.” and “Describe your application HTML in index.html.” This is fine for a small app, but it sure doesn’t scale well if we’re building ambitious web applications. In fact, you end up with an HTML file that looks like this:

    template-code

    All of these script blocks littered in the index.html file really started to bother me after a while and I had been wondering if there was another way. What I wanted to do was have each template exist in its own file and these would be referenced properly where needed by Ember. Thankfully, there’s a feature of Handlebars that allows for precompilation of templates and this is just what is needed to do what I wanted to do. It gets even better though. There are application workflows for Ember that make this process even easier. I’m going to briefly introduce the two options I have tried and show how they provide structure to the application building process. In future posts I will go into more detail on features offered by these tools.

    Ember App Kit

    Ember App Kit was created by Stefan Penner of the Ember.js team. It is billed as “A template for ambitious web applications” which, of course, fits quite well with the Ember tagline.

    The main features of the Ember App Kit are: Asset compilation (including Handlebars, LESS/SASS, CoffeeScript, and minified JS and CSS), ES6 Module support, testing with QUnit and Karma, and dependency management using Bower.

    The Ember App Kit is built around Grunt which is an amazing task runner for JS that was built with Node.js. I will describe the setup of many of the optional Grunt tasks in a future post. What we are mainly concerned at with Ember App Kit for now is the project structure inside of the app folder. Here’s what the top-level of the app folder looks like:

    ember-app-kit-structure

    Note that I have expanded the templates folder. Each template inside of this folder is taking the place of one of those stray script blocks we had in the original approach. This is a much more structured approach! The application structure is described in detail in the Ember App Kit Getting Started guide.

    Yeoman and the Ember generator

    Yeoman is described by it’s maintainers as “modern workflows for modern webapps”. It consists of three separate tools that work together to help jumpstart and develop applications that enable best practices. Much like Ember App Kit, Yeoman uses Grunt as the build tool. It also uses Bower for client dependency management. The extra added pieces for Yeoman are Yo which is a scaffolding tool and one of the many generators maintained by the community. Using the Yo command line tool one can scaffold out an entire application from a generator. In our case, the generator we’ll take a look at is generator-ember.

    When you run the Ember generator using Yo, you’ll get asked if you want to install Twitter Bootstrap for Sass. This is a nice touch since many developers are using Bootstrap and many Ember devs are using Sass. I’m much more of a Foundation fan so it would be nice to have a choice, but it’s easy enough to add later so no worries. Yeoman will scaffold out an Ember application and the Grunt tasks are pre-configured for Sass, minification, template precompilation, and LiveReload (which will automatically rebuild files and reload the browser any time you save a file). I’ll discuss the details of generator-ember in a future post.

    Again, the most important thing to look at for now is the application structure generator-ember offers. Just like with Ember App Kit, there is an app folder. Inside of this, the structure looks like:

    generator-ember-structure

    The app/scripts folder is where all of the JavaScript files for the app should go. There are folders for the major categories of files such as models, views, controllers, and routes. Also inside of app/ is a templates folder where you will store your Handlebars templates. Like Ember App Kit, all of these folders are configured to be watched and built by Grunt. Once again, this definitely adds much needed structure to an Ember application. The Ember generator also includes subgenerators for adding models, views, and controllers. You can read about these subgenerators on the generator-ember Github page. I’ll talk about them in more detail in a future post.

    Summary

    Ember.js does not impose a set structure for the application files in terms of folders and file names within a project. Thankfully, we have some great tools to help establish some best practices. Whether you choose Ember App Kit or generator-ember with Yeoman, I think it is easy to see how both of these approaches help facilitate easier project collaboration and maintenance. Try the different options before deciding on one to use for your project.

    Contact

    If you want to comment or reach out to me, the best place to do that is on Twitter @brentschooley. I can also be reached via email at bschooley@infragistics.com.

    Viewing all 2223 articles
    Browse latest View live