% Copyright 2007-2009 by Massimo Redaelli
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/LICENSE for more details.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Current handling

%% Options


\ctikzset{i^>/.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = forward,
		\circuitikzbasekey/bipole/current/x position = after,
		\circuitikzbasekey/bipole/current/y position = above
	}
}

\ctikzset{i_>/.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = forward,
		\circuitikzbasekey/bipole/current/x position = after,
		\circuitikzbasekey/bipole/current/y position = below
	}
}

\ctikzset{i>^/.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = forward,
		\circuitikzbasekey/bipole/current/x position = before,
		\circuitikzbasekey/bipole/current/y position = above
	}
}

\ctikzset{i>_/.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = forward,
		\circuitikzbasekey/bipole/current/x position = before,
		\circuitikzbasekey/bipole/current/y position = below
	}
}

\ctikzset{i^</.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = backward,
		\circuitikzbasekey/bipole/current/x position = after,
		\circuitikzbasekey/bipole/current/y position = above
	}
}

\ctikzset{i_</.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = backward,
		\circuitikzbasekey/bipole/current/x position = after,
		\circuitikzbasekey/bipole/current/y position = below
	}
}

\ctikzset{i<^/.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = backward,
		\circuitikzbasekey/bipole/current/x position = before,
		\circuitikzbasekey/bipole/current/y position = above
	}
}

\ctikzset{i<_/.style = {
		i = #1,
		\circuitikzbasekey/bipole/current/direction = backward,
		\circuitikzbasekey/bipole/current/x position = before,
		\circuitikzbasekey/bipole/current/y position = below
	}
}

\ctikzset{i/.code = {
%			\ifpgf@circuit@bipole@iscurrent
%				\pgfkeys{\circuitikzbasekey/bipole/current/position=above}
%			\else
%				\pgfkeys{\circuitikzbasekey/bipole/current/position=below}
%			\fi
			\pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
					\circuitikzbasekey/bipole/current/x position = after,
					\circuitikzbasekey/bipole/current/y position = above }
	\pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
	\ctikzsetvalof{bipole/current/label/unit}{}
	\ifpgf@circ@siunitx 
		\pgf@circ@handleSI{#1}
		\ifpgf@circ@siunitx@res 
			\edef\pgf@temp{\pgf@circ@handleSI@val}
			\pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
			\edef\pgf@temp{\pgf@circ@handleSI@unit}
			\pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
		\else
		\fi
	\else
	\fi
%reverse current direction for voltage sources
	\ifpgf@circ@oldvoltagedirection\else
		\ifpgf@circuit@bipole@isvoltage
		\ifpgf@circuit@bipole@voltage@backward
			\pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
					\circuitikzbasekey/bipole/current/x position = after,
					\circuitikzbasekey/bipole/current/y position = below }
		\else
			\pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
					\circuitikzbasekey/bipole/current/x position = before,
					\circuitikzbasekey/bipole/current/y position = above }
	\fi\fi\fi
}
}


\ifpgf@circ@oldvoltagedirection
	\ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
\else
	\ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
\fi
\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }


\def\pgf@circ@drawnormalcurrent{
			\ifpgf@circuit@bipole@current@before
				\ifpgf@circuit@bipole@current@backward
					{  (anchorstartnode) -- 
							node [currarrow, pos=\ctikzvalof{current/distance}, sloped,  allow upside down] (Iarrow) {} 
						(\tikztostart)  
					}
				\else
					{  (\tikztostart) -- 
							node [currarrow, pos=\ctikzvalof{current/distance}, sloped,  allow upside down] (Iarrow) {} 
						(anchorstartnode)  
					}
				\fi
			\else
				\ifpgf@circuit@bipole@current@backward
					{ 	(\tikztotarget) -- 
							node [currarrow, pos=\ctikzvalof{current/distance}, sloped,  allow upside down] (Iarrow) {} 
						(anchorendnode)  
					}
				\else
					{ 	(anchorendnode) -- 
							node [currarrow, pos=\ctikzvalof{current/distance}, sloped,  allow upside down] (Iarrow) {}
						(\tikztotarget)  
					}
				\fi
			\fi
}

%% Output routine 
%% #1 - node name

\def\pgf@circ@drawcurrent{
	\pgfextra{
		\edef\pgf@circ@ffffff{\pgf@circ@direction}
		\def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}

		\ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
			\ifpgf@circuit@bipole@current@below
				\def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
			\fi
		\fi\fi
		\ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
			\ifpgf@circuit@bipole@current@below
				\def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east} 
			\fi
		\fi\fi
		\ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
			\ifpgf@circuit@bipole@current@below
				 \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
			\fi
		\fi\fi
		\ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
			\ifpgf@circuit@bipole@current@below
				  \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
			\fi
		\fi\fi
		\ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
			\ifpgf@circuit@bipole@current@below
				 \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
			\fi
		\fi\fi
		\ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
			\ifpgf@circuit@bipole@current@below
				 \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
			\fi
		\fi\fi
		\ifnum\pgfcircmathresult >284 \ifnum\pgfcircmathresult <356
			\ifpgf@circuit@bipole@current@below
				  \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
			\fi
		\fi\fi
		\ifnum\pgfcircmathresult <5
			\ifpgf@circuit@bipole@current@below
				 \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south} 
			\fi
		\fi
		\ifnum\pgfcircmathresult >355
			\ifpgf@circuit@bipole@current@below
				 \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south} 
			\fi
		\fi
		
		\ifpgf@circuit@bipole@current@below
			\def\pgf@circ@bipole@current@label@where{-90}
		\else
			\def\pgf@circ@bipole@current@label@where{+90}
		\fi
	}

	
		\pgfextra{	\def\pgf@temp{short} \edef\pgf@circ@temp{\ctikzvalof{bipole/kind}} }
		
		\ifx\pgf@circ@temp\pgf@temp % caso di corrente (centrata) su un corto
			\ifpgf@circuit@bipole@current@backward
				{ (\tikztotarget) -- 
					node [currarrow, pos=\ctikzvalof{current/distance}, sloped,  allow upside down] (Iarrow) {} 
				  (\tikztostart)  }
			\else
				{ (\tikztostart) -- 
					node [currarrow, pos=\ctikzvalof{current/distance}, sloped,  allow upside down] (Iarrow) {} 
				  (\tikztotarget)  }
			\fi
			
		\else % altri bipoli - e quindi tra nodo e target

			\ifpgf@circuit@bipole@iscurrent
				\ifpgf@circuit@europeancurrent
					\pgf@circ@drawnormalcurrent
				\else 
				\fi
			\else
				\pgf@circ@drawnormalcurrent
			\fi
		\fi

	\ifpgf@circuit@bipole@iscurrent
		 node [anchor=\pgf@circ@dir] at (\ctikzvalof{bipole/name}.\pgf@circ@bipole@current@label@where) 
		 	{ \pgf@circ@finallabels{current/label} }
	\else
		(Iarrow.\pgf@circ@bipole@current@label@where) node [anchor=\pgf@circ@dir] 	
			{ \pgf@circ@finallabels{current/label} } 
	\fi

}

\endinput



