[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-panel-devel
Subject:    Re: Review Request: Initial work on the flexible controller of the
From:       "Alessandro Diaferia" <alediaferia () gmail ! com>
Date:       2010-03-30 21:48:59
Message-ID: 20100330214859.22081.53746 () localhost
[Download RAW message or body]



> 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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic