Talk:Flex Scheduling Framework
From Adobe Labs
| Table of contents |
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)
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)
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)
Wrong Package names in classes
Hi,
There are errors in the package names in 2 classes
- com.adobe.ac.controls.scheduleClasses.CurrentTimeIndicator has the package as com.adobe.ac.controls.calendarClasses
- com.adobe.ac.scheduling.controls.ScheduleData has the package as com.adobe.ac.scheduling.samples
aalderson 23:32, 30 Oct 2006 (PDT)
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)
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)
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:
- Calendar entries should be able to be temporarily resized when being edited. The small ones provide no room for editing.
- Most other calendaring solutions I have come across provide for a combination of horizontal/vertical scrolling. The issue is there should be a minimum width for any entry so that the titles are at least readable. Height then is the basis for entry duration.
- The left/right scrolling is cool, but I think it's actually harder to find a specific spot in the timeline because of the searching. Horizontal scrolling might be better achieved by just selecting a day/week/month from an always visible date picker.
- The zooming is cool as well, however it would probably be better if there are specific zoom markers. E.g.: day, week, month.
- From within a higher level view, there should be easy ways to zoom in on specific days/weeks by just selecting. The zoom slider doesn't really give us that as it can't control where it zooms in on.
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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.
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
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. :^)
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
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
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
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
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
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
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
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
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.
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!
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
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.
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
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
