I'll have to move the node out of the matrix.
Code: Select all
\documentclass{article}
\usepackage[a3paper]{geometry}
\usepackage[cm]{fullpage}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{verbatim}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,backgrounds,calc}
\begin{document}
\begin{tikzpicture}
%{{{ tikz styles
\tikzset{
header/.style={ellipse, draw=black, top color=white, bottom color=yellow!50,thick, inner sep=3mm, minimum size=4em, text centered, double, anchor=center},
pointer/.style = {signal, signal to=east, anchor=west, text width = 40mm,},
mnemonic-block/.style={rectangle, anchor=west, inner sep=2mm, text width = 9.6cm,},
line/.style = {draw},
comment/.style = {rectangle, rounded corners, draw, inner sep=3mm, anchor=west, text width = 8cm, node distance=1.5cm},
}
%}}}
\matrix[nodes={draw}, row sep=5mm,
column sep = 5mm,minimum width=.875cm, minimum height=1cm]
{
& \node [header] (1_1) {Moose Attributes};\\
\node [pointer] (2_1) {Use \texttt{'has'} function to declare an attribute}; &
\node [mnemonic-block] (2_2) {\begin{lstlisting}[language=Perl]
package Person;
use Moose;
has 'first_name' => ( is => 'rw' );
\end{lstlisting}};\\\node [pointer] (3_1) {read-write / read only}; &
\node [mnemonic-block] (3_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {is => 'rw'}
has 'attr' => {is => 'ro'}
\end{lstlisting}};\\\node [pointer] (4_1) {Accessor methods}; &
\node [mnemonic-block] (4_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {reader => 'get_attr',}
has 'attr' => {writer => 'set_attr',}
\end{lstlisting}};\\\node [pointer] (5_1) {Predicate method}; &
\node [mnemonic-block] (5_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {predicate => 'has_attr'}
\end{lstlisting}
}; &
\node [comment] (5_3) {Tells you whether or not a given attribute is currently set};\\\node [pointer] (6_1) {Cleaner method}; &
\node [mnemonic-block] (6_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {cleaner => 'clean_attr'}
\end{lstlisting}}; &
\node [comment] (6_3) {Unsets the attribute};\\\node [pointer] (7_1) {Required}; &
\node [mnemonic-block] (7_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {required => 1}
\end{lstlisting}};\\\node [pointer] (8_1) {Lazy}; &
\node [mnemonic-block] (8_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {lazy => 1}
\end{lstlisting}
}; &
\node [comment] (8_3) {When lazy is true, the default is not generated until the reader method is called};\\\node [pointer] (9_1) {Constructor parameters}; &
\node [mnemonic-block] (9_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {init_arg => 'new_name'}
\end{lstlisting}
}; &
\node [comment] (9_3) {
Use a different name for the constructor parameter for this attribute.
};\\\node [pointer] (10_1) {Weak references}; &
\node [mnemonic-block] (10_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {weak_ref => 1}
\end{lstlisting}
}; &
\node [comment] (10_3) {
If you set the weak\_ref option to a true value, then it will call Scalar::Util::weaken whenever the attribute is set
};\\\node [pointer] (11_1) {Trigger}; &
\node [mnemonic-block] (11_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {trigger => \&attr_set}
\end{lstlisting}
}; &
\node [comment] (11_3) {subroutine that is called whenever the attribute is set};\\\node [pointer] (12_1) {Attribute type}; &
\node [mnemonic-block] (12_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {isa => 'Str',}
has 'attr' => {isa => 'MyApp::Weapon',}
\end{lstlisting}
};\\\node [pointer] (13_1) {Documentation}; &
\node [mnemonic-block] (13_2) {\begin{lstlisting}[language=Perl]
has 'attr' => {documentation => q{Some text}}
\end{lstlisting}
};\\
};
\draw[line] (1_1.west) --++ (-5mm, 0) |- (2_1.west) --++ (-5mm, 0) |- (3_1.west) --++ (-5mm, 0) |- (4_1.west) --++ (-5mm, 0) |- (5_1.west) --++ (-5mm, 0) |- (6_1.west) --++ (-5mm, 0) |- (7_1.west) --++ (-5mm, 0) |- (8_1.west) --++ (-5mm, 0) |- (9_1.west) --++ (-5mm, 0) |- (10_1.west) --++ (-5mm, 0) |- (11_1.west) --++ (-5mm, 0) |- (12_1.west) --++ (-5mm, 0) |- (13_1.west);\draw[line] (2_1.east) -- (2_2.west);\draw[line] (3_1.east) -- (3_2.west);\draw[line] (4_1.east) -- (4_2.west);\draw[line] (5_1.east) -- (5_2.west);\draw[line] (5_2.east) -- (5_3.west);\draw[line] (6_1.east) -- (6_2.west);\draw[line] (6_2.east) -- (6_3.west);\draw[line] (7_1.east) -- (7_2.west);\draw[line] (8_1.east) -- (8_2.west);\draw[line] (8_2.east) -- (8_3.west);\draw[line] (9_1.east) -- (9_2.west);\draw[line] (9_2.east) -- (9_3.west);\draw[line] (10_1.east) -- (10_2.west);\draw[line] (10_2.east) -- (10_3.west);\draw[line] (11_1.east) -- (11_2.west);\draw[line] (11_2.east) -- (11_3.west);\draw[line] (12_1.east) -- (12_2.west);\draw[line] (13_1.east) -- (13_2.west);
\end{tikzpicture}
\end{document}
