designing good user interfaces (0)

Example of a bad ui layout.

Example of a bad ui layout.

Example of a good ui layout.

Example of a good ui layout.

The first UI (the bad one) has a complex grid layout which is cluttered and confused, while the second UI has a better layout which looks like a book page that can be read easily from left to right and from top to bottom.
The second UI uses more vertical space, but we must not forget that one of our primary goals  is to provide usable UIs.

Moving things to the right place

Yesterday I’ve moved desktop theme configuration from Desktop Settings to System Settings style module. Now Desktop Settings dialog looks less cluttered.

New system settings/style desktop theme configuration tab

New system settings/style desktop theme configuration tab

Now I’m still working on Desktop Settings dialog and I will continue to improve it.

Next step is to add categories to wallpaper settings.

KFormat and DeviceKit-disks



I waited for a long time to play with DeviceKit-disks (DeviceKit-disks is a rather interesting daemon that allows developers to not clutter their code with format related stuff) and now this week I had time to start working on KFormat. The idea behind KFormat is to replace KFloppy then the next step will be to implement KDiskManager and a KDE disk management library.
The first revision of KFormat is now under development in KDE svn and I will blog when I’ll have more interesting updates.

Icon Time: High Definition Oxygen and Nuvola

High Definition Oxygen

Without any doubt Tokamak II was a great meeting, as it allowed me to work on several things. Two of these things are High Definition Oxygen icons and Nuvola icons.

High Definition Oxygen is a folder that contains 256×256 icons for mimetypes and places and the really good news is that now Oxygen iconset uses less space on disk than before: we don’t install SVGs anymore (so we can save about 60 mb) and we can use a piece of that free space for the new high definition icons that are incredibly small (they requires only a couple of mb).

Something that I really liked about Oxygen is that it is already ready to render at big sizes (Oxygen artists have done a great work).

I have also great news for Nuvola icon set fans: Nuvola is back and it will be part of KDE 4.3 kdeartwork module 🙂
During tokamak I spent several hours renaming and fixing Nuvola icon names and now it can be used also on KDE 4 🙂

10 rules for a plasma widgets developer

  1. Don’t call updateGeometry() during a size constraintsEvent and don’t call resize.
    If you want to keep the same aspect ratio you may be interested in Applet::setAspectRatioMode( ).
  2. If you want to write a new clock widget, you should inherit from libplasmaclock ClockApplet.
  3. Don’t do custom things: use default plasma methods and widgets when possible.
    Some useful methods are: Applet::setBusy( ) if your applet is busy, Applet::setConfigurationRequired( ) if user needs to configure the widget, etc…
    Some useful widgets are: Plasma::CheckBox, Plasma::ComboBox, Plasma::LineEdit, Plasma::PushButton, Plasma::RadioButton, etc…
  4. Don’t reimplement Applet::showConfigurationInterface, reimplement Applet::createConfigurationInterface instead.

    void MyApplet:createConfigurationInterface(KConfigDialog *parent)
    QWidget *widget = new QWidget();
    ui.setupUi(widget); //ui is your configuration interface
    parent->addPage(widget, i18n("General"), icon());
    connect(parent, SIGNAL(applyClicked()), this, SLOT(configAccepted()));
    connect(parent, SIGNAL(okClicked()), this, SLOT(configAccepted()));
  5. Use Plasma::Animator and fast animations (not slower than 150 milliseconds).
  6. Use a standard background when possible.
  7. Avoid installing custom svg graphics when possible.
  8. Load graphics using Plasma::Svg.
  9. Don’t forget that the theme may change while your widget is running.
  10. paintInterface() might be called before init().

Camp KDE (Day 6)

Camp KDE (Day 5)