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

Touch Enabled Scenarios with Infragistics Windows Forms Components

$
0
0

Infragistics Windows Form controls offer opportunities to cover different scenarios and represent data in your desktop applications. This toolkit is one of the best, most extensible third party controls that I have ever used for UI development. 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 charting, and full modern experiences with touch gestures, these controls were built to empower you to create Touch-Enabled, Office Inspired Apps on Every Platform.

In this article we will discuss some common scenarios when you need to have touch support and then we'll explore some useful examples of how to implement it.

Touch Enabled Concept

Prior to Windows 7, Windows Forms controls did not natively support gestures of user interaction with a touch input digitizer surface through managed code. You may administer Windows7 supported WM_GESTURE message in unmanaged code to provide support for the recognized Windows gestures.

One well-known gesture, kinetic scrolling with inertia (also referred to as touch panning) occurs when the user drags a finger across a touch surface, with the speed and direction of the movement determining the direction of and speed at which the window scrolls. The scrolling continues, even after the user withdrawals his or her finger, gradually decelerating before coming to a complete stop, a behavior known as panning inertia. Any user interaction occurring during this deceleration immediately stops the inertial panning. This behavior is prevalent on smart phones and tablet devices such as iPhone, iPad and Windows touch-enabled Surface devices.

Another application of the panning gesture is drag selection, where the user drags a lasso around the screen, selecting any items captured within the bounds of the lasso rectangle.

Other gestures also have default behaviors associated with them, for example, displaying a context menu using a press-and-hold gesture. This is where the user holds a finger down on the touch surface without moving it and displays a context menu after a short time.

What you need to know

The size of the Infragistics Windows Forms touch-enabled controls may be the first thing you notice. By design, touch-enabled controls appear larger (wider, taller or both) than buttons and other elements in the User Interface (UI) making it easier to interact with and operate when using a touch-sensitive surface.

Enabling the touch functionality occurs at the form level rather than the control level, as it is unlikely that both Touch and Non-Touch system use the same application. Adding the UltraTouchProvider component to the form enables Form level touch support for NetAdvantage controls.

Although other approaches were analyzed for enabling Touch functionality at the application level, none appeared to be a feasible solution allowing you to interact with the touch metrics at design-time to arrange controls on the form using the designer. The only way to enable touch at the application level is via the static property. Since the static property is not available at design-time, best practice dictates enabling the touch functionality at the Form level.

Touch Support Controls

 

 

 

 

Touch Experience

Touch Metric Suport

Resize elements of the Grid, Editor, List View, Tree, Tab, and Tabbed MDI controls to make them larger for better touch interactivity.

Touch-Metric-Support[1]

 

Panning Gesture Support

The Grid, Tree, and List View controls are enabled with support for panning gestures, including vertical, slow, fast, and multi-directional panning and flicking. Additionally the Combo, Combo Editor, and Value List support vertical scrolling via the panning gesture.

Touch-panning[1]

Multi-Gesture Support

The Grid, Tree, and List View controls support key multi-gesture functionality, including tap, tap & drag, double tap, and tap & hold.

 

Touch-Multigesture[1]

 

Code Samples

Touch Tab Controls

windows-forms-touch-experience-touch-tab-controls-en-us[1]

 

 1:using System;
 2:using System.Globalization;
 3:using System.Windows.Forms;
 4:using Infragistics.Win;
 5:using Infragistics.Win.UltraWinTabControl;
 6:using Infragistics.Win.UltraWinTabs;
 7:  
 8:namespace TouchEnabledTabControls.CS
 9: {
 10:publicpartialclass TabControlsForm : Form
 11:     {
 12:#region Constructor
 13:public TabControlsForm()
 14:         {
 15:             InitializeComponent();
 16:         } 
 17:#endregion
 18:  
 19:#region TabControlsFormLoad
 20:privatevoid TabControlsFormLoad(object sender, EventArgs e)
 21:         {
 22:// Set the ComboEditors with default display value.
 23:             ultraComboEditor_Tab_ScrollButtons.SelectedIndex = 2;
 24:             ultraComboEditor_Tab_CloseButtons.SelectedIndex = 1;
 25:             ultraComboEditor_Tab_Style.SelectedIndex = 0;
 26:  
 27:             ultraComboEditor_TabStrip_ScrollButtons.SelectedIndex = 2;
 28:             ultraComboEditor_TabStrip_CloseButtons.SelectedIndex = 1;
 29:             ultraComboEditor_TabStrip_Style.SelectedIndex = 0;
 30:         } 
 31:#endregion
 32:  
 33:#region BtnEnableTouchClick
 34:privatevoid BtnEnableTouchClick(object sender, EventArgs e)
 35:         {
 36:             ultraTouchProvider1.Enabled = !ultraTouchProvider1.Enabled;
 37:             btnEnableTouch.Text = ultraTouchProvider1.Enabled ? Properties.Resources.Button_Disable_Touch : Properties.Resources.Button_Enable_Touch;
 38:         }
 39:#endregion
 40:  
 41:#region WinTab Control events
 42:  
 43:#region UltraComboEditorTabScrollButtonValueChanged
 44:// Show Scroll Buttons
 45:privatevoid UltraComboEditorTabScrollButtonValueChanged(object sender, EventArgs e)
 46:         {
 47:             var cb = ultraComboEditor_Tab_ScrollButtons;
 48:if (cb == null || cb.SelectedItem == null)
 49:return;
 50:  
 51:             var item = cb.SelectedItem.DisplayText;
 52:  
 53:switch (item)
 54:             {
 55:case"Default":
 56:                     ultraTabControl1.ScrollButtonTypes = ScrollButtonTypes.Default;
 57:break;
 58:case"FirstLast":
 59:                     ultraTabControl1.ScrollButtonTypes = ScrollButtonTypes.FirstLast;
 60:break;
 61:case"NextPrevious":
 62:                     ultraTabControl1.ScrollButtonTypes = ScrollButtonTypes.NextPrevious;
 63:break;
 64:case"NextPagePreviousPage":
 65:                     ultraTabControl1.ScrollButtonTypes = ScrollButtonTypes.NextPagePreviousPage;
 66:break;
 67:case"None":
 68:                     ultraTabControl1.ScrollButtonTypes = ScrollButtonTypes.None;
 69:break;
 70:case"Thumb":
 71:                     ultraTabControl1.ScrollButtonTypes = ScrollButtonTypes.Thumb;
 72:break;
 73:             }
 74:         }
 75:#endregion
 76:  
 77:#region UltraComboEditorTabCloseButtonValueChanged
 78:// Show Close Buttons
 79:privatevoid UltraComboEditorTabCloseButtonValueChanged(object sender, EventArgs e)
 80:         {
 81:             var cb = ultraComboEditor_Tab_CloseButtons;
 82:if (cb == null || cb.SelectedItem == null)
 83:return;
 84:             ultraTabControl1.CloseButtonLocation = (TabCloseButtonLocation)cb.SelectedIndex;
 85:         }
 86:#endregion
 87:  
 88:#region UltraComboEditorTabStyleValueChanged
 89:// Select a Style (NotePage)
 90:privatevoid UltraComboEditorTabStyleValueChanged(object sender, EventArgs e)
 91:         {
 92:             var cb = ultraComboEditor_Tab_Style;
 93:if (cb == null || cb.SelectedItem == null)
 94:return;
 95:  
 96:             var item = cb.SelectedItem.DisplayText;
 97:  
 98:switch (item)
 99:             {
 100:case"Default":
 101:                     ultraTabControl1.Style = UltraTabControlStyle.Default;
 102:break;
 103:case"NotePage":
 104:                     ultraTabControl1.Style = UltraTabControlStyle.NotePage;
 105:break;
 106:case"NotePageFlat":
 107:                     ultraTabControl1.Style = UltraTabControlStyle.NotePageFlat;
 108:break;
 109:             }
 110:         }
 111:#endregion
 112:  
 113:#region UltraCheckEditorTabShowListButtonCheckedChanged
 114:// Show TabList button
 115:privatevoid UltraCheckEditorTabShowListButtonCheckedChanged(object sender, EventArgs e)
 116:         {
 117:             ultraTabControl1.ShowTabListButton =
 118:                 ultraTabControl1.ShowTabListButton != DefaultableBoolean.True ? DefaultableBoolean.True : DefaultableBoolean.Default;
 119:         }
 120:#endregion
 121:  
 122:#endregion
 123:  
 124:#region WinTabStrip Control events
 125:  
 126:#region UltraComboEditorTabStripScrollButtonValueChanged
 127:// Show Scroll Buttons
 128:privatevoid UltraComboEditorTabStripScrollButtonValueChanged(object sender, EventArgs e)
 129:         {
 130:             var cb = ultraComboEditor_TabStrip_ScrollButtons;
 131:if (cb == null || cb.SelectedItem == null)
 132:return;
 133:  
 134:             var item = cb.SelectedItem.DisplayText;
 135:  
 136:switch (item)
 137:             {
 138:case"Default":
 139:                     ultraTabStripControl1.ScrollButtonTypes = ScrollButtonTypes.Default;
 140:break;
 141:case"FirstLast":
 142:                     ultraTabStripControl1.ScrollButtonTypes = ScrollButtonTypes.FirstLast;
 143:break;
 144:case"NextPrevious":
 145:                     ultraTabStripControl1.ScrollButtonTypes = ScrollButtonTypes.NextPrevious;
 146:break;
 147:case"NextPagePreviousPage":
 148:                     ultraTabStripControl1.ScrollButtonTypes = ScrollButtonTypes.NextPagePreviousPage;
 149:break;
 150:case"None":
 151:                     ultraTabStripControl1.ScrollButtonTypes = ScrollButtonTypes.None;
 152:break;
 153:case"Thumb":
 154:                     ultraTabStripControl1.ScrollButtonTypes = ScrollButtonTypes.Thumb;
 155:break;
 156:             }
 157:         } 
 158:#endregion
 159:  
 160:#region UltraComboEditorTabStripCloseButtonValueChanged
 161:// Show Close Buttons
 162:privatevoid UltraComboEditorTabStripCloseButtonValueChanged(object sender, EventArgs e)
 163:         {
 164:             var cb = ultraComboEditor_TabStrip_CloseButtons;
 165:if (cb == null || cb.SelectedItem == null)
 166:return;
 167:             ultraTabStripControl1.CloseButtonLocation = (TabCloseButtonLocation)cb.SelectedIndex;
 168:         } 
 169:#endregion
 170:  
 171:#region UltraComboEditorTabStripStyleValueChanged
 172:// Select a Style (NotePage)
 173:privatevoid UltraComboEditorTabStripStyleValueChanged(object sender, EventArgs e)
 174:         {
 175:             var cb = ultraComboEditor_TabStrip_Style;
 176:if (cb == null || cb.SelectedItem == null)
 177:return;
 178:  
 179:             var item = cb.SelectedItem.DisplayText;
 180:  
 181:switch (item)
 182:             {
 183:case"Default":
 184:                     ultraTabStripControl1.Style = UltraTabControlStyle.Default;
 185:break;
 186:case"NotePage":
 187:                     ultraTabStripControl1.Style = UltraTabControlStyle.NotePage;
 188:break;
 189:case"NotePageFlat":
 190:                     ultraTabStripControl1.Style = UltraTabControlStyle.NotePageFlat;
 191:break;
 192:             }
 193:         } 
 194:#endregion
 195:  
 196:#region UltraCheckEditorTabStripShowListButtonCheckedChanged
 197:// Show TabList button
 198:privatevoid UltraCheckEditorTabStripShowListButtonCheckedChanged(object sender, EventArgs e)
 199:         {
 200:             ultraTabStripControl1.ShowTabListButton =
 201:                 ultraTabStripControl1.ShowTabListButton != DefaultableBoolean.True ? DefaultableBoolean.True : DefaultableBoolean.Default;
 202:         } 
 203:#endregion
 204:  
 205:#region UltraTabStripControl1TabStripSelectedTabChanged
 206:// Selected Tab Changed event
 207:privatevoid UltraTabStripControl1TabStripSelectedTabChanged(object sender, SelectedTabChangedEventArgs e)
 208:         {
 209:             var num = e.Tab.Index + 1;
 210:             ultraTextEditor_TabStrip.Text = num.ToString(CultureInfo.InvariantCulture);
 211:         }
 212:#endregion
 213:  
 214:#endregion
 215:     }
 216: }

