summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2017-10-23 16:47:53 +0200
committernsensfel <SpamShield0@noot-noot.org>2017-10-23 16:47:53 +0200
commit3b9ba42a1c4afb3ec63dc72698912ab65a0c94d8 (patch)
treefc629e86eeebae93b2268b48cd4a22e6233841c6 /src
parent86ed44e3b3e9a09a7377a0b9a6e53b79e295c5e9 (diff)
Adds tabs to the footer menu, no CSS for it though.
Diffstat (limited to 'src')
-rw-r--r--src/battlemap/src/Event.elm3
-rw-r--r--src/battlemap/src/UI.elm70
-rw-r--r--src/battlemap/src/Update.elm3
-rw-r--r--src/battlemap/src/Util/Html.elm6
-rw-r--r--src/battlemap/src/View.elm18
-rw-r--r--src/battlemap/src/View/Battlemap.elm6
-rw-r--r--src/battlemap/src/View/Footer.elm38
-rw-r--r--src/battlemap/src/View/Footer/ManualControls.elm (renamed from src/battlemap/src/View/Controls.elm)42
-rw-r--r--src/battlemap/src/View/Footer/TabMenu.elm94
-rw-r--r--src/battlemap/src/View/Footer/TabMenu/Characters.elm29
-rw-r--r--src/battlemap/src/View/Footer/TabMenu/Settings.elm42
-rw-r--r--src/battlemap/src/View/Footer/TabMenu/Status.elm (renamed from src/battlemap/src/View/Status.elm)28
-rw-r--r--src/battlemap/src/View/Header.elm24
13 files changed, 355 insertions, 48 deletions
diff --git a/src/battlemap/src/Event.elm b/src/battlemap/src/Event.elm
index 96d4dfa..c56f8cf 100644
--- a/src/battlemap/src/Event.elm
+++ b/src/battlemap/src/Event.elm
@@ -5,9 +5,12 @@ import Battlemap.Location
import Character
+import UI
+
type Type =
DirectionRequested Battlemap.Direction.Type
| TileSelected Battlemap.Location.Ref
| CharacterSelected Character.Ref
| TurnEnded
| ScaleChangeRequested Float
+ | TabSelected UI.Tab
diff --git a/src/battlemap/src/UI.elm b/src/battlemap/src/UI.elm
index 5e0718e..7e21a36 100644
--- a/src/battlemap/src/UI.elm
+++ b/src/battlemap/src/UI.elm
@@ -3,29 +3,51 @@ module UI exposing
Type,
Tab(..),
default,
+ -- Zoom
get_zoom_level,
reset_zoom_level,
- mod_zoom_level
+ mod_zoom_level,
+ -- Tab
+ try_getting_displayed_tab,
+ set_displayed_tab,
+ reset_displayed_tab,
+ to_string,
+ get_all_tabs,
+ -- Manual Controls
+ has_manual_controls_enabled
)
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Tab =
+ StatusTab
+ | CharactersTab
+ | SettingsTab
+
type alias Type =
{
zoom_level : Float,
- show_manual_controls : Bool
+ show_manual_controls : Bool,
+ displayed_tab : (Maybe Tab)
}
-type Tab =
- NoTab
- | StatusTab
- | SettingsTab
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
default : Type
default =
{
zoom_level = 1.0,
- show_manual_controls = True
+ show_manual_controls = True,
+ displayed_tab = Nothing
}
+-- Zoom ------------------------------------------------------------------------
get_zoom_level : Type -> Float
get_zoom_level ui = ui.zoom_level
@@ -34,3 +56,37 @@ reset_zoom_level ui = {ui | zoom_level = 1.0}
mod_zoom_level : Type -> Float -> Type
mod_zoom_level ui mod = {ui | zoom_level = (mod * ui.zoom_level)}
+
+-- Tab -------------------------------------------------------------------------
+try_getting_displayed_tab : Type -> (Maybe Tab)
+try_getting_displayed_tab ui = ui.displayed_tab
+
+set_displayed_tab : Type -> Tab -> Type
+set_displayed_tab ui tab = {ui | displayed_tab = (Just tab)}
+
+reset_displayed_tab : Type -> Type
+reset_displayed_tab ui = {ui | displayed_tab = Nothing}
+
+to_string : Tab -> String
+to_string tab =
+ case tab of
+ StatusTab -> "Status"
+ CharactersTab -> "Characters"
+ SettingsTab -> "Settings"
+
+get_all_tabs : (List Tab)
+get_all_tabs = [StatusTab, CharactersTab, SettingsTab]
+-- ManualControls --------------------------------------------------------------
+has_manual_controls_enabled : Type -> Bool
+has_manual_controls_enabled ui = ui.show_manual_controls
+
+toggle_manual_controls : Type -> Type
+toggle_manual_controls ui =
+ if (ui.show_manual_controls)
+ then
+ {ui | show_manual_controls = False}
+ else
+ {ui | show_manual_controls = True}
+
+set_enable_toggle_manual_controls : Type -> Bool -> Type
+set_enable_toggle_manual_controls ui val = {ui | show_manual_controls = val}
diff --git a/src/battlemap/src/Update.elm b/src/battlemap/src/Update.elm
index 6466ddf..60d1f25 100644
--- a/src/battlemap/src/Update.elm
+++ b/src/battlemap/src/Update.elm
@@ -34,3 +34,6 @@ update event model =
({model | ui = (UI.reset_zoom_level model.ui)}, Cmd.none)
else
({model | ui = (UI.mod_zoom_level model.ui mod)}, Cmd.none)
+
+ (Event.TabSelected tab) ->
+ ({model | ui = (UI.set_displayed_tab model.ui tab)}, Cmd.none)
diff --git a/src/battlemap/src/Util/Html.elm b/src/battlemap/src/Util/Html.elm
new file mode 100644
index 0000000..42eadba
--- /dev/null
+++ b/src/battlemap/src/Util/Html.elm
@@ -0,0 +1,6 @@
+module Util.Html exposing (nothing)
+
+import Html
+
+nothing : (Html.Html a)
+nothing = (Html.text "")
diff --git a/src/battlemap/src/View.elm b/src/battlemap/src/View.elm
index 1b84971..4e23561 100644
--- a/src/battlemap/src/View.elm
+++ b/src/battlemap/src/View.elm
@@ -1,19 +1,24 @@
module View exposing (view)
+-- Elm -------------------------------------------------------------------------
import Dict
import Html
import Html.Attributes
+-- Battlemap -------------------------------------------------------------------
import UI
import View.Battlemap
-import View.Controls
-import View.Status
+import View.Header
+import View.Footer
import Event
import Model
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
view : Model.Type -> (Html.Html Event.Type)
view model =
(Html.div
@@ -21,12 +26,7 @@ view model =
(Html.Attributes.class "battlemap")
]
[
- (Html.div
- [
- (Html.Attributes.class "battlemap-controls")
- ]
- (View.Controls.view)
- ),
+ (View.Header.get_html model),
(Html.div
[
(Html.Attributes.class "battlemap-container")
@@ -39,6 +39,6 @@ view model =
)
]
),
- (View.Status.view model)
+ (View.Footer.get_html model)
]
)
diff --git a/src/battlemap/src/View/Battlemap.elm b/src/battlemap/src/View/Battlemap.elm
index 071cce4..450a392 100644
--- a/src/battlemap/src/View/Battlemap.elm
+++ b/src/battlemap/src/View/Battlemap.elm
@@ -1,5 +1,6 @@
module View.Battlemap exposing (get_html)
+-- Elm -------------------------------------------------------------------------
import Array
import List
@@ -9,6 +10,7 @@ import Html.Attributes
import Html.Events
import Html.Lazy
+-- Battlemap ------------------------------------------------------------------
import Battlemap
import Battlemap.Tile
@@ -16,6 +18,8 @@ import Character
import Constants.UI
+import Util.Html
+
import View.Battlemap.Tile
import View.Battlemap.Navigator
@@ -106,6 +110,6 @@ get_html battlemap scale characters =
(Just nav_summary) ->
(View.Battlemap.Navigator.get_html nav_summary)
- Nothing -> [(Html.text "")]
+ Nothing -> [(Util.Html.nothing)]
)
)
diff --git a/src/battlemap/src/View/Footer.elm b/src/battlemap/src/View/Footer.elm
new file mode 100644
index 0000000..3b4d8ef
--- /dev/null
+++ b/src/battlemap/src/View/Footer.elm
@@ -0,0 +1,38 @@
+module View.Footer exposing (get_html)
+
+-- Elm -------------------------------------------------------------------------
+import Html
+import Html.Attributes
+
+-- Battlemap -------------------------------------------------------------------
+import Event
+
+import Model
+
+import Util.Html
+
+import UI
+
+import View.Footer.TabMenu
+import View.Footer.ManualControls
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_html : Model.Type -> (Html.Html Event.Type)
+get_html model =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-footer")
+ ]
+ [
+ (View.Footer.TabMenu.get_html model),
+ (
+ if (UI.has_manual_controls_enabled model.ui)
+ then
+ (View.Footer.ManualControls.get_html)
+ else
+ (Util.Html.nothing)
+ )
+ ]
+ )
diff --git a/src/battlemap/src/View/Controls.elm b/src/battlemap/src/View/Footer/ManualControls.elm
index a664ffe..83f880f 100644
--- a/src/battlemap/src/View/Controls.elm
+++ b/src/battlemap/src/View/Footer/ManualControls.elm
@@ -1,8 +1,11 @@
-module View.Controls exposing (view)
+module View.Footer.ManualControls exposing (get_html)
+-- Elm -------------------------------------------------------------------------
import Html
+import Html.Attributes
import Html.Events
+-- Battlemap -------------------------------------------------------------------
import Battlemap.Direction
import Event
@@ -28,29 +31,20 @@ end_turn_button =
[ (Html.text "End Turn") ]
)
-scale_button : Float -> String -> (Html.Html Event.Type)
-scale_button mod label =
- (Html.button
- [
- (Html.Events.onClick
- (Event.ScaleChangeRequested mod)
- )
- ]
- [ (Html.text label) ]
- )
-
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-view : (List (Html.Html Event.Type))
-view =
- [
- (direction_button Battlemap.Direction.Left "Left"),
- (direction_button Battlemap.Direction.Down "Down"),
- (direction_button Battlemap.Direction.Up "Up"),
- (direction_button Battlemap.Direction.Right "Right"),
- (end_turn_button),
- (scale_button (0.75) "Zoom -"),
- (scale_button 0 "Zoom Reset"),
- (scale_button (1.15) "Zoom +")
- ]
+get_html : (Html.Html Event.Type)
+get_html =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-footer-manualcontrols")
+ ]
+ [
+ (direction_button Battlemap.Direction.Left "Left"),
+ (direction_button Battlemap.Direction.Down "Down"),
+ (direction_button Battlemap.Direction.Up "Up"),
+ (direction_button Battlemap.Direction.Right "Right"),
+ (end_turn_button)
+ ]
+ )
diff --git a/src/battlemap/src/View/Footer/TabMenu.elm b/src/battlemap/src/View/Footer/TabMenu.elm
new file mode 100644
index 0000000..73edf23
--- /dev/null
+++ b/src/battlemap/src/View/Footer/TabMenu.elm
@@ -0,0 +1,94 @@
+module View.Footer.TabMenu exposing (get_html)
+
+-- Elm -------------------------------------------------------------------------
+import Html
+import Html.Attributes
+import Html.Events
+
+-- Battlemap -------------------------------------------------------------------
+import Event
+
+import Model
+
+import UI
+
+import View.Footer.TabMenu.Characters
+import View.Footer.TabMenu.Status
+import View.Footer.TabMenu.Settings
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_basic_button_html : UI.Tab -> (Html.Html Event.Type)
+get_basic_button_html tab =
+ (Html.button
+ [ (Html.Events.onClick (Event.TabSelected tab)) ]
+ [ (Html.text (UI.to_string tab)) ]
+ )
+
+get_menu_button_html : UI.Tab -> UI.Tab -> (Html.Html Event.Type)
+get_menu_button_html selected_tab tab =
+ (Html.button
+ (
+ if (tab == selected_tab)
+ then
+ [ (Html.Attributes.disabled True) ]
+ else
+ [ (Html.Events.onClick (Event.TabSelected tab)) ]
+ )
+ [ (Html.text (UI.to_string tab)) ]
+ )
+
+get_active_tab_selector_html : UI.Tab -> (Html.Html Event.Type)
+get_active_tab_selector_html selected_tab =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-footer-tabmenu-selector")
+ ]
+ (List.map (get_menu_button_html selected_tab) (UI.get_all_tabs))
+ )
+
+get_inactive_tab_selector_html : (Html.Html Event.Type)
+get_inactive_tab_selector_html =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-footer-tabmenu-selector")
+ ]
+ (List.map (get_basic_button_html) (UI.get_all_tabs))
+ )
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_html : Model.Type -> (Html.Html Event.Type)
+get_html model =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-footer-tabmenu")
+ ]
+ (
+ let
+ displayed_tab = (UI.try_getting_displayed_tab model.ui)
+ in
+ case displayed_tab of
+ (Just UI.StatusTab) ->
+ [
+ (get_active_tab_selector_html UI.StatusTab),
+ (View.Footer.TabMenu.Status.get_html model)
+ ]
+
+ (Just UI.CharactersTab) ->
+ [
+ (get_active_tab_selector_html UI.CharactersTab),
+ (View.Footer.TabMenu.Characters.get_html model)
+ ]
+
+ (Just UI.SettingsTab) ->
+ [
+ (get_active_tab_selector_html UI.SettingsTab),
+ (View.Footer.TabMenu.Settings.get_html model)
+ ]
+
+ Nothing -> [(get_inactive_tab_selector_html)]
+ )
+ )
diff --git a/src/battlemap/src/View/Footer/TabMenu/Characters.elm b/src/battlemap/src/View/Footer/TabMenu/Characters.elm
new file mode 100644
index 0000000..2929dee
--- /dev/null
+++ b/src/battlemap/src/View/Footer/TabMenu/Characters.elm
@@ -0,0 +1,29 @@
+module View.Footer.TabMenu.Characters exposing (get_html)
+
+-- Elm -------------------------------------------------------------------------
+import Html
+import Html.Attributes
+import Html.Events
+
+-- Battlemap -------------------------------------------------------------------
+import Event
+
+import Model
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_html : Model.Type -> (Html.Html Event.Type)
+get_html model =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-footer-tabmenu-content"),
+ (Html.Attributes.class "battlemap-footer-tabmenu-content-characters")
+ ]
+ [
+ (Html.text "Not implemented yet.")
+ ]
+ )
diff --git a/src/battlemap/src/View/Footer/TabMenu/Settings.elm b/src/battlemap/src/View/Footer/TabMenu/Settings.elm
new file mode 100644
index 0000000..f11fde0
--- /dev/null
+++ b/src/battlemap/src/View/Footer/TabMenu/Settings.elm
@@ -0,0 +1,42 @@
+module View.Footer.TabMenu.Settings exposing (get_html)
+
+-- Elm -------------------------------------------------------------------------
+import Html
+import Html.Attributes
+import Html.Events
+
+-- Battlemap -------------------------------------------------------------------
+import Event
+
+import Model
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+scale_button : Float -> String -> (Html.Html Event.Type)
+scale_button mod label =
+ (Html.button
+ [
+ (Html.Events.onClick
+ (Event.ScaleChangeRequested mod)
+ )
+ ]
+ [ (Html.text label) ]
+ )
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_html : Model.Type -> (Html.Html Event.Type)
+get_html model =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-footer-tabmenu-content"),
+ (Html.Attributes.class "battlemap-footer-tabmenu-content-settings")
+ ]
+ [
+ (scale_button (0.75) "Zoom -"),
+ (scale_button 0 "Zoom Reset"),
+ (scale_button (1.15) "Zoom +")
+ ]
+ )
diff --git a/src/battlemap/src/View/Status.elm b/src/battlemap/src/View/Footer/TabMenu/Status.elm
index 8986590..3bb87c3 100644
--- a/src/battlemap/src/View/Status.elm
+++ b/src/battlemap/src/View/Footer/TabMenu/Status.elm
@@ -1,10 +1,12 @@
-module View.Status exposing (view)
+module View.Footer.TabMenu.Status exposing (get_html)
+-- Elm -------------------------------------------------------------------------
import Dict
import Html
import Html.Attributes
+-- Battlemap -------------------------------------------------------------------
import Battlemap
import Character
@@ -12,6 +14,9 @@ import Error
import Event
import Model
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
moving_character_text : Model.Type -> String
moving_character_text model =
case model.selection of
@@ -32,24 +37,33 @@ moving_character_text model =
++ (toString (Character.get_movement_points char))
++ " movement points remaining."
)
+
_ -> "Error: model.selection does not match its state."
-view : Model.Type -> (Html.Html Event.Type)
-view model =
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_html : Model.Type -> (Html.Html Event.Type)
+get_html model =
(Html.div
[
- (Html.Attributes.class "battlemap-status")
+ (Html.Attributes.class "battlemap-footer-tabmenu-content"),
+ (Html.Attributes.class "battlemap-footer-tabmenu-content-status")
]
[
(Html.text
(
(case model.state of
Model.Default -> "Click on a character to control it."
- Model.MovingCharacterWithButtons -> (moving_character_text model)
- Model.MovingCharacterWithClick -> (moving_character_text model)
Model.FocusingTile -> "Error: Unimplemented."
+ Model.MovingCharacterWithButtons ->
+ (moving_character_text model)
+
+ Model.MovingCharacterWithClick ->
+ (moving_character_text model)
)
- ++ " " ++
+ ++ " "
+ ++
(case model.error of
Nothing -> ""
(Just error) -> (Error.to_string error)
diff --git a/src/battlemap/src/View/Header.elm b/src/battlemap/src/View/Header.elm
new file mode 100644
index 0000000..3a86741
--- /dev/null
+++ b/src/battlemap/src/View/Header.elm
@@ -0,0 +1,24 @@
+module View.Header exposing (get_html)
+
+-- Elm -------------------------------------------------------------------------
+import Html
+import Html.Attributes
+
+-- Battlemap -------------------------------------------------------------------
+import Event
+
+import Model
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_html : Model.Type -> (Html.Html Event.Type)
+get_html model =
+ (Html.div
+ [
+ (Html.Attributes.class "battlemap-header")
+ ]
+ [
+ (Html.text "Tacticians Online - Development Branch")
+ ]
+ )