i started to be slightly annoyed with going back and forth between labours and roles so i've been toying with the idea of adding a roles pane to the dwarf details, or adding the top roles to the tooltip, or both! i'm concerned this extra pane is cluttering things. perhaps listing all the roles is a bit much as well, perhaps top 10 would be sufficient?
any feedback would be much appreciated!
i think that instead of trying to fit too much information in the same pane, which can be such an ui design nightmare, one way to resolve the problem would be to split different groups of labor into different pane. the full labor pane would stille be needed for some tasks, but often i find myself having too much columns to fit in the screen and having more specialized pane would help to achieve this goal.
different people have different taste, so if it was possible to configure the content of a pane from a config file like this is done for the roles, but in a more general way.
may i suggest using xml for the config, because i find it more usable as soon as you need some kid of tree structure. also it tends to be much more strongly typed to avoid syntax errors.
my idea would be that a list of 'columns' nodes would be defined (could be a role, an attribute, a job) with the appropriate data to populate it. (code for display, click handling and sort would be done for each type of column, afterwards it's just a matter of giving the correct properties)
then there would be 'groups' nodes to allow for a specific coloring and get a separator between groups.
then a 'pane' node would contain a list of group nodes.
with this, a user could himself define the panes he wants to use (existing panes would be defined by default) and what each pane contains.
also maybe another type of special column, which would be a sort of 'custom job' column and which would be a list of jobs which when clicked would toggle all the associated jobs on or off.
given the fact that you already dynamically construct the roles pane from a config, can i guess it would be easy enough to implement?
here a quick sample of how it could look
<Config>
<Professions>
<Profession Name="Miner" DFIndex="0" IsMilitary="false" CanAssignLabor="true"/>
<Profession name="Woodworker" DFIndex="1"/>
<Profession name="Carpenter" DFIndex="2" />
<Profession name="Bowyer" DFIndex="3" />
</Professions>
<Skills>
<Skill Name="Miner" DFIndex="0" />
<Skill Name="Wood Cutter" DFIndex="1" />
<Skill Name="Carpenter" DFIndex="2" />
</Skills>
<Labors>
<Labor Name="Mining" DFIndex="0" Skill="Miner" />
<Labor Name="Carpentry" DFIndex="11" Skill="Carpenter" />
<Labor Name="Wood Cutting" DFIndex="10" Skill="Wood Cutter" />
</Labors>
<Traits>
<Trait Name="Nervousness">
<level index="5">Is a nervous wreck</level>
<level index="4">Is always tense and jittery</level>
<level index="3">Is often nervous</level>
<level index="2">Has a calm demeanor</level>
<level index="1">Has a very calm demeanor</level>
<level index="0">Has an incredibly calm demeanor</level>
</Traits>
<Columns>
<!--this type of column expect a labor reference, display skill value and toggle labor on click -->
<Column Name="Mining" Type="JobAndSkill" Reference="Mining" />
<!--this type of column expect a trait reference, display trait value and execute default action on click (select row) -->
<Column Name="Nervousness" Type="Trait" Reference="Nervousness" />
</Columns>
<!-- this define custom labor masks, to enable at-once labor toggle -->
<LaborMasks>
<LaborMask Name="Docker">
<LaborRef Reference="Stone Hauling" />
<LaborRef Reference="Item Hauling" />
<LaborRef Reference="Wood Hauling" />
</LaborMask>
</LaborMasks>
<Groups>
<Group Name="Mining" Color="Grey">
<ColumnRef Name="Mining" />
</Group>
<Group Name="Woodworking" Color="Brown">
<ColumnRef Reference="Carpentry" />
<ColumnRef Reference="Wood Cutting" />
<ColumnRef Reference="Crossbow-making" />
</Group>
</Groups>
<Panes>
<Pane Name="Labor">
<GroupRef Reference="Mining" />
<GroupRef Reference="Woodworking" />
</Pane>
</Panes>
</Config>