Issue 1277th September 2008 by Danny Allen
Thanks to extenders, it is now very easy for applet developers to embed relocatable widgets in your applet. Any QGraphicsWidget can be wrapped in a so-called "ExtenderItem", which allows the widget to be simply dragged anywhere by the user. Items that have been "detached" this way, can live on even when the applet that created them goes away, and can even be persistent between sessions. Widgets can also be reordered by the user, they can be collapsed and expanded, and custom actions can be registered for easy interaction. Take a look at the following simple screencast to get an idea about what all this means.
What is shown here is the kuiserver applet I made to test the extender API. It is located in KDE SVN playground at the moment (if you'd like to test it), but it will most likely move to kdebase for 4.2. The kuiserver can show any KJob, which can be file transfers (as shown here), but also the burning of a CD, the rendering of a 3d image - basically anything that takes some time. As you can see, the jobs that are shown can be moved around, detached (in which case they are persistent, so you'll see them again even after you restart your computer), and returned to its source (the little question mark icon, since there's no icon yet for "return to source"). Also, a couple of custom actions are registered by the applet to its ExtenderItems, allowing the user to pause, resume and stop its transfers.
One of the nice things about extenders is that they require very little work for a developer to use. Thanks to all the great feedback from the rest of the Plasma team, it has a very neat and easy to use API, where basically all you have to do is instantiate an Extender, and start adding ExtenderItems to it. For a more complete picture on how to approach extenders, you can take a look at the TechBase tutorial I wrote. It's still a bit of a work in progress, but I think it might be useful. The tutorial shows how to create a stripped down version of the kuiserver applet shown in the screencast.
So where to go from here? Well, there are lot's of places that extenders might be useful. To name a few: The notify applet. Imagine being notified of an important email, and being able to just drag that notification to somewhere on your desktop, or a ToDo applet on your panel, so you'll remember to answer that email once you've finished what you're working on. Or a system monitor applet, where you can simply detach the sensors that you are interested in. Or, since Plasma is all about clocks, a clock where you can detach different timezones. And once all kinds of applets start using this, you have the freedom to just drop almost any part of almost any applet together as you see fit. And that's the kind of flexibility Plasma is all about!
I've been working on my game, Killbots, on and off for the last two years. It's actually the first and only thing I've ever written in C++. I had just read a great introduction to C++ book and wanted to start a new project to test what I'd learned. I was a KDE user and had recently discovered the game "robots", so I thought a "robots" clone in KDE would be a great start.
In case your unfamiliar, "robots" is a classic, turn-based, UNIX console game in which the player tries to avoid being killed by attacking robots. The player cannot attack the robots directly, but instead must get them to collide with one another or the rubble of previous collisions. The game itself is quite simple, but can be surprisingly entertaining. The GTK port of "robots", GNOME Robots, added several new twists to the game, including two classes of robots, pushable junkheaps, and safe teleports, all of which have been included Killbots.
The game was originally called KRobots, a name which, interestingly enough, is now used by this non-KDE project: http://freshmeat.net/projects/krobots/. It was written in KDE3/Qt3 using QCanvas and used raster images for sprites. Due to my lack of experience with C++ and Qt, I ended up rewriting the entire application twice, because I kept coding myself into corners due poor design decisions.
By the time I had created something reasonably playable, I learned that the future lay with KDE4/Qt4, so I once again abandoned the existing code and started a fresh rewrite to KDE4 and QGraphicsView which was brand new at the time. SVG theming, custom rulesets, highscores and animations were slowly added. The application was renamed to Killbots, and eventually became respectable enough to move into the SVN playground. While there it has continued to gain polish, features and documentation and is now nearly release worthy.
Okay, so that was the introduction, now onto asking for favours.
First and foremost, i'd greatly appreciate having Killbots reviewed. Interface, game play, documentation and usability reviews are all welcome, but a code review would be most appreciated. As I mentioned, this is my first C++ application, so i'm extremely interested in any comments or suggestions on the code and/or application design. I'm a bit of a perfectionist, so i'd be glad to hear about even nit-picky issues or inconsistencies. Ideas for potential new features are also welcome, but lower priority.
Second, i'd like some input on what the logical next step is for Killbots. I remember there being a list of requirements somewhere that a game needed to meet before being considered for inclusion in KDEGames, but I can't seem to find it now. Does such a list exist?
There has also been talk lately of dividing KDE Games into "Minimal", "Extended", and "Extra" submodules. Obviously Killbots wouldn't fit in the Minimal set, but I question whether it would even be popular enough to go into the Extended set. I'm a bit apprehensive about the Extra submodule though, as it's my understanding that these would actually live in Extragear, which isn't automatically translated/packaged/released with the main KDE project. Thoughts on this would be appreciated.
Third is artwork. I've already spoken to Eugene Trounev about creating a new default theme, but if anyone else is interested in making a theme, the more the merrier. There are even basic instructions on how to do in the game handbook. I'm also in need of an application icon and icons for my three custom actions: "teleport", "teleport safely", and "wait out round". Any help with any of these would be greatly appreciated.
|Commits||2908 by 245 developers, 12133 lines modified, 1425 new files|
|Bugs Opened||407 in the last 7 days|
|Bugs Closed||336 in the last 7 days|
|Albert Astals Cid||
|Aaron J. Seigo||
Internationalization (i18n) Status
|Low Saxon (nds)||
Bug Killers and Buzz
|Aaron J. Seigo||
|Aaron J. Seigo||
|Adriaan de Groot||
There are 132 selections this week
Finally solved Connection Problems!! Now plugin connects to Galleries..
Its functionality are near to come back!
assure that the URL navigator gets activated when the path gets the focus
Finally KShortcutsEditor should work 100% correctly regarding applying and undoing changes to local shortcuts.
# KKeySequenceWidget: Improve documentation and document that applyStealShortcut has the side effect of saving an action collection.
That works if you only change one shortcut so keep that method.
# KKeySequenceWidget: Emit a signal if a user agrees to stealing a shortcut. KShortcutsEditor listens to that signal and so hasn't to rely on applyStealShortcut()
bring up the containment's context menu on right click, something i've been meaning to do for a while and which happens to close bug 170475.
Only store in JPEG format when the image has no alpha channel, otherwise the transparency information get lost...
Fun thing to do with JuK:
Type in something into the search widget
Press enter to play the first matched song.
A song will play alright, but the playingFile will be thought to be null for some reason.
I've tracked down that this is probably due to there being no selected item in the visible results when enter is pressed, so I've made the search widget's returnPressed() signal manually play the first listed match instead of relying on Playlist's returnPressed() signal to work.
Let CMake work with subprojects.
This is a very usual use case and a place where many people found "buggy" the way to work because when importing a subproject made KDevelop to mess up because of the non-parsed CMakeLists.txt files placed in parent directories. Now KDevelop looks if there are and it parses them too.
**Warning** it will always look for it, it is not yet configurable in the project file (it is configurable in the .kdev4/project.kdev4 file, should be moved)
Now it is possible to parse a cmake subproject without parsing the other subdirectories below or in the same level.
It can be useful when you are working on a large project and you don't need the whole to be supported by KDevelop (for instance, when I'm working on KAlgebra in KDE-Edu, I don't need, let's say, the Marble buildtool information).
New Source Formatter generic plugin.
It allows to use different backends to format the files but with just one Ui (eg one kCModule)
Supports custom themes for every plugin and every language
It is possible to format all the files in a project and the plugin will choose which plugin to use according too tyhe mime type and the chosen plugin for this language in the config dialog
Add support for export to OpenDocument text and HTML for TextDocumentGenerator-based generators:
- EPub format
- Fictionbook format
This depends on Qt 4.5. Thanks to Qt Software (or wherever Thomas Z. works) for QTextDocumentWriter!
It wouldn't be too hard to make this work for plucker (.pdb) format, but that format doesn't work for me.
It would be very hard to make it work for other formats.
Add support for double precision floating points to DatabaseSchema
And as a totally unrelated side note, which was promised for the winner of the Go Kart race:
Congratulations to Jesper for winning the race! You're the man!
Stub code for Raptor Plasma Loader
Now tooltip on kickoff works again, when hide/show it.
The popupApplet has now the capability to know if the dialog is displayed or not, then call popupEvent.
implemented some group activation stuff
- list virtual ALSA devices from .asoundrc files
- list unplugged devices that were previously stored to the cache
- convert the data into the format as libphonon (ObjectDescription) needs it (so that conversion is done only once in the kded module instaed of every single Phonon app)
- rename AudioDevices that have the same name but different device number- ask pulseaudio for all its sinks and sources, so far all you get is debug output
The Kate session runner now watches for changed sessions.
Use a simple search index for KCharSelect and implement instant search
This also makes searching in character details possible.
The indexing of Unihan data is currently disabled, since it increases the size of the index a lot.
Probably an option should be introduced for this.
The index is created on runtime in the background (via QtConcurrent), so the only time the UI could freeze a few milliseconds is if the user tries to search before the index is ready.
Let's make tooltip display time and date of every selected timezone.
Add the possibility to bind the wm's configuration dialog to the kcm.
Let's check if entries are immutable.
This lets kiosk disable the user being able to enable/disable plugins.
Matthias, Will and me have been talking about adding a new method to KPluginInfo with the signature: bool KPluginInfo::configEnabledKey(const QString &key) const, what will return if the given key is immutable or not, being it read from the proper config group (internally stored into KPluginInfo).
What do you think?
context menu on items that provides:
* on-demand updating of source
* removal of sources
* and soon... access to associated services
Added automatic layout mode to the desktop grid effect.
Patch based off one by Christian Mollekopf.
Setting to disable wobbly windows for resizes or moves separately.
added support for groups that demand attention or are active
new layout in the wallpaper configuration and some new features:
- setup ui to chose color and different scaling/cropping in slideshow mode
- textbox to set the containment name
- activity and theme now are before wallpaper section
- some reordering/aligning to conform to the HIG
* add a status line when operations are in progress
* show the user the result of the operation
we can now successfully launch operations!
New plasma wallpaper plugin: Mandelbrot fractal viewer.
Like your usual fractal wallpaper except it's live ;)
Important: this is a minimalistic implementation, only 360 lines of code, leveraging Plasma, Qt, Eigen. Not intended to compare to Fraqtive which is much more serious.
Still has nice features:
- uses as many cpu cores as you have
- non-blocking rendering, in separate thread(s)
- uses vectorization instructions (sse, altivec) if available
- switches automatically between single and double precision as needed
- tiled rendering, prioritizing tiles near the mouse event, so the user can browse very fast as the tiles he's most interested in are rendered first.
- no-frills monochrome gradient directly from divergence data:
let's not corrupt natural beauty with kitsch gradients.
- SSE2 required for now (but fixing that is just a matter of adding platform-detection logic).
- doesn't save/restore the view
- triggers a number of plasma bugs.
Most importantly: for now, use it in the Dashboard view, otherwise there are repainting glitches.
Added option to dim the desktop with the dim inactive effect.
Added background window opacity setting to box switch.
screen support implemented
Add the ability to set the osd background + text color through configuration options
Added option to not elevate selected window in box switch.
Added "advanced mode" to wobbly windows settings.
Implement printing recurrence info for an Incidence.
Patch provided by Ron, Thanks!
Hope we can expect more from you.
I added a copyright for you.
Finish support for native file dialogs on Mac.
Add charset autodetection.
This is more or less a complete reimplementation of the one in enterprise3 branch since kdelibs now provides the necessary facilities, making things a a lot easier.
We probably want to backport KEncodingProber to the enterprise4 kdelibs branch though.
Mostly reimplemented the resource. Should be able to handle sub resources now.
Still a couple of TODOs left.
Ugly: currently directly referencing ../kabc/kresourceassistant.h/.cpp either put it into a shared location or probably even move it to kdepimlibs/kresources
Add printing gantt charts.
initial lyrics support... kind of.
extended scripting interface to allow lyrics scripts to communicate w/ amarok extended scriptmanager to keep track of lyric scripts separately added plenty of lyrics-related debugging
**lyrics script does not work when loaded from amarok**
somehow, it only works if you copy/paste it into the script console. need to talk to peter to figure it out.
also, script for lyrc currently ignores any kde proxy, to be added later
add support for suggestions on the script-side of things.
the engine/applet don't support it yet though
Give the Albums applet a makeover.
Modelled off the collection browser view, and responds to hover events and presents itself much more nicely.
Usability has improved, imo, although the SVG colour choices seem to cause it to blend into the background a bit. Some contrast is needed I think.
RFC compared to the previous version please.
playlist support during collection scans.
amarok will now load found playlists during a scan.
however, still have not implemented duplicate checking - so if you rescan, they will show up again.
also, removed the reload-db call every time a playlist was added, because it seemed to stress some part of the playlistbrowser or db code and would make amarok crash.
you might need to jiggle amarok a little to get it to show them right after a collection scan is finished.
- KblueLock support for Screen Unlock
- KblueLock log Away times
Adding support for renaming already existing files in archivehandler and in overwritequery.
Progress dialog is now centered on screen for batch extract.
Actually call the destructors of deleted duchain data items when converting them to constant items.
This is needed so their temporary data is actually released for re-use.
This should reduce the endless memory-hunger of KDevelop, does not seem to be enough yet though.
Clear unused items in the temporary data manager, and never hold more than 250 allocated free items.
If there is more free items, they are deleted.
This is another approach to reducing the memory-usage, and seems to help a bit.
- Keep track of all free space in the item repository, by not only keeping freed items, but also storing free ranges that were left while re-using space, and merging consecutive free space together.
- Add functionality to keep track of lost space(Neither referenced by free-items or by used items). This should always be null after this change.
This greatly reduces the size some of the .kdevduchain structures grow up to after some time.
For example my last persistent declaration table had a size of 150MB, where 70MB were lost, and 60 MB were in fragmented free-item lists.
Exactly the same table will have a size of 20 MB now. :-)
Optimized parser for CSS color values.
Gives me 3.5% speedup on the first skeleton movie compared to the version using QString::toInt().
don't repaint the entire item *every time* if the exposed area is just a small section.
this saves huge numbers of whole screen repaints.
Revamped chunk memory management completely:
- Chunks are no longer loaded completely, only the parts which are needed
- During the download of a chunk, pieces will be saved immediatly if possible (i.e. the hash has been computed with it)
- Fixed bug causing mapped mode not be allowed for multifile torrents
- Dropped support for migrating very old current_chunks files (pre 1.2)
This reduces memory usage considerably
Context Browser improvements:
- Name change Context Browser -> Code Browser
- Proper toolview icon
- Dolphin style back & forward toolbuttons
- History reset action
- Reimplement lock, which now allows for record and playback
- Refactor ContextBrowserPlugin::updateViews() in (smaller) chunks
- Single navigation widget. Prefer declaration view over context view
- Restructure and rename of ContextBrowserWidget and related classes
- Various bug fixes.
- add a structure for network plugins, interface and abstract class.
- decouple the QHttp stuff into an own QHttpNetworkPlugin, compiled statically, and leave HttpJob and abstract class.
- start adapting the HttpDownloadManager to use a network plugin for creating the HTTP jobs; at the moment no plugin is used, but the static QHttp-based one is.
- Getting a Wikipedia logo ready that is provided without trademark / license problems.
Created by Torsten Rahn using Inkscape.
KDE developers say that KProcess just rocks, so I'd better listen to them :)
KColorEdit 2.0 released!
- import of LokaRest, a still experimental framework to access RESTful web services
- homepage <a href="http://techbase.kde.org/Projects/LokaRest">http://techbase.kde.org/Projects/LokaRest</a>
Half-assed attempt at making this use KIO
Beginning of move to new UI
The KIO/QtNetwork bridge (KdeNetwork) can now be compiled without the rest of WebKitKde.
digital clock's config dialog should be usable now.
Thanks to seele for precious and fundamental help. :)
- parse headers in a systematic way using a header parser written for the purpose.
this makes keeping header parsing free of bugs much less of a hassle.
with simple unittest - it actually helped me *a lot* so it's better than nothing.
it should be pretty fast, too.
in a test it parsed ~13 MB of headers per second on my phenom at 2GHz; this indicates that the old ad-hoc parser was likely not a bottleneck ;)
- some "safe" parsing helpers that know not to overflow a buffer and with clear semantics (advancing the read pointer if they recognize what they are made to recognize).
- dump the gets() / rewind() / setRewindMarker() business and replace it by unread() which puts data back into the input stream with less head-scratching about what exactly it does.
unread is both less complex and requires less variables in the already crowded HTTProtocol class.
- do not override read() because it's confusing. call the method to achieve the same goal (mainly unread support) readBuffered() instead.
- adapt getAuthorization() to pre-parsed headers
- small improvements like collapsing of switch cases and kdelibs-style formatting in significantly changed methods
- some explanatory comments
- some performance tweaking - real-world performance (i.e. loading websites) is hopefully better than before. mainly experimenting with buffer sizes and how exactly to read incoming data.
IIRC this included the funny new code in readChunked().
- probably something I forgot
- fix some small behavior bugs in header parsing, mainly in case of somehow incorrect headers though
- quite some testing to kill any bugs introduced. we'll see about the bugs...
- primitive multi-get support, not completely ready to use though. easier to commit it than to remove it for the checkin.
modernize this engine with a Service for updating, encapsulate the http requests in a DataContainer subclass, use KIO instead of QHttp and generally clean stuff up.
note that i haven't had a chance to actually test the engine; it compiles and the logic should be generally correct, but i need to update the applet as well as it utterly breaks with these changes.
i also want to add a Service UI to plasmaengineexplorer.
but that's all tomorrow's work =) for today ... we have this.
Moved nepomuk query service to kdereview.
The service consists of three parts:
1. The actual service to be moved to kdebase/runtime/nepomuk/services
2. The query client which provides a class to access the query service without fiddling with DBus. To be moved to kdebase/workspace/nepomuk
3. The nepomuk query library which provides shared classes used by service and client.
To be moved to kdebase/workspace/libs/nepomukquery (here I need input: this would make runtime depend on workspace. Is that possible? Any better solution?)
yes, the preview is required there; having to hit 'apply' just to see if the foreground you just changed is legible against the background is really bad
documentation update for kwrite in kde 4.1
kwrite-devel please proofread and give feedback.
Display intro message if no bookmarks
close html in echoHead($redirect)
don't rely on KConfigSkeleton actually creating groups in the config or even being useful in telling us what groups it knows about.
KConfigSkeleton is far too tightly coupled with the idea of KConfigDialog to be useful for half the things it should be useful for. =(
Display different data for the titlebar, add wind and hi/low temp if available.
Fix up how we parse 5 day forecast information.
We still have positional layout problems with resizing.
Display units for wind and temperature.
Move kosdwidget to kdereview!
More UI changes.
Packager Options page label adjustments.
Make the Structure Items look more like what the GHNS download items look like.
Lancelot changelog, as requested by Aaron
Move kosdwidget out of kdereview, so that it can be integrated with a knotify osd plugin :)
Add new JobTracker: KDynamicJobTracker, and make this the default job tracker for kio jobs.
This simple jobtracker registers to kuiserver, if it is available, and falls back to the oldschool dialogs if not.
Enable battery in the systray and tell it to be 22px square.
Let's see if people notice this and complain :>
save the existing wallpaper plugin settings before writing new ones in; this preserves the old settings; this is still more brittle than i'd like to see, and will require some work inside of Containment itself at some point i think
Let the user write relative paths on kfilewidget.
If you go to /foo/bar, and write on the file combo acme/file.txt, the kfilewidget will bring you to /foo/bar/acme, and then read file.txt.
This happens both when pressing Enter and when you accept the dialog by pressing OK.
I've doing some coding on this stuff (kfilewidget & kdiroperator), and this seriously needs some love.
* futz with increasingly messy code
* read extenders tutorial
* delete half of it
... well, not quite.
I'm still getting crashes that I cannot place right now.
When adding the applet to the desktop, it shows up, and then blows up.
It works well in plasmoidviewer, so I wonder what's going wrong here.
And the popup doesn't show up yet.
OTOH, 4-spaces indentation is pretty useful, as it replaces svn annotate:
I can immediately see that the code was written by till ;)
Adding a test setup for testing the KResource migration tool on contact data in three resources:
- standard KDE address book resource (file std.vcf in $KDEHOME) (no path in config)
- additional file resource in a separate directory (path in config)
- additional dir resource in a separate directory (path in config)
The code needs refactoring (it's a mess).
I've tried to reuse existing code (like QGraphicsScene::render()) but this makes things a bit difficult.
Also there seems to be problems with painter clipping and printer paper/page rect.
(I doubt these are qt bugs, hopefully, it's just my system acting up)
Make sure we tell the shape how to do antialiasing for both text and lines.
As a reminder; at high resolutions we want the simple black/white version of the text as a printer would make anti-aliasing look really ugly.
Use Amarok's new Amazon accounts for the web key instead of personal developer accounts.
Use a smooth scaling resize for rendering the cover art in the albums applet.
Now it looks less jagged, but still not a very good rendering job.
Also does no caching and this method is slow.
TODO: use album->image( size );
Reorder items in the current track item as discussed at Akademy.
Order is now:
Track, Artist, Album
Now you all now the password to my Amarok database.
de-proxyify the video applet, otherwise phonon-xine can't show video.
this re-kills the applet position etc, because there is no good solution with this applet as a plasmoid.
what needs to be done is to re-write the video support as a custom overlay onthe GV instead of an applet. cheers.
Show tabs between track number and name.
Looks neater, but I think the tab stop may be too wide causing it to look funny.
Use pre-rendered volume icon in the toolbar, cause QtSvg can't handle this one.
Create a specialised item for showing albums, which is also a Meta observer.
This let's us keep track of any changes in the meta data like changes to album art. Swish.
make utf-8, i think, work. at least, chars like "'" seem to be functional.
i don't have any songs that i can test with, e.g. chinese or japanese lyrics, so please do so.
Make clicking on a an album cover in the service info applet ( magnatune frontpage only atm ) actually append the album to the playlist.
This was a multi layered issue.
One problem was that, after the removal of the dbus functions I used previously, we were adding the XSPFPlaylist to the playlist before it had had a chance to actually load itself from the remote url.
Another issue was that for some reason, the QWebPage newer recieved mouse click events when using the proxy widget.
This has been worked around, for now, by once again making the applet use the plasma WebContent widget, but this has other issues, such as a several second lag between moving a scrolbar and the page actually updating.... :-/
Initial import of deKorator KWin window decoration engine
This is a straight port of the deKorator 0.3 version I got from <a href="http://www.kde-look.org/content/show.php/deKorator?content=31447">http://www.kde-look.org/content/show.php/deKorator?content=31447</a>
This is my first commit, please give feedback :)
KDE4 port of Kvkbd, it's based on Kvkbd 0.5 but a lot of things changed, it now uses Kdelibs coding style and only uses camelCase, a lot of variables and functions were also renamed for clarity (e.g. autores -> autoResize).
It runs fine but still has some old bugs of Kvkbd/KDE3 and a few new one.
See TODO file for things that still need work.
This is my first "real" KDE contribution (and my first commit too), I hope you like it ;)
Eventually needs refining, credits to annma for putting me on the right path.
Application manual content is finally complete.
It may require editing, but at least it's all there.
Just for kicks I added a CMake option to use QGraphicsView's OpenGL support.
Initial results: no observable difference.
Oh well, I only really did this to get a better understanding of CMake.
Add application version and kde version to the guided bug entry.
Now it's basically ready to replace our wizard (IMO) but I couldbe missing some things
remove /branches/work/eigen2, we now develop in trunk/kdesupport/eigen2