From ce68d07f31019bf318a75e0ef9c438f0d25ae846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Benencia?= Date: Tue, 20 Aug 2013 20:37:34 -0300 Subject: first commit --- State.hs | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 State.hs (limited to 'State.hs') diff --git a/State.hs b/State.hs new file mode 100644 index 0000000..3826bfc --- /dev/null +++ b/State.hs @@ -0,0 +1,72 @@ +-- This module is part of Lazymail, a Haskell email client. +-- +-- Copyright (C) 2013 Raúl Benencia +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +-- +-- | The top level application state, and operations on that value. +-- +module State where + +import Text.ParserCombinators.Parsec.Rfc2822(Message, GenericMessage(..)) +import UI.NCurses(ColorID(..), defaultColorID) +import Network.Email.Mailbox(Flag(..), Flags) + +data Mode = MaildirMode | IndexMode | EmailMode + +data MState = MState { + selectedRow :: Integer + , mode :: Mode + , initPath :: String + , scrRows :: Integer + , scrColumns :: Integer + , curRow :: Integer + , colPadding :: Integer + , selectedColorID :: ColorID + , selectedEmail :: Message + , selectedEmails :: [(String, [Flag], String)] + , selectedMD :: String + , detectedMDs :: [String] + , exitRequested :: Bool +} + +initState = MState { + selectedRow = 0 + , mode = MaildirMode + , initPath = "" + , scrRows = (-1) + , scrColumns = (-1) + , curRow = 0 + , colPadding = 0 + , selectedColorID = defaultColorID + , selectedEmail = Message [] "Dummy email" + , selectedEmails = [] + , selectedMD = "" + , detectedMDs = [] + , exitRequested = False +} + +incCurRow st = st { curRow = (curRow st) + 1 } + +incSelectedRow st | selectedRow st < fromIntegral limit = st { selectedRow = (selectedRow st) + 1 } + | otherwise = st + where + limit = case (mode st) of + MaildirMode -> (length $ detectedMDs st ) - 1 + IndexMode -> (length $ selectedEmails st) - 1 + _ -> fromIntegral $ scrRows st + +decSelectedRow st | selectedRow st > 0 = st { selectedRow = (selectedRow st) - 1 } + | otherwise = st \ No newline at end of file -- cgit v1.2.3