On 7/20/07, Quentin Mathé <[EMAIL PROTECTED]> wrote:
> Hi,
>
> Before writing another mail about future development for releases
> that will follow 0.2, here is a short presentation of Container
> framework I have been working on recently.
> I plan to merge it in EtoileUI when it will be backported to GNUstep.
> I decided to develop it first with Cocoa because Xcode is really
> better than any development tools around for GNUstep/Étoilé. This was
> helpful because early design went through many changes.
>
> Container is an implementation of what was very vaguely described on
> ComponentKit page of Étoilé website. I initially wrote PaneKit/
> PreferencesKit in part as a training project before tackling
> ComponentKit ideas. Container offers a lot more flexible pane support
> than PaneKit does, however PaneKit future isn't really clear to me as
> it stands now. It may continue to exist as a standalone framework but
> relying on EtoileUI (since it offers some features unrelated to
> presentation/layout) or simply be merged as a subprojet of EtoileUI.

  I am hoping it can replace PaneKit at some point.
  Beside presentation/layout, PaneKit only offers the plugin loading,
  which can be replace by Blocks at some point.
  In that case, I can import Blocks into EtoileFoundation.
  It may help to reduce the number of bundle loading classes
scattering in Etoile.

  You can also use OuterSpace as a playground for Container.
  I believe it is better to test it in real application,
  which often exposes more bugs.
  I cannot think another application you can use for testing in Etoile,
  maybe Vienna port later.

  Have fun !!

  Yen-Ju

>
> SVN repository link: <http://svn.gna.org/viewcvs/etoile/branches/
> qmathe/Container/>
>
> Main Goals:
> - Write, rewrite less code and put my memory to rest… AppKit tends to
> be way too big for my brain ;-)
> - Simple, unified and consistent API for providing, displaying,
> interacting and manipulating collection of items in a view
> - Ability to choose between data source and no data source
> programming style (as NSComboBox allows it)
> - Powerful layout engine which makes possible to build Graphics
> oriented applications (layers, grids, item decoration etc.)
> - New useful layouts like stack, line and flow (for photo management
> view to take an example)
> - Better PaneKit
> - AppKit compatibility (NSCell, NSControll subclasses dedicated to
> collection management like NSTableView etc.)
> - As many features as possible without code at all like item scaling,
> sorting, drag and drop, scroll view, undo/redo etc.
> - Possibility to override all these factory settings
> - Allows applications to never exit UI prototyping stage ;-)
>
> Below you can find a summary of many features planned or already
> working in Container.
>
> General features (done):
> - Generic view to display a collection of items with pluggable layouts
> - Generic layout engine (both for simple view layouting or more
> complex ones… Examples: photo view, download manager view, three
> panes view or DTP-style view)
> - Each item is wrapped and represented by a layout item object
> - Each container has an associated layout item (behind the scene
> layout items always form a tree structure)
> - Handles both list and tree collection of layout items
> - Accepts layout items added directly or provided through a data source
>
> Features done:
> - Many layouts provided by default (flow, stack/column, line/row,
> table, outline, browser, pane / wizard, two panes / pane switcher)
> - Layout item can wrap KVC-compliant model object, view, cell, or
> simple value (like text, image, number)
> - Easily create new layouts
> - Possibility to wrap NSView subclasses in a layout subclass
> - Possibility to modify NSView prototype wrapped in a layout (by
> instantiating the layout in IB and connecting the outlet prototype)
> - Built-in scroll view support (but you are free to customize it in
> code or IB)
> - Decides wich properties of items are shown or used when the item is
> drawn (think of columns in a table view or size label under a picture
> file in an icon view)
>
> Note: Stack layout (ETStackLayout) is totally unrelated to -stack and
> -unstack operations. This is a little overlap in current API.
>
> Features work-in-progress:
> - Built-in pick and drop (unified drag and drop + copy/paste but you
> can still customize drag and drop as you do in NSTableView for example)
> - Supports layers, grids and guides (as specific kinds of layout
> items), this means all layouts automatically supports features like
> 'Snap to grid/guides', 'Modify grid size'  etc.
> - Customize the rendering of items with a layout delegate or by
> adding style decorator objects to your item(s)
> - Generic stack/unstack operations similar to Apple Aperture stacks
> in many layouts and bound to expand/collapse in ETOutlineLayout
> - Generic group/ungroup operations which creates or destroys a
> relation between items (note: stack/unstack only apply to already
> existing item groups; you can restrict stack/unstack operations to a
> particular group kind with a delegate method. Group semantic is
> completely up to you as it is in OrganizeKit)
> - Fully customizable unstacked items look by setting a layout exactly
> as you do with any containers
> - Two, three and more panes layout (aka pane switcher layout) with
> content flow and update based on selection
>
> Features planned:
> - Free layout and Icon layout (Free layout means where you position
> items in an arbitrary way in term of coordinates with a Z order and
> compositing rules)
> - Provides per property formatter through a delegate method
> - Persistent and custom shape selection
> - Built-in Undo support
> - Built-in default inspector for item (will be made customizable
> through InspectorKit)
> - Customization of displayed items à la NSToolbar
> - Tabbed documents which can be rearranged inside an application and
> across applications
> - Bindings compatibility
> - Component integration (more in another mail)
> - CoreObject integration
>
> An uncommon good news is that it's already sufficiently usable to
> experiment with. Take note many things are very much work-in-progress
> or even buggy :-)
> Most of code isn't really complicated, there are redundancies here
> and there that will be eliminated and I hope to simplify some areas.
> Making View objects very passive and introducing the two new
> abstractions Layout and Layout Item is the main idea behind Container.
>
> Container allows to unify at UI level item collection and document.
> It blurs the boundaries between Document and Object Manager.
> A document becomes just an Object Manager using a free layout (aka
> where you position items in an arbitrary way in term of coordinates
> with a Z order and compositing rules)
> An ObjectManager becomes just a document using collection-management
> oriented layouts like table, outline, photo management etc.
>
> A typical example would be to change the View popup in a document to
> 'Outline View' and then you would observe in the document window what
> you see usually in Layers/Objects/Elements palettes of applications
> like GIMP, Photoshop or Illustator etc.
>
> The shared layout engine should allow to reuse a lot of code. For
> example, there is no need to write Grid support code for the icon
> view, rewrite it for photo management view and yet another time in
> some PowerPoint-like application.
>
> That's not yet possible, but you should be able to create 3 panes
> layout easily with Pane switcher layout simply by assigning pane
> switcher layout recursively.
>
> As a last point, it is partially documented :-)… but I wouldn't say
> it's documented. API is slowly moving towards stability (except
> ETPaneSwitcher perhaps) but some old methods need to be cleaned and
> many API holes need to be filled, and also few responsabilities may
> be shift away from ETContainer in upcoming development. I may ask
> later for more precise feedback on method/class names.
>
> I'm really interested in your feedback.
>
> Cheers,
> Quentin.
>
>
> _______________________________________________
> Etoile-dev mailing list
> [email protected]
> https://mail.gna.org/listinfo/etoile-dev
>

_______________________________________________
Etoile-dev mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-dev

Reply via email to