I provide a solution, based on TikZ, that automates the process of creation by simply calling this command:
\qoc{How wide?}{Wide,Narrow}{1}{Ease of hitting with a mouse,Screen compactness}{{1},{2}}{{2},{1}}
It is quite heavy in the number of arguments unfortunately; let's examine them:
- the first one is the starting point;
- the second contains the list of items in the second stage (the first one is shown in the bottom);
- the third command allows you to decide which of the items in the second stage is selected and thus put into a box;
- the fourth contains the list of items in the third stage (with the same rule: the first is put in the bottom, the last on the top)
- the fifth command is used to create positive edges (with a countinuous line); the rule is the following:
{{1},{2}}
means that the first module of the second stage is connected with the first module of the third stage; you can list them, thus {{2},{1,3}}
means that the second module of the second stage is connected with the first and third module of the third stage;
- the sixth command is quite similar to the previous one, but it is used to create negative edges (with a dashed line).
I know that it seems quite strange, but look at the MWE:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\newcommand{\qoc}[6]{%
\begin{tikzpicture}[every node/.style={anchor=center, align=left},
thirdstage/.style={anchor=west,text width=4cm, align=left},rotate=-90]
% First stage
\node (X){Q: #1};
\foreach \z [count=\xi] in {#2} {\global\let\maxz\xi}
\foreach \w [count=\yi] in {#4} {\global\let\maxw\yi}
% Nodes definition second stage
\foreach \z [count=\xi] in {#2}
{%
\pgfmathtruncatemacro{\angle}{180/(\maxz+1)*\xi}
\ifnumequal{#3}{\xi}{
\node[rectangle,draw] (X\xi) at (\angle:2.5cm) {O: \z };
}{
\node (X\xi) at (\angle:2.5cm) {O: \z };
}
\path (X)edge(X\xi) ;
}%
% Nodes definition third stage
\foreach \w [count=\yi] in {#4}
{%
\pgfmathtruncatemacro{\angle}{180/(\maxw+1)*\yi}
\node[thirdstage,xshift=5cm] (XX\yi) at (\angle:2.5cm) {C: \w};
}%
% Positive connections (dashed)
\foreach \x [count=\xi] in {#5}
{%
\foreach \y in \x
\draw(X\xi)--(XX\y);
}
% Negative connections (dashed)
\foreach \x [count=\xi] in {#6}
{%
\foreach \y in \x
\draw[dashed](X\xi)--(XX\y);
}
\end{tikzpicture}
}
\begin{document}
\qoc{How wide?}{Wide,Narrow}{1}{ Ease of hitting with a mouse,Screen compactness}{{1},{2}}{{2},{1}}
\vspace*{2cm}
\qoc{How to display?}{Appearing,Permanent}{1}{Continuous feedback to users,Screen compactness,Low user effort}{{2},{3,1}}{{1,3},{2}}
\vspace*{2cm}
\qoc{How to display?}{Appearing,Permanent}{1}{Continuous feedback to users,Screen compactness,Low user effort,No user effort}{{2,4},{3,1}}{{1,3},{2,4}}
\end{document}
that gives you:
The part you really have to insert inside the document is not too much distant from the pseudo code you provided in the question; moreover my solution guarantees you that it works for a variable number of items (not too large I think) in both stages.
{}
button, or enclosing it in backticks (for inline code) or indenting by four spaces (for code blocks). I've also removed the "Thanks" from the message, that's just the common style here.