<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
hi, im just going to answer on point where i disagree or have further questions. <br><br>&gt; so could you please commit your code into a branch in KDE's svn? that way<br>&gt; there's a hope of tracking what's going on and getting involved.<br>&gt; /branches/work/plasma-groupingtaskbar or something like that would be great.<br><br>I have an account now and will upload the files a soon as i have done the basic refactoring according to your comments.<br><br><br><br>&gt; BasicGroupingStrategy:<br>&gt;<br>&gt; * since it's meant to be subclasses, do we need the word "Basic" in it? it<br>&gt; actually doesn't seem to do any grouping, actually, but i assume that's due to<br>&gt; the stage of devel it's in... if it's meant to be a shell of a class that is<br>&gt; meant to be subclassed (i see virtuals =) then it could be<br>&gt; AbstractGroupingStrategy and the virtuals made pure virtual. personally, i'd<br>&gt; just call it GroupingStrategy<br><br>true...<br><br>&gt; * in the taskbar we're usually getting one task at a time from the window<br>&gt; manager (as windows are added/removed). i don't see any API that easily maps<br>&gt; an item to an existing group. that seems odd. where does the "which group<br>&gt; should this task be put in?" code currently exist?<br><br>You're right, the task should probably first be passed to the GroupingStrategy which tries to put it into the best TaskGroup or the RootGroup.<br>The group which receives the task, then tries to group fitting tasks together.<br><br>&gt; * what is the purpose of having separate suggesting methods for names, colours<br>&gt; and icons, other than to go through the list 3 times? i can't think of any<br>&gt; situation where you'd only want the names or only the colours, or in which<br>&gt; having the other information would be detrimental. on the flip side, going<br>&gt; through the list N times is a bit wasteful. not to mention it complicates the<br>&gt; API =)<br><br>Those methods were thought for later suggestions in the GroupEdit window where you<br>should be able to choose between suggestions freely or enter new names, colors etc.<br><br>&gt; * why is it a singleton when there can be N users of a strategy? why is it a<br>&gt; singleton if it is meant to be subclassed? this really doesn't look like the<br>&gt; place for a singleton, tbh.<br><br><br><br><br>Well, the basicGroupingStrategy wasn't really anything useful...<br><br>my idea of the GroupingStrategy is that as soon as a AbstractGroupableItem is added or removed to a TaskGroup,<br>the TaskGroup passes its children to the GroupingStrategy singleton, and the singleton returns possible matches which items should group together.<br>If the match isn't just possible but rather for sure, the Group groups the items according to the GroupSuggestion returned by the GroupingStrategy.<br>If the match is just a suggestion the Group ignores it. Everytime the user groups tasks manually or renames a group the GroupingStrategy learns from it.<br><br>The GroupingStrategy would hold the configuration and various other GroupingStrategies which are derived from AbstractGroupingStrategy and deliver the actual guesses.<br><br><br>&gt; * where will ordering of items be handled? you seem to be assuming a manual<br>&gt; ordering of things always and that's not what most people want: they want an<br>&gt; automated ordering (alpha, by desktop, etc). i'm not sure it belongs in<br>&gt; TaskGroup because all task groups in a given collection should behave<br>&gt; similarly and alternative strategies would require either putting all possible<br>&gt; strategies into TaskGroup or making it subclassable. (neither are pretty)<br><br>The ordering should probably also be handled by the GroupingStrategy and we could have there a ManualOrdering mode...<br><br>&gt; TaskGroup:<br>&gt;<br>&gt; * i don't understand the relationship between the grouping strategy and the<br>&gt; group class. if you have N tasks divided into M groups, what decides what task<br>&gt; belongs in each group? right now it seems the strategy suggests where they<br>&gt; should go, but the group decides. what happens in the case of multiple groups<br>&gt; when a new task comes around?<br>&gt;<br>&gt; the way i might go about it is have the strategy manage a collection of groups<br>&gt; that it then exports. this would be a tree of objects representing the groups<br>&gt; and their nesting. groups would contain items and be completely stupid about<br>&gt; the grouping mechanics. that way the relationship between group and strategy<br>&gt; is obvious, it's clear how multiple strategies would work in parallel, and<br>&gt; give a sane point for configuration management<br><br>I don't get this part, sorry. On what would this tree of groups be based?<br><br><br><br>&gt; * there are gui concepts mixed into this data class. collapsed/not collapsed<br>&gt; is not a data concept, it's a visualization concept. all of that logic belongs<br>&gt; in the UI side.<br><br>Thats true, but if i remove it i have to move the whole TaskRMBMenu class out of the lib and move it to<br>workspace/plasma/applets/tasks/ so i have direct access to the collapsed() function.<br><br>&gt; a few implementation comments:<br>&gt;<br>&gt; TaskGroup:<br><br>&gt; * add(dynamic_cast&lt;AbstractGroupableItem*&gt;(task.data())) -&gt; *never* take the<br>&gt; data of a TaskPtr and store it somewhere. that defeats the purpose of TaskPtr<br>&gt; altogether. moreover, you don't need to cast a subclass to a superclass.<br>&gt; dynamic_cast is for downcasting. in fact, i don't actually see the point of<br>&gt; the various add() method overrides (for TaskPtr, TaskGroup, etc). they don't<br>&gt; actually do anything useful.<br>&gt;<br>&gt; * ditto for the remove() methods<br><br>You're right with the directly inherited classes. Unfortuantely i couldn't find out<br>if this is also possible with the KSharedPointers. Therefore i had to keep those functions.<br>It looks like this at the moment:<br><br>typedef KSharedPtr&lt;AbstractGroupableItem&gt; AbstractPtr;<br>typedef KSharedPtr&lt;TaskGroup&gt; GroupPtr; //Task group inherits AbstractGroupableItem<br><br>void TaskGroup::add(GroupPtr item)<br>{<br>&nbsp;&nbsp;&nbsp; add(AbstractPtr::dynamicCast(item));<br>}<br><br>void TaskGroup::add(AbstractPtr item)<br>{<br>&nbsp;&nbsp;&nbsp; if (d-&gt;m_members.contains(item)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kDebug() &lt;&lt; "already in this group";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; d-&gt;m_members.insert(item);<br>&nbsp;&nbsp;&nbsp; item-&gt;addedToGroup(GroupPtr(this));<br>&nbsp;&nbsp;&nbsp; emit itemAdded(item);<br>}<br><br><br><br>&gt; &gt; -Save custom order on collapse group<br>&gt;<br>&gt; custom order? you mean the order someone has dragged the item into? this is<br>&gt; not going to work with automated systems, or at least make them very<br>&gt; complicated, or require being able to switch<br><br>Well, then at least in this mode. To me as a user it was almost a "must have" feature to<br>sort the items as i like but its maybe not that crucial anymore with groups...<br><br>&gt; &gt; -It should be possible to have multiple rows and force a certain number of<br>&gt; &gt; rows or let the LayoutWidget automatically appen and remove rows as needed.<br>&gt; beware of "a million dialogs" syndrome<br><br>This option isn't necessarily available to the user. Its more that the rootgroup can have<br>several rows while subgroups can be forced to use just one...<br><br><br>&gt; &gt; -Implement Dragging of expanded groups by dragging groupmember outside of<br>&gt; &gt; group<br>&gt;<br>&gt; unless the implementation is more straightforward than the description, this<br>&gt; could be a problematic feature.<br><br>This works actually quite well...<br><br>&gt; --<br>&gt; Aaron J. Seigo<br>&gt; humru othro a kohnu se<br>&gt; GPG Fingerprint: 8B8B 2209 0C6F 7C47 B1EA EE75 D6B7 2EB1 A7F1 DB43<br>&gt;<br>&gt; KDE core developer sponsored by Trolltech<br>&gt;<br><br><br>Regards<br><br><br /><hr />Bloggen, posten und Dateien freigeben für Freunde und Familie - jetzt noch einfacher mit Windows Live Spaces! <a href='http://get.live.com/messenger/overview' target='_new'>Hier klicken!</a></body>
</html>