Hello everyone,

I wanted to discuss some ideas I had about user interface theming and plug-ins.

1) user interface theming. This is my idea:

* If the user wants system/desktop integration he'll use either the Qt
4, Cocoa or
  Gtk+ style (or EFL if the user runs E17).
* If the user wants to use a theme/skin, he'll have to use the EFL
interface, because
  I believe that one is 100% themable in an easy way. (KaKaRoTo, can
you confirm this?)
* Alternatively, I would also like to create my own small skinning
engine for the Qt 4
  interface, based on Qt StyleSheets and the QUiLoader. I will talk
more about this in a minute.
  But are there any complaints for the fact that there will be 2
completely different theming engines?
  Who thinks that I should just drop my theming idea and leave it all to EFL?

Now, about my Qt 4 theming system. I would like to use custom Qt StyleSheets to
provide the general style of the application (it's a lot like CSS, but
for widgets!) and supplement that
with user-created forms in Designer. The reason for this is simple:
Designer is a very easy tool
in which you can design forms, and it has a very good integrated Qt
StyleSheet system.

Normally, you would compile the user interface to .py files, but I
want to take a different route.
Partially because of security concerns, and also because of
implementation defails.
Using QUiLoader I want to load in the .ui interface on the fly and do
sanity checks for the widgets
etc. (I will also provide a test_theme.py script for theming
development purposes). When the
.ui file passes the sanity check, my theming system will make the
needed connections between
the widgets and the code and that's all there will be to it.

Theme designers for the Qt 4 interface will only have to do a few things:
* Design a theme (the layouts, buttons, etc) using the very good Qt
Designer tool
* Optionally use Qt StyleSheets in the theme to make it actually look themed
* Make sure that all the needed controls are on the form and have the right name
(otherwise the sanity check will fail and the system will fall back to
the default theme)

I don't know if all this is the best way to do it (and I don't know
for sure if it's technically possible,
because I haven't tested it yet, but it should work...) but from my
perspective it's the best way
to create custom themes for the Qt 4 interface. What do you guys think?

Here are two examples of what could be done with QSS theming (these
two examples have
the exact same layout and widget placement, but using the
aforementioned technique I want to make that
configurable as well)

Example 1: Something with round corners and stuff..
http://85.17.105.113/~wesley/images/amsn_preview0_qt4_frontend.png
Example 2: Windows Live Messenger look-a-like..
http://85.17.105.113/~wesley/images/amsn_preview3_qt4_frontend.png

I'm very interested in your thoughts about this.
Please tell me whether you think 2 theming engines would be a waste of
time or not,

and if you think they can both (EFL themes + Qt 4 themes) live happily together,
please tell me what you think about my theming engine idea for the Qt
4 interface.

2) plug-ins. This is a challenging concept. Why? Because we have
multiple GUI's now.
One thing is certain: all plug-ins have to work on all user interfaces.

I think the best way to implement a plug-in system is to actually
"force" the plug-in developers
to create their plug-ins in pure python without using any GUI toolkit.

For the configuration of the plug-in, the plug-in developers should
make an XML file that
describes which options to configure and how they have to be
configured. This XML file
can then be read in and processed by the aMSN core. The aMSN core will then tell
the GUI interface which plug-ins there are available and what the
options of each plug-in
are. This is just an example of how it could go:

<plugin>
  <name>Some example plug-in</name>
  <description>This is an example plug-in</description>
  <config>
    <bool default=True>Something that can be on or off</bool>
    <string default="">A line of text that the plug-in needs</string>
  </config>
</plugin>

This XML file is read in by the core and the core sends something like:
addPlugin(PluginData) to the GUI.

The GUI will then for example add the plug-in information to some tab
in it's configuration window
and create a checkbox for the bool value and an editable line of text
for the string value.

Upon changing these values (and clicking apply or ok) the new
PluginData will be sent back
to the core.

Of course this is very conceptual and doesn't take everything into
account yet.. For example,
what to do if the plug-in wants to provide an extra button or
something in the actual GUI?
This can probably be done as well, by extending the XML so plug-in
developers can add things
like "<gui><chatwindow><addbutton location="topright" value="Send
buzzer!">buzzer</addbutton></chatwindow></gui>"
but this would be a bit messy, I believe. Anyway, the core will
retrieve that name "buzzer" and send the needed stuff
to the GUI and set up a signal so that when the GUI informs the core
that the button is clicked, the needed action
is performed.

Well... I hope you can share some of your ideas about all this with me.
I believe that my idea for the plug-in system could be a lot better than this.
So please, if you know something better.. share it with us!

PS: I think I rivalled KaKaRoTo's mail length!

-- 
Wesley Stessens <[EMAIL PROTECTED]>
Human Knowledge Belongs To The World - Antitrust (2001)
http://wesley.debianbox.be

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Amsn-devel mailing list
Amsn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amsn-devel

Reply via email to