Review Request: Initial work on the flexible controller of the Plasma Media Center
Christophe Olinger
olingerc at binarylooks.com
Tue Mar 30 21:00:12 CEST 2010
Thanks Aaron. This sounds great. I'll try to focus on that on my next
hacking sessions. I might have a lot of questions though.
Shantanu, is it ok for you if i focus on this?
Also, i'll forget about a main home screen and focus on a browser
showing all available dataengines grouped into the media modes.
Cheers.
You are all great guys and its a joy working with you.
Cheers
Chris
On 30 Mar 2010, at 18:59, "Aaron Seigo" <aseigo at kde.org> wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviewboard.kde.org/r/3396/#review4790
> -----------------------------------------------------------
>
>
> First the administrivia ;) Please watch the whitespace; for core
> plasma code we use http://techbase.kde.org/Policies/Kdelibs_Coding_Style
> ... that means things such as 4 space indents rather than tabs and
> "if (foo)" rather than "if(foo)". we are pretty strict about keeping
> the code style consistent as it makes things so much tidier and
> easier to work on.
>
> Now for the actually useful and interesting bits: looking at this
> patch it occurs to me that this is a state machine. As such, I'd
> really recommend revisiting this whole idea as a QStateMachine with
> a set of QAbstractStates that define each mode. each of these modes
> would define which UI components to show in a slot connected to
> their own entered() signal, and queue for hiding these components on
> their own exited() signal.
>
> in fact, what i'd recommend is creating a QAbstractState subclass
> that provides unified access to things such as "the volume control".
> this could be in the form of an enumeration (let's call it Component
> for the purpose of this disucssion) which would then be used to
> determine a layout. each mode would then be a subclass of this new
> class, and switching between them would be a matter of changing the
> state of the QStateMachine inside MediaController.
>
> what this class ultimately needs to do is allow a layout to be
> defined, perhaps something like this:
>
> static const int VideoModeIcon = MediaCenterState::CustomComponent +
> 1;
>
> BrowseVideoState::BrowseVideoState(QObject *parent)
> : MediaCenterState(parent),
> m_iconVideosMode(new Plasma::IconWidget(this))
> {
> addToNavBar(VolumeComponent);
> addToNavBar(VideoModeIcon);
> ... etc ...
> }
>
> QGraphicsWidget *BrowseVideoState::customComponent(int component)
> {
> if (component == VideoModeIcon) {
> return m_videoModeWidget;
> }
>
> return 0;
> }
>
> in this example, addToNavBar would add components to an internal
> list. MediaCenterState's job would then be to take the list of
> current items in the layout, the list of new items in the layout and
> remove the items that are no longer there while adding the ones that
> are new.
>
> in this way only unique items will be added or removed, and this
> will look rather slick when animated. it also means that adding new
> states is just a matter of creating a new MediaCenterState subclass
> and adding it to the StateMachine. this lends itself very nicely to
> any future plugin system that may be desired. it also opens the door
> for more than just "addToNavBar" (or whatever it ends up being
> called) but definition of any sort of PMC UI changes that should be
> enacted. a "showBrowser(bool)" could be added, for instance, to
> control whether or not the file browser panel should pop out
> automatically or not. a "homeApplet(const QString &pluginName)"
> could be added to define what Plasma::Applet to load when entering
> that state. it would also make adding a generic state for any full
> screen Plasmoid loading completely trivial.
>
> i don't think a full QML based system is needed or even desired in
> this case, since PMC should be ultimately in control of the actual
> presentation and layout. the MediaCenterState classes would just
> define an order of items and therefore also the transitions between
> them (thanks to QStateMachine).
>
> thoughts?
>
>
> /trunk/playground/base/plasma/MediaCenterComponents/applets/
> mediacontroller/controller.cpp
> <http://reviewboard.kde.org/r/3396/#comment4284>
>
> more state machine stuff :)
>
>
>
> /trunk/playground/base/plasma/MediaCenterComponents/applets/
> mediacontroller/controller.cpp
> <http://reviewboard.kde.org/r/3396/#comment4280>
>
> don't need to check if it's empty; just call clear()
>
>
>
> /trunk/playground/base/plasma/MediaCenterComponents/containments/
> mediacontainment/mediacontainment.cpp
> <http://reviewboard.kde.org/r/3396/#comment4283>
>
> this is for all intents and purposes a state machine. we should
> probably treat it as such.
>
>
>
> /trunk/playground/base/plasma/MediaCenterComponents/libs/mediacenter/
> mediacenter.h
> <http://reviewboard.kde.org/r/3396/#comment4282>
>
> this will be troublesome if extensibility is ever desired; this
> looks like a great use case for QStateMachine, in fact.
>
>
>
> /trunk/playground/base/plasma/MediaCenterComponents/shells/
> plasmediacenter/mainwindow.cpp
> <http://reviewboard.kde.org/r/3396/#comment4281>
>
> honestly, this should just go full screen. i don't think there is
> a real use case for a windowed mode.
>
> so this line could probably just be:
>
> showFullScreen();
>
>
> - Aaron
>
>
> On 2010-03-27 15:48:14, Christophe Olinger wrote:
>>
>> -----------------------------------------------------------
>> This is an automatically generated e-mail. To reply, visit:
>> http://reviewboard.kde.org/r/3396/
>> -----------------------------------------------------------
>>
>> (Updated 2010-03-27 15:48:14)
>>
>>
>> Review request for Plasma.
>>
>>
>> Summary
>> -------
>>
>> This patch extends the controller applet by having 6 different
>> layout modes which are adapted to what the media center is
>> currently used for, i.e. browsing pictures, playing videos, etc. It
>> sends a signal to the containment with the current mode. The
>> containment then relayouts the other applets and configures them
>> for the current Mode. These modes are defined as enum in the libs.
>> *The browser no longer has any controls. Those are now in the
>> controller.
>> *The controller also has a show/hide playlist button and a toggle
>> autohide button for itself.
>> *The different modes do not have sensible functions yet. I also
>> need to work on configuring the applets for each mode, like telling
>> the browser to hide, or the player to show.
>> *The controller is not really beautiful. I want animations for show
>> (hide icons. I want the modeswitch button in a "drawer" perhaps.
>> The toggle buttons need effects.
>>
>>
>> Diffs
>> -----
>>
>> /trunk/playground/base/plasma/MediaCenterComponents/applets/
>> mediabrowser/abstractmediaitemview.cpp 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/applets/
>> mediabrowser/mediabrowser.h 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/applets/
>> mediabrowser/mediabrowser.cpp 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/applets/
>> mediacontroller/controller.h 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/applets/
>> mediacontroller/controller.cpp 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/containments/
>> mediacontainment/mediacontainment.h 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/containments/
>> mediacontainment/mediacontainment.cpp 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/containments/
>> mediacontainment/medialayout.h 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/containments/
>> mediacontainment/medialayout.cpp 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/libs/
>> mediacenter/browser.cpp 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/libs/
>> mediacenter/mediacenter.h 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/libs/
>> mediacenter/playbackcontrol.h 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/libs/
>> mediacenter/playbackcontrol.cpp 1108007
>> /trunk/playground/base/plasma/MediaCenterComponents/shells/
>> plasmediacenter/mainwindow.cpp 1108007
>>
>> Diff: http://reviewboard.kde.org/r/3396/diff
>>
>>
>> Testing
>> -------
>>
>> I tested the controller itself. The actual effect on the other
>> applets when changing modes still needs work.
>>
>>
>> Thanks,
>>
>> Christophe
>>
>>
>
More information about the Plasma-devel
mailing list