12th November 2006by Danny Allen
The Tool Manager in the GUI can create toolbox dockers, which contains all tools available for the specific shape and lets you select amongst them.
There is one Tool Manager per application, which means that there is one tool active in an application at any one time. Since some applications could benefit from a different approach, Thomas will look at this and see if it can modified.
Shapes create themselves according to their own specification. Thomas suggests a model/view separation to make it possible that two different shapes can point at the same data structure.
During the last meeting, templates were discussed. The shape factory can be extended to create any tool possible. Stencils in Kivio can be done with templates (name, value pairs). The factory needs to know about that, and the path shape factory needs to recognise the vector shape.
Loading and saving: using which file format should shapes load and save to? We use OpenDocument as native format, and so will use file filters for the rest.
For example, loading an old Kivio file: should we use the path/shape to load/save to old file formats? or should we convert using file filters? With the latter method, it is impossible to save without loss.
The Flake Plugin Loader should load both the shape and tool registries. Colourspaces are already loaded in this fashion.
The KoShapeSelector is a Flake canvas (which then can have children), containing sets of templates and where one can add custom templates that can create custom shapes.
Properties (in the templates) are just name-value pairs, reading/loading from XML - creating a new shape is done by filling in those pairs. It should be possible to create a new folder to function as a pastebin, so that the user can paste elements of documents into it, and then reuse them as new shapes. In the user interface, we want to have a unification of clipart, shape stencils and the clipboard.
It should be possible to have duplicating and linking of objects (e.g. KWord headers, which are 2 frames looking at the same document data offset, or Karbon linked objects, or Krita linked layers).
Which strategy to use for placing stuff on the canvas? We have drag-and-drop, dragging a stamp, multiple clicks, and freehand movement. In the latter case, the mouse path is important, so these cannot be created from the shape selector. Paths, freehand movement, and lines will be put in the toolbar, rectangles, stars and other shapes in the shape selector.
It has been decided to give the KoCanvasResourceProvider extra methods for colours, line styles, etc. instead of having to keep to generic methods.
About shape managers: one per page or one per document? A shape manager is per view. For at least KPresenter, we want a "selectable" flag so that e.g. master slide objects are unable to be selected from the normal page view. Shapes can link back to their parent "page" (as in Karbon), so that removing a shape and then undo'ing the removal will put the shape back at its original location. We can't put this in the userdata field, since this field is shape specific and some shapes already use it. We could have a page/group layer be a KoShapeContainer as well. Krita needs image data access, the text tool needs document information access.
Page numbering is perceived differently in different applications: KWord and KPresenter have separate pages while Karbon has 1 infinite page. If an application is requested to remove a shape from the document data, the shape itself does not get deleted. Creating a container KOShape is neater though, since it's a shape in itself as well.
Why are Karbon layers not in the shape manager? Because we wanted them to be selectable. This is solved by the selectable flag. A KOffice-wide library for layer manipulation (a common layer) box will be evaluated, and such a mechanism will go in the GUI, and not in Flake itself. ODF requires layers with global properties - we support shape containers.
How to attach animation to a shape? We cannot use userdata (see above). Since KPresenter is the only application needing this right now, it will use a decorator pattern and if needed, we will extend this later.
Copy-and-pasting is an implementation detail of drag-and-drop: create an invisible drop tool that figures out where to drop. Dropping onto an empty page should pass the dropped object to the application, pasting a URL into a textbox could perhaps resolve the URL and paste its referred contents. This would be done by the tool itself.
Text within shapes should be plastic within the containing shape boundary. Thomas expects this not to be too much work since wrap-around is likely to already work.
Bounding rectangles and shadows: should the bounding rectangle of an object include its shadow or not? We know that aligning should not take it into account. Repainting could be an issue, but we could fix KoShape to draw the shadow and be aware of it. Having the bounding rectangle to include the shadow and rotation, but then checking if the object is really at the specified location, looks to be a good solution.
Autoselection of tools - which tool, if any, should be selected by default when selecting a shape? This is something to experiment with. Users and usability people should definitely be consulted here as well.
Certain settings, for example default font sizes, the preferred colour chooser, the colour for outlines and grid behaviour, should be KOffice-wide. Hence a mechanism to share configuration files and settings is needed, next to a single panel where users can set those options.
Tools are categorised in four groups:
- the pointer
- line, text and other tools
- basic application-specific tools
- and advanced application-specific tools
Many other important bugs have also been rapidly crushed over the past few weeks: work such as this is going on throughout KDE, and will ensure that the KDE 3.5 series continues to impress us with its vitality long into the dawn of the KDE 4 era.
|Commits||2195 by 202 developers, 4763 lines modified, 999 new files|
|Bugs Opened||298 in the last 7 days|
|Bugs Closed||400 in the last 7 days|
Internationalization (i18n) Status
Bug Killers and Buzz
|Alexandre Pereira de Oliveira||
|Adriaan de Groot||
|Aaron J. Seigo||
|Albert Astals Cid||
There are 120 selections this week
Fix regressions caused by my last commit.
Add a widget cache that holds MarkListWidgets that are currently not in use, to minimize Widget creation and destruction. This gives a significant performance boost during scrolling.
Also enable prerendering of thumbnail widgets. In most cases the widgets should now be already calculated when the widget comes into view.
Symlinks in trash should show symlink size, not file size.
Permit changing the internal value of invalid dates. Fixes the BBC UK Weather page..
we actually just want to untip the clock, so make untipFor public. this prevents tips for the clock showing when the calendar is up, which is the intended behaviour, otherwise they show up over the calendar.
there is the use case where one might open the calendar, move it somewhere out of the way and then want to see the clock tip, but that's probably rather more rare than the "tip just popped up over my calendar!" problem (which was actually reported to me way back when).
the -best- fix would be to not show the tip if it would cover the calendar but ... yeah ... that's a lot of screwing around in the stable branch for a corner case.
Properly detect if SSL/TLS is possible and warn about it. Disable the settings if needed. CLosing the bugs which I think are related to this.
Patch from Thomas McGuire that fixes the
+ Wrong checkbox in the layout when adding attachments to the composer
+ attachment display in editor: "sort by size" sorts alphanumerically, not by size
Thanks for the patch Thomas and sorry it took so long.
Will merge into the 3.5 branch shortly.
Correct encoding of file name before lookup, using a KURL
(Correction from Martin Koller)
Replace '~' by homedir-path before doing the filename expansion
Don't the wav-files when using "Encode File"
Make sentence options (Capitalize and full stop.) work, and handle inbound messages as advertised.
NB Hariz Kouzinopoulos: I did not use your patch, because while it is technically correct, the job of saving the widgets' values is performed automatically by KCAutoConfigModule, if it knows about the widgets. A previous author neglected to change the widgets passed to KCAutoConfigModule when adding the sentence options, so that is why these were not read/written. Thank you for submitting a patch though, it was the impetus to solve the bug properly.
That should fix the crash after duplicate login.
Fixed missing level_83:
Now level_84 becomes level_83.
As about other thing stated in #123733: Yes, levels 47 and 81 have a similar molecule name, but that's not a bug, because it IS a same molecule, but it layed out differently in each of these levels which produces completely different gaming experience for each of them ;).
Slider 'jumping' is fixed too.
Added svn diff context menu.
Three levels to the diff:
If you have kompare and patch installed, you can diff and merge.
If you only have kompare, you get kompare for the diff, but no merge.
No kompare, you just get the diff listing.
ok, let's do this slightl more correctly, featuring:
- a dbus appropraite callback (e.g. it shouldn't pop up a UI for the user to interact with.)
- a menu instead of a dialog
next up: getting other appropriate apps in the list via dbus so we can email images. servicemenus seem the natural way to go here but they need some work before they can be used here. ("Rotate image" is probably stupid to show in this menu, but "Email image" isn't)
How very rare that you (1) get a new feature to work (2) improve performance significantly and (3) get much cleaner code base ALL three at the same time :-)
I beleive that pixel by pixel zoom now works in the reworked version. As an added bonus, I no longer loads the first image in full size, but only in viewer size. This has given a significant boost in starting up the viewer.
If the user ever zooms, then the real sized image is loaded in the background and put in place when it is available - until then the user just sees the viewer sized version he was original looking at.
Convert the existing X.509 certificate plugin to use QCA2, instead of KSSL.
This plugin can now handle X.509 Certificate, Certificate signing requests and Certificate Revocation Lists (CRLs). Certificates are handled in both PEM and DER, and the other two are handled in PEM format (DER wouldn't be hard to add, but there doesn't appear to be any real-world usage). Signing Requests and CRLs provide less information than a Certificate (e.g. the Signing Request doesn't have any issuer information).
The amount of information that can be provided is now extended to include multiple DNS names and XMPP information (per RFC3290), plus the State/Province (if any) for both issuer and subject.
Adding URI or IPAddress would be trivial if there was any real-world need for it.
The old CMakeLists only compiled this if SASL was found - not sure why. In any case, it now only gets compiled if QCA2 is found.
Added more ODBC drivers to the auto-detection list. datasources will now auto-detect the following ODBC drivers:
* MySQL ODBC 2.50 Driver
* MySQL ODBC 3.51 Driver
* FreeTDS Sybase and MS-SQL Driver
* Oracle Driver
* IBM DB2 Driver
* PostgreSQL Driver
* Mini SQL Driver
* Mimer SQL Driver
* Text Driver
* Internet News Driver
* Easysoft Interbase Driver
* Easysoft Firebird Driver
* Informix Driver
* SQLite Driver
* DataDirect 4.20 DB2 Wire Driver
* DataDirect 4.20 Informix Wire Driver
* DataDirect 4.20 Oracle Wire Driver
* DataDirect 4.20 SQL Server Wire Driver
* DataDirect 4.20 Sybase Wire Driver
* SAP Driver
* OpenLinks iODBC Driver
* Easysoft ODBC-ODBC Bridge
* Easysoft ODBC-ODBC Bridge (MT)
* Easysoft ODBC-JDBC Gateway
* Easysoft Oracle Driver
* Easysoft Sybase Driver
Add support for object type filtering. At the moment we have to keep the selection of the object types in a separated file (we use the same as multisync-qad here), that will hopefully be fixed after opensync-0.20.
Based on patch by Cornelius Schumacher with some improvements in the GUI ;)
Pretty intrusive changes. I've changed the messageview part to always use richtext mode. All html messages will be escaped, so that should work ok. I did this so I can make links and emailaddresses clickable. Which is in this commit as well. Enjoy! mailto's will launch the composer of Mailody (_not_ the default KDE Mailer) and links will launch the default KDE browser. The used regexes seem to work ok.
When replying or forwarding the plaintext part will be set in the composer, even if you are viewing the message in HTML mode.
Closing the composer will only warn 'are you sure' when there has been a change to the composer. So you can reply and abort immediatly without getting a warning.
Please test for regressions...
address completion redesign
- lookup: nickname, first/lastname, email, domain
- disable unsupported completion modes
- select first item in popup, pick with return
Get attachment icon from file name if not available from Content-Type
Make the reminder dialog somewhat more usable when working with they keyboard. No strange focus switching with up-down arrows in the spin box for example. And added an accelerator for the interval spin box.
* Kexi supports data-aware combo box widgets in forms and table views *
- better displaying tooltips for columns with lookup data
- sorting columns with lookup data works
= various improvements for combo boxes
- database-aware combo box form widget works, improved data displaying, mouse and keyboard handling
- fixed bug #136688 - displaying dates (e.g. with dd.mm.yyyy format)
= do not block Escape key if there are no data changes to cancel;
do not block shortcuts like Shift+Left arrow
Generate a style for slide titles (like kpr2kword did)
One still has to fix the text colors after doing the conversion, but that's just a few clicks.
Workaround more QDomDocument brokenness (bug report sent)
Set a page layout that looks more like a paper format.
When "Sorting by Favorite", do it like this:
First by Rating, if enabled;
Then by Score, if enabled;
Fall back on play count.
This way, if the user happens to have ratings enabled, but didn't rate any songs, we'll still have a good list by using scores and playcount.
make smart playlists based on track length more useful by adding a combobox for the used time unit:seconds, minutes or hours
Stop after current works for streams. Patch by Tuomas Nurmi.
Some radio streams would show an empty title in the playlist. Now we fall back to the URL if the title is missing.
AFT support for lyrics! Yay!
Also, a bit of AFT refactoring, and an update of the previous change I made to metabundle, so AFT is still not run on those, but the UID in the playlistitem reflects the correct value for any updated metadata.
Max/Alexandre: Your commit and mine conflicted (I haven't updated in a few days until now) -- I figured out an easy way around Rich's crash too, but I decided to go with my way, since it will get the UID in a way that will still be safe and current (at least, moreso) if a scan is ongoing. Thanks for looking at it though!
Oh yeah baby,
Kopete Telepathy plugin can now have text conversation with a single peer.
Added UndoAll, RedoAll actions.
This interface may change.
Please test and don't hesitate to send me your comments/suggestions.
Parker Coates proposed to also include player like "play" and "pause" actions to start/stop constantly redoing moves in redo list - one after another.
What do you think about this?
How often would you use such functionality rather than manually pressing "redo"?
P.S. To much buzz for nothing? ;-)
The "controversial" commit ...
This is a totally undiscussed, self-decided, personal change. I like it.
I hope you like it too...
The planet information on the right side of the window disappeared : it's now a tooltip. (and if I rewrite the MapView, it could be draw with a partially translucent frame or any other extra eye-candy stuff)
Use Mauricio's svgz for showing possible moves hints.
I exchanged move_hint and move_hint_alternative as I happen to like alternative one best :).
If you want to try alternative one, do
mv move_hint_alternative.svgz move_hint.svgz && make install
(don't forget to svn revert later ;))
* Added another layer between the Registry and the RegistryDbusInterface to have no DBus in Registry anymore.
* Added GCC visibility support.
* Added preliminary special type handling for the RDF cursor classes StatementList and QueryResult. This allows to hide DBus from the public API again but restricts us to these two types. The goal is to have at least any combination of list and map of simple types.
implemented a much more compact representation of packed nodes
use QPair instead of hand-made double QString
use QHash to replace QMap
removed unused KoXmlStream
made nsURI and name using index
use conservative growth strategy for item collections
avoid invalid deallocation on null node
shifted most code from KoXmlHandler to KoXmlPackedDocument
fixed potential leak during node loading
minor speed-up on some constructors
X-DCOP-ServiceType -> X-DBUS-StartupType
Change name into desktop file (now dcop is dead we use dbus)
I keep compatibility with 'X-DCOP-ServiceType'
X-DBUS-StartupType: name found by David (better than X-DBUS-ServiceType)
Rename a lot of reference to dcop.
Patch ok'ed by David.
Rename DCOP_* enum to DBUS_*
I will continue to rename reference to dcop -> dbus
I will change all desktop file which have key X-DCOP-ServiceType to X-DBUS-StartupType
Yay! The base class for three-quarters of Krita's tools compiles again -- and I don't think I've lost much functionality along the way. (Although, see <a href="http://wiki.koffice.org/index.php?title=Krita/ToolRefactor">http://wiki.koffice.org/index.php?title=Krita/ToolRefactor</a>).
Added redownload manager for previous Magnatune purchases. The required info is already stored in the released 1.4.4 version so all previously purchased albums can also be redownloaded. Added an advanced button to the magnatune browser, for now it just opens the redownload manager, but later it should popup a menu with more options. Have also done some MAJOR refactoring of the Magnatune purchasing and download logic to make it more maintanable and extensible.