Byte-Welt Forum

Zurück   Byte-Welt Forum > Projekte > DockingFrames

DockingFrames DockingFrames An extension of Swing, used to flexibly arrange windows. - Ist eine Erweiterung von Swing, mit der flexibel Panels angeordnet werden können.

Antwort
 
Themen-Optionen Thema durchsuchen
Alt 29.06.2009, 20:25   #1
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Version 1.0.8

Preview 1 of version 1.0.8 is on the server.

Preview 1 includes the new tab mechanism: except the tabs of BasicTheme, all tabs are now based on the same code and have similar capabilities. The location and size of the tabs are now controlled by a "TabLayoutManager". Currently there are two TabLayoutManagers present and they mimic the behavior that was present in version 1.0.7.

Other new features include:
  • DockableDisplayers are observed through a DockableDisplayerListener and can be exchanged any time.
  • Single tabs can be shown, the SingleTabDecider tells which Dockables should be single-tabbed. The SingleTabDecider can change its opinion any time and changes take immediate effect in the UI.
  • CDockables have a new property "singleTabShown", which lets a single tab appear.
  • The EclipseThemeConnector is observed through a EclipseThemeConnectorListener, this allows the connector to change its behavior and the effects become immediatelly visible.
  • Common has the new CommonEclipseThemeConnector, this connector removes the tab a Dockable has in EclipseTheme if the "titleShown"-property of CDockable is set to false. The tab remains if the "showSingleTab"-property is set to true.
  • Workaround for bug 6797587: AWT components not painted properly if behind a glass-pane. The workaround was tested with JDK 1.6.0_14.
  • The FocusObserver calls the method "handleVeto" if a veto was spoken, this method consumes InputEvents, i.e. preventing mouse-pressed-events from beeing executed.
  • Bugfix: DockStations check whether dropping some Dockable would create an invalid Component-tree, and forbid such drag and drop operations

The attachement shows the new single-tab feature.


Preview 2 will allow to set tabs at any side of a Dockable. I plan to release p2 before August. If I promissed someone a feature/bugfix and forgot it in p1 please let me know, I'll include it as fast as possible.
Miniaturansicht angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	SingleTab.png
Hits:	196
Größe:	54,0 KB
ID:	123  
__________________
Beni ist offline   Mit Zitat antworten
Alt 26.07.2009, 14:26   #2
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard AW: Version 1.0.8

Preview 2 is on the server.

Tabs can now be placed on all sides of a Dockable. With help of the key "StackDockStation.TAB_PLACEMENT" one of four (top, bottom, left, right) tab-placements can be choosen. This placement is used for all tabs. Changing this property takes immediate effect in the UI.

Other new features include:
  • DockProperties, the map storing properties for the whole framework, now supports priorities for its entries. Each entry can appear three times, with the priorities DEFAULT, THEME and CLIENT.
  • Bugfix: SimpleDockAction did not unbind itself properly, leading to a memory leak.
  • Bugfix: The button/title for showing a minimized Dockable can now be focused again, this did not work since preview 1.
  • Inconsistency: The methods of FocusVetoListener now return a FocusVeto instead of a boolean. The FocusVeto tells whether a veto was spoken against a focus-transfer, and whether the event responsible for the transfer should still be handled or dismissed.

    For preview 3 I plan to rewrite the CStateManager and its ancestor classes. The CStateManager is responsible for handling the transition of CDockables from one ExtendedMode (minimized, maximized, ...) into another. While the current version works it is a monolithic block which cannot be configured from the outside. The new version will be more generalized, working with modules. This is also in preparation for giving the children of ScreenDockStations the ability to be shown in fullscreen-mode.

    I hope to release p3 within a month.
__________________
Beni ist offline   Mit Zitat antworten
Alt 07.02.2010, 13:25   #3
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard AW: Version 1.0.8

Preview 3 is on the server.

I think it's ok to say, that this version contains the biggest change I ever made - chances are that you won't even notice.

Extended modes
The CStateManager in Common got replaced with a new class called "CLocationModeManager". Both classes have the same purpose: handle the transition between extended-modes, e.g. handle the operation "maximize a Dockable". As you might guess this is a key functionality, Common would be worthless without it.
  • The "CStateManager" was in Common since its first release. It did slowly grow and contained roughly 2500 lines of code (together with its super-class). Its tendrils were placed all over the framework, and it was one of the very few classes that made extensiv use of the keyword "instanceof". In short: the CStateManager had grown into a non-object oriented monster. There was no possibility left to add extensions like a new kind of DockStation or a new kind of extended-mode.
  • The "CLocationModeManager" class is only half as big as its predecessor. The new design makes heavy use of interfaces, wrappers, layers and other nifty object oriented stuff. This design is more complex than the old one, but it also allows much more freedom in aranging and extending the extended-mode's.

