<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
&gt; &gt; I think every GroupableItem has to<br>&gt; &gt; hold a list with all group suggestions they fit in, so those options<br>&gt; &gt; can be presented to the user.<br>&gt;<br>&gt; i'm highly dubious of the desire, let alone need, for this.<br>&gt;<br>&gt; can you give some actual use cases?<br><br>they would be presented as grouping suggestions when one right-clicks on a taskitem.<br><br>&gt; &gt; The GroupingStrategy isn't directly in touch with the user i think.<br>&gt;<br>&gt; that's irrelevant, tbh. where the suggestions for grouping come from or are<br>&gt; managed is completely irrelevant from the user's POV. as soon as you starting<br>&gt; thinking "data structure ... that translates to the user interface" you've<br>&gt; lost. the two are completely separate ideas and one should not impact the<br>&gt; other beyond "data structure must be able to service the needs of a<br>&gt; visualization"<br>&gt;<br>&gt; &gt; If an item is added we could slightly colorize items that could possibly<br>&gt; &gt; fit and the color would fade out without interaction of the user after<br>&gt; &gt; 5-10sec or so. This way we could show the user the possibility of grouping.<br>&gt;<br>&gt; again, what are the use cases for this? maybe i'm just not getting what you're<br>&gt; vision is for the taskbar here, but ... yeah .. why should the user care about<br>&gt; such things? how would they interpret these colours? etc...<br><br>It would tell the user "Hey we have somthing you probably want to group,<br>but we're not quite sure so its up to you". <br>If the user groups it it is automatically done next time.<br>If he doesn't the colors won't show up.<br><br>But its maybe more distracting than useful.<br><br>&gt; yes, let's step back and gather use cases so we can talk about what this<br>&gt; actually trying to deliver.<br>&gt;<br>&gt; &gt; &gt; Taskbar widget: creates pretty things on screen that follows the<br>&gt; &gt; &gt; GroupingStrategy's hierarchy<br>&gt; &gt;<br>&gt; &gt; Wouldn't the whole hierarchy have to be reevaluated if an item gets added<br>&gt; &gt; to a group?<br>&gt;<br>&gt; no, and what does that have to do with the Taskbar widget visualizing the data<br>&gt; structure?<br>&gt;<br>&gt; &gt; I think it is better if the GroupingStrategy of the current<br>&gt; &gt; rootGroup adds the new task to a reasonable subgroup or keeps it otherwise.<br>&gt;<br>&gt; absolutely; this has nothing to do with the Taskbar widget, however. the<br>&gt; Taskbar will update itself to reflect this change, but the Taskbar widget<br>&gt; should have *little to no interaction* with the organization of the tasks into<br>&gt; the hierarchy.<br>&gt;<br>&gt; &gt; &gt; this doesn't address the problem of TaskPtr also being used improperly<br>&gt; &gt; &gt; (hint: never access TaskPtr::data()). that's the real issue here: TaskPtr<br>&gt; &gt; &gt; represents a window and is shared by everything that uses this library.<br>&gt; &gt; &gt; it is what needs protecting against usage-after-deletion.<br>&gt; &gt;<br>&gt; &gt; My Idea was that tools like the ProgramSwitcher (alt-tab) could support<br>&gt; &gt; groups created in the main taskbar.<br>&gt;<br>&gt; that would require publishing the data across processes (the alt-tab switcher<br>&gt; runs in kwin; runners are in krunner; the taskbar would be in plasma) and so<br>&gt; the objects still wouldn't be shared (rather they'd be syncronized).<br><br>Okay, but if i make the AbstractGroupableItem unguarded, wouldn't this make tasks<br>stored as AbstractGroupableItem unguarded?<br><br>&gt; &gt; &gt; but i don't think it's meaningful to try and share the<br>&gt; &gt; &gt; AbstractGroupableItems: those will be specific to each visualization<br>&gt; &gt; &gt; (e.g. a taskbar on the panel).<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; it's probably more sane to have each visualization use their own set of<br>&gt; &gt; &gt; groupable items. in this pattern, each visualization would have its own<br>&gt; &gt; &gt; GroupingStrategy and that GroupingStrategy would maintain its own<br>&gt; &gt; &gt; collection of groups and items.<br>&gt; &gt;<br>&gt; &gt; Agreed. The way it works at the moment is that every visualization<br>&gt; &gt; (Taskmanager) has its own rootGroup so groups that are created on a certain<br>&gt; &gt; visualization aren't created on another too. But i don't see the point of<br>&gt; &gt; creating several GroupingStrategy.<br>&gt;<br>&gt; as an example: so that you can have a taskbar with a GroupingStrategy that,<br>&gt; for instance, shows only the windows on that screen, and a window list menu<br>&gt; that shows all windows grouped by application.<br>&gt;<br>&gt; there is no guarantee that every visualization will want to have the same<br>&gt; grouping strategy. if they do, they can find a way to share that strategy<br>&gt; amongst themselves. but putting that assumption in libtaskmanager itself<br>&gt; sounds artificially limiting.<br><br>Click... Now i understand.<br>You mean that we should be able to create a new representation tree of an existing group<br>by simply creating a new GroupingStrategy.<br>That makes sense.<br><br><br>&gt; &gt; &gt; i don't see any really common use cases for shared GroupingStrategy.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; what do you think?<br>&gt; &gt;<br>&gt; &gt; I think the GroupingStrategy learns from the user this should affect all<br>&gt; &gt; visualizations, so a newly created group on one visualization is instantly<br>&gt; &gt; available as a suggestion on another visualization.<br>&gt;<br>&gt; you're still thinking in terms of "there is one taskbar". how do you allow<br>&gt; for, say, a MacOS style dock? or a simple menu? or..? the tasks plasma applet<br>&gt; can share a GroupingStrategy easily amongst all instances of the tasks plasma<br>&gt; applet if we want; that doesn't require GroupingStrategy to be a singleton.<br>&gt;<br>&gt; but if GroupingStrategy is a singleton, then we make libtaskmanager far less<br>&gt; useful for things like a dock or a QMenu representation.<br>&gt;<br>&gt; you're also making the assumption that people will necessarily want more than<br>&gt; one taskbar that is identical. none of that is a given.<br><br>No im not. Since my idea was that de TaskGroup passes the settings (SortingMode, etc.) and<br>the Tasks, and the GroupingStrategy wouldn't store any groups, there was simply no need for this.<br>The Idea behind the single instance of the GroupingStrategy was simply that there should be a common backend<br>for regularly used groups which the groupingStrategy learns. The other taskbars shouldn't follow the "main" taskbar (if there is one).<br><br>So different Taskmanagers (or docks or menues or whatever) would have been created by simply creating a new rootGroup.<br>The RootGroup has its own set of TaskPtrs and is absolutely free to do whatever it wants to do.<br><br>But if were doing all the grouping in the GroupingStrategy im absolutely with you.<br><br>&gt;<br>&gt; &gt; So as a summary of my (current)vision:<br>&gt; &gt; -Each visualization has its own rootGroup which manages its own<br>&gt; &gt; set of abstractGroupableItems.<br>&gt; &gt;<br>&gt; &gt; -The GroupingStrategy gets called by the altered group but is global<br>&gt; &gt; so the learning effort is as well.<br>&gt; &gt;<br>&gt; &gt; -The GroupingStrategy takes the configuration (SortingMode etc.) from<br>&gt; &gt; the group so this isn't global.<br>&gt; &gt; (we should be able to have differently<br>&gt; &gt; configured taskbars, and since a rootgroup virtually represents a<br>&gt; &gt; visualisazion we can put this in the TaskGroup and there is still<br>&gt; &gt; the possibility for future modifications, to let different groups<br>&gt; &gt; behave differently without any extra effort.)<br>&gt;<br>&gt; what are the use cases for having different groups in the same taskbar behave<br>&gt; differently?<br><br>It would allow to have a taskmanager where the toplevel is sorted by, let say, alpha <br>and subgroups could still be managed manually. This would possibly lead to loads of <br>configuration options and a don't see a real use case. I just wanted to leave this option<br>open for future ideas as i thought it wouldn't have many negative sides. But as i can see<br>now its probably better to do it centrally in GroupingStrategy so we have a clean code.<br><br>&gt; and do you perhaps think that storing the configuration in one class, making<br>&gt; suggestions in another, and making the final decision back in the first class,<br>&gt; then communicating the decision back to the second class is a little ..<br>&gt; clumsy?<br>&gt;<br>&gt; why not store, suggest and organize all in one class (GroupingStrategy) and<br>&gt; reprseent the hierarchy in another (TaskGroup)?<br>&gt;<br>&gt; the config-in-TaskGroup, suggest-by-GroupingStrategy, decide-in-TaskGroup,<br>&gt; inform-GroupingStrategy-of-decision is going to result in spaghetti code.<br><br>Well, i guess you're right. =)<br><br>So as a summary of my (new)vision:<br><br>-Each visualization has its own GroupingStrategy which manages its own<br>&nbsp;set of abstractGroupableItems.<br><br>-the taskGroup remains just as a container of other groupable items. all grouping functions (joinGroup, leaveGroup)are removed from the abstractGroupableItem.<br><br>-If a new Task appears, the GroupingStrategy gets it from the TaskManager class, it then tries to find a reasonable group for it or puts it in the top group otherwise.<br><br>-The visualization just follows the Group tree exported by the GroupingStrategy.<br><br>-If the user groups to tasks manually (if supported by GroupingStrategy), the GroupingStrategy groups these items and not the items group each other.<br><br><br>This way the GUI part will get smaller because the AbstractGroupableItems are completele stupid about grouping and the whole layout of the taskmanager-library gets much clearer.<br><br>Hopfully im getting closer to your vision now =)<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>