Touch Editors And Grid Elements

windows-forms-touch-experience-touch-editors-and-grid-elements-en-us[1]

 1:using System;
 2:using System.Windows.Forms;
 3:using Infragistics.Win;
 4:using Infragistics.Win.UltraWinEditors;
 5:using System.Drawing;
 6:using Infragistics.Win.UltraWinGrid;
 7:using ButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle;
 8:  
 9:namespace TouchEnabledEditorsAndGridElements.CS
 10: {
 11:publicpartialclass TouchForm : Form
 12:     {
 13:#region Constructor
 14:public TouchForm()
 15:         {
 16:             InitializeComponent();
 17:         } 
 18:#endregion
 19:  
 20:#region TouchFormLoad
 21:privatevoid TouchFormLoad(object sender, EventArgs e)
 22:         {
 23:// Bind UltraCombo.
 24:             ultraCombo.DataSource = new TestData();
 25:             ultraCombo.SelectedText = "Select Item";
 26:  
 27:  
 28:// Bind UltraComboEditor.
 29:             ultraComboEditor.DataSource = new TestData();
 30:             ultraComboEditor.SelectedIndex = 1;
 31:  
 32:  
 33:// Bind WinGrid.
 34:             ultraGrid1.DataSource = new TestData();
 35:  
 36:  
 37:// Display difault values in ComboEditors.
 38:             ultraComboEditor_SelectCardViewStyle.SelectedIndex = 0;
 39:             ultraComboEditor_FixedRowIndicator.SelectedIndex = 1;
 40:             ultraComboEditor_EnableSummary.SelectedIndex = 3;
 41:  
 42:  
 43:// Attach DrawFilter (RemoveFocusRectangle) to CheckEditor.
 44:// This will prevent from displaying the dotted line when the control is clicked.
 45:             ultraCheckEditor.DrawFilter = new RemoveFocusRectangle();
 46:             ultraTabControl1.DrawFilter = new RemoveFocusRectangle();
 47:             ultraOptionSet.DrawFilter = new RemoveFocusRectangle();
 48:         } 
 49:#endregion
 50:  
 51:#region Editor Controls
 52:  
 53:// Add/Remove Buttons LEFT / RIGHT
 54:privatevoid UltraCheckEditorAddButtonRightLeftCheckedChanged(object sender, EventArgs e)
 55:         {
 56:             var button1 = new EditorButton();
 57:  
 58:// Add /Remove LEFT button
 59:if (ultraCalculatorDropDown.ButtonsLeft.Count 
 60:             {
 61:                 ultraCalculatorDropDown.ButtonsLeft.Add(button1);
 62:                 ultraColorPicker.ButtonsLeft.Add(button1);
 63:                 ultraCombo.ButtonsLeft.Add(button1);
 64:                 ultraComboEditor.ButtonsLeft.Add(button1);
 65:                 ultraCurrencyEditor.ButtonsLeft.Add(button1);
 66:                 ultraDateTimeEditor.ButtonsLeft.Add(button1);
 67:                 ultraFontNameEditor.ButtonsLeft.Add(button1);
 68:                 ultraFormattedTextEditor.ButtonsLeft.Add(button1);
 69:                 ultraMaskedEdit.ButtonsLeft.Add(button1);
 70:                 ultraNumericEditor.ButtonsLeft.Add(button1);
 71:                 ultraTextEditor.ButtonsLeft.Add(button1);
 72:                 ultraTimeSpanEditor.ButtonsLeft.Add(button1);
 73:                 ultraTimeZoneEditor.ButtonsLeft.Add(button1);
 74:             }
 75:else
 76:             {
 77:                 ultraCalculatorDropDown.ButtonsLeft.RemoveAt(0);
 78:                 ultraColorPicker.ButtonsLeft.RemoveAt(0);
 79:                 ultraCombo.ButtonsLeft.RemoveAt(0);
 80:                 ultraComboEditor.ButtonsLeft.RemoveAt(0);
 81:                 ultraCurrencyEditor.ButtonsLeft.RemoveAt(0);
 82:                 ultraDateTimeEditor.ButtonsLeft.RemoveAt(0);
 83:                 ultraFontNameEditor.ButtonsLeft.RemoveAt(0);
 84:                 ultraFormattedTextEditor.ButtonsLeft.RemoveAt(0);
 85:                 ultraMaskedEdit.ButtonsLeft.RemoveAt(0);
 86:                 ultraNumericEditor.ButtonsLeft.RemoveAt(0);
 87:                 ultraTextEditor.ButtonsLeft.RemoveAt(0);
 88:                 ultraTimeSpanEditor.ButtonsLeft.RemoveAt(0);
 89:                 ultraTimeZoneEditor.ButtonsLeft.RemoveAt(0);
 90:             }
 91:  
 92:             var button2 = new EditorButton();
 93:  
 94:// Add /Remove RIGHT button
 95:if (ultraCalculatorDropDown.ButtonsRight.Count 
 96:             {
 97:                 ultraCalculatorDropDown.ButtonsRight.Add(button2);
 98:                 ultraColorPicker.ButtonsRight.Add(button2);
 99:                 ultraCombo.ButtonsRight.Add(button2);
 100:                 ultraComboEditor.ButtonsRight.Add(button2);
 101:                 ultraCurrencyEditor.ButtonsRight.Add(button2);
 102:                 ultraDateTimeEditor.ButtonsRight.Add(button2);
 103:                 ultraFontNameEditor.ButtonsRight.Add(button2);
 104:                 ultraFormattedTextEditor.ButtonsRight.Add(button2);
 105:                 ultraMaskedEdit.ButtonsRight.Add(button2);
 106:                 ultraNumericEditor.ButtonsRight.Add(button2);
 107:                 ultraTextEditor.ButtonsRight.Add(button2);
 108:                 ultraTimeSpanEditor.ButtonsRight.Add(button2);
 109:                 ultraTimeZoneEditor.ButtonsRight.Add(button2);
 110:             }
 111:else
 112:             {
 113:                 ultraCalculatorDropDown.ButtonsRight.RemoveAt(0);
 114:                 ultraColorPicker.ButtonsRight.RemoveAt(0);
 115:                 ultraCombo.ButtonsRight.RemoveAt(0);
 116:                 ultraComboEditor.ButtonsRight.RemoveAt(0);
 117:                 ultraCurrencyEditor.ButtonsRight.RemoveAt(0);
 118:                 ultraDateTimeEditor.ButtonsRight.RemoveAt(0);
 119:                 ultraFontNameEditor.ButtonsRight.RemoveAt(0);
 120:                 ultraFormattedTextEditor.ButtonsRight.RemoveAt(0);
 121:                 ultraMaskedEdit.ButtonsRight.RemoveAt(0);
 122:                 ultraNumericEditor.ButtonsRight.RemoveAt(0);
 123:                 ultraTextEditor.ButtonsRight.RemoveAt(0);
 124:                 ultraTimeSpanEditor.ButtonsRight.RemoveAt(0);
 125:                 ultraTimeZoneEditor.ButtonsRight.RemoveAt(0);
 126:             }
 127:         }
 128:  
 129:  
 130:// Add/Remove Spin button
 131:privatevoid UltraCheckEditorAddSpinButtonCheckedChanged(object sender, EventArgs e)
 132:         {
 133://var spinButton = new SpinEditorButton { Orientation = Orientation.Horizontal };
 134:  
 135:// Add /Remove SPIN button
 136:             ultraCurrencyEditor.SpinButtonDisplayStyle =
 137:                 ultraCurrencyEditor.SpinButtonDisplayStyle != ButtonDisplayStyle.Always
 138:                 ? ButtonDisplayStyle.Always
 139:                 : ButtonDisplayStyle.Never;
 140:  
 141:             ultraDateTimeEditor.SpinButtonDisplayStyle =
 142:                 ultraDateTimeEditor.SpinButtonDisplayStyle != ButtonDisplayStyle.Always
 143:                 ? ButtonDisplayStyle.Always
 144:                 : ButtonDisplayStyle.Never;
 145:  
 146:             ultraMaskedEdit.SpinButtonDisplayStyle =
 147:                 ultraMaskedEdit.SpinButtonDisplayStyle == SpinButtonDisplayStyle.None
 148:                 ? SpinButtonDisplayStyle.OnRight
 149:                 : SpinButtonDisplayStyle.None;
 150:  
 151:             ultraNumericEditor.SpinButtonDisplayStyle =
 152:                 ultraNumericEditor.SpinButtonDisplayStyle != ButtonDisplayStyle.Always
 153:                 ? ButtonDisplayStyle.Always
 154:                 : ButtonDisplayStyle.Never;
 155:         }
 156:  
 157:  
 158:// Change the color of RadioButton's label
 159:privatevoid UltraOptionSetValueChanged(object sender, EventArgs e)
 160:         {
 161:             ultraLabel_UltraOptionSet.ForeColor = ultraOptionSet.CheckedItem.DataValue.ToString()
 162:                 == "Red" ? Color.Red : Color.Blue;
 163:         }
 164:  
 165:  
 166:// Display the selected font on the label in front of the control
 167:privatevoid UltraFontNameEditorValueChanged(object sender, EventArgs e)
 168:         {
 169:             ultraLabel_UltraFontNameEditor.Appearance.FontData.Name = ultraFontNameEditor.Value.ToString();
 170:         } 
 171:#endregion
 172:  
 173:#region WinGrid Elements events
 174:// Enable/Disable Row filters
 175:privatevoid UltraCheckEditorRowFilteringCheckedChanged(object sender, EventArgs e)
 176:         {
 177:             ultraGrid1.DisplayLayout.Override.AllowRowFiltering =
 178:                 ultraGrid1.DisplayLayout.Override.AllowRowFiltering != DefaultableBoolean.True
 179:                 ? DefaultableBoolean.True
 180:                 : DefaultableBoolean.False;
 181:         }
 182:  
 183:  
 184:// Enable/Desable Fixed header indicator
 185:privatevoid UltraCheckEditorEnableFixedHeaderCheckedChanged(object sender, EventArgs e)
 186:         {
 187:             ultraGrid1.DisplayLayout.UseFixedHeaders =
 188:                 ultraGrid1.DisplayLayout.UseFixedHeaders != true;
 189:         }
 190:  
 191:  
 192:// Enable/Desable Row selectors
 193:privatevoid UltraCheckEditorEnableRowSelectorsCheckedChanged(object sender, EventArgs e)
 194:         {
 195:             ultraGrid1.DisplayLayout.Bands[0].Override.RowSelectors =
 196:                 ultraGrid1.DisplayLayout.Bands[0].Override.RowSelectors != DefaultableBoolean.Default
 197:                     ? DefaultableBoolean.Default
 198:                     : DefaultableBoolean.False;
 199:         }
 200:  
 201:  
 202:// Enable/Desable header CheckBox
 203:privatevoid UltraCheckEditorEnableHeaderCheckBoxCheckedChanged(object sender, EventArgs e)
 204:         {
 205:             ultraGrid1.DisplayLayout.Override.HeaderCheckBoxVisibility =
 206:                 ultraGrid1.DisplayLayout.Override.HeaderCheckBoxVisibility != HeaderCheckBoxVisibility.Always
 207:                     ? HeaderCheckBoxVisibility.Always
 208:                     : HeaderCheckBoxVisibility.Default;
 209:         }
 210:  
 211:  
 212:// Enable/Desable Filter Operator on the FilterRow.
 213:privatevoid UltraCheckEditorEnableFilterOperatorCheckedChanged(object sender, EventArgs e)
 214:         {
 215:             ultraGrid1.DisplayLayout.Override.FilterUIType =
 216:                ultraGrid1.DisplayLayout.Override.FilterUIType != FilterUIType.FilterRow
 217:                    ? FilterUIType.FilterRow
 218:                    : FilterUIType.Default;
 219:         }
 220:  
 221:  
 222:// Enable/Desable Column chooser
 223:privatevoid UltraCheckEditorEnableColumnChooserCheckedChanged(object sender, EventArgs e)
 224:         {
 225:             ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle =
 226:                 ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle != RowSelectorHeaderStyle.ColumnChooserButton
 227:                     ? RowSelectorHeaderStyle.ColumnChooserButton
 228:                     : RowSelectorHeaderStyle.Default;
 229:         }
 230:  
 231:  
 232:// Enable/Desable column Swapping
 233:privatevoid UltraCheckEditorEnableColumnSwappingCheckedChanged(object sender, EventArgs e)
 234:         {
 235:             ultraGrid1.DisplayLayout.Override.AllowColSwapping =
 236:                 ultraGrid1.DisplayLayout.Override.AllowColSwapping != AllowColSwapping.WithinBand
 237:                     ? AllowColSwapping.WithinBand
 238:                     : AllowColSwapping.Default;
 239:         }
 240:  
 241:  
 242:// Enable/Desable Row expansion indicator.
 243:privatevoid UltraCheckEditorExpansionIndicatorCheckedChanged(object sender, EventArgs e)
 244:         {
 245:             ultraGrid1.DisplayLayout.Override.ExpansionIndicator =
 246:                 ultraGrid1.DisplayLayout.Override.ExpansionIndicator != ShowExpansionIndicator.Always
 247:                     ? ShowExpansionIndicator.Always
 248:                     : ShowExpansionIndicator.Never;
 249:         }
 250:  
 251:  
 252:// Enable/Desable Row selector edit template
 253:privatevoid UltraCheckEditorRowSelectorEditTemplateCheckedChanged(object sender, EventArgs e)
 254:         {
 255:             ultraGrid1.DisplayLayout.Override.RowEditTemplateUIType =
 256:                 ultraGrid1.DisplayLayout.Override.RowEditTemplateUIType != RowEditTemplateUIType.RowSelectorImage
 257:                     ? RowEditTemplateUIType.RowSelectorImage
 258:                     : RowEditTemplateUIType.Default;
 259:         }
 260:  
 261:  
 262:// Switch to CardView
 263:privatevoid UltraCheckEditorSwitchToCardViewCheckedChanged(object sender, EventArgs e)
 264:         {
 265:             ultraGrid1.DisplayLayout.Bands[0].CardView = !ultraGrid1.DisplayLayout.Bands[0].CardView;
 266:         }
 267:  
 268:  
 269:// Select an item for FixedRowIndicator from the ComboBox.
 270:// if the FixedRowIndicator = "Button" it will appear on the row selector.
 271:privatevoid UltraComboEditorFixedRowIndicatorValueChanged(object sender, EventArgs e)
 272:         {
 273:             var cb = ultraComboEditor_FixedRowIndicator;
 274:if (cb == null || cb.SelectedItem == null) return;
 275:  
 276:// Hint: Use DataValue instead of DataText if you are retrieving an item, because DataText gets localized.
 277:             ultraGrid1.DisplayLayout.Override.FixedRowIndicator = (FixedRowIndicator)cb.SelectedIndex;
 278:         }
 279:  
 280:  
 281:// Select CardView style
 282:privatevoid UltraComboEditorSelectCardViewStyleValueChanged(object sender, EventArgs e)
 283:         {
 284:             var cb2 = ultraComboEditor_SelectCardViewStyle;
 285:if (cb2 == null) return;
 286:  
 287:             ultraGrid1.DisplayLayout.Bands[0].CardSettings.Style = (CardStyle)cb2.SelectedIndex;
 288:         }
 289:  
 290:  
 291:// Enamble/Desable Row summary button
 292:privatevoid UltraComboEditorEnableSummaryValueChanged(object sender, EventArgs e)
 293:         {
 294:             var cb3 = ultraComboEditor_EnableSummary;
 295:if (cb3 == null) return;
 296:  
 297:             ultraGrid1.DisplayLayout.Override.AllowRowSummaries = (AllowRowSummaries)cb3.SelectedIndex;
 298:         }
 299:  
 300:#region BtnEnableTouchClick
 301:privatevoid BtnEnableTouchClick(object sender, EventArgs e)
 302:         {
 303:             ultraTouchProvider1.Enabled = !ultraTouchProvider1.Enabled;
 304:             btnEnableTouch.Text = ultraTouchProvider1.Enabled ? Properties.Resources.Button_Disable_Touch : Properties.Resources.Button_Enable_Touch;
 305:  
 306:         } 
 307:#endregion
 308:     } 
 309:#endregion
 310: }

 

Touch WinListView And Tree

windows-forms-touch-experience-touch-winlistview-and-tree-en-us[1] 

 1:using System;
 2:using System.Drawing;
 3:using System.IO;
 4:using System.Windows.Forms;
 5:using Infragistics.Win.UltraWinListView;
 6:using Infragistics.Win.UltraWinTree;
 7:  
 8:namespace TouchEnabledListViewAndTree.CS
 9: {
 10:publicpartialclass TouchForm : Form
 11:     {
 12:#region Private Members
 13:privatereadonly ImageList _imageList1;
 14:privatereadonlystring _imagePath = Application.ExecutablePath + "\\..\\..\\..\\..\\Images\\";
 15:         private const string ImageSuffix = ".png"; 
 16:         #endregion
 17:  
 18:         #region Constructor
 19:         public TouchForm()
 20:         {
 21:             InitializeComponent();
 22:             _imageList1 = new ImageList();
 23:         } 
 24:         #endregion
 25:  
 26:         #region Public Methods
 27:  
 28:         #region PopulateWinList
 29:         // Populate WinListView with local directory and files
 30:         public void PopulateWinList()
 31:         {
 32:             // Add some UltraListViewSubItemColumns to the control's SubItemColumns collection 
 33:             // to represent the file type, and date modified
 34:             UltraListViewSubItemColumn colFileType = ultraListView1.SubItemColumns.Add(Properties.Resources.UltraListView_FileType);
 35:             UltraListViewSubItemColumn colDateModified = ultraListView1.SubItemColumns.Add(Properties.Resources.UltraListView_DateModified);
 36:  
 37:  
 38:             // FileType...
 39:             // Set the DataType property to string
 40:             colFileType.DataType = typeof(string);
 41:  
 42:  
 43:             // Set the Text property to "Type"
 44:             colFileType.Text = Properties.Resources.UltraListView_Type;
 45:  
 46:  
 47:             // DateModified...
 48:             // Set the DataType property to DateTime
 49:             colDateModified.DataType = typeof(DateTime);
 50:  
 51:  
 52:             // Set the Text property to "Date Modified"
 53:             colDateModified.Text = Properties.Resources.UltraListView_DateModified;
 54:  
 55:  
 56:             // Set the Format property so that we display the short representation of 
 57:             // the date and time, appropriate for the current culture
 58:             var shortDateFormat = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
 59:             var shortTimeFormat = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern;
 60:             colDateModified.Format = string.Format("{0} {1}", shortDateFormat, shortTimeFormat);
 61:  
 62:  
 63:             // MainColumn...
 64:             // Set the DataType to string
 65:             ultraListView1.MainColumn.DataType = typeof(string);
 66:  
 67:  
 68:             // Set the Text property to "Name"
 69:             ultraListView1.MainColumn.Text = Properties.Resources.UltraListView_Name;
 70:  
 71:  
 72:             // Add an appearance for the folder images, assigning to the folder items' Appearance
 73:             Infragistics.Win.Appearance appearance = ultraListView1.Appearances.Add(Properties.Resources.UltraListView_Folder);
 74:  
 75:             if (appearance != null)
 76:             {
 77:                 appearance.Image = new Bitmap(_imagePath + "Folder" + ImageSuffix);
 78:             }
 79:  
 80:             // Get a DirectoryInfo object that represents the C drive of the local machine
 81:             var cDriveInfo = new DirectoryInfo("C:\\");
 82:  
 83:  
 84:             // Get the directories and files
 85:             DirectoryInfo[] directories = cDriveInfo.GetDirectories();
 86:             FileInfo[] files = cDriveInfo.GetFiles();
 87:  
 88:  
 89:             // Iterate the directories and add an item for each one
 90:             for (int i = 0; i 
 91:             {
 92:                 DirectoryInfo directoryInfo = directories[i];
 93:  
 94:                 UltraListViewItem item = ultraListView1.Items.Add(directoryInfo.FullName, directoryInfo.Name);
 95:                 item.SubItems["FileType"].Value = Properties.Resources.UltraListView_File_Folder;
 96:                 item.SubItems["DateModified"].Value = directoryInfo.LastWriteTime;
 97:                 item.Appearance = ultraListView1.Appearances[Properties.Resources.UltraListView_Folder];
 98:             }
 99:  
 100:             // Iterate the files and add an item for each one
 101:             for (int i = 0; i 
 102:             {
 103:                 FileInfo fileInfo = files[i];
 104:  
 105:                 UltraListViewItem item = ultraListView1.Items.Add(fileInfo.FullName, fileInfo.Name);
 106:                 item.SubItems["FileType"].Value = Properties.Resources.UltraListView_File;
 107:                 item.SubItems["DateModified"].Value = fileInfo.LastWriteTime;
 108:  
 109:// Check to see if the image collection contains an image for this extension, using the extension as a key.
 110:if (!_imageList1.Images.ContainsKey(fileInfo.Extension))
 111:                 {
 112:// Set an icon for the file.
 113:                     var iconForFile = Icon.ExtractAssociatedIcon(fileInfo.FullName);
 114:  
 115:if (iconForFile != null)
 116:                         _imageList1.Images.Add(fileInfo.Extension, iconForFile);
 117:                 }
 118:                 _imageList1.ImageSize = new Size(256, 256);
 119:                 item.Appearance.Image = _imageList1.Images[fileInfo.Extension];
 120:             }
 121:             ultraListView1.EndUpdate();
 122:         }
 123:#endregion
 124:  
 125:#endregion
 126:  
 127:#region Events
 128:  
 129:#region TouchFormLoad
 130:privatevoid TouchFormLoad(object sender, EventArgs e)
 131:         {
 132:             PopulateWinList();
 133:  
 134:// Data Bind.
 135:             ultraTree1.DataSource = new Library().Categories;
 136:  
 137:// Initialize the ComboEditors with default display values.
 138:             UltraComboEditor_UltraTreeViewStyle.SelectedIndex = 4;
 139:             UltraComboEditor_UltraTreeNodeStyle.SelectedIndex = 4;
 140:             UltraComboEditor_UltraListViewStyle.SelectedIndex = 1;
 141:         }
 142:#endregion
 143:  
 144:#region BtnEnableTouchClick
 145:privatevoid BtnEnableTouchClick(object sender, EventArgs e)
 146:         {
 147:             ultraTouchProvider1.Enabled = !ultraTouchProvider1.Enabled;
 148:             btnEnableTouch.Text = ultraTouchProvider1.Enabled ? Properties.Resources.Button_Disable_Touch : Properties.Resources.Button_Enable_Touch;
 149:         }
 150:#endregion
 151:  
 152:#region UltraComboEditorUltraListViewStyleValueChanged
 153:// Set UltraListView style
 154:privatevoid UltraComboEditorUltraListViewStyleValueChanged(object sender, EventArgs e)
 155:         {
 156:             var cb = UltraComboEditor_UltraListViewStyle;
 157:if (cb == null || cb.SelectedItem == null)
 158:return;
 159:             ultraListView1.View = (UltraListViewStyle)cb.SelectedIndex;
 160:         }
 161:#endregion
 162:  
 163:#region UltraCheckEditorCheckedChanged
 164:// Enable Checkboxes for UltraListView (Only with Details or List view)
 165:privatevoid UltraCheckEditorCheckedChanged(object sender, EventArgs e)
 166:         {
 167:if (UltraCheckEditor_EnableCheckboxes.Checked)
 168:             {
 169:                 ultraListView1.ViewSettingsDetails.CheckBoxStyle = CheckBoxStyle.CheckBox;
 170:                 ultraListView1.ViewSettingsList.CheckBoxStyle = CheckBoxStyle.CheckBox;
 171:             }
 172:else
 173:             {
 174:                 ultraListView1.ViewSettingsDetails.CheckBoxStyle = CheckBoxStyle.None;
 175:                 ultraListView1.ViewSettingsList.CheckBoxStyle = CheckBoxStyle.None;
 176:             }
 177:         }
 178:#endregion
 179:  
 180:#region UltraComboEditorUltraTreeNodeStyleValueChanged
 181:// Set UltraTree Node style (Only with Standard View)
 182:privatevoid UltraComboEditorUltraTreeNodeStyleValueChanged(object sender, EventArgs e)
 183:         {
 184:             var cb = UltraComboEditor_UltraTreeNodeStyle;
 185:if (cb == null || cb.SelectedItem == null)
 186:return;
 187:             ultraTree1.Override.NodeStyle = (NodeStyle)cb.SelectedIndex;
 188:         }
 189:#endregion
 190:  
 191:#region UltraComboEditorUltraTreeViewStyleValueChanged
 192:// Set UltraTree View style
 193:privatevoid UltraComboEditorUltraTreeViewStyleValueChanged(object sender, EventArgs e)
 194:         {
 195:             var cb = UltraComboEditor_UltraTreeViewStyle;
 196:if (cb == null || cb.SelectedItem == null)
 197:return;
 198:             ultraTree1.ViewStyle = (ViewStyle)cb.SelectedIndex;
 199:         }
 200:#endregion
 201:  
 202:#endregion
 203:     }
 204: }

 

To play around with the Infragistics Windows Forms touch enabled applications on your own, be sure to get Infragistics Ultimate and see the chart in action in our latest sample application by clicking the banner below!


Mobile browsers: State of the industry

$
0
0

Can you remember the first time you browsed the internet from a mobile phone? Pages seemed to take days to load, video was an impossibility and even basic interaction - filling forms or copying text - was a real struggle. Now, however, we use the internet so often from our smartphones and tablets, we easily forget just how far the industry has come in a few short years. Today’s mobile web browsers are faster, smoother and more intuitive than ever and innovation on these tools has gone at a blistering rate.

People use mobile devices to browse the web at different times and in different ways to how they do on laptops and desktops. For example, in terms of conversion rates on retail websites, people tend to research products from phones but buy from their laptops. Mobile devices have become an intimate part of our lives and the challenge for developers is to build websites which correspond with the kinds of experiences users expect.

Fortunately, there’s a whole range of tools available which help developers build and modify websites and which capitalize on the features of different mobile browsers. Innovation on mobile web browsers is constantly evolving, so in this post we’ll be taking a snapshot look at the state of play with the major players in the industry.

The innovators

Perhaps the most exciting thing about mobile web browsers is the constant innovation visible in the industry. While the principal operating systems (iOS, Windows and Android) are all bundled with their own browsers which have done a lot to push things forward, there are many other browsers which are also contributing to how we interact with websites from our mobiles. These alternative browsers - think Dolphin, Firefox or Opera (to name but a few) - are less constrained and are therefore more able to contribute amazing ideas, add-ons and features too (see some alternatives here).

The Android Web Browser

Google have a slightly confusing  approach to the web browsers they release on different devices. The Android Web Browser is the default browser on many devices, although on some more recent releases it’s Chrome which comes bundled. Either way, these two are now much the same and offer almost the exact same functionality.

Google’s mobile web browsers are some of the most popular and widely used on the planet. Depending on whose statistics you believe, up to 40% of mobile web usage takes place on Android devices. Now, Google (as with the other major providers) obviously have an advantage here - they can count on user’s tendency to use the pre-installed browsers on their phones. Nonetheless, the browser is pretty impressive and some of its finest features include:

 

  • Sleek page transitions
  • Impressive tab system
  • The ability to sync with your Google accounts
  • The possibility of sharing data between different devices
  • Add-ons and a fair amount of customizability (around security, data tracking and so on)
  • Reduce data usage with Chrome’s Data Saver

 

Safari on iOS

When Apple released the iPhone back in 2007 they bundled Safari, their pre-existing web browser. Safari has undergone a big evolution since it first came into existence in the early noughties, and Safari 8, released in 2014 is jam packed with improvements and new features.

While it’s possible to use other browsers on your iPhone or iPad, the appeal of using Safari is its integration with the Apple universe. For instance, you can set it to automatically sync with your iCloud, so every picture, reading list, open tab - or whatever else - is synced between your devices. Safari also has some of the best security features, offering Private Browsing, blocking third party cookies and implementing Do Not track as standard.

What’s great in the latest release?

 

  • WebGL - so developers can build 3D experiences
  • HTML5 premium video as standard
  • Increased speed and efficiency
  • Better than ever iCloud synchronization
  • Improved design and feel

 

Internet Explorer for Mobile

As with its competitors, Windows Mobile web browser has similarly undergone a long series of developments, but with Internet Explorer 11, its latest release, it really is pushing boundaries. And, with the upcoming release of Spartan, things are only going to get better. Internet Explorer is hands down the fastest mobile web browser (although most users will barely notice the difference) and, as with Safari, integrates so well with other Windows products it’s tempting to just stick with it as default.

Some of the features we love about the browser include:

 

  • Great UI - you can swipe left and right to reach previous and next pages
  • You can pin favourite pages to your phone’s start screen
  • HTML5 video player as standard
  • Open tabs are synced with your other Windows devices
  • You can have an unlimited number of tabs open

 

Browse ahead

There’s so much innovation going on with mobile web browsers that it’s easy to forget how far we’ve come in so little time. It’s an awesome time to be building websites and the possibilities offered by modern browsers - inline video, greater security, 3D and synchronization open up some incredible opportunities. Now it’s up to developers to decide what to do with them.

A lean UX conference

$
0
0

The 2015 ux(bar)camp in Copenhagen through the eyes of an Infragistics employee

clip_image003

The #uxcampcph logo. Image attributed to: http://uxcampcph.org/Uploads/UXCampCPH_HVID_transparant.png

 

What is lean and how does it find its way in our daily life?

Lean manufacturing, lean software development and a lean methodology from a book called “The Lean Startup”… it seems as if “lean” is the fancy new buzzword for modern processes. But what specifically does this concept stand for? To illustrate the differences between a traditional model and the lean one, I will first discuss two UIs that solve the same problem but take different approaches. Then I will share my experiences from the UX Camp in Copenhagen last weekend, which exemplifies how a community event can also be designed in a “lean” way.

 

Yahoo and Google

Imagine you had a time machine and travelled 20 years back in time. The Internet was still just a baby and there were only a few visionaries who, unconventionally, believed in it. For many people, AOL was the browser and the Internet, as it was, a catalogue of online information. And at the same time, Yahoo was still a toddler and it would take another 3 years before Google was born. But what is “the common denominator” for the latter two companies? It is the problem of finding necessary information online that also turned out to be a call for interaction paradigm shift. A shift that resulted in the inception of the search engine – core business of both Yahoo and Google back in the day. Since the two appeared in the market, many products have been added to their portfolios: e-mail, news articles, videos, stock charts, weather information, and sport results. One can easily bet that there will be many more to come, but what do we encounter now upon visiting the two websites? Yahoo has it all on their homepage, and Google is not much more than a logo, a text field and a couple of buttons.

clip_image006clip_image008

Yahoo home page (left) and Google home page (right) today.
Images attributed to: https://www.yahoo.com/ and https://www.google.com/

 

Now let’s talk lean – it is all about flexibility, about how rapidly one can react to changes, about how quickly one can test a hypothesis and get real data to act upon. Imagine that you had to add that new and considered-to-be-cool feature. It would take a tremendous amount of time even to reach the point of testing its layout, for example, on the Yahoo home page because there is so much other stuff to consider. What if we want to do the same with Google? Well, just add an icon to the list of options in the popover, shown upon clicking on “apps” – that icon consisting of 9 gray squares in the top right. So, adding a container on a cluttered homepage vs. adding an icon to a popover list. Which of the two would require less effort to prototype and test? Which of the two requires less stuff to consider? Which of the two can lead to a well-informed design decision faster? These questions lead to the answer of what we are really interested in: Which UI is more “lean”? Lean is not about coming to the optimal solution, lean is about finding a good-enough, informed solution fast!

The lean conference

Strangely enough, this same concept can be applied, not only to software design and development processes, but to very “structured” and “offline” things, such as community events. UX Camp CPH (CPH stands for Copenhagen) was my first forum of its kind and will definitely not be the last. Let me be more specific about what is found at the core of such a (bar)camp forum and makes it so different. As simple as it may seem, it is the following: there are no speakers, everybody is a speaker. Of course, this is true to some extent as there were a few invited speakers to set the UX mood on Friday night and a very practical Saturday morning talk to break the ice (details about the talks will follow in another blog later this week). The core, however, was the pitching session on Saturday that was to define what the rest of the day might look like to an attendee. Everyone was given the opportunity to briefly present a UX topic about which they are passionate and willing to share with the others. Then voting takes place and in less than an hour the whole schedule is arranged on a whiteboard before the eyes of everyone. In the case of uxcampcph each person had the option to choose from 7 topics, discussed in different rooms at the same time and this whole thing happened 4 times throughout the day. This seemingly ad-hoc schedule assembling is exactly what makes uxcampcphlean. There is no separate call for speakers, discussions about whether a topic is appropriate, speaker cancellations or last minute schedule changes. Everything happens organically and is driven by the interest of the audience for a given topic or speaker. Whether the speaker is presenting a case study, a methodology, a crazy design or whatever has been crossing his or her mind lately, decisions are left to the audience - the very same crowd that will later attend the talk. If that is not a lean event, then I cannot really imagine what would be.

2015-04-25 12.39.46

The schedule. Image attributed to the author.

 

After all talks were over, the late Saturday afternoon offered a closing keynote that felt like the icing on the cake. Jeff Gothelf himself talked about lean UX, about design in the agile world and his observations that lead to writing that famous smashing magazine article that later inspired the book “Lean UX: Getting Out Of The Deliverables Business”. I would like to thank Jeff personally for his amazing keynote. Since most of what is read in a book is forgotten a week later, putting some of it into practice helps me retain more of it. But listening to the author talk about his book in person is definitely a memory that will not soon fade despite the “bar” part that followed. Oh yeah, I forgot to mention that the whole experience was accompanied by a decent amount of tasty Danish beer after the official closing.

Thank you UX Camp CPH for the amazing weekend. And to the readers – expect another blog on the topics presented during the conference very soon.

Version 5 released, and introducing indigodesigned.com!

$
0
0

At first glance, it may seem that not a lot changed with the release of version 5. In fact, it’s quite the opposite! Let me walk you through some key highlights not discussed elsewhere.

Introducing indigodesigned.com

Indigodesigned.com is now live! Before v5, when you shared a prototype on Infragistics server, you received a share URL which you can send to anyone. Your users will use this link to view prototypes on any device using the web browser. Sharing on Infragistics’s server is still the fastest, hassle-free and secure way to let others view your prototype.

With v5, we are launching indigodesigned.com. Think of indigodesigned.com as name we have given to our prototype hosting/sharing service instead of calling it Infragistics server. And to be fair, indigodesigned.com is so much more than just hosting.

Indigodesigned

This also means that you do not need to fire up the application to manage your private shares. You can do this by visiting indigodesigned.com using your web browser.

Anonymous, Private & Community Shares

The prototypes you share without signing in are still private, but we’ll refer to them as anonymous shares. Now you can also sign in with your Infragistics user name and password before sharing and create what we’ll call private shares. And when you sign-in on indigodesigned.com, you will be able to view these under My Shares.

To support this, the share dialog in Indigo Studio has changed so you can sign in. In addition to this, you can add metadata to each of your shares by adding a description and tags. This will allow your viewers to read the description for your prototype before they get click-happy :D! Learn more about sharing your prototypes.

New Share Dialog

By choosing to create a private share, you get a private share URL to access the prototype PLUS the following:

  • View & Manage your shares from any device
  • Organize your shares with tags and Collections
  • Edit prototype details on indigodesigned.com
  • Showcase your work in the indigodesigned community, and get kudos!

Learn more about indigodesigned.com

You can switch any private share into a community share by editing the privacy setting for the share. And you can switch back and forth as frequently as you like. This allows you to share any cool prototype, library or tips you have with the indigodesigned community. Let’s work together to make our prototyping experiences more productive!

Check out what other users have contributed to the indigodesigned community! It's your turn now to pay it forward ;).

privacy settings

Claiming Anonymous Shares

If you are a continuing user of Indigo Studio, you will notice that existing shares are not visible under your shares on indigodesigned.com.

Conceptually, indigodesigned.com offers three levels of sharing/hosting:

  • Anonymous shares 
  • Private(Authenticated) shares 
  • Community shares

Before v5, we had no way of knowing who shared what on the Infragistics server, unless you told us. The only known share history is available on your computer, which you can access via the manage shares option in your project home toolbar.

Version 5 is the first version to support authentication when sharing your prototype. Once you are signed in with your Infragistics username inside the application, you can claim share from your share history to make it a private share. Shares you claim as yours will start showing up under my share on indigodesigned.com.

Some changes you may notice:

  • Share URLs now has the following format: https://indigodesigned.com/share/ID. Older URLs will be automatically redirected to newer ones. You will not need to resend the link to your viewers/stakeholders. 
  • Anyone accessing the share URL will see a landing page showing the prototype thumbnail and description.

PRO-TIP: To skip the landing page or to anonymize your share, insert run/ ahead of the share ID, like so: https://indigodesigned.com/share/run/ID

Sharing (and importing) screenpart libraries

While indigodesigned.com is the place where your prototypes are showcased and managed, it was originally conceived as an easier way to share screenpart libraries!

Screenpart libraries, as you may know, are custom UI libraries that you create in Indigo Studio for sharing across screens in your project. A screenpart is any customized UI element or a collection of UI elements (e.g., dialogs) that you can save to your screenparts toolbox for reuse.

Not familiar with screenparts? Read about it here or watch a video tutorial.

In version 5, we have made it easier to reuse screenparts across projects and not just screens. And this is achieved using screenpart libraries approach (filename.library).

There are two parts to the library story: 

  1. Sharing screenpart library online/offline 
  2. Importing and using screenpart libraries

1. Sharing libraries online/offline

Say you created screenparts, and saved them in your project (e.g., myFirstProject). Every project in Indigo Studio is saved as a folder on your file system. This project folder also contains screens and storyboards you created. New screenparts, by default, are saved in a subfolder in your project folder (e.g., myFirstProject\screenparts\).

Just like you select screens from the project home view to share as a prototype, you can do the same with screenparts. Using the share dialog you can either share this on indigodesigned.com or offline on your desktop. Selecting the share on desktop option will let you generate a filename.library file, containing all the selected screenparts.

Sharing library from Project Home

2. Importing and using libraries

When you start a new project (e.g., mySecondProject), you can now import the filename.libary into this new project. Simply find and open the .library file from Indigo Studio, or use the import screenpart libraries action available in the screenparts toolbox.

import library

Any imported library file is first added to a common location, and can be viewed under, drumroll, libraries available for import in the screenparts toolbox. This common location is accessible to any new/existing Indigo Studio Project. Importing from this location will automatically copy the new screenparts into your project in a subfolder (e.g., mySecondProject\screenparts ew screenparts), keeping it clean and separate.

You can change the default location of this global/common folder where all the .library files are saved. This is can be done for each Indigo Studio installation.

The process is the same for importing library files downloaded from indigodesigned.com. And very soon you will see the option to download from community right within the Indigo Studio app. Choosing to share it on indigodesigned.com will let you send your .library file to anyone who can access the web. In addition to that, one can preview/run the individual screenparts contained in a library before downloading it.

If you still have questions about this feature, read our help topic on managing screenpart libraries.

How to get this Update?

Here’s how you can 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.

Checking for Updates

About Indigo Studio for Interaction Prototyping

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

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

View Release Notes

Converting WinForms to WPF: Should you consider it?

$
0
0

WinForms has long been a popular way to develop form and GUI based applications, generally for Windows based devices. Part of the .NET framework, and originally seen as a replacement for Microsoft Foundation Class Library (MFC), WinForms applications are ‘event driven’. That is they sit and wait for a user to interact with them, before springing into action and reacting to this input.

Whilst still a useful technology for many (we offer a whole range of useful and popular controls) WinForms is officially a technology in ‘maintenance mode’. According to Microsoft, the product is no longer subject to active development, won’t be seeing any new features in the future, but will benefit from bug fixes.

With that in mind, what is the argument for converting a WinForms app to a more modern technology like Windows Presentation Foundation (WPF)? In this post we will take a look at this topic, weighing up the various options and pros and cons.

Windows Presentation Foundation

Windows Presentation Foundation is a different API for building GUIs. Separate to WinForms, but also included in the .NET Framework, it is based on DirectX and uses a language called XAML to describe its components and elements. Many developers often ask the question: “Can I easily convert my WinForms app?” Let us look at some useful answer and pointers:

1. A chance to improve your code

After deciding to ‘convert’ your WinForms app to WPF, take a step back and decide if the best approach isn’t to simply rewrite your code from scratch. Undoubtedly you will learn a lot during the process, and the end result will most likely be altogether better code. Switching from WinForms to WPF does involve a change in mindset, this article looks at how your approach should differ. WPF is at its core very different to WinForms, understanding the basics of WPF before you start to migrate any code is a vital step.

2. Converting C#.NET WinForms designer code

If you are looking for a more ‘automated’ approach, there are utilities that will convert C#.NET designer code to XAML. This one is good example, though we do advise have a good manual check over the code as well. This CodePlex project is also capable of handling basic conversion, taking basic WinForms Form Controls and even carrying over event handling code. Beware the project hasn’t been updated for a number of years. A more up to date option can be found here, and this tool does come with support for a number of different controls.

3. Hosting WinForms inside a WPF application

Rather than converting an entire application, it is possible to reuse WinForms code by hosting controls inside a WPF application. Microsoft offers a very detailed walkthrough on hosting WinForms composite controls inside a WPF application.

4. Validating the results

If you are new to WPF, or converting/porting code over from WinForms, then it is a good idea to double check the final results. Some useful tools to do this include:

 

  • Last updated a few years ago, Snoop is however still a useful way to visually debug WPF apps.
  • Shazzam helps to testing WPF pixel shaders
  • Any good .NET developer will know about Reflector
  • Microsoft Blend started life as a stand-alone user interface tool, but is now part of Visual Studio. Either way it is an interesting way of designing WPF apps, and can be a useful aid for those moving from WinForms.
  • The WPF Performance Suite helps to analyze the behaviour of WPF apps, and provides a means to implement improvements. Useful for those starting out with WPF or refactoring code form WinForms apps.

 

Multiple options

As experienced developers will know, the .NET framework offers a number of methods and solutions to solving any given problem. When it comes to GUI applications WinForms and WPF are both still very much valid choices, and as we have seen in this post there are means to convert between the two approaches. Whatever the route taken, Infragistics offers a range of pre-built UI components to help make the final results even more impressive.

How does your company secure its mobile devices?

$
0
0

Mobile Device Security

Even ten years ago, the idea that employees would be bringing their own personal IT devices to work then accessing and editing company information from them would have seemed incredible. Of course, technology has moved on rapidly in the last few years and BYOD (Bring Your Own Device) is a growing trend. In fact, research by Gartner suggests that by 2017 half of employers will require employees to supply their own device for at least some work activities.

BYOD is a fascinating proposition. On one hand, it’s purported to bring an array of benefits to the workplace - everything from more satisfied employees and reduced IT costs to increased out of work engagement and lessened stress on information systems. However, it also comes under fire for placing too much responsibility on workers to supply their own high quality devices (although BYOD programs normally include some payment to workers), the risk of intrusion in employees’ personal lives and, of course, perceived security issues.

A worldwide phenomenon, BYOD is catching on everywhere as companies come to realize that a well-managed BYOD policy is probably no less risky than supplying employees with the company’s own devices and desktops. Nonetheless, the risks are real and many IT managers will feel torn between taking the leap into BYOD and sticking with what they know and trust. Whether your company has already initiated a BYOD plan and you’re working out how to keep data safe on devices, or if you supply colleagues with company-owned hardware for when they leave the office, SharePlus from Infragistics helps overcome this dilemma.

Plan, train and test

When taking a big step such as moving to a BYOD model, it’s essential to prepare your IT department and the organization in general for the change. This includes:

  • Planning: develop a roadmap for how the BYOD policy will be deployed. Decide when, how and where it will be done, prepare for obstacles and do your research into the most appropriate solutions for your organization.
  • Training: For employees to really understand how the new policy will work, they’ll need significant training. By giving them the necessary information about how to access and use the new apps on their phones and devices you can be more sure that security risks be avoided.
  • Test: To ensure the roll out into your organization goes smoothly, begin by testing on a small number of ‘Guinea Pigs’. You’ll then be able to spot and smooth out any hitches before global deployment.

 

Mobile access to your portal

By far the most popular and powerful Enterprise IT platform, workers around the world are familiar with SharePoint and its many impressive features. However, despite enormous file storage space and social, collaborative and communication capabilities, the platform continues to be problematic for viewing from mobile devices.

Given the opportunities that mobile technology offers for on-the-go working, a tool such as SharePlus is therefore of real benefit to modern organizations. It allows real time collaboration from most major devices and offline document editing from anywhere. With an intuitive and easy to use interface, it really stands out thanks to its comprehensive security features. Whether it’s for BYOD or simply protecting your company’s own devices when they leave the office, SharePlus has security covered.

  • Data storage: the greatest fear of any IT manager is that their company’s private data is jeopardized and valuable information accessed by malicious individuals outside the business. SharePlus responds to this concern by guaranteeing Data Storage security by allowing a secure data wipe of any company data which is held on a lost or stolen device.
  • Channel communication security: The risk of allowing colleagues to access your data through an external device is that they may (intentionally or otherwise) also be connected to another external network while connected to your company’s systems. SharePlus however, protects the connection between devices and your firm’s SharePoint solution however by employing a Virtual Private Network (VPN) and using a Secure Sockets Layer (SSL).
  • Authentication and authorization services: The first step in protecting company data is of course to set passwords. SharePlus includes numerous additional levels of security to ensure company data is well protected however, including authentication mechanisms which check the identity of visitors and client side certificates. With these additional layers of security, IT managers can feel confident that only the right people can see company data.
  • Enforcing business security: The beauty of SharePoint is that, through the use of views, administrators can decide who has access to private data. With SharePlus, this capability is extended and it’s possible to decide centrally what files and information can be seen from devices.

BYOD in security

BYOD is an increasingly common trend in modern businesses and offers great opportunities to engage employees and increase their workplace satisfaction. Nonetheless, there are considerable and understandable security concerns for IT Managers who fear information leaks or the threat of malware from employee devices for instance. SharePlus offers the possibility of tapping into this modern trend whilst also providing the peace of mind that business systems are protected.

Looking for a comprehensive and secure mobile SharePoint solution, which you can customize to your preferences? Look no further. Download our SharePlus free trial now and see the wonders it can do for your team's productivity!

SharePlus for SharePoint - Download for Android

How to share data between controllers in AngularJS

$
0
0

In my AngularJS classes, I often get asked, “How do I share data between the controllers in AngularJS?” On the Internet, there are many solutions suggested. However, I prefer to share data using the Shared Data Service method, and that’s what we’re going to explore in this post.

To start with, let’s suppose that we want to share a Product object between the controllers. Here I have created an AngularJS service named SharedDataService as shown in the snippet below:

myApp.service('SharedDataService', function () {

     var Product = {

        name: '',

        price: ''

    };

    return Product;

});

Next let’s go ahead and create two different controllers using SharedDataService. In the controllers, we are using the service created in the previous step. Controllers can be created as shown below:

var myApp = angular.module("myApp", ['CalService']);

 

myApp.controller("DataController1", ['$scope', 'SharedDataService',

    function ($scope, SharedDataService) {

    $scope.Product = SharedDataService;

 

    }]);

 

myApp.controller("DataController2", ['$scope', 'SharedDataService',

    function ($scope, SharedDataService) {

    $scope.Product = SharedDataService;

 

}]);

On the view we can simply use the controllers as shown in the listing below:

<divng-controller="DataController1">

            <h2>In Controller 1h2>

            <inputtype="text"ng-model="Product.name"/><br/>

            <inputtype="text"ng-model="Product.price"/>

            <h3>Product {{Product.name}} costs {{Product.price}}  h3>

        div>

        <hr/>

        <divng-controller="DataController2">

            <h2>In Controller 2h2>

            <h3>Product {{Product.name}} costs {{Product.price}}  h3>

        div>

Now we can share the data between the controllers. As you can see, the name and price of the product is being set in the DataController1, and we are fetching the data in the DataController2.

Do you have any better options that you use to share data? Or perhaps you have a complex scenario which may be not be solved by the above approach. If so, let me know! Tell me about it in the comments below.

Developer News - What's IN with the Infragistics Community? (4/28-5/3)

$
0
0

After a great week at Build, I'm back here with your Developer News for the last few days of April and the start of May! There's a great assortment here, but I think I would say my own personal top pick is The Agile Testing Manifesto. Check out all 5 and see for yourself!

5. How Microsoft should woo Android and iOS developers to build Windows 10 apps  (Venture Beat)

4. The Agile Testing Manifesto (GrowingAgile)

3. 10 Highest Paying Programming Languages in 2015 - Infographic (Perception Web)

2. Using AngularJS in your ASP.NET MVC Projects (DotNetCurry)

1. Designing for Simplicity (davidwalshblog)


Prototyping to manage changes in your application (Webinar recap)

$
0
0

Whether you are migrating your application from desktop to web or creating a native mobile app for an existing desktop application, there is going to be change.  One obvious change is that the technology stack used for the newer implementation. But there are other changes that are not readily apparent:

  • Your business has evolved: From the time the application was first built, the business/service has evolved, and newer requirements have emerged based on usage. This may demand tweaks to existing business workflows or newer workflows targeting user goals that did not previously exist.

  • Your users have evolved: Your users are constantly learning and on a look-out for software experiences that are more usable and delightful. Furthermore, your business may be trying to bring new users into the fold who don’t have prior experience with your application, but have used your competitor’s products.

  • UI patterns have evolved: We are constantly discovering new interaction paradigms that may change how users interact with software. Touch being one such paradigms. On top of that, we are learning about newer UI patterns which may not have existed when the app was first built. 

So, yes-- change is inevitable. We should acknowledge that porting an existing application to a new technology is not just about the technology. Getting the experience wrong can be very expensive, as failure exposes the business to undue risk.

Prototyping is one way to manage this risk by experimenting newer ideas with both your existing users and users you like to have. Prototyping is as much about trying out new things as much it is about failing early. And above all, prototyping is about extracting maximum learning from minimum effort invested. Don’t spend valuable days to prototype something in code which could have taken you hours to do in Indigo Studio. 

Webinar Video & Summary

[youtube] width="650" height="488" src="http://www.youtube.com/embed/tYik5oBbWB8" [/youtube]

Youtube Video

  • Why Prototype?
    To evaluate an idea quickly with participation from intended users

  • How to Prototype?
    Goal-driven task/user flows; relevant content; consistent style for interactive UI elements

  • Prototyping with Indigo Studio (basics)
    Draw the starting UI for user flow; add interaction to create a new state; make necessary UI changes 

  • Prototyping for large apps with Custom UI libraries
    Standardize UI components by styling and converting them to screenparts, and reuse

  • Indigodesigned.com and community
    Learn from others; browse and download prototypes and re-usable UI libraries
     

View and download presentation


About Indigo Studio for Interaction Prototyping

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

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

View Release Notes


What's New on the Office 365 Roadmap?

$
0
0

For years, consumers and enterprises alike were forced to wait long periods for Microsoft’s next updates, yet with the upcoming release of Windows 10 this model will gradually disappear. In theory, the question “which version are you running on?” will become obsolete. It’s common knowledge that under Satya Nadella Microsoft are emphasizing a ‘mobile first, cloud first’ approach and for end users the advantage of this is that updates will be more rapid, regular and relevant.

The Redmond WA. firm are currently pushing Office 365 as the future of enterprise IT, and the stack is built for total cloud integration in mind (although it’s still possible to customize your own hybrid cloud/local server solutions). Office 365 is a bold move to re-establish Microsoft’s dominance in the industry and, just like Windows 10 promises to do in future, Office 365 already offers regular updates which end users can pick and choose as and when they’re released.

Open up

Another major change in Microsoft’s long term strategy is their increasing openness, not only with consumers but also by making their services available on devices built by competitors, often free of charge. As part of this move, the Office 365 RoadMap was introduced in mid-2014 to the pleasure of app developers, Office 365 professionals, IT managers and almost anyone who uses the platforms.

Office 365 is an enormous stack, so while it’s great we can now see what’s to be expected over the coming months, finding the time to keep up to date with these changes isn’t always easy. At Infragistics we’re all about finding ways of improving enterprise UX and streamlining workflows across platforms and so we like to follow how Microsoft are making this easier. The RoadMap of recent, current and upcoming updates is extensive, to put it lightly, but Office 365 really does let you pick and choose, and so as cross platform app developers, we’re really excited about many of these releases.

1. Yammer on mobile devices. 

Recent weeks have seen numerous updates for Yammer on different devices. The latest developments allow amazingly simple integration with Mac OS X Yosemite and iOS 8 so you can simply switch between your desktop or iPhone/iPad and continue collaborating on the social network.

For Android on the other hand (or more literally, on the other wrist), Yammer has recently become available with Android wear. It’ll be possible to read and ‘like’ messages and even dictate your responses directly to your watch. Yes, the future is here already.

2. OneDrive for Business on Mac and iOS

While you could already use OneDrive for Business from Apple devices, January 2015 saw the release of an update which made the whole process of using Microsoft’s online storage a whole lot easier. This will take the form of a standalone app that facilitates sync and share between the cloud and the user’s Apple devices, thus making productivity on the go easier than before.

3. Outlook for iOS and Android

In addition to the email management solutions natively found on iOS and Android devices, the app stores abound with email management tools. Despite these challenges, Microsoft are convinced that their touch friendly version of Outlook for these operating systems will create traction. The new version of Outlook is a great little tool - it’s optimized for users on the go, people who need to triage their emails quickly and see what’s most important to them. Machine learning means the app gradually works out what kinds of emails, and which contacts you want to see while out and about. Its real draw is its integration with Office 365 and business users in particular will wonder how they lived without it.

4. Office 365 video

The moving image is one of the greatest means of mass communication and so it’s more than a little bit exciting to see that it is currently being rolled out on Office 365. You can read Microsoft's official announcement here. The use applications of video on your company’s IT platform are as diverse and creative as your company is, so whether it’s a message from the CEO, a recording from a conference, ideas to share with colleagues on Yammer or just about anything else, video on Office 365 could really shake up how you communicate with colleagues.

5. Lync Web App support for Mac and Chrome browsers

It’s currently a pain to use the Lync Web App when not using Internet Explorer and it requires numerous steps before users can simply get on with chatting. Fortunately, Microsoft have been listening to their users and in the coming months the Lync web App will be universally accessible, regardless of the browser you use.

From A to B

Microsoft are constantly updating Office 365 and keeping an eye on the latest and upcoming releases gives you an overview of what to prepare for. We’re impressed to see just how wholeheartedly Microsoft have embraced their new, open and transparent model. The cross platform offerings in particular are exciting and in a world of mobile working, this approach is really appreciated. We can’t wait to see what else is around the corner.

Looking for a comprehensive and secure mobile Office 365 and SharePoint solution, which you can customize to your preferences? Look no further. Download our SharePlus free trial now and see the wonders it can do for your team's productivity!

SharePlus for SharePoint - Download for Android

The ‘Art’ of User Experience

$
0
0

There are many ongoing discussions about User Experience, Usability, Design, Development, Agile, etc.  I’m hearing – more and more - a theme of ‘Design, Build, Test’ or ‘Design, Test, Build’.   The theory is that as long as you test your design with users, you are doing User Experience.  Something about this just seems to miss the mark.  It excludes the ‘Art’ of User Experience.

analytical_vs_creative

It’s the classic ‘Art vs. Science’ argument.   Visual Arts and Liberal Arts fields can give you a broader, softer set of skills that focus on creativity, intuition and empathy.  STEM (Science, Technology, Engineering and Math) fields may rely more on the analytical mind and scientific method to determine facts and prove theories.  User Experience/Design is a field – like many - that employs both.  In fact, we can already start to see some movement toward this concept with Rhode Island School of Design’s STEM to STEAM effort. 

Research, Design, Test

In UX, you really should have some user research – which is different than ‘testing’ your users.  At some point (hopefully, on a continuous basis), you should gather some data and information about who your users are.  This research often uses a scientific method of gathering data and analyzing it.  However, once information is gathered we can start to develop an understanding of those users.  Then, intuition and empathy kick in to help create solutions for those users and their needs based on what you know of the users and what you’re creativity and problem-solving skills tell you might be a good solution.  Once that solution is designed, we go back to a more scientific method of testing designs with users.

Build the Right Thing

If you don’t have a good understanding of your users to begin with, you could very easily go down the wrong path.  Think of your list of ‘things to do’, whether it’s a project plan, roadmap, backlog or whatever.  Where did these items come from?  Did someone who truly understands the user compile it or is it just a list of requests from executives, customers or sales?  If you simply take items off that list and start designing and usability testing, you may build something ‘usable’ that doesn’t actually meet the users’ needs.  Even in LeanUX, you still need to start with a good understanding of who your users are and what they need -  you need to ‘build the right thing’ not JUST ‘build the thing right’.  If you can do this, you’ll get closer to a good solution sooner.

The Art of Understanding

This understanding is the Art of UX .  Whether you’re doing waterfall or LeanUX, being able to empathize with the user and anticipate his or her needs isn’t something that can be scientifically done.  The creativity of the solution isn’t in whether it works or not or whether it’s  usable.  It’s all about whether it solves an actual problem the user is having and/or whether it does so with delight.  The better you are at understanding the problems the user is having, the better your solutions will solve them.

UXify North America - Conference Videos

$
0
0

This year, instead of hosting the World IA day like we did over the last couple of years, we brought our own UX conference UXify that we've been running very successfully in Sofia (Bulgaria) to North America. 

 

 UXify logo

 

UXify was hosted on April 11 at the Infragistics world headquarters in Cranbury, NJ. Our theme was "The Future of UX Design". We had an impressive line-up of speakers who shared their experiences and inspired great discussions. For anybody who could not attend the event or who wants to watch the presentations again, here are the videos.

 

Kent Eisenhuth, Interaction Designer, Google
Living at the Intersection of Art and Science: The Future Skills of a Designer

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

 

Justin Fraser, Sr. Project Manager, Infragistics
Managing Design Projects: A PM View

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

 

Sunita Vaswani, Director UX, Deutsche Bank
UX Competencies in Capital Markets

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

 

John Chin, Experience Strategist, Verizon Wireless
Universal Design: One for all, All for one!

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

 

Clare Cotugno, Director of Content Strategy, EPAM Empathy Lab
Content Strategy and the Project Lifecycle

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

 

Ronnie Battista, Practice Lead, Experience Strategy + Design, Slalom Consulting
Getting High on Journey Mapping

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

 

Lisa Woodley, VP Experience Design, NTT DATA
Surviving the Demise of Architecture: Get Strategic, Get Coding, or Get out of the Way

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

 

All speakers, thank you again for the great presentations!

Next up, on June 19th and 20th we host the European version of UXify. It's a 2-day format with one day of presentations in parallel tracks and one day of workshops. For more information, see here: http://uxify.net/

Infragistics Racing 2015

$
0
0

As I’ve written in the past, there are a lot of parallels to be drawn between motorcycle racing and User Experience Design. And now, as Spring finally arrives here in NJ, it’s that time when all the physical and mechanical preparation, like user experience research prior to starting the design phase of a consulting project, is finished and it’s time to take the motorcycle back to the track.

The first outing for Infragistics Racing in 2015 was a practice day at Summit Point Raceway in West Virginia. Don’t let the southern-sounding state fool you – getting to full-throttle at over 120mph on the short straight when the air temperature is 46 F (8 C) is chilly!

46 degree track temperature

Weather notwithstanding, it was a good first outing for the team as it prepares for the upcoming 9 race season. If you find yourself in the area, come by and say hi – I’m sure you’ll recognize the Infragistics race bike!

Infragistics Racing at Summit Point 1

Infragistics Racing at Summit Point 2

 

2015 Infragistics Racing Schedule
May 11New Jersey Motorsports ParkMillville, NJ
June 12Virginia International RacewayAlton, VA
June 29Summit Point RacewaySummit Point, WV
July 20New Jersey Motorsports ParkMillville, NJ
August 3Virginia International RacewayAlton, VA
August 24Summit Point RacewaySummit Point, WV
September 10New Jersey Motorsports ParkMillville, NJ
September 27Dominion RacewayWoodford, VA
October 11New Jersey Motorsports ParkMillville, NJ

See you at the track!

---------------------------------

Kevin Richardson has been working in the area of user experience for almost 25 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 Racing at a number of different racetracks on the East coast.

Bugtrackers.io and Infragistics' Rani Angel!

$
0
0

In case you missed it, Infragistics' own Rani Angel was recently featured on bugtrackers.io! Bugtrackers.io is a project by usersnap which endeavors to share stories from on-the-ground developers working in companies across the globe who are involved in bug tracking and web development. Rani was interviewed a few weeks ago, and her piece went live just about a week ago. If you'd like to support her, feel free to check it out, and show her some love by sharing it to your social channels! Congratulations, Rani!!!

(If you or someone you know would like to be featured on bugtrackers.io, fill out their form today!)

How Tech is Going to Change Our Lives Over the Next Ten Years

$
0
0


iotBeing only twenty-one years old, I’ve pretty much grown up with technology. While I do remember the brutal days of dial up, when texting didn’t exist and I had to actually remember a phone number, I have been pretty thoroughly connected with technology since I was young. I received my first cell phone for my eleventh birthday a little over ten years ago—a Nokia with a tiny, blue screen, with the most advanced features on this little phone being the games ‘Snake’ and ‘Doodle’. I remember the popularity of Napster and Limewire, both being controversial yet game changing methods of exchanging content and information. I remember using AOL Instant Messenger as a way to stay connected with my friends. I remember playing PlayStation with my dad and thinking about how cool it would be to be able to somehow play against my friends even though they were not with me.

This past October for my twenty first birthday, I received what is probably my tenth cell phone—an iPhone 6 with a touchscreen and a multi-pixel digital camera that keeps me constantly connected with the rest of the world and allows me to access any information I want in just a few seconds. I am now using iTunes to buy the latest music, videos, books, games, and applications, as well as using Spotify to stream unlimited music directly to my phone and MacBook Pro. I have a social presence on LinkedIn, Twitter, Facebook, Instagram, Snapchat, and Pinterest, where I can connect with just about anyone, anywhere, anytime. I can now watch my friends play people from the other side of the world in real-time, online video games while I’m video chatting with my best friend who is stationed outside of the United States. In ten short years of my life, this is how much technology has evolved in front of my own eyes. Plus, this does not even take into account the emergence and growth of other technologies and sources of information that have changed our lives. In just ten years, the world has seen an exponential increase in the complexity, sophistication, integration, and importance of, as well as the reliance on, technology. This leads me to ask the question, what will technology be like in ten years and how is it going to change our lives?

Time Magazine recently just published an article called “This Is How Tech Will Totally Change Our Lives by 2025”, which was based off a report recently released by the Institution for the Future which listed five predictions for the ways tech is going to change our lives in the next ten years. The driving force behind how technology is going to change our lives isthe “ever-increasing hunger for data” which will “fundamentally change the way we live our lives over the next decade.” According to the Times article, “in the future, people might be able to personally sell info about their shopping habits, or health activities to retailers or pharmaceutical companies,” which means that we might possibly see an economical shift in which personal data will be able to be shared, bought, or sold with more benefits to the consumer. With the introduction of the first directional shift, the information economy, individuals will be able to choose what they do with their information, therefore possibly leading to more opportunities for both individual, and widespread, financial or social gain.

Stemming from the increased dependence on data and the shift to an information economy, we will definitely see networked ecosystems, such as the Internet of Things continue to expand. The Internet of Things is described as a network of physical objects, from basic household items to cars, which are embedded with technologies that enable an exchange of data via the internet. Could you imagine waking up one morning to your alarm clock which is connected to your smart phone, which then sends a message to your shower to turn on? Then after you turn off the shower, a message is sent to your coffee pot to start brewing a cup, which then signals to turn on the kitchen lights and flip the television to the morning news? Or how about having your refrigerator identify when you are low on milk so that it can send you a reminder on your way home from work to pick some up after you pick the kids up from school? All of these instances seem a bit foreign right now; however, we’re already seeing and experiencing the beginning of the Internet of Things. The cross compatibility of all of these inanimate “things” promises to make our lives easier, more efficient, and possibly even safer. We’ve already began to see self-driving cars start to become a reality and these will likely revolutionize not only the automobile industry, but how we get from place to place, the numbers of accidents on the roadways, insurance costs, and many other facets of our lives.  

While the Internet of Things may gather information about our daily decisions, the third shift caused by the information generation is the continued creation of increasingly sophisticated algorithms which may end up actually aiding our daily decisions at work. In the article “2025 Tech Predictions Both Thrilling and Scary”, it is stated that “tech leaders increasingly are saying that we’re moving to a world where employees will have smart decision-support systems.” These smart decision-support systems operate under what is known as augmented decision-making. Augmented decision-making is referred to by Daniel J. Power as, “when a computer serves as a companion, advisor and more on an ongoing, context aware, networked basis.” So while data analytics have given us information to base future decisions off of, what augmented decision-making and its systems do is offer real-time information, basically in the form of suggestions in order to help individuals make important decisions. Having these support systems will be like having a second opinion for everything; however, the algorithm produced information given will be optimal and will likely be more accurate than another human being would. This however, causes me to raise one important question; how long can these systems assist in decision making before they eventually replace the workers outright? While I think there are certainly fields that can benefit from this, such as the medical field where a doctor could use these tools to determine a more accurate prognosis, there are some jobs that could completely be replaced by these systems and this could have a profound effect not only on people’s lives, but also on our economy.

The fourth predicted shift is known as “multi-sensory communication.” In this shift, information will be able to be communicated and received through multiple human senses. We can see an example of this in the recently released Apple Watch. Instead of ringing or vibrating, the watch will actually “tap” an individual on their wrist to let them know when they have a text or a notification. In the Institute for the Future’s report, it expands on multi-sensory communication by stating, “in a world saturated with competing notifications, multi-sensory communication of information will cut through the noise to subtly and intuitively communicate in novel ways that stimulate our senses.” The addition of senses such as touch, smell and taste, as well as new experiences with sight and sound, will not only change the way we communicate socially, but it will also change how developers, retailers, and marketers create products and appeal to customers. What this change will ultimately mean is that we will begin to stray away from the screens we hold and physically interact with, and transition to what the Institution for the Future describes as “screenless communication tools that allow people to blend the digital and physical in more fluid, intuitive ways.” The idea of blending the digital and physical can be seen in the immersive marketing tactic that the Marriott Hotels launched in late 2014 called ‘The Teleporter.’ The Teleporter is a virtual reality experience that was programmed to allow users to “experience” and virtually transport to Hawaii or London. The technology featured a virtual headset and wireless headphones, along with several sensory triggering features such as producing heat, wind and mist, all working in sync to give the user a realistic experience of what it is like to be on the beaches of Hawaii or strolling through London. While this marketing strategy seems to be a bit over the top right now, we will definitely be seeing similar tactics being used in the next ten years both inside and outside of our homes.

After all of this talk about sharing data and personal information and how it is going to transform life as we know it, I’ll introduce the fifth, and in my opinion, the most important shift: privacy enhancing technology. With the vast amount of data that will be produced and received, there will be a demand for better tools for privacy and security. There must be a common ground found between the individual users who are concerned about their privacy and the companies leveraging their data in order to make sure that people’s information is protected and innovation does not cease because of personal exposure. There are predictions of “cryptographic breakthroughs” which will hopefully help in minimizing the number of hacks and breaches on companies and individuals, as well as continuous changes and updates to policy that will ensure protection to both the producers and consumers. It is a must that privacy is continuously advancing while the amount of data being shared concurrently increases, because if not then all of our lives will essentially become openly available to anyone, and that is terrifying.

The information generation is upon us. We have already began aggregating, analyzing and using data and information to enhance our lives. With the digital and physical worlds beginning to come together in other places besides computers and cellphones, we are in for an innovative, exciting, and possibly even scary next ten years where the only things that are certain are uncertainty and data. I’m curious to see where I am at in 2025. I’m interested in what my cellphone, if they even exist anymore, will look like and what it can do. I’m a bit nervous about the fact that policy tends to not be able to keep up with the speed of technological innovation. I am excited to see how companies will incorporate all of our senses into technology and how this might enhance and change our lives. How am I going to be using technology at home, at work, in social settings? It is going to be unlike anything that any of us have ever experienced before, but I am very interested in seeing how much technology is going to change in front of my eyes over the next ten years.


Installing Infragistics Ultimate Without an Internet Connection

$
0
0

The Infragistics Platform Installer was created to help make it easier for users to install our various products.  It achieves this by downloading the installers and updates which have been selected by the user through the UI.  In some instances, the Platform Installer may have difficulties connecting to our servers. This is caused by very strict firewall rules on the network used to run the installer. These instances may result in the following errors:

  • System.Net.WebException: The operation has timed out
           at System.Net.WebClient.DownloadFile(Uri address, String fileName)
           at System.Net.WebClient.DownloadFile(String address, String fileName)
           at Infragistics.Wrapper.Interface.Utilities.AutoUpdatesUtility.UpdateRTMDownloadUrls()
  • An error occurred while downloading . No URI for this file has been set. Please verify that there is an active internet connection and try again.
  • System.Net.WebException: Unable to connect to the remote server --->
       System.Net.Sockets.SocketException: No connection could be made because the target
          machine actively refused it

Unfortunately, in these cases, there is not much we can do.  The network would need to allow access for the installer to download files from our server, which may not be possible under certain networks. Under these circumstances, we provide an offline installer which contain the individual product installers. This enables the Platform Installer to complete the installation of our various products without the need to connect to our servers.

You can access the offline installer in two ways.  The first only applies if you’ve registered a product key to your account.  Simply access your account page to view a list of registered product keys.  Clicking a product key will display a list of “Product Downloads” associated with the product key you’ve selected.  For example, the list includes options such as, “Infragistics 2015 Vol. 1 Product and Samples” and “Infragistics 2015 Vol. 1 Complete Bundle”.  Choosing one of these options will allow you to download an “offline” version of our Platform Installer.

The second way to access the offline Platform Installer is by navigating to our Products Help & Download page, or clicking here, and click on the “Offline” link under the Package installer section.  This link will provide you with an offline Platform Installer for the latest version of our Infragistics products.
 
Note, the “offline” download includes the Platform Installer. However, some options are still available which require a connection to our server. One of these options would be to check and download the latest service release. An example of how our 15.1 installer looks is shown below:

By default, the option to download the latest service release is checked; so you will want to uncheck it.  Once complete, click the next button and complete the installation without the need to download anything extra.

If you need the service release you can download it by navigating to the My Keys & Downloads page, or by clicking here.  Simply click on the product key for the version you want and then select the Service Releases tab.

Here is a list of all the service releases for 15.1 which are available at the time of writing this post.  Simply download the one you require and install them after you have the main product installed.  That’s all there is to it!

Line Charts: Where to Start?

$
0
0

I've previously explained that it is essential that the bars of bar charts start at 0. The reasoning is simple: we use relative lengths of bars to compare values, so starting a bar somewhere else leads to false judgements. But what about line charts?

Below is a line chart with three datasets: A, B and C. We can see that:

  1. all lines are well above zero across all the years;
  2. A is roughly flat;
  3. B trends downward with a jump in the mid 1980's;
  4. C trends upwards.

Only point 1 above is enhanced by starting the y axis at 0. If we care more for trends, gradients, and the size of noise then focusing our chart around the area that actually contains data (as below) will help us to see these aspects at an improved resolution. That's true whether we're looking at different sections of one line or comparing across multiple lines.

With this improved resolution we can now see just how big the jump in the mid 1980's is for B - it's a change of 3 or 4 in Value in a single year. We can see that the upward trend in C isn't present in the early years. There might even be a hint that A trends ever so slightly upwards too. Further, while a table is the best option for displaying very precise information, this second chart is still an improvement on the first when it comes to accurately estimating values for a given year.

I've tried to make the case that it isn't generally necessary to include 0 on the vertical axis of a line chart and that there are frequently advantages to not doing so. Nevertheless, it can be useful to guide your audience away from making the assumption that the y axis does start at 0. The chart below illustrates a potential issue.

The problem with this chart is the visual metaphor of line D crashing to the bottom. Of course if the y axis started at 0 this wouldn't be a problem. But we don't need to extend our axis that far to reduce the salience of the misleading metaphor; even a little extension helps.

However, D is still fast approaching the dark(er) horizontal axis at the bottom. While the axis lines provide convenient separators between chart area and labels, they're not strictly necessary. So we can remove the x-axis line and tick marks without any loss in meaning.

Still, the labels themselves could be seen as an indicator of line D's fast approach to the bottom. Why not move them to the top?

We could probably stop there. But I like experimenting. The final change I'm going to make to this chart is more of a novel, but subtle, experiment. Rather than simply suppress one visual metaphor - the line crashing in to the axis at the bottom - we'll attempts to replace it with another. By fading away the bottom of the chart area we'll try to convey the idea that the vertical scale actually continues on downwards into the distance.

Is this last change helpful, a hindrance or neither? I'm not sure. I don't think it's particularly straightforward to implement in most charting software. Hence, one of Colin Ware's guideline for information visualization (Colin Ware, Information Visualization, Third Edition, page 24) seems relevant: "Consider adopting novel design solutions only when the estimated payoff is substantially greater than the cost of learning to use them."

So far the discussion has been centered entirely around modifying the vertical scale. The horizontal extent of the datasets has been ignored or it has been implicitly assumed that what's been visible is all there is. Frequently time series are cropped in the horizontal direction. This may seem like a dubious activity but is frequently just used as a means of increasing resolution over a specific period of interest. In the latter case this is exactly the same benefit that we saw above from reducing the vertical axis. There is, however, a notable difference. Reducing the vertical extent of a line chart will generally only reduce the whitespace. Cropping the horizontal axis reduces whitespace and removes data from view. For that reason, when you first see a line chart you have reason to distrust, perhaps the first question to ask is "Why does the x axis start there?" and not "Why doesn't the y axis start at/include 0"? Of course, when you're making your own charts you should ask yourself both of these questions.

What's New in IG TestAutomation 2015.1

$
0
0

The primary focus for Infragistics Test Automation is to offer you peace of mind. Such that when you develop with our controls, your teams can seamlessly implement automated testing of the user interface (UI) to confidently produce higher-quality releases. IG Test Automation, currently supports our Windows Forms controls via HP’s Unified Functional Testing (UFT) and IBM’s Rational Functional Tester (RFT).  We also support our WPF controls via HP’s UFT.

As IG Test Automation’s purpose is to automate tests of the UI of applications using IG controls, this what’s new will start off with the new controls. I will follow with changes in existing controls that had changes that would affect how the UI behaved, lastly I’ll list any bug fixes that were implemented this cycle.

New Infragistics Controls


IG WPF’s XamTreeGrid

The xamTreeGrid control is the latest addition to the Data Presenter family of controls. It arranges data in a tree grid layout. Essentially the control is a xamDataPresenter that implements a single view (a tree view) which cannot by dynamically switched.

 XamTreeGrid Example

 

 

IG Controls with UI-Altering Improvements


More Right to Left Support in Windows Forms

We started in 14.1 introducing Right to Left support in our of our editor controls. In 15.1 we expanded our right to left support to our UltraExplorerBar.

IG Windows Forms' User Voice Requested Features

We regularly turn feedback and requests from our customers, and turn it into features. This release was no different. There were a number of features from our user voice implemented in our controls this release. Below are those features that had IG TestAutomation had to specifically implement for. Have an idea for one of our products, submit it through User Voice here

  • Print Preview Dialog, Select Printer button
  • UltraGrid ColumnChooser, Select multiple columns at once

IG WPF's XamSpreadsheet Improvements

While there were several improvement’s to the XamSpreadsheet, including modifying the user functionality when workbook and worksheet protection is enabled. It was the addition of underline and hyperlink support that affected the UI. Via key commands of changing the underline format of the cell, or clicking on and activating the hyperlink of a cell.

New Bug Fixes in 2015.1

TA Product

Control

Description

Win Forms for HP

All

Trial Period Expires occurs during record or replay against CLR 2 assemblies with UFT, Windows 7 64-bit

Win Forms for IBM

UltraExplorerBar

RFT does not record properly against deeply nested ExplorerBar

WPF for HP

XamDockMananger

Controls added directly to the XamDockManager, instead of via a ContentPane were not recognized.

WPF for HP

XamDataGrid

Accessing the second filtered record throws out of index runtime error

WPF for HP

XamDataGrid

The filtering window is not recognized when Excel Style Record Filtering of th XamDataGrid is activated

WPF for HP

XamPivotGrid

The field chooser of the XamPivoGrid is not recognized

 

Download the free trial of IG TestAutomation for HP 15.1
http://www.infragistics.com/products/windows-forms-test-automation-for-hp/download

Download the free trial of IG TestAutomation WPF for HP 15.1
http://www.infragistics.com/products/wpf-test-automation-for-hp/download

Download the free trial of IG TestAutomation for IBM RFT 15.1
http://www.infragistics.com/products/windows-forms-test-automation-for-ibm/download

Voice your suggestions today, for the products of tomorrow 
http://ideas.infragistics.com/

Setting up an Application in Azure AD for Office 365 API Access

$
0
0

Introduction

To understand how the Office 365 API works, it might be good to explore the underlying REST API and see what happens “under the hood” to get a clear idea of the interactions between Azure AD, authentication and authorization, as well how to incorporate interaction with the Office 365 data.

In this blog post, we will look in to the configuration and setup of the Application in Microsoft Azure AD. The same will be used in the part 2 when trying out the fiddler to test the REST API.

It’s important to note that we will be working with the REST API in this blog post and NOT using the Office 365 Tools for Visual Studio client SDK.

Getting Started

The first step to get started is to login to your Microsoft Azure account and register and configure the application in the Azure Active Directory within your tenant. You will also need to set the permissions that are required for your app.

Login to Microsoft Azure with your login credentials (Office 365 login credentials), browse to the Azure AD Portal and navigate to your Azure AD account. Then click on the applications and then click "Add button" from the bottom bar in the "What do you want to do?" wizard, select "Add an application my organization is developing" and provide a name for the application.

For the example I’ll create in this post, let’s use the name "InfragisticsDemo". From here, let’s select "Web Application and/or Web API".

Click the Next button, then enter your Sign-On URL and Application ID URL.

Your application is now created and registered in your Azure AD. Within a few minutes you will be redirected to the application's page in the Azure AD, where you can edit the application-related configurations for connecting from your Mobile or Web application.

Click on the Configure tab in the application, which will display the configuration-related details of the application.

You’ll see here that there are some configuration items that are very important and interesting for the application to connect, including:

  • Client ID
  • Client Secret
  • Reply URL

The Client ID is a unique identifier for your application. You will need to use this if your application needs to access data.

The Client Secret is a key that your app will need if your app reads or writes data in Windows Azure AD, such as data that is made available through the Graph API. You can create multiple keys to address key rollover scenarios, and you can delete keys that are expired, compromised, or no longer in use. To generate these keys, select the duration. Once you save the settings, the key will be displayed only once.

The Reply URL is the physical address for your app to which Windows Azure AD will send SAML authentication tokens for authenticated users. In this scenario, we need not worry about what happens after the authentication; we only need to get the Token in Fiddler.

Below are the details of our demo application:

Client ID: ae2bae60-fc94-411e-bba0-43083e42ab1a

Reply URL: http://Infragistics.com

Client Secret Key: E/g1v+Eryn1d2cAEWsRTeb/SIajLPYv8CjQCDCr7HmY=

Now you should copy the values in your favorite text editor, because we’ll need these when we test the REST API when using Fiddler.

Configure the Office 365 Application Permissions

The next step will be to setup the application permission to enable the application access to the Office 365 data.

  1. In the bottom of the Configure screen, click the “Add application” button.
  2. In the Permissions to Other Applications dialog, select Office 365 Exchange Online and Office 365 SharePoint Online and click ok.

      3. From here, you can select the permissions that are needed for your App. The list of possible permissions include:

 

Exchange Online permissions

  • Read users' calendars
  • Have full access via EWS to users' mailboxes
  • Read users' mail
  • Read and write access to users' mail
  • Send mail as a user
  • Have full access to users' calendars
  • Read users' contacts
  • Have full access to users' contacts

 

Office 365 SharePoint Online permissions

  • Run file search queries as a user
  • Read items in all site collections
  • Edit or delete items in all site collections
  • Create or delete items and lists in all site collections
  • Have full control of all site collections
  • Read users' files
  • Edit or delete users' files

For the demo, let’s select all the permissions which we will be using in the upcoming articles as well, then click the save button which is found in the bottom bar.

This step completes the setup of the application in the Azure AD. In this blog post, we saw how to add your application to Azure AD, configure the permissions and identify the necessary properties like Client ID, Client Secret, etc. And in the next blog post, we will see how to use Fiddler to work with the raw data and work with the Office 365 Data for the above application. Stay tuned!

Webinar Recap: The Top 3 Must-Haves for a Successful Enterprise Mobility Solution

$
0
0

Today’s workforce is global and mobile. The “Bring Your Own Device” (BYOD) trend is a fairly new paradigm which has created a fast moving train coming right at IT professionals, urging them to react fast.

In our recent webinar “The Top 3 Must-Haves for a Successful Enterprise Mobility Solution”, Anand Raja, Global Solutions Consulting Manager at Infragistics and Technical Evangelist, gives out the 3 secrets that will arm you with the critical criteria to follow when choosing the most optimal EM solution to your users.

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

Here is a sneak peak of some of the pressing enterprise mobility challenges Anand is sharing his insights on:

User Focus and UX

Since the introduction of smartphones and tablets, the way we perform everyday personal and work activities has changed substantially. The consumerization of IT, or the influence of technology, which is designed first and foremost for consumers, has left employees expecting the same fluid and connected experience across private and enterprise applications. This is why user needs are now one at the center of mobility decisions.

Security

With so many mobile devices in the field, it is no surprise that enterprise IT departments relate BYOD policies with privacy concerns and company data leakage nightmares. The challenge in front of enterprise IT is how to keep up with constant device upgrades and at the same time provide for the secure management of all connected devices (IoT), enterprise applications, content, and data, using MDM (Mobile Device Management), MAM (Mobile Application Management), and MCM (Mobile Content Management) solutions.

Webinar: The Top 3 Must-Haves for a Successful Enterprise Mobility Solution

Mobile Development & Deployment

Enterprises already have long backlogs with mobile apps waiting to be developed. CIOs are searching for ways to shorten development cycles with the help of high-productivity platforms, where little to no coding is needed. Nowadays, it is crucial to be able to innovate fast in order to stay competitive. This is where low-coding platforms, such as Infragistics’ mobile SharePoint platform come in handy in enabling enterprise innovation.

Another long-standing debate is where to deploy enterprise mobile apps – should enterprises trust external cloud providers, such as Amazon and Microsoft, or keep apps in-house? The cloud model is compelling with its benefits of flexibility and operational cost savings, but is it the right decision for every enterprise?

Big Data on the Go

Employees, LOB managers and executives need to access data and make critical decisions day-today no matter where they are. Mobile business intelligence solutions can deliver real-time business information to user devices exactly when they need it, online or offline. The possibility of always having the data you need, personalized to your way of work, and to even be able to collaborate on it with colleagues on the go, has empowered a shift in productivity we never imagined!

Mobile opportunities in front of enterprises are vast – the question is, how to decide which ones to pick? Watch Anand Raja’s webinar to learn the top 3 must-haves for a successful enterprise mobility solution here.

Looking for a comprehensive and secure mobile Office 365 and SharePoint solution, which you can customize to your preferences? Look no further. Download our SharePlus Enterprise for iOS free demo now and see the wonders it can do for your team's productivity!

SharePlus for SharePoint - Download for Android

Viewing all 2223 articles
Browse latest View live