Personal tools

Views

Talk:Flex Scheduling Framework

From Adobe Labs

Table of contents
[edit]

Welcome!

Welcome to the Flex Scheduling Framework discussion page on Adobe Labs. Please enter your comments regarding this technology here. To help identify the author of comments, please create a new section and use ~~~~ at the end of your talk entries to automatically create a signature.

Comments should be added in list format, but feel free to add your comment under an existing comment to follow a thread structure. If you are responding to a thread, please use the H3 style for your subject (=== TEXT ===) so that the page is easier to read.

Daniel T 11:16, 24 Oct 2006 (PDT)

[edit]

Setting Minimum Zoom Value

Hi, great work guys!! I'm already testing this at work and have a question...

Is there a simple way to make sure the zoom out is limited to a certain value (X) , assuming that the value of X will be determined by a certain limited time frame.

In other words I'm using the timeline to present different time frames, I'd like to set the zoom scroll minimum value so the user will not be able to zoom out and view anything out of the current time frame, the user will still be able to zoom in or out inside the timeframe.

Thanks.

Loso 16:53, 24 Oct 2006 (PDT)

[edit]

Scheduling vs. Charting

Hey guys,

Must say that I absolutely adore this component. The fifth sampler is kickass.

I've implemented something similiar with Flex Charting, using DateTimeAxis and a CategoryAxis, using a BarSeries with start and end-point.

The overlapping isn't quite as nice then though, so I've had to do split overlapping 'events' to different rows and pre-order the data quite a bit.

However, it's quite fast and all that. As for zooming I've used a custom HSlider with a scrollbar inbetween, so the user can change start and end date with that, and also drag the selected period over the entire timespan.

Guess I'll have to show that with a picture to demonstrate it though.

Anyway, this component beat mine so I'll have to start looking into if I could use it instead.

There is no contact address to any maintainer of this package, could you please post that somewhere.

Best regards, Erik Pettersson

mjewl 02:59, 25 Oct 2006 (PDT)

[edit]

Wrong Package names in classes

Hi,

There are errors in the package names in 2 classes

aalderson 23:32, 30 Oct 2006 (PDT)

[edit]

Future features

Fabulous job, guys!

I just started work on exactly the same thing last Friday... Some cool features I think would be nice: drag and drop of events in the layout and automatic rescheduling on overlap, maybe some conflict resolution based on a rule set, event auto scheduling based on event priorities...

Btw, zooming and coloring are absolutely delicious.

Man, this is great. Again, thank you for a wonderful idea.

alexfrates 16:46, 31 Oct 2006 (PDT)

[edit]

Scheduling Framework Features and Functions

This looks very promising. Draging and Droping events is almost a necessity to be useful. Resource based conflict checking is also important.

In my day job, I manage the implementation of a Clinical Scheduling application, and have a lot of insight into what works and does not work in appointment scheduling. With the resource conflict checking, we often schedule a patient, room, and equipment. If any of those three resources are not available, you should get a prompt telling you which of the resources is unavailable with the opportunity to override the warning or to proceed with the doublebooking.

Another useful feature is an appointment search feature. It takes the appointment duration and all the necessary resources, and returns a list of 5-10 available appointment times. Of course, the user may also want to search only certain days of the week and/or at certain times of the day. They may also want to search beginning on a future date.

Jfillman 21:43, 31 Oct 2006 (PDT)

[edit]

A Few UI Suggestions

Howdy, thanks to the developers for putting this framework together! It's definitely a great start.

Some thoughts that I have on ways to improve the framework:

I know some of these things are not framework issues per se, but having them reflected in the examples would I think lead to better solutions being implemented using the framework (we all love copy and paste!) I also know that all these things can be implemented by the developers, but again anything that is already there for them to use just makes the whole thing easier. Having good usability implemented in the examples means that developers who implement the framework will inherit at least some of that good usability even if it is not deliberate.

- Nathan Derksen

billdcat 10:43, 1 Nov 2006 (PST)

[edit]

iCalendar RFC-2445 compliant

Great start guys!

I'm about to embark on integrating the Cosmo CalDAV server (http://wiki.osafoundation.org/bin/view/Projects/CosmoHome) with your scheduling framework. Since there is no ics parser for actionscript I'll be using iCal4j for that and doing it server side (writing an AS3 ics parser is probably not a bad idea going forward). I'll extend your IScheduleEntry to enable it to support all iCalendar data and then of course change a bunch of your other code for the same reason.

