> On 2010-03-30 16:59:21, Aaron Seigo wrote:
> > 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?

Wow! This really seems the right-way-of-doing-things of what I suggested above 
to Christophe about handling modes. Too bad i'm not experienced in QState* but 
i'd really like seeing it implemented this way.

This way the layouting stuff becomes really clean and easily extensible. Please 
Christophe, go for it. :-)

Thanks Aaron for this precious hint!


- Alessandro


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviewboard.kde.org/r/3396/#review4790
-----------------------------------------------------------


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
> 
>

_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel

Reply via email to