MiG Calendar Component Changes
- Deprecated: ShapeGradientPaint is deprecated since it is at least two orders of magnitudes slower on Mac OS X Java 7 than earlier and the speed can not be fixed from our side.
- Fixed: Some bean editors did not acquire the tree lock that is needed from Java 7. This led to that some properties could not be edited under Java 7.
- Fixed: A regression since 6.8. Folded category folders should be able to show their activities.
- Fixed: If DateRangeDecorator had the fillColor set to null the text wasn't drawn either.
- Fixed: If an outer border was used on a header the component inside it might be clipped.
- Fixed: A Recurrence Rule with more than one restricting rule and a max count might return too few recurrences.
- Fixed: Exception while printing on JDK 7: java.lang.IllegalStateException: This function should be called while holding treeLock.
- Fixed: Categories in a Category Header will now only fold for MouseEvent.BUTTON1.
- Fixed: Mouse Release events for the Component in the Category Header is now also fired.
- Fixed: Cancelling a drag by pressing the right mouse button now works better.
- Fixed: DateUtil.getDurationString(..) didn't work correctly with years and months.
- Fixed: Fixed a ClassCastException in CompositeRecurrence
- Fixed: Made Date Area drag start use omnidirectional distance instead if just distance in the primary dimension.
- MiG Calendar now requires Java 1.5 or later.
- Fixed: DefaultDateArea.hideTooltip() now also cancels the show timer.
- Fixed: The category header component was clipped to the viewport which meant visuals were missing in for instance print preview bean.
- Fixed: Background is now painted with AlphaComposite.SRC so that it works correctly with translucent windows.
- Fixed: An ActivityDragResizeEvent was fired even if the drag distance wasn't more than the set minimum drag distance.
- Fixed: SlimDateSpinner didn't work correctly if a modal dialog was shown in the notification thread of a arrow key press.
- Fixed: CategoryTreeBean was sometimes painted incorrectly.
- Fixed: A cloned date range didn't have the hasTime and hasDate values cloned.
- Fixed: hasDate and hasTime was lost for recurring events.
- Fixed: CategoryTreeBean.getChildrenIDs() could return null and this could lead to an internal NPE.
- Now handles seemingly stuck keys that can for instance happen when the user Alt+Tab out of the application (The Alt key seems stuck since the app never gets a KeyUp event on Alt).
- Added minimum start distance for a drag of an activity. DateAreaBean.setDragStartDistance(int pixels).
- Made the DateGroupConnectorBean take the Locale and TimeZone from the connected DateAreaContainer instead of
using the default ones if they aren't set explicitly. Also added getters and setters for them in DateGroupConnectorBean.
- Fixed: Base date range for a recurrence spanning a DST transition did not compensate for it.
- Fixed: Recurrence date range instances spanning a DST transition did not compensate for it.
- Fixed: Selection around DST when the visible date range is on, or around, the DST transition time/date.
- Fixed: If the visual date range ended on a DST transition activities weren't show for the last hour.
- Fixed: If the first column/row in the date area was of size zero the headers get visual artifacts under some circumstances.
- Fixed: IndexOutOfBoundsException in DateArea around DST.
- Multi-Property changes for Activity now has a Map with old and new properties in the event.
- ActivityAShapeBean now optionally can crop tile and main text using ActivityAShapeBean.setTitleCrop(Insets) and ActivityAShapeBean.setTextCrop(Insets).
- Changes to the recurrence of an Activity now always invalidates the activity views.
- Made an Activity that is programmatically moved in to, or out of, a DateArea recreate the ActivityViews automatically.
- Fixed: When a recurring event instance is starting before a date area's visible date range, but goes into it, it is not shown.
- Fixed a regression since 6.8: The paint order Comparator in the DefaultDateArea is not used.
- Fixed a NullPointerException when using either DBConnect/GoogleConnect or the DefaultActivity constructor that takes a Map of properties.
- Fixed position of bottom/right date headers during printing.
- Fixed background bounds when printing.
- Added a number of customer specific optimizations.
- Fixed: Tooltips were shown on the wrong monitor if the intended was to the right or below the main one.
- Added a protective test so that a very large FeatherAShape for an Activity can not cause an OutOfMemoryException and will not allocate large chunks of memory.
- Made so that labels and checks in CategoryTreeBean fired InteractionEvents when clicked even though label/checkSelection is turned
off. This is so that one can add popup handling to a CategoryTreeBean in a simple way.
- Fixed: Selection for a labels/checks i the CategoryTreeBean was triggered also for right clicks.
- Fixed: Folded category rows still laid out their activities which could lead to performance issues if there were both thousands of
categories and thousands of activities shown in the same date area. Now, if most categories are folded the performance will be better.
Note that if you mistakenly for instance folded the root (which still can be shown due to other settings) the activities will not be
shown anymore. If so, check your routine for folding categories and make sure that only the intended categories are folded.
- Fixed: WithinRange very close around a recurring event would sometimes make the recurrence not show.
- Fixed: CategoryTreeBean could refuse mouse clicks on category nodes under some circumstances.
- The UntilDate in Recurrence was not adhered to under some circumstances.
- Improved the handling of dragging around DST boundaries. Both for spring and fall.
- Removed an extra header label around fall DST.
- Compensated for JDK bug: http://bugs.sun.com/view_bug.do?bug_id=4312621
- Fixed: IBM JDK throws exceptions.
- Fixed a DateComboBean month formatting problem.
- Fixed a problem with Static Override of the Mouse Cursor.
- Fixed a problem with the DateHeaders around DST shifts.
- Fixed a bug that made activities not created by the DemoDataBean also be removed when the demo data was removed.
- Added a partial workaround for a JDK bug that makes a GregorianCalendar change from PST to PDT (DST) when the Calendar has seconds or milliseconds set to 0 even though they were already 0.
A full workaround it not possible since this is deep in the GregorianCalendar object but this should takes care of most problems. The bug will basically only appear in a date area that
has its start or end on a DST day at 02.00-03.00 and now probably not even then.
- Added properties ActivityAShapeBean.startResizePlaceRect and ActivityAShapeBean.endResizePlaceRect which can be used to set the relative bounds of the resize handles explicitly.
- Added property DateHeaderBean.useStartDateTime to make it possible to use the start date/time range for headers in the east and south positions.
- Fixed: If a category row is folded for some setups the interaction box can be left behind.
- Fixed: A memory leak bug that kept ActivityViews pegged in memory by Interactor objects.
- Fixed: In some rare cases an Activity could get frozen when moved.
- Fixed: SelectionGridDecorator marked the first cell if selection was outside the date area's range.
- Fixed: AM/FM does not work correctly in the DateSpinner under some circumstances.
- Fixed: src/resources was missing in v6.5.4.
- Made so that a change of a DateArea's visible range always results in a repaint.
- Added a non-obfuscated component .jar to the Source Code distribution.
- Fixed an exception when switching between certain kinds of themes.
- Fixed a bug in GridDimensionLayoutBean that compressed the wrong rows and the end of the grid sometimes.
- Simplified printing of a DateAreaBean by overriding print(Grpahics g) to do the necessary pre-steps.
- Fixed a bug that made activities configured through the ActivityAShapeBean not selectable if they where not draggable.
- Added property activitiesSupported to DateAreaBean. You can turn off support for activities to increase performance in a date area that
will not show activities anyway.
- Made disabled date areas not receive key or mouse inputs.
- Refactored the BeanDemo to look almost exactly like iCal on Mac OS X. Needs to be run on Mac to look the best.
- Improved row, datearea and activity size calculations. They do differ slightly from < v6.5. Set MigUtil.NEW_SIZE_CALCULATIONS
to false to get the old calculations. The improvement is more correct calculation of minimum/preferred/maximum sizes set.
- Improved License Key handling and added a LicenseKey property to DateAreaBean to make it possible
to remove license nag text in the IDE preview.
- Added several new properties to the beans to make is easier to create certain kind of designs.
- Added an option to DateAreaBean to paint the background with the bounds for the visible area only.
- Made it possible to have up to 19 (indexed -9 to 9) other components on each side around the date area.
- Added option to create the default ActivityAShapeBean with a name prefix. This way totally independent AShapes
can be created and they parts of then can be overridden without affecting each other.
- Changed so that the PlaceRect of FlexGridLayout is calculated before the occupied space is removed.
- Fixed the bean source code generation for FlexGridlayout.getWrapGeometry() to work under Java 1.4 and so that it serializes correctly.
- Changed so that mouse and key listeners registered on the DateAreaBean is transferred to the DateArea it contains. This makes
the component simpler to interact with from a RAD designer such as NetBeans.
- Fixed a bug that caused a faulty redundant date change event to be fired when mouse was released of the date area.
- Fixed a bug in DateUtil.setMillisSpanned(...) when dstSafe was true.
- Added structure change events for attach and detach parent in CategoryDepository.
- Added CategoryDepository.detachParent(..) to detach a parent from a category.
- Added a lot to the BeanDemo application. You can now switch views and drag between categories.
- Switched to a better obfuscator (ProGuard) which resulted in smaller files.
- Misc. small bugs found by customers.
- Fixed an issue that made mouse overed activities disappear visually if in DST shift and shorter than one hour.
- Fixed an issue with the CategoryHeaders not being aligned correctly when expanding header to the corner "before".
- Fixed an issue with the CategoryTree that made some items non clickable.
- Fixed a bug that made the Rubber Band Multi Select Rectangle on the Beans not show.
- Fixed a bug that caused activities to be unmovable when removing an activity and hen adding one with the same ID.
- Fixed an AccessControlException for a call to System.getProperty(..).
- Fixed a bug in the DateRangeDecorator when using custom ranges.
- Fixed a bug that cut the CategoryHeader information in the PrintPreviewBean if not showing in a scroll pane.
- Fixed headers misplaced when printing and in a scroll pane.
- Fixed an IllegalArgumentException when using CellLabelDecorator in some circumstances.
- Improved the functionality and usability of the SlimDateSpinner.
- Fixed: SlimDateSpinner defaulted to year 2001 when using Month and right click.
- Fixed: Labels in cells used the default TimeZone and not the TimeZone of the DateGrid.
- Added option to remove an ActivityDepository.
- Added enable/disable to ActivityLink.
- Right clicking now doesn't deselect activities.
- Better compatibility for the NetBeans module.
- Some speed enhancements and API additions.
- Added option to set the key to use for multi select with mouse-click. Default is still Shift.
- Fixed a selection bug for activities. Both rubber band and click-select was fixed.
- Fixad a bug in DateRange that set the current date/time if millis 0 (Jan 1, 1970) was sent in.
- Fixed date boundary checking for the date/time spinner beans.
- Added date boundary checking for the DateGroupConnectorBean.
- Fixed a mouse-over glitch in DefaultSubRowLevel.
- Fixed a TimeZone bug in the editor display for DatePicker.
- Fixed a problem with some 6.0 license keys. After 20 minutes the date area became blank.
6.0 - Smaller Changes. See major changes on the product site.
- Added DateRangeDecorator that can be used to paint outline, formatted text and background in any cells in the grid depending on one or more date ranges.
- Added GridCellRangeDecorator that can be used to paint outline and background in any cells in the grid.
- Added better support for sub pixel (ClearType) support for any text when the bean is used with Java 6.0.
- Changed the AbstractHeaderBeans to only accept DateAreaBeans as GridContainer. Client code might need to be recompiled.
- Improved the color handling in the Bean Property Editors to support HSB and stored colors.
- Improved synchronization for ActivityDepository and CategoryDepository so that they now support concurrency with higher performance.
- Added optional logging of everything in ActivityDepository and CategoryDepository. See XxxDepository.setLogger(Logger l).
- Added more convenience methods to DateGrid that returns different kinds of pixel boundaries for a DateRange. Greatly simplifies writing DateGridDecorators.
- Added option to increase row resize performance (E.g. for zooming). If new GridDimensionLayout is set on a DefaultDateArea call DefaultDateArea.revalidateGridDimensionLayout() instead of DefaultDateArea.invalidateGrid(). Automatically handled by DateAreaBean.
- Added option to handle setting auto-scrolling to off in DefaultDateArea.
- Improved duration string calculation speed and fixed a problem that added a trailing space for some custom formats.
- Added option to set a Composite on an AShape. This can for instance be used to paint the whole AShape 50% translucent or color it in some custom color without having to change all the attributes in the shape tree.
- Convenience methods to load/save Activities to XML. See ActivityDepository. The file/stream are optionally zipped which reduces the size to 1/20th.
- Added the possibility to "veto" property changes to any Activity. This effectively make all properties of an Activity constrained and will help a lot of use cases where control over what is changed in an Activity is needed.
- Added option to synchronize activity states between two or more date areas.
- Added option to validate all changes to all properties in activities and categories.
- Added option to use different AShapes to paint the activities in different DateAreaBeans. See DateAreaBean.setActivityPaintContext(String)
- Added support sorting Categories in the CategoryDepository with a custom Comparator. Provided default configurable implementation with CategorySorter.
- Fixed a NullPointerException for right clicks in MouseKeyInteractor
- Fixed recurrence bug
- Fixed ScrollBar visibility bug
- Fixed a bug that cut labels for the CategoryTreeBean pre release (upcoming for 6.0)
- Fixed the freezing of activities even further as there was still an issue found by a customer.
- Fixed a Category add bug in 5.7.1 and 5.7.0
- Added LabelNowRangeType to DateAreaBean so that for instance the current month can have the same label foreground color.
- Fixed Activity Paint Layering problem.
- Fixed a problem with the CellLabelDecorator and vertical primary dimension in the grid.
- Fixed a freeze problem with activities if an ActivityResolver was installed and a new activity was added with an ID that already existed.
- Many smaller API enhancements and additions.
- Enhanced the CategoryDepository to be more resilient against reloading of Categories (removeAll/addAll)
- Enhanced so that dragging an activity will not automatically snap/round the end date. Now the length is preserved instead.
- Fixed a bug in DateAreaBean that made labels not show unless you had set some other properties as well.
- Fixed a regression that made the beans not work in JFormDesigner.
- Misc. small customer reported bugs.
- Fixed a bug that made the move/resize snap-override key not work.
- Fixed a bug that had the effect that the license code had to be set before the component was created. Now the license code can be set after creation.
- Fixed a bug that made removing and updating the overrides in the CategoryDepository somtimes fail.
- Fixed a problem where an activity was not updated if many properties was changed on the activity at the same time.
- Some smaller fixes and enhancements.
- Fixed a rarely occurring dead-lock in DefaultDateArea.
- Reduced time-to-show when bean tree is expanded first times in netBeans.
- Fixed a NullPointerException in DateGrid.
- Fixed a Recurrence bug that set the time of day to '00:00' for a type of ByXxxRule.
- Added WrapBoundaryCount to the CalendarTheme and ThemeEditor.
- Fixed bug when using the new WrapBoundaryCount.
- Changed so that ActivityDepository.removeAllBrokedActivites() fires one change event.
- Fixed a row layout bug that made the row size wrong if a single main row was used with the DateAreaBean.
- New Feature: Added WrapBoundaryCount property to DefaultDateArea and DateAreaBean. It can be used to for instance wrap the date grid every second day or eighth hour. Before wraps could only be made on every minute, hour, day or week.
- Fixed the resizing of the DateGridContainer so that it revalidates better and the scroll bars are shown/hidden correctly.
- Added Theme.setList(String listKey, Object values) so that a list key can be exchanged in one go without first clearing it.
- Plugged a memory leak that held a DateAreaBean in memory even if it was removed.
- Fixed: If recurrence is removed with activity.setRecurrence(null) then activity.isRecurrent() will still return true.
- Fixed a bug that made the first ComboDateSpinner in a DateSpinnerGroup report the same value for new and old.
- Added possibility to have anti aliasing and label rotation only for certain rows in the header.
- Fixed date label decorator for the themed approach. They were not using the time zone and locale of the theme if set to non-default.
- Added support for keeping tooltips inside the screen and/or the frame.
- Increased performance for OccupiedDecorator and fixed an activity view recreation bug when using it.
- Fixed a bug where the activity views was always recreated for calls to DefaultDateArea.getActivityViews().
- Reduced Activity memory footprint if an activity is visible in more than one date area.
- Fixed stable sorting also when the date/time range of two activities was exactly the same (to reduce flickering).
- Added option to paint mouse over and/or selected activities on top of other activities from the DateAreaBean.
- Added option to only create bean demo data in design time mode.
- Made the date area grab the focus when pressed on with the mouse.
- Rearranged the demo code somewhat to make it possible to use the CategoryTree as a separated component.
- Fixed a tooltip bug that "stole" a popup window from Swing sometimes.
- Eased up on the obfuscation in migcalendarbean.jar. This is so that for instance the variable names for methods should be visible. Note that migcalendarbean.jar should be used for development and migcalendar.jar for deployment as it is smaller and doesn't contain the BeanEditor classes.
- Fixed a bug in CategoryDepository.addBrokedCategoryByID()
- Fixed bug that made Serialization of custom property types not correctly versioned
- Fixed a bug in the Point-to-SubRow conversion which made it return the wrong row in certain circumstances.
- Smaller customer found bugs and fixes.
- Bug in JavaBeans when not category root was set.
- Fixed regression bug in DatePicker
- Extended functionality of date picker somewhat.
- Smaller customer found bugs and fixes.
- Category changes. Category trees should now be created through the Category depository. This is to make it work more like ActivityDepository and optimize for simpler persistance.
- Usability enhancements for the DatePicker class.
- Better support for time selections in the DatePicker as well as more options to tweak it to show different kinds of dates/times.
- Added missing JavaDoc for JavaBeans.
- Several smaller fixes for the Theme Editor. Some additions to the CalendarTheme to include better coverage of the features.
- Several minor fixes and enhancements.
- Several Recurrence fixes.
- Usability enhancements for the DatePicker class.
- Fix for a CategoryID filtering bug that threw a NPE.
- Several minor fixes and enhancements.
November 21, 2005 - Version 5.5.6
- Several Recurrence fixes.
- Usability enhancements for the DatePicker.
- Fix for a CategoryID filtering bug that threw a NullPpointerException.
- Several minor fixes and enhancements.
October 4, 2005 - Version 5.5
- Added separate "today/now" look for label in a cell in the JavaBeans. Font, foreground, background, dateFormat and border can be changed.
- Fixed a problem with DST (e.g. EST vs EDT time zone) notation in time zone strings.
- Added JavaBeans components that is customizable from a visual GUI environment such as netBeans. The classes are completely new an works as a Facade to the component. Advanced custom PropertyEditors are included in the bean enabled .jar.
- Simplified and sped up the coupling between an Activity and an AShape by the introduction of static overrides in the Interactors. This makes it, for instance, simple to couple % complete to some graphics that show the completion.
- Added normal Swing Border support for AShapes.
- Improved support for setting custom borders for headers, dateAreas and their scrollPanes.
- Fixed a few Time Zone bugs and added a section in the tutorial about how to use them.
- Fixed some AShape clipping issues.
- Reimplemented the grid line handling for the grid objects to make it simpler and more predictable when having hierarchical grid rows. Also made it faster.
- Made most objects Serializable by shunting it through the XMLEncoder. This insulates against changes to the objects in later versions. The Serializable part is only used in the JavaBeans' persistence.
- Changed nag-dialog to nag-label since IDEs can't cope with popup dialogs at all times. They might end up behind main window.
- Added Click, Double-Click and Popup-trigger default interaction events for the default AShape. See DemoAppPanel.java in sources for how to catch the events.
- Fixed some bugs regarding the Korean and other Eastern Asia languages.
- Several minor bug fixes.
- Minor API changes and enhancements.
- Exchanged all keys for AShape and Activity from the class type String to PropertyKey. This increases flexibility and increases performance a lot.
- Added ActivityPreMoveListener support to DefaultDateArea. It can be used to drag between categories and veto activity moves among other things.
- Added ActivityDragResize support to DefaultDateArea. It makes it easier to catch commit moves/resizes of activities.
- Added support for tooltips over activities in a DefaultDateArea.
March 27, 2005 - Version 5.21
- Fixed a DateRange getSize(..) bug happening in rare circumstances.
- Fixed a NPE when showing a date range which spanned over a daylight savings transition.
February 28, 2005 - Version 5.2
- Added ActivityLinks and ActivityConstraints to enable linking of Activities, such as done in a Gantt Chart.
- Added support for folding sub rows as common for Gantt charts.
- Reduced memory footprint for Activities and ActivityViews down to 25% by removing Calendar fields.
- Reduced memory allocation in GridUtil by using timeMillis + TimeZone instead of Calendar.
- Simplified and increased flexibility when changing how an Activity will look like.
- Increased speed for DateRangeI sub classes
- Increased speed for the layout procedure
- Misc. bug fixes.
February 17, 2005 - Version 5.1
- Added support to lock the aspect ratio of any rectangle (PlaceRect) used throughout the component. For instance AShapes can benefit greatly from this.
- Added support to also lay out sub grid rows to a main row with the use of GridSegmentsSpec:s. This means that even sub grid rows can now have templete sizes.
- Added full support for GridRows in GridRows. They can now form a complete tree structure.
- Added a number of manual overrides for properties of the DatePicker and ThemeDatePicker. It is now possible to tweak the look to look like any custom Look & Feel. JGoodies, Alloy, Windows XP, Windows 2000, Metal, Ocean and Motif and ready out of the box.
- Added optional filtering on activities retrieved from the ActivityDepository
- Retrofitted Activity, ActivityView, Category and AShape to implement PropertyProvider. This ensures that they can be active parts in a Filter or Expression. This means that any property of these classes can be filtered upon in a date area or date area sub row.
- Increased row filter functionality for a date area to include generic Filters and Expressions.
- Increased the functionality of Filter to include composite and boolean filters.
- Increased the functionality of Expression to include composite and boolean generic expressions.
- Added the class StrokeAnimation. Will allow animation From one BasicStroke to another.
- Added the class NumberAnimation. Will allow animation of a generic Number (e.g Float). For instance animate text alignment from 0.0 to 1.0 over 10 frames to create a scroll text.
- Increased performance of TimeSpanList. This will increase performance generally in the component.
- Vastly increased performance when only laying out parts of a date area.
- Vastly increased performance when only repainting parts of a date area.
- Increased performance for multi-line texts in AShapes.
- Minor bug fixed and enhancements.
February 4, 2005 - Version 5.02
January 28, 2005 - Version 5.01
- Fixed some key navigation issues with the included date spinners and date picker
- Fixed some look & feel issues for the Date Picker so that it now mimics the L&Fs better
January 26, 2005 - Version 5.0