I think this will be the ultimate solution as seen from a standards and data perspective. There is already no doubt that GUI-wise your calendar will have no competition. We just have to make it enterprise ready.

Cheers, bjorn
bjorn at harvold dot com

John Kowalski 03:06, 5 Nov 2006 (PST)

[edit]

Update ScheduleViewer dataProvider

Hey, guys, great work on this component.

I just found an issue (It's an issue to me). When the dataProvider changes, the changes are not reflected in the component (visually). Reading the code, i found this method in ScheduleViewer.as

 private function initializeEntryLayout() : void
 		{
 			if( dataProvider != null && entryLayoutImpl.dataProvider == null )
 			{
 				entryLayoutImpl.dataProvider = ArrayCollection( dataProvider);			
 			}
 		}

I think it should be

 private function initializeEntryLayout() : void
 		{
 			if( dataProvider != null )
 			{
 				entryLayoutImpl.dataProvider = ArrayCollection( dataProvider);			
 			}
 		}

Cause when modelChangedHandler is called, the entryLayoutImpl, need the updated dataProvider to redraw the content.

Thanks a lot. Hope this help.

Juan Pablo Warmerdam 05:40, 3 Nov 2006 (PST)

[edit]

Re:Update ScheduleViewer dataProvider

found the same bug and made the same fix, it works now, is a new version planed any time soon? thanks, Loso.

Loso 09:22, 5 Nov 2006 (PST)

[edit]

Bug Submissions and New Releases

Hi,

Thanks for the great feedback. We're looking into getting a bugbase set up so that people can formally submit bugs. However, we are limited as to the amount of time we can allocate to extending the framework, so we're also looking for the community to submit bug-fixes and enhancements as has happened here.

We will release updates to the framework as bug-fixes come in and have been added to the codebase.

Alistair McLeod 01:39, 6 Nov 2006 (PST)

[edit]

Documentation error, or my confusion??

According to the ASDocs, entryRenderer and entryLayout are read only properties, yet the examples clearly show them being set. Am I misunderstanding this, or is it a doc bug?

The Astorian 11:01, 14 Nov 2006 (PST)

This is a known limitation of the asdoc version we used. It marks every Bindable public property as read only. So, currently, for this information you'd need to look into the provided source code. All IFactory classes are writable btw, so you can provide even custom background and line areas.

Alex Uhlmann 08:57, 15 Nov 2006 (PST)

[edit]

A couple of observations

I have been using the scheduling framework for an application and came across a few issues or inconstancies.

1. I expected the behaviour of the item renderers to be consistant with the rest of the flex framework. When I tried to implement a renderer in Actionscript I found that the measure and updateDisplayList methods don't get called.

2. I expected the scheduling framework to act more like List. It is missing methods like 'labelFunction' and 'iconFunction' to name a few.

This is great work and someting definitely need in the Flex community. Thanks.

aalderson 21:59, 15 Nov 2006 (PST)

[edit]

Problems creating instances of ScheduleViewer in AS

I'm trying to dynamically create instances of a ScheduleViewer in an AS3 loop, and am having issues making the data render. I have an ArrayCollection, where each item is an array of appointments for a given day. In code, I'm handling it like this:

protected function showCal(appointments:ArrayCollection){
	for(var i:int=0;i<appointments.length;i++){
		trace("appointments.length:"+appointments.length);
		var newSched:ScheduleViewer = new ScheduleViewer();
		newSched.dataProvider = appointments.getItemAt(i);// contains array of appointments for a day
		var apptDate:Date = (appointments.getItemAt(i)[0] as IScheduleEntry).startDate;
		newSched.startDate = setStartTimeForDate(apptDate);
		newSched.endDate = setEndTimeForDate(apptDate);
		newSched.width=600;
		newSched.height=100;
		schedContainer.addChild(newSched);
	}
}
protected function setStartTimeForDate(date:Date):Date{
	trace(DateUtil.setTime(date,9 * DateUtil.HOUR_IN_MILLISECONDS));
	return DateUtil.setTime(date,9 * DateUtil.HOUR_IN_MILLISECONDS);
}
protected function setEndTimeForDate(date:Date):Date{
	trace(DateUtil.setTime(date,17 * DateUtil.HOUR_IN_MILLISECONDS));
	return DateUtil.setTime(date,17 * DateUtil.HOUR_IN_MILLISECONDS);
}

I am able to see from the traces that the data is there as expected, and im passing the expected start and end dates to the ScheduleView, yet they are constantly rendering without any items. Is there some other trick i need to use to make it work properly? If I pass just the first item to a ScheduleView tag, it renders properly.

protected function showCal(appointments:ArrayCollection){
	for(var i:int=0;i<appointments.length;i++){
		var apptDate:Date = (appointments.getItemAt(i)[0] as IScheduleEntry).startDate;
		if(i == 0){
			hardCodedScheduleViewer.dataProvider = appointments.getItemAt(i);
			hardCodedScheduleViewer.startDate = setStartTimeForDate(apptDate);
			hardCodedScheduleViewer.endDate = setEndTimeForDate(apptDate);
			hardCodedScheduleViewer.width=600;
			hardCodedScheduleViewer.height=100;
		}
		var newSched:ScheduleViewer = new ScheduleViewer();
		newSched.dataProvider = appointments.getItemAt(i);// contains array of appointments for a day
		newSched.startDate = setStartTimeForDate(apptDate);
		newSched.endDate = setEndTimeForDate(apptDate);
		newSched.width=600;
		newSched.height=100;
		schedContainer.addChild(newSched);
	}
}
protected function setStartTimeForDate(date:Date):Date{
	trace(DateUtil.setTime(date,9 * DateUtil.HOUR_IN_MILLISECONDS));
	return DateUtil.setTime(date,9 * DateUtil.HOUR_IN_MILLISECONDS);
}
protected function setEndTimeForDate(date:Date):Date{
	trace(DateUtil.setTime(date,17 * DateUtil.HOUR_IN_MILLISECONDS));
	return DateUtil.setTime(date,17 * DateUtil.HOUR_IN_MILLISECONDS);
}

<controls:ScheduleViewer id="hardCodedScheduleViewer" 
	width="600" height="100" />

which has me assuming im missing some key element of creating these dynamically. Can someone point me in the right direction?

The Astorian 08:17, 22 Nov 2006 (PST)

Try laying out multiple ScheduleViewer instances with a Repeater tag.

Alex Uhlmann 08:21, 19 Jan 2007 (PST)

[edit]

Bug?

Great job guys!!

I found a bug (or at least something that looks like one) which caused the ScheduleViewer in my implementation to ignore some entries, changed it and it works fine for me.

In com.adobe.ac.controls.scheduleClasses.layout.EntryLayoutItem the member x is typed as int. When large numbers where used as x it turned them to negative values and later ignored the related entries when rendering. I changed x type to Number and it works fine now…

package com.adobe.ac.controls.scheduleClasses.layout
{
	import com.adobe.ac.controls.scheduleClasses.IScheduleEntry;

	public class EntryLayoutItem
	{		
		//content
		public var data : IScheduleEntry;
		
		//layoutData
		//changed the line below 
                public var x : Number;

Lior Boord 05:55, 29 Nov 2006 (PST)

[edit]

Layout Bug?

In my opinion the schedule blocks aren't aligned correctly with the timeline/vertical line blocks. If you look at some examples some blocks have for example the time 14:00 but are some pixels away from the 14:00 vertical marker.

My fix:

in VerticalLinesLayout ::calculateItems:
change:
var numberOfItems : Number = Math.floor( totalMilliseconds / millisecondsPerColumn ) + 1;
to:
var numberOfItems : Number = totalMilliseconds / millisecondsPerColumn;

do the same for TimeLineLayout::calculateItems

Thomas Friedl 06:19, 1 Dec 2006 (PST)


[edit]

Usage of int - doesn't allow large enough range between start and end date

I have been using the scheduleing framework for a project and have found it to be excellent but there are a few tweaks I have had to make.

I have found a few problems with some of the layout code. In a lot of places 'int' was used as a type instead of 'Number'. The problem is that since you are using time to layout the items the values can be larger than the max value for int. An example of this is in BestFitLayout. In the 'findNonOverlappingPosition' method the first line sets x to and integer but if the startDate for the item and the start date for the schedule are far enough apart the values can be unpredictable and cause the items to not layout correctly.

The other problem is related. By using int for a value type for coordintes it doesn't allow large ranges between start and end date for the schedule. I have been working on tweaking the code for this.

I haven't looked at all of the code so I may be off base with this but my suggestion is to use actual pixels to layout the items. I find it odd that the contentWidth of the schedule is only 3000 - 4000 pixles but the x positions in the layout code is in the millions or billions.

I look forward to the next release.

[edit]

Setting selectedItem / selectedItems does not update view

Hi Guys, first this scheduling framework rocks! What's more, it's perfect timing for an in-house resource management tool I'm developing now.

When I pass selectedItem/selectedItems to ScheduleViewer, the selection did not update.

In com.adobe.ac.controls.scheduleClasses.viewers.EntryViewer

I added a call to updateSelection() in the setter for both variables, and the problem is gone.

public function set selectedItems( value : Array ) : void {

    selection.selectedItems = value;			
    //EMG - added
    updateSelection();

}

public function set selectedItem( value : IScheduleEntry ) : void {

    selection.selectedItem = value;			
    //EMG - added
    updateSelection();

}

Please let me know if I'm missing something :^)

Thanks, Evan Gifford

[edit]

Cannot have an entry more than about a month long

This is one more int vs. Number , doesn't look like it was listed above. At line 44, in the constructor of com.adobe.ac.controls.scheduleClasses.layout.EntryLayoutItem

Change: public var width : int;

To: public var width : Number;

I'm learning so much from studying your code and code structure. :^)

[edit]

Instantiation of ScheduleViewer with Zoom value doesn't display

When I instantiate a ScheduleViewer with a zoom value already defined (and then later adjust it with a HSlider), items do not display correctly until the HSlider is slid left or right and updates the zoom.

com.adobe.ac.controls.ScheduleViewer.as

in method createEntryLayout()

This is probably a hack, but here is what fixed it:

Replaced:

entryLayoutImpl.contentWidth = contentWidth;

With:

var adjustedValue : Number = _zoom / 100 * Math.sqrt( width );

entryLayoutImpl.contentWidth = Math.pow( adjustedValue, 2 );

Hope that helps :^) Evan Gifford

[edit]

Thanks

Thanks again for these reports and fixes. We'll look to gather them all together and put a new release out sometime this month. Alistair McLeod

[edit]

Timeline does not scale, Mac font issue

ScheduleViewer scales nicely, but Timeline does not. :(

Also, timeline entries show up for PC, but not on the two Macs in the office.

Thanks, Evan

[edit]

Timeline scroll policy to "on" prevents correct vertical measure

com.adobe.ac.controls.Timeline

Problem is, instantiation of Timeline with scrollPolicy="on" instead of "auto" causes the scrollbar to show up over the text.

This is easily fixed:

in override protected function measure():void

if (horizontalScrollPolicy == ScrollPolicy.AUTO && horizontalScrollBar) {

   measuredHeight += horizontalScrollBar.minHeight;
   measuredMinHeight += horizontalScrollBar.minHeight;

}

change to

if (horizontalScrollPolicy != ScrollPolicy. OFF && horizontalScrollBar) {

   measuredHeight += horizontalScrollBar.minHeight;
   measuredMinHeight += horizontalScrollBar.minHeight;

}

Thanks, Evan

[edit]

Timeline Layout and Vertical line layout does not work well with enrties with month long

hi all ,

Extending the "month long entries bug" ,

timelinelayout and verticalinelayout has a bug in their

calculateItems() methods

when you have an entry more than a month long,

the timeline show strange result ,

it repeats the "January" label for two timelinelayout item ,

see this image

[1]

where it should be "Jan" , "Feb"


this is because it deal with month as they have fixed time period (30 day)

which is not true

i fixed the calculateItems() methods like this:


In com.adobe.ac.controls.timelineClasses.TimelineLayout

i changes calculateitems() methods and add some helper methods

public function getRemDays(theDt:Date):Number
{
	var mon:Number = theDt.month + 1;
	var yer:Number = theDt.fullYear + 1;
	var days:Number = 0;
	while(theDt.month<mon && theDt.fullYear<yer)
	{
		theDt.setDate(theDt.date+1);
		days++;
	}
	
	locDate = theDt.getTime();
	return days * DateUtil.DAY_IN_MILLISECONDS;
	//return days;
}


public function checkForCurrDate(dt1:Number , dt2:Number):Boolean
{
	var startOfMonthDate :Date = (new Date(dt2));
	return dt1<=startOfMonthDate.getTime();
}


private function calculateItems() : void
{
	var totalMilliseconds : Number     = _endDate - _startDate;
	var entry : ITimeDescriptor        = getTimeDescriptor( contentWidth, totalMilliseconds );	

	var millisecondsPerColumn : Number = entry.date.getTime();
	//var numberOfItems : Number         = Math.floor( totalMilliseconds / millisecondsPerColumn ) + 1;
	numberOfItems = Math.floor(totalMilliseconds / millisecondsPerColumn);

	
	var columnWidth : Number = contentWidth / numberOfItems;			
	if( columnWidth < minimumTimeRangeWidth ) columnWidth = minimumTimeRangeWidth;
	
	_items = new ArrayCollection();
	/* xPosition = 0 initially */
	firstIndex= Math.floor( xPosition / columnWidth );
	
    lastIndex= Math.ceil( ( xPosition + viewportWidth ) / columnWidth );
	
	
	var myCurrentDate:Date;
	//if the unit of time is month 
	if(entry.date.getTime() == (30 * DateUtil.DAY_IN_MILLISECONDS) )
	{
			
	  	if(locDate==0)
		{
			locDate = _startDate;
		}
		
		if(remTotMilSec==0)
		{
			remTotMilSec = totalMilliseconds;
		}
		
		if(remTotMSforNumofColoumn==0)
		{
		  remTotMSforNumofColoumn = totalMilliseconds;
 		}
		
		if(remContWidth==0)
		{ 
			remContWidth = contentWidth;
		}
		 
		var locNumOfItms:Number ;

	    var i2 : Number = 0;
	    while(checkForCurrDate(locDate,_endDate))
		{
			
			var item2   : TimelineLayoutItem  = new TimelineLayoutItem();
			var numDays : Number              = getRemDays(new Date(locDate));
		
		    locNumOfItms  				  	  = remTotMSforNumofColoumn / numDays;
			
			
			remTotMSforNumofColoumn       	  = remTotMSforNumofColoumn - numDays

			var locColumWidth:Number     	  = remContWidth / locNumOfItms; 
			
			item2.width  					  = locColumWidth;  
			item2.height 					  = viewportHeight; 
			           
			if(i2==0)
			{
				item2.x  = i2 * locColumWidth;
				myCurrentDate                       = new Date(_startDate);
			}
			
		
			else
			{
				item2.x  = (TimelineLayoutItem(_items.getItemAt(i2 - 1)).x + TimelineLayoutItem(_items.getItemAt(i2 - 1)).width)+1; 
		    	myCurrentDate                       = new Date(locDate);
		    	myCurrentDate.date = myCurrentDate.date -1;
				
			}
			
			
			i2++;
			remContWidth 				      = remContWidth - locColumWidth;

			var data2 : ITimeDescriptor       = new SimpleTimeDescriptor();
			data2.description                 = entry.description;
			data2.date                        = myCurrentDate;				
			item2.data                        = data2;
			
			_items.addItem( item2 );
		 }
  		
  		locDate=0;
		remTotMilSec=0;
		remContWidth=0;
		remTotMSforNumofColoumn=0;
	
		
	}
	
	
	else
	{
		
		for( var i : Number = firstIndex; i <= lastIndex; i++ )
		{
		
			var item : TimelineLayoutItem = new TimelineLayoutItem();
			
			item.width  = columnWidth;
			item.height = viewportHeight;
			item.x      = i * columnWidth;
							
			currentDate = new Date( i * millisecondsPerColumn + _startDate );
			
			var data : ITimeDescriptor = new SimpleTimeDescriptor();
			data.description = entry.description;
			data.date = currentDate;				
			item.data = data;
			
			_items.addItem( item );
			
		}
	
	}
}

In com.adobe.ac.controls.scheduleClasses.layout.VerticalLinesLayout

i changes calculateitems() methods and add some helper methods


		
		public function getRemDays(theDt:Date):Number
		{
			var mon:Number = theDt.month + 1;
			var yer:Number = theDt.fullYear + 1;
			var days:Number = 0;
			while(theDt.month<mon && theDt.fullYear<yer)
			{
				theDt.setDate(theDt.date+1);
				days++;
			}
			
			locDate = theDt.getTime();
			return days * DateUtil.DAY_IN_MILLISECONDS;
			
		}
		
		public function checkForCurrDate(dt1:Number , dt2:Number):Boolean
		{
			var startOfMonthDate :Date = (new Date(dt2));
		
			return dt1<=startOfMonthDate.getTime();
		}

		
		protected function calculateItems( entryLayout : IEntryLayout ) : void
		{
			var timeDescriptor : ITimeDescriptor = getTimeDescriptor( contentWidth, totalMilliseconds );	
			var millisecondsPerColumn : Number = timeDescriptor.date.getTime();
		//	var numberOfItems : Number = Math.floor( totalMilliseconds / millisecondsPerColumn ) + 1;
			var numberOfItems : Number = Math.floor(totalMilliseconds / millisecondsPerColumn);
			
			var columnWidth : Number = contentWidth / numberOfItems;
			
			if( columnWidth < minimumTimeRangeWidth ) columnWidth = minimumTimeRangeWidth;
			
			_items = new ArrayCollection();
			var firstIndex : Number = Math.floor( xPosition / columnWidth );
			var lastIndex : Number = Math.ceil(( xPosition + viewportWidth ) / columnWidth );
			
			
			
			if(timeDescriptor.date.getTime() == (30 * DateUtil.DAY_IN_MILLISECONDS))
		
			{
				
								
			  	if(locDate==0)
				{
					locDate = _startDate;
				}
				
				if(remTotMilSec==0)
				{
					remTotMilSec = totalMilliseconds;
				}
				
				if(remTotMSforNumofColoumn==0)
				{
					
					remTotMSforNumofColoumn = totalMilliseconds;
					
				}
				
				if(remContWidth==0)
				{
					remContWidth = contentWidth;
				}
				
				var locNumOfItms:Number ;
			
			
		
			    var i2 : Number = 0;
			    while(checkForCurrDate(locDate,_endDate))
				{
					
					var item2   : VerticalLinesLayoutItem  = new VerticalLinesLayoutItem();
					var numDays : Number              = getRemDays(new Date(locDate));
				
				    locNumOfItms  				  	  = remTotMSforNumofColoumn / numDays;
					
					
					remTotMSforNumofColoumn       	  = remTotMSforNumofColoumn - numDays

					var locColumWidth:Number     	  = remContWidth / locNumOfItms; 
					
					
					var lineRenderer2 : Stroke
							if( dottedGridLines )
							{
								lineRenderer2 = new DottedVerticalLineRenderer();
								//lineRenderer.weight = i % 2 ? 0 : 2;
								lineRenderer2.weight = verticalGridLineThickness;
								lineRenderer2.color = verticalGridLineColor;
								lineRenderer2.alpha = verticalGridLineAlpha;
							}
							else
							{
								lineRenderer2 = new LineRenderer();
								lineRenderer2.weight = verticalGridLineThickness;
								lineRenderer2.color = verticalGridLineColor;
								lineRenderer2.alpha = verticalGridLineAlpha;
							}
							
					item2.lineRenderer = ILineRenderer( lineRenderer2 );				

					item2.width  					  = locColumWidth;  
					item2.height 					  = viewportHeight; 
					
					           
					if(i2==0)
					{
						item2.x  = i2 * locColumWidth;

					}
					
				
					else
					{
						item2.x  = (VerticalLinesLayoutItem(_items.getItemAt(i2 - 1)).x + VerticalLinesLayoutItem(_items.getItemAt(i2 - 1)).width)+1; ;
						
					}
					
					
					i2++;

					remContWidth 				      = remContWidth - locColumWidth;

					_items.addItem( item2 );
				 }
		  		
		  		locDate=0;
				remTotMilSec=0;
				remContWidth=0;
				remTotMSforNumofColoumn=0;
			}
			
			else
			{
		    		for( var i : Number = firstIndex; i < lastIndex; i++ )
						{
							var item : VerticalLinesLayoutItem = new VerticalLinesLayoutItem();
			
							var lineRenderer : Stroke
							if( dottedGridLines )
							{
								lineRenderer = new DottedVerticalLineRenderer();
								//lineRenderer.weight = i % 2 ? 0 : 2;
								lineRenderer.weight = verticalGridLineThickness;
								lineRenderer.color = verticalGridLineColor;
								lineRenderer.alpha = verticalGridLineAlpha;
							}
							else
							{
								lineRenderer = new LineRenderer();
								lineRenderer.weight = verticalGridLineThickness;
								lineRenderer.color = verticalGridLineColor;
								lineRenderer.alpha = verticalGridLineAlpha;
							}
							
							item.lineRenderer = ILineRenderer( lineRenderer );				
					
							item.height = viewportHeight;
							item.x = i * columnWidth;
							
							item.y = 0;
							
							_items.addItem( item );
						}

		  }
		  
		}


after this change , the timeline and vertical line works correctly but

i have a problem when i set the default zoom to (155) so that

the items disply with unit of time as month.

the timelines items does not display ! until i change the zoom to

"left and then back to right .

i find when debugging (when zoom =155) ,

renderer method in the com.adobe.ac.controls.timelineClasses.TimelineViewer run in an endless loop .

any help on that ??

if any want the complete framwork after the changes i made

feel free to contact me at

ibrahim.h@gmail.com

thanks

--ibrahim shehri 00:00, 18 Feb 2007 (PST)ibrahim

[edit]

Timeline bug in Mac and Linux Flash Player

We are also experiencing the timeline bug where it doesn't display using the Mac Flash Player 9,0,28,0 or the Linux player version 9,0,31,0.

None of the pre-compiled samples, nor versions we compiled, display the timeline at all. The same samples tested on windows FP v. 9,0,28,0 display fine.

SimpleTimelineEntry can be rendered on it's own without an issue so it's not a font issue like Evan seemed to be suggesting.

UPDATE: I'm not sure if this will help anyone but I edited TimelineViewer.as to addChild( renderer ) into another component on the stage and it successfully placed the entries into the target.

Has anyone else solved this issue?

Sam

[edit]

Re: Timeline bug in Mac and Linux Flash Player

sam :

what do u mean by another compnent ?

can you post your code ?

or send me please TimelineViewer.as with your changes

on my email

ibrahim.h@gmail.com

ibrahim shehri

thanks

ibrahim shehri 21:53, 20 Feb 2007 (PST)

iiiiii

[edit]

Changing the width of ScheduleViewer at runtime

I've seen that changing the width of the ScheduleViewer object at runtime (let's say if user resize their window), doesn't rescale the timeframe in neither the Timeline or Viewer.

so if I have a start/end date of 8AM to 5PM and my Viewer is 300 pixel wide, and I resize it to let's say 600 pixels,

now I'll have 8AM to 11PM.

I didn't see any way to make it so the timeframe remains at 8AM to 5PM, anyone found something about this?

Thanks,

Francois Cournoyer, Integration New Media, Inc.

[edit]

Framework Status? Release timetable?

Hi!

Does anybody know what the status of this frame work is? Is this still in active development? What is the release timetable? Besides the alpha version, is there a beta version that I could play with?

Thanks much!

[edit]

draggable item edges, drag and drop of items

Guys,

really nice work - also very helpful for me to learn how to build custom components. I would really like to see ability to drag the edges of an item to extend/shrink the time for example. Also, ability to click on an item and drop it to another time slot would be really cool

Thanks again for the great work vijay95052@yahoo.com

[edit]

Compiled example

Developers may not have time to copy and paste the code and then compile it to see if it meets their needs. Is there any way you could compile a quick demo or two and embed it in the article page to show developers who might be considering this framework what it can do?

Also, does this framework depend on data services, or does it stand alone? Developers need to know that without fishing through a lot of other stuff.

Thanks.

[edit]

Moved to Flexlib on google. com

I was very confused by why the examples on this wiki would not compile for me. I discovered that the code has been migrated to http://code.google.com/p/flexlib/ There is a newer version of flexlib for download there, compiled scheduler compontent examples, and source examples that compile

[edit]

Any good examples

Are there any good examples using this framework?

Please post here or email me at rajat at pilotoutlook dot com

Thanks, ~r Pilot Training and flying club directory

Retrieved from "http://labs.adobe.com/wiki/index.php/Talk:Flex_Scheduling_Framework"