diff --git a/pub/dissertation/chapters/design.tex b/pub/dissertation/chapters/design.tex index 40faf17..1fc6e58 100644 --- a/pub/dissertation/chapters/design.tex +++ b/pub/dissertation/chapters/design.tex @@ -102,8 +102,9 @@ Brief overview of what it is supposed to do... % TODO for runtime environments to be specified (in this case, Desktop and Server) \item Provides necessary build configurations in Gradle \item Planning what to implement important as Compose is designed to use modular - components, otherwise a nested mess would happen, code harder to read - % TODO add example + components, otherwise a nested mess would happen, code harder to read. + Figure~\ref{fig:compose-modular} shows example of using modular code + from the Actions screen in project (with code omissions) \item Used Voyager~\cite{voyager} to handle screens \item Used Koin~\cite{koin} for dependency injection, to be able to get data from the database and VDMJ @@ -115,6 +116,16 @@ Brief overview of what it is supposed to do... % TODO \end{itemize} \end{itemize} +\begin{figure} + \centering + \inputminted[ + linenos, + breaklines, + ]{kotlin}{code/compose-modular.kt} + \caption[Compose Modular Example]{Example of modular code in Compose} + \label{fig:compose-modular} +\end{figure} + \subsection{Storing Data} diff --git a/pub/dissertation/code/compose-modular.kt b/pub/dissertation/code/compose-modular.kt new file mode 100644 index 0000000..8491fc2 --- /dev/null +++ b/pub/dissertation/code/compose-modular.kt @@ -0,0 +1,55 @@ +@Composable +override fun Content() { + // Content variables... + + Scaffold( + topBar = {/* Composable content... */}, + ) { + Column(/* Column option parameters... */) { + Box(/* Box option parameters... */) { + LazyColumn(/* LazyColumn option parameters... */) { + + item { + Header() + } + + items( + items = inputs, + key = { input -> input.id } + ) { item -> + ActionItem(item) + } + } + } + } + } +} + +@Composable +private fun Header() { + Text(text = "Edit Actions") +} + +@Composable +private fun ActionItem(item: Action) { + Column (/* Column option parameters... */) { + Row(/* Row option parameters... */) { + Text(text = "Action ${item.step + 1}") + + IconButton(/* IconButton definition parameters... */) { + Icon( + Icons.Outlined.Delete, + // Rest of Icon options... + ) + } + } + + Row(/* Row option parameters... */) { + OutlinedTextField(/* TextField definition parameters... */) + + OutlinedTextField(/* TextField definition parameters... */) + } + + HorizontalDivider() + } +} diff --git a/pub/dissertation/dissertation.pdf b/pub/dissertation/dissertation.pdf index 2874351..0b851be 100644 Binary files a/pub/dissertation/dissertation.pdf and b/pub/dissertation/dissertation.pdf differ diff --git a/pub/dissertation/dissertation.tex b/pub/dissertation/dissertation.tex index 697a6a0..9e1f057 100644 --- a/pub/dissertation/dissertation.tex +++ b/pub/dissertation/dissertation.tex @@ -13,6 +13,7 @@ %\usepackage{vdmlisting} \usepackage{listings} +\usepackage{minted} % Taken from vdmlisting \lstdefinelanguage{VDM_SL} {morekeywords={RESULT,\#else,\#endif,\#ifdef,\#ifndef,abs,all,always,and,as,atomic,be,be st,bool,by,card,cases,char,comp,compose,conc,dcl,def,definitions,dinter,div,dlmodule,do,dom,dunion,