License giveaway

close up photo of tied blue box

Fotografie de Suzy Hazelwood pe Pexels.com

iOS or macOS developer? You can be one of the 3 lucky winners who’ll get free, perpetual, single-developer licenses for Ganttis.xcframework on Feb. 20!

Think about it: who knows when you’ll need to present some data using a Cocoa based timeline view, or within a fully customizable interactive Gantt chart, supporting multiple types of bars and dependencies, and even offering built-in auto-scheduling behavior!

All you need to do to get a chance to win is to retweet this. More information is provided in the redistributable tweet itself. And if you’re interested to check the framework in your app already, you can download the full featured trial version today!

Posted in Promotions | Tagged , , , | Leave a comment

Ganttis 2.0

Hey there, we have news! We’ve just released a major update for our macOS and iOS Gantt chart components – Ganttis 2.0.

Ganttis demo screenshot

We’ve added a new macOS component that integrates an interactive Gantt chart diagram with a classic Cocoa OutlineView into a very easy to use OutlineGanttChart class.

A lot of other improvements and smaller additions are also included, both for macOS and iOS development.

And it’s the first time for us to release an XCFramework – the new way that Apple recently envisioned for distributing multi-target binaries – finally a package that… well, just works.

Posted in Development Components | Tagged , , , , , | Leave a comment

Default styles for WPF components from Gantt Chart Light Library

When we designed Gantt Chart Light Library we considered avoiding Microsoft’s own theming/default styling support (using separate theme assemblies) and we decided to simply inject the default styles at component level using Resources.MergedDictionaries internally. It works this way vey well, except that this limits the possibility for developers to override default styles at container level:

<Window.Resources>
  <Style TargetType="pdgcc:GanttChartDataGrid" BasedOn="{StaticResource {x:Type pdgcc:GanttChartDataGrid}}">
    <Setter Property="StandardBarFill" Value="Green"/>
  </Style>
</Window.Resources>

This happens, of course, because the internally injected resources are at a lower level, and GanttChartDataGrid will use its own default style.

To resolve this we recommended you to simply use a resource key to identify the style that is later applied on the component instance:

<Style x:Key="MyStyle" TargetType="pdgcc:GanttChartDataGrid" BasedOn="{StaticResource {x:Type pdgcc:GanttChartDataGrid}}">
...
<pdgcc:GanttChartDataGrid x:Name="GanttChartDataGrid" ... Style="{StaticResource MyStyle}"/>

But if you really want to avoid the hassle, here is a workaround using some code behind. In your container (e.g. Window) constructor, add these lines of code after InitializeComponent call to add the required resources at container level and remove them from component’s internal level:

Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/DlhSoft.ProjectData.GanttChart.LightWPF.Controls;component/Themes/Generic.xaml") });
GanttChartDataGrid.Resources.MergedDictionaries.Clear();

This way, the custom default styles redefined in container’s Resources collection would properly be found and applied to the component without having to use x:Key. Enjoy!

Posted in Development Components | Tagged , , | Leave a comment

Gantt Charts on ASP .NET Core

Greetings from Debian 10! We’ve just tried it, and it works!

No, we don’t refer to Linux itself (that works well too), but our recently updated GanttChartWebLibrary NuGet package (v. 5.3.2), which now includes Gantt Chart and other HTML extensions for ASP .NET Core 2.1+ too – as you requested!

They are integrating, of course, the client side components from Gantt Chart Hyper Library, but for which – don’t worry – you wouldn’t need to buy a separate license; a [re-]new[ed] Gantt Chart Web Library would suffice.

And by the way, you don’t need a license at all to try this now – as always with DlhSoft products, you may use the full featured package for free for trial purposes for as long as you need. And with unlimited support from our devs too!

And speaking of support… We’ve also prepared a small demo app to get you started fast (runtime screenshot below), with full source code available on GitHub today. Enjoy!

GanttChartView-on-ASP.NET.Core

dotnet run for Demos.Core on Linux + GanttChartView demo in browser

Posted in Development Components | Tagged , , , | Leave a comment

Simple ADO .NET connection for loading Gantt Chart items

Yes, sometimes you must use legacy systems, like ADO .NET, e.g. to run data reading code at low level but also with higher performance.

If you want to load Gantt Chart items with dependencies (predecessor items), however, you should run two loops on the data (but once over cached values) to ensure the predecessor items are correctly loaded: it’s important to first initialize all items in a first loop, and then load their dependencies in a second one because they are not always top to bottom and (also for performance reasons) the component’s predecessor items need to reference their source Gantt Chart items by memory address rather than by index or ID.

To show how you to do this, we’ve prepared a small C# sample app for WPF, available here. We hope it helps.

Posted in Development Components | Tagged , , , , , , | Leave a comment

Fixed work items in GanttChartView for JavaScript, TypeScript or ASP .NET / MVC

Having been already available on WPF since a couple of builds ago, we thought it would be good for people using JavaScript, TypeScript or ASP .NET components (i.e. developing Web applications) to have the same feature available there: fixed effort tasks.

Although in Gantt Chart Hyper Library and Web Library the total effort value is the one needed, we kept the field name hasFixedEffort (HasFixedEffort in .NET) similarly to WPF GanttChartItem‘s property for convenience reasons.

Simply set item.hasFixedEffort to true upon initialization or (in JavaScript) call ganttChartView.setItemHasFixedEffort(item, true) later to enable the feature for any individual leaf item that you want to have assignment allocations rather than the total effort updated when task bar is resized, i.e. its duration changes. (Of course, this implies that the task has at least one resource assigned, or the default mechanism would be used instead.)

Note that in the latest builds of both our JavaScript and ASP .NET based libraries we introduced item.areDependencyConstraintsEnabled = false support too (also like the WPF component’s “manual scheduling” feature), to allow you to disable auto-scheduling for individual items whenever needed (applicable when ganttChartView.areTaskDependencyConstraintsEnabled = true.) Enjoy!

Posted in Development Components | Tagged , , , | Leave a comment

Priorities for leveling resources with GanttChartDataGrid for WPF

With the latest builds of Gantt Chart Light Library, the WPF based GanttChartDataGrid component may level resources for you by taking item priorities in considerations as well.

To set it up, simply update GanttChartItem.LevelingPriority int values from their zero default on yout leaf items according to your needs, and there you go – when you’ll call LevelResources() method of the component, the tasks would be rescheduled so that resources are not overallocated and also ensuring that for any resource the assigned item that have higher priority will be scheduled before any other items assigned to the same resource.

It’s also easy to setup a column allowing end user to set up leveling priorities, if you want. However, we recommend that you hide these values for summary items (as they are irrelevant in resource leveling algorithm’s context):

<DataGridTemplateColumn Header=”Priority”>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <TextBlock Name=”TextBlock” Text=”{Binding LevelingPriority}”
        Padding=”4,2″/>
      <DataTemplate.Triggers>
        <DataTrigger Binding=”{Binding HasChildren}” Value=”True”>
          <Setter TargetName=”TextBlock” Property=”Visibility”
            Value=”Collapsed”/>
        </DataTrigger>
      </DataTemplate.Triggers>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
  <DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
      <TextBox Name=”TextBox” Text=”{Binding LevelingPriority}”
        Padding=”1,1″/>
      <DataTemplate.Triggers>
        <DataTrigger Binding=”{Binding HasChildren}” Value=”True”>
          <Setter TargetName=”TextBox” Property=”Visibility”
            Value=”Collapsed”/>
        </DataTrigger>
      </DataTemplate.Triggers>
    </DataTemplate>
  </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

Posted in Development Components | Tagged , , , | Leave a comment