The "CLocationModeManager" tries to mimic the behavior of its predecessor, so clients should not notice the difference. Here are two warnings for anyone who would like to use 1.0.8p3:
  • I tested the new design with some applications, but I was certainly not able to discover all bugs.
  • Configuration files written by older versions might not be loaded correctly.

SplitDockStation
The ongoing story about Dockables not being placed at the correct position has a new chapter.
In the center of all the trouble is always the SplitDockStation. The SplitDockStation internally has a tree which tells how its children are to be layed out. This tree has been modified: each node and leaf has a unique identifier assigned. Location information now includes these ids and allows the station to find a leaf/node that has changed its position in the tree again.

Various
As always there are minor bugfixes and improvements. Some of them are:
  • The minimum size of FlapDockStations can be set. A new method "CContentArea#setMinimumAreaSize" allows to make the empty border around the central component smaller or bigger.
  • The new CAction "CPanelPopup" allows to show any component in a popup-menu. This new action much behaves like the "select an icon"-action that is in the "Notes" demo.
  • AbstractDockable provides a method to add and remove KeyListeners. These KeyListeners are called whenever a KeyEvent is registered on the Dockable or on one of its representatives (like a title).

Future
For 1.0.8p4 I plan to implement:
  • Allow children of a ScreenDockStation ("externalized" dockables) to become full-screen. This will also test the CLocationModeManagers ability to support new modes.
  • I'm also playing with the idea of writing a new DockStation using Swogl (website). It would be a proof of concept that the framework really is able to handle "alien" code.
__________________
Beni ist offline   Mit Zitat antworten
Alt 21.02.2010, 11:05   #4
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Re: Version 1.0.8

Preview 3a is on the server.

Just fixes some annoying bugs.
  • Bugfix: titles and tabs missing when using CDockable that is associated with CWorkingArea and EclipseTheme and perfoming a close operation on a StackDockStation (yes, chances to encounter this bug was not very high).
  • CVetoClosingListener: informs before a CDockable or a set of CDockables gets closed.
__________________
Beni ist offline   Mit Zitat antworten
Alt 26.03.2010, 21:40   #5
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Re: Version 1.0.8

Preview 4 is on the server.

And of course I did not follow my plans...

... but I did something more important

Warning: this release may be too early . But I believe many of you would like too see with your own eyes that the project is not dead.

Placeholders
When a Dockable was removed from some DockStation its location was stored as DockableProperty (in Core) or as CLocation (in Common). This location information was accurate as long as Dockables were added in reverse order of their removal. But problems began as soon as the user started to remove and add Dockables in random order. Unfortunatelly users tend to do such irrational things all the time.

The solution to this issue are placeholders: if a Dockable is removed a placeholder remains on the station. With the help of the placeholder the station can act as if there would still be a Dockable. When the Dockable is later added again, it replaces the placeholder and acts as if it were never removed.

An example: removing all Dockables of a SplitDockStation no longer deletes the internal tree of the station. The tree remains, it is just not visible to the user. If the Dockables are added again to the station their old position in the tree can be found again, independent of the insertion order. Of course the SplitDockStation now also supports trees that are not filled completely.
  • SplitDockStation, StackDockStation and FlapDockStation support placeholders - ScreenDockStation does not (yet).
  • The mapping between Dockables and placeholders is made by a PlaceholderStrategy. The strategy may decide not to assign a placeholder to a Dockable, or even to invalidate (and delete) existing placeholders. Clients can set their own strategy with the property key PlaceholderStrategy.PLACEHOLDER_STRATEGY.
    The default strategy for Core is to use no placeholders at all, for Common to use placeholders for SingleCDockables only.
  • Placeholders are stored and loaded persistently.
  • Placeholders are also supported for "missing Dockables" (dockables whose locations need to be guessed).
  • The placeholder mechanism is built on top of the old location mechanisms. The framework may fall back to the old mechanism if it cannot find some placeholder.

Various
  • TabPanePainter now paints background and foreground (previously it could only paint the foreground)
  • The way DockTitles are created has been refactored. The new class DockTitleRequest allows more flexibility in creating and replacing titles.
  • The CVetoClosingListener allows to stop the user from closing CDockables.
  • The class AbstractCDockable has a new method "createCommonDockable". Subclasses may override this method and use their custom implementation of Dockable to represent a CDockable.
  • Also fixed some annoying bugs.

Future
For 1.0.8p4a I plan to:
  • Continue testing and fixing bugs that are related to placeholders
  • Maybe implement some very small features

For 1.0.8p5 I plan to implement:
  • Allow children of a ScreenDockStation ("externalized" dockables) to become full-screen. This will also test the CLocationModeManagers ability to support new modes.
  • I'm also playing with the idea of writing a new DockStation using Swogl (website). It would be a proof of concept that the framework really is able to handle "alien" code.
__________________

Geändert von Beni (26.03.2010 um 23:20 Uhr).
Beni ist offline   Mit Zitat antworten
Alt 27.03.2010, 18:56   #6
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Re: Version 1.0.8

I've just uploaded version 1.0.8p4a which fixes the two bugs that were found by Thomas in this thread.

Bug 1 was that the TabPlacement-property was not set early enough on newly created tabs.
Bug 2 was the StackDockStation filling up its TabPane in the wrong way (adding the same component twice).
__________________
Beni ist offline   Mit Zitat antworten
Alt 30.03.2010, 19:54   #7
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Re: Version 1.0.8

Version 1.0.8p4b, fixing more bugs...
  • Bugfix: Normalizing an externalized CDockable could throw an Exception
  • Bugfix: StackDockStation could not be moved around in Common even if children would allow it
  • Bugfix: Dragging a station away from another station did not store placeholders
  • Bugfix: During drag&drop, dragging the mouse over a tab of a StackDockStation could exchange the selected Dockable
  • Bugfix: dragging a Dockable over a child of a ScreenDockStation could throw an exception (in the Common framework).
  • Feature: If a StackDockStation is dragged over another StackDockStation both are merged automatically (the class StackMerger is responsible for this).
__________________
Beni ist offline   Mit Zitat antworten
Alt 15.05.2010, 12:43   #8
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Re: Version 1.0.8

Version 1.0.8p5

New stuff

This version brings 3 new cool features:
  1. Thanks to Vlass ukrainian and russian translations.
  2. Thanks to Thomas Hilbert an extension updating the look of the EclipseTheme. The extension is provided as separat download with separat license. To use it just make sure the two jar-files are in the classpath of the framework. The framework will then load and install the extension.
  3. "Fullscreen" support for externalized Dockables (= children of a ScreenDockStation). The exact meaning of "fullscreen" is defined by a "ScreenDockFullscreenStrategy".

Various

There are also some minor bugfixes and improvements:
  • Bugfix: Tabs with unequal height were positioned strangely
  • Bugfix: Popup menus are now enabled for tabs on a DefaultStackDockComponent
  • API: ScreenDockStation now also support placeholders.
  • API: A StackDockStation with only one child can still show a tab (But you will almost never see a StackDockStation with one child, normally they are removed by the framework).
  • Bugfix: If DockRegister was stalled and a DockStation was added/removed to the register and later Dockables added/removed from that station, then the DockRegister could miss these modifications and store too many/few Dockables.

Future
The next version is 1.0.8, yes no preview but a stable version.
  • There will not be any new features (unless they are necessary)
  • I'll make some real testing of the new features, e.g. to find memory leaks in the placeholder mechanism. Feedback from you is still appreciated
  • The guides and the documentation need some updates.
  • And some of the icons need to be replaced.

I think with 1.0.8 all the important features one needs for a docking framework are implemented. After 1.0.8 I start doing some clean up. Much of the older stuff is hard to customize, I'd like to change that. These changes will then result in the final version 1.1.0.
__________________
Beni ist offline   Mit Zitat antworten
Alt 18.05.2010, 19:32   #9
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Re: Version 1.0.8

Version 1.0.8p5a

Some important bugfixes:
  • Bugfix: CActionSource did not fire events when removing or replacing actions
  • Bugfix: CLocationModeManager#setLocation(Dockable,Extended Mode,CLocation) did not compare the correct objects and has always thrown an exception
  • Bugfix: Minimized CDockables did not appear at the correct location if corner components were used
  • Bugfix: Dragging a maximized CDockable could throw an exception
__________________
Beni ist offline   Mit Zitat antworten
Alt 01.06.2010, 18:27   #10
Beni starter
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 27.08.2006
Beiträge: 571
Beni befindet sich auf einem aufstrebenden Ast
Beni eine Nachricht über Skype™ schicken
Standard Re: Version 1.0.8

Version 1.0.8p5b

Minor bugfixes
  • Repaired Exception when dragging a Dockable from a BasicStackDockComponent
  • Identifiers with spaces and other special characters should now be encoded correctly
__________________
Beni ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
-


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.



Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 Uhr.


Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.