packages feed

coin 1.0 → 1.1

raw patch · 35 files changed

+320/−460 lines, 35 filesdep +Win32dep +lensdep −hgettextdep −lens-simpledep −setlocaledep ~basedep ~gtk3

Dependencies added: Win32, lens

Dependencies removed: hgettext, lens-simple, setlocale

Dependency ranges changed: base, gtk3

Files

coin.cabal view
@@ -1,5 +1,5 @@ name:              coin-version:           1.0+version:           1.1 Build-Type:        Simple cabal-version:     >= 1.16 author:            Piotr Borek <piotrborek@op.pl>@@ -9,32 +9,32 @@ description:       Simple account manager category:          Application homepage:          https://bitbucket.org/borekpiotr/coin+tested-with:       GHC == 7.10.3, GHC == 8.0.1  data-files:        stack.yaml                    LICENSE-                   resources/i18n/pl/LC_MESSAGES/coin.mo-                   resources/i18n/pl/LC_MESSAGES/coin.po-                   resources/i18n/pl/LC_MESSAGES/convert +flag debug-db+    description: Output database logger information to stdout.+    default: False+ executable coin     main-is:            Main.hs     hs-source-dirs:     src     default-language:   Haskell2010     -- also enable profiling in ~/.cabal.config-    --ghc-options:        -Wall -prof -auto-all -osuf p_o+    -- ghc-options:        -Wall -prof -auto-all -osuf p_o     ghc-options:        -Wall -O2     default-extensions: LambdaCase                         PackageImports                         MultiWayIf-    build-depends:      base >= 4.8 && < 4.9,+                        CPP+    build-depends:      base >= 4.8 && < 5.0,                         glib,-                        gtk3 == 0.14.2,+                        gtk3,                         directory,-                        setlocale,-                        hgettext,                         filepath,                         containers,-                        hgettext,                         binary,                         directory,                         persistent,@@ -47,9 +47,17 @@                         resourcet,                         time,                         mtl,-                        lens-simple,+                        lens,                         aeson,                         bytestring+    if flag(debug-db)+        cpp-options:    -DDEBUG_DB+    if os(windows)+        build-depends:  Win32+        cpp-options:    -DWINDOWS+        if !flag(debug-db)+            ghc-options: -optl-mwindows+     other-modules:      Coin.UI.Raports.RaportSummary                         Coin.UI.Raports.RaportHistory                         Coin.UI.Raports.RaportQuery@@ -92,7 +100,9 @@                         Coin.Utils.Exception                         Coin.Utils.IORef                         Coin.Utils.StringUtils-                        Coin.Utils.I18N                         Coin.Utils.PropertyMap                         Coin.Utils.ColorUtils-                        Coin.Utils.LocaleHelper+                        Coin.Locale.LangPL+                        Coin.Locale.LangUnknown+                        Coin.Locale.Languages+                        Coin.Locale.Translate
− resources/i18n/pl/LC_MESSAGES/coin.mo

binary file changed (3756 → absent bytes)

− resources/i18n/pl/LC_MESSAGES/coin.po
@@ -1,318 +0,0 @@-# Translation file--msgid ""-msgstr ""--"Project-Id-Version: PACKAGE VERSION\n"-"Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2009-01-13 06:05-0800\n"-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"-"Language-Team: LANGUAGE <LL@li.org>\n"-"MIME-Version: 1.0\n"-"Content-Type: text/plain; charset=UTF-8\n"-"Content-Transfer-Encoding: 8bit\n"--#: src/Coin/UI/Accounts/OperationsView.hs:0-msgid "Date"-msgstr "Data"--#: src/Coin/UI/Accounts/OperationsView.hs:0-msgid "From"-msgstr "Z konta"--#: src/Coin/UI/Accounts/OperationsView.hs:0-msgid "To"-msgstr "Na konto"--#: src/Coin/UI/Accounts/OperationsView.hs:0-msgid "Value"-msgstr "Wartość"--#: src/Coin/UI/Accounts/OperationsView.hs:0-msgid "Tag"-msgstr "Tag"--#: src/Coin/UI/Accounts/OperationsView.hs:0-msgid "Description"-msgstr "Opis"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "Date:"-msgstr "Data:"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "Tag:"-msgstr "Tag:"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "Add value:"-msgstr "Dodaj wartość:"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "To account:"-msgstr "Na konto:"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "Description:"-msgstr "Opis:"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "Current balance:"-msgstr "Bieżące saldo:"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "Add"-msgstr "Dodaj"--#: src/Coin/UI/Accounts/AccountsIncome.hs:0-msgid "Remove"-msgstr "Usuń"--#: src/Coin/UI/Accounts/AccountsHistory.hs:0-msgid "Account name:"-msgstr "Nazwa konta:"--#: src/Coin/UI/Accounts/AccountsOutcome.hs:0-msgid "Subtract value:"-msgstr "Odejmij wartość:"--#: src/Coin/UI/Accounts/AccountsOutcome.hs:0-msgid "From account:"-msgstr "Z konta:"--#: src/Coin/UI/Accounts/AccountsTransfer.hs:0-msgid "Transfer value:"-msgstr "Przelej wartość:"--#: src/Coin/UI/Accounts/AccountsWidget.hs:0-msgid "Income"-msgstr "Wpłata"--#: src/Coin/UI/Accounts/AccountsWidget.hs:0-msgid "Outcome"-msgstr "Wypłata"--#: src/Coin/UI/Accounts/AccountsWidget.hs:0-msgid "Transfer"-msgstr "Przelew"--#: src/Coin/UI/Accounts/AccountsWidget.hs:0-msgid "History"-msgstr "Historia"--#: src/Coin/UI/Widgets/Calendar.hs:0-msgid "Today"-msgstr "Dziś"--#: src/Coin/UI/Widgets/MessageBox.hs:0-msgid "Info"-msgstr "Informacja"--#: src/Coin/UI/Widgets/MessageBox.hs:0-msgid "Warning"-msgstr "Ostrzeżenie"--#: src/Coin/UI/Widgets/MessageBox.hs:0-msgid "Question"-msgstr "Pytanie"--#: src/Coin/UI/Widgets/MessageBox.hs:0-msgid "Error"-msgstr "Błąd"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "Mo"-msgstr "Pn"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "Tu"-msgstr "Wt"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "We"-msgstr "Śr"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "Th"-msgstr "Czw"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "Fr"-msgstr "Pt"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "Sa"-msgstr "So"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "Su"-msgstr "N"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "January"-msgstr "Styczeń"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "February"-msgstr "Luty"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "March"-msgstr "Marzec"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "April"-msgstr "Kwiecień"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "May"-msgstr "Maj"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "June"-msgstr "Czerwiec"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "July"-msgstr "Lipiec"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "August"-msgstr "Sierpień"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "September"-msgstr "Wrzesień"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "October"-msgstr "Październik"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "November"-msgstr "Listopad"--#: src/Coin/UI/Utils/CalendarUtils.hs:0-msgid "December"-msgstr "Grudzień"--#: src/Coin/UI/MainMultiList.hs:0-msgid "Accounts"-msgstr "Konta"--#: src/Coin/UI/MainMultiList.hs:0-msgid "Raports"-msgstr "Raporty"--#: src/Coin/UI/MainMultiList.hs:0-msgid "Options"-msgstr "Opcje"--#: src/Coin/UI/MainMultiList.hs:0-msgid "Tags"-msgstr "Tagi"--#: src/Coin/DB/Tables.hs:0-msgid "None"-msgstr "Żaden"--#: src/Coin/DB/Tables.hs:0-msgid "Cash"-msgstr "Gotówka"--msgid "Do you want to update"-msgstr "Czy chcesz zmienić nazwę"--msgid "Do you want to remove"-msgstr "Czy chcesz usunąć"--msgid "account ?"-msgstr " "--msgid "account name ?"-msgstr " "--msgid "tag ?"-msgstr " "--msgid "tag name ?"-msgstr " "--msgid "Name"-msgstr "Nazwa"--msgid "Incomes:"-msgstr "Wpłaty:"--msgid "Outcomes:"-msgstr "Wypłaty:"--msgid "Account name"-msgstr "Nazwa konta"--msgid "Current balance"-msgstr "Bieżące saldo"--msgid "Sum"-msgstr "Suma"--msgid "Summary"-msgstr "Podsumowanie"--msgid "Queries"-msgstr "Zapytania"--msgid "All"-msgstr "Wszystkie"--msgid "Period of time"-msgstr "Okres czasu"--msgid "last 1 month"-msgstr "ostatni 1 miesiąc"--msgid "last 2 months"-msgstr "ostatnie 2 miesiące"--msgid "last 3 months"-msgstr "ostatnie 3 miesiące"--msgid "last 6 months"-msgstr "ostatnie 6 miesięcy"--msgid "last 1 year"-msgstr "ostatni 1 rok"--msgid "last 2 years"-msgstr "ostatnie 2 lata"--msgid "last 3 years"-msgstr "ostatnie 3 lata"--msgid "last 5 years"-msgstr "ostatnie 5 lat"--msgid "last 10 years"-msgstr "ostatnie 10 lat"--msgid "Time from"-msgstr "Czas od"--msgid "Time to"-msgstr "Czas do"--msgid "Time from ... to ..."-msgstr "Czas od ... do ..."--msgid "Last month/year"-msgstr "Ostatni miesiąc/rok"--msgid "Actions"-msgstr "Operacje"--msgid "Select all"-msgstr "Zaznacz wszystkie"--msgid "Deselect all"-msgstr "Odznacz wszystkie"
− resources/i18n/pl/LC_MESSAGES/convert
@@ -1,3 +0,0 @@-#!/bin/bash--msgfmt coin.po -o coin.mo
src/Coin/Config/Dirs.hs view
@@ -24,10 +24,10 @@     configGetDirectory ) where -import System.Environment+import System.Directory import System.FilePath  configGetDirectory :: IO String configGetDirectory = do-    home <- getEnv "HOME"+    home <- getHomeDirectory     return $ home </> ".coin"
src/Coin/DB/Functions.hs view
@@ -48,10 +48,17 @@  type EntityCache = Map.Map T.Text JSON.Value +#ifdef DEBUG_DB runDB :: (MonadBaseControl IO m, MonadIO m) => SqlPersistT (LoggingT (ResourceT (State.StateT EntityCache m))) a -> m a runDB action = do     dir <- liftIO configGetDirectory     State.evalStateT (runResourceT $ runStdoutLoggingT $ withSqliteConn (T.pack $ dir ++ "/coin.db") . runSqlConn $ action) Map.empty+#else+runDB :: (MonadBaseControl IO m, MonadIO m) => SqlPersistT (NoLoggingT (ResourceT (State.StateT EntityCache m))) a -> m a+runDB action = do+    dir <- liftIO configGetDirectory+    State.evalStateT (runResourceT $ runNoLoggingT $ withSqliteConn (T.pack $ dir ++ "/coin.db") . runSqlConn $ action) Map.empty+#endif  rawSqlFirstCached :: (MonadLogger m, MonadIO m, State.MonadState EntityCache m, JSON.ToJSON a, JSON.FromJSON a, RawSql a) => String -> ReaderT SqlBackend m (Maybe a) rawSqlFirstCached stmt = listToMaybe <$> rawSqlCached stmt
src/Coin/DB/Tables.hs view
@@ -46,7 +46,7 @@ import Database.Persist.TH  import Coin.DB.Functions-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Config.Dirs  share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|@@ -140,9 +140,11 @@ initializeDatabase = do     dir <- configGetDirectory     createDirectoryIfMissing True dir-+#ifdef DEBUG_DB     runDB $ runMigration migrateAll-+#else+    void $ runDB $ runMigrationSilent migrateAll+#endif     void tagsTableNoneID     void accountsTableIncomeID     void accountsTableOutcomeID
+ src/Coin/Locale/LangPL.hs view
@@ -0,0 +1,101 @@+{-+ *  Programmer:	Piotr Borek+ *  E-mail:     piotrborek@op.pl+ *  Copyright 2016 Piotr Borek+ *+ *  Distributed under the terms of the GPL (GNU Public License)+ *+ *  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 2 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, write to the Free Software+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++module Coin.Locale.LangPL where++translate :: String -> String+translate "Date"                  = "Data"+translate "From"                  = "Z konta"+translate "To"                    = "Na konto"+translate "Value"                 = "Wartość"+translate "Tag"                   = "Tag"+translate "Description"           = "Opis"+translate "Date:"                 = "Data:"+translate "Tag:"                  = "Tag:"+translate "Add value:"            = "Dodaj wartość:"+translate "To account:"           = "Na konto:"+translate "Description:"          = "Opis:"+translate "Current balance:"      = "Bieżące saldo:"+translate "Add"                   = "Dodaj"+translate "Remove"                = "Usuń"+translate "Account name:"         = "Nazwa konta:"+translate "Subtract value:"       = "Odejmij wartość:"+translate "From account:"         = "Z konta:"+translate "Transfer value:"       = "Przelej wartość:"+translate "Income"                = "Wpłata"+translate "Outcome"               = "Wypłata"+translate "Transfer"              = "Przelew"+translate "History"               = "Historia"+translate "Today"                 = "Dziś"+translate "Info"                  = "Informacja"+translate "Warning"               = "Ostrzeżenie"+translate "Question"              = "Pytanie"+translate "Error"                 = "Błąd"+translate "Mo"                    = "Pn"+translate "Tu"                    = "Wt"+translate "We"                    = "Śr"+translate "Th"                    = "Czw"+translate "Fr"                    = "Pt"+translate "Sa"                    = "So"+translate "Su"                    = "N"+translate "January"               = "Styczeń"+translate "February"              = "Luty"+translate "March"                 = "Marzec"+translate "April"                 = "Kwiecień"+translate "May"                   = "Maj"+translate "June"                  = "Czerwiec"+translate "July"                  = "Lipiec"+translate "August"                = "Sierpień"+translate "September"             = "Wrzesień"+translate "October"               = "Październik"+translate "November"              = "Listopad"+translate "December"              = "Grudzień"+translate "Accounts"              = "Konta"+translate "Raports"               = "Raporty"+translate "Options"               = "Opcje"+translate "Tags"                  = "Tagi"+translate "None"                  = "Żaden"+translate "Cash"                  = "Gotówka"+translate "Do you want to update" = "Czy chcesz zmienić nazwę"+translate "Do you want to remove" = "Czy chcesz usunąć"+translate "account ?"             = " "+translate "account name ?"        = " "+translate "tag ?"                 = " "+translate "tag name ?"            = " "+translate "Name"                  = "Nazwa"+translate "Incomes:"              = "Wpłaty:"+translate "Outcomes:"             = "Wypłaty:"+translate "Account name"          = "Nazwa konta"+translate "Current balance"       = "Bieżące saldo"+translate "Sum"                   = "Suma"+translate "Summary"               = "Podsumowanie"+translate "Queries"               = "Zapytania"+translate "All"                   = "Wszystkie"+translate "Period of time"        = "Okres czasu"+translate "Time from"             = "Czas od"+translate "Time to"               = "Czas do"+translate "Time from ... to ..."  = "Czas od ... do ..."+translate "Last month/year"       = "Ostatni miesiąc/rok"+translate "Actions"               = "Operacje"+translate "Select all"            = "Zaznacz wszystkie"+translate "Deselect all"          = "Odznacz wszystkie"+translate x                       = x
+ src/Coin/Locale/LangUnknown.hs view
@@ -0,0 +1,26 @@+{-+ *  Programmer:	Piotr Borek+ *  E-mail:     piotrborek@op.pl+ *  Copyright 2016 Piotr Borek+ *+ *  Distributed under the terms of the GPL (GNU Public License)+ *+ *  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 2 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, write to the Free Software+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++module Coin.Locale.LangUnknown where++translate :: String -> String+translate = id
+ src/Coin/Locale/Languages.hs view
@@ -0,0 +1,58 @@+{-+ *  Programmer:	Piotr Borek+ *  E-mail:     piotrborek@op.pl+ *  Copyright 2016 Piotr Borek+ *+ *  Distributed under the terms of the GPL (GNU Public License)+ *+ *  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 2 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, write to the Free Software+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++module Coin.Locale.Languages (+    LANG (..),+    getSystemLanguage+) where++#ifdef WINDOWS+import System.Win32.NLS+#else+import System.Environment+#endif++import System.IO.Unsafe++data LANG = LANG_UNKNOWN+          | LANG_PL+          deriving Show++#ifdef WINDOWS+detectLanguage :: IO LANG+detectLanguage = do+    let lang = getUserDefaultLCID+    case lang of+        1045 -> return LANG_PL+        _    -> return LANG_UNKNOWN+#else+detectLanguage :: IO LANG+detectLanguage = do+    lang <- getEnv "LANG"+    case lang of+        'p':'l':'_':'P':'L':_ -> return LANG_PL+        _                     -> return LANG_UNKNOWN+#endif++{-# NOINLINE getSystemLanguage #-}+getSystemLanguage :: LANG+getSystemLanguage = unsafePerformIO detectLanguage
+ src/Coin/Locale/Translate.hs view
@@ -0,0 +1,39 @@+{-+ *  Programmer:	Piotr Borek+ *  E-mail:     piotrborek@op.pl+ *  Copyright 2016 Piotr Borek+ *+ *  Distributed under the terms of the GPL (GNU Public License)+ *+ *  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 2 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, write to the Free Software+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++module Coin.Locale.Translate (+    translate,+    __+) where++import qualified Coin.Locale.LangPL as PL+import qualified Coin.Locale.LangUnknown as UNKNOWN++import Coin.Locale.Languages++translate :: String -> String+translate = case getSystemLanguage of+    LANG_PL      -> PL.translate+    LANG_UNKNOWN -> UNKNOWN.translate++__ :: String -> String+__ = translate
src/Coin/UI/Accounts/AccountsHistory.hs view
@@ -32,7 +32,7 @@  import Coin.DB.Tables import Coin.DB.Functions-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.ValueParser import Coin.UI.MainState import Coin.UI.Builder.GtkUIBuilder
src/Coin/UI/Accounts/AccountsIncome.hs view
@@ -42,7 +42,7 @@ import Coin.UI.Builder.GtkUIBuilder import Coin.UI.TagsComboBox import Coin.UI.Utils.CalendarUtils-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.ValueParser import Coin.UI.HistoryView 
src/Coin/UI/Accounts/AccountsOutcome.hs view
@@ -42,7 +42,7 @@ import Coin.UI.Builder.GtkUIBuilder import Coin.UI.TagsComboBox import Coin.UI.Utils.CalendarUtils-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.ValueParser import Coin.UI.HistoryView 
src/Coin/UI/Accounts/AccountsTransfer.hs view
@@ -43,7 +43,7 @@ import Coin.UI.TagsComboBox import Coin.UI.AccountsComboBox import Coin.UI.Utils.CalendarUtils-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.ValueParser import Coin.UI.HistoryView 
src/Coin/UI/Accounts/AccountsWidget.hs view
@@ -32,7 +32,7 @@  import Coin.UI.MainState import Coin.UI.Builder.GtkUIBuilder-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.UI.Accounts.AccountsIncome import Coin.UI.Accounts.AccountsOutcome import Coin.UI.Accounts.AccountsTransfer
src/Coin/UI/Builder/GtkUIBuilder.hs view
@@ -79,7 +79,7 @@ import Control.Monad.IO.Class import Control.Monad.State.Strict import Data.Maybe-import Lens.Simple+import Control.Lens  import Coin.UI.Builder.GtkUIAttributes import Coin.UI.Builder.GtkUIBuilderState
src/Coin/UI/Builder/GtkUIBuilderState.hs view
@@ -30,7 +30,7 @@ import qualified Graphics.UI.Gtk as Gtk  import Control.Monad.State.Strict-import Lens.Simple+import Control.Lens  import Coin.UI.Builder.GtkUIAttributes 
src/Coin/UI/Builder/GtkUIUtils.hs view
@@ -35,7 +35,7 @@ import Control.Monad import Control.Monad.State.Strict import Data.Maybe-import Lens.Simple+import Control.Lens  import Coin.UI.Utils.CssUtils import Coin.UI.Builder.GtkUIBuilderState
src/Coin/UI/HistoryView.hs view
@@ -40,7 +40,7 @@ import Coin.DB.Functions import Coin.UI.MainState import Coin.UI.Utils.CalendarUtils-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.ValueParser import Coin.Utils.TableView 
src/Coin/UI/MainMultiList.hs view
@@ -30,7 +30,7 @@ import Database.Persist  import Coin.DB.Tables-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.UI.MainState import Coin.UI.Widgets.StackWidget import Coin.UI.Widgets.MultiList@@ -55,7 +55,7 @@     multiListOptionAdd' multiList raportsIndex         [ (__"Summary",                do-                   stackWidgetGet stack "raportSummary" >>= raportSummaryUpdate' mainState+                   stackWidgetGet stack "raportSummary" >>= raportSummaryUpdate'                    stackWidgetShow stack "raportSummary")         , (__"History",                do
src/Coin/UI/MainWindow.hs view
@@ -64,7 +64,8 @@     stackWidgetAdd stack "raportSummary" raportSummary     stackWidgetAdd stack "raportQuery" raportQuery -    (getObject, root) <- uiBuildGtk $+    (getObject, root) <- uiBuildGtk $ do+        windowAttrs [ windowTitle := "Coin"]         window Nothing "" $             scrolledWindow Nothing $                 hPaned (Just "paned")@@ -109,7 +110,7 @@         stackIndex <- liftIO $ stackWidgetGetVisible stack         propertyInsertMaybe "stackIndex" stackIndex -    windowResize mainWindow 800 600+    windowResize mainWindow 1024 768     panedSetPosition paned 200      mainStateReadPropertiesAction mainState "Coin.UI.MainWindow" $ do
src/Coin/UI/Options/OptionsAccount.hs view
@@ -37,7 +37,7 @@  import Coin.DB.Tables import Coin.DB.Functions-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.StringUtils import Coin.UI.Widgets.MessageBox import Coin.Utils.TableView
src/Coin/UI/Options/OptionsTag.hs view
@@ -36,7 +36,7 @@  import Coin.DB.Tables import Coin.DB.Functions-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.StringUtils import Coin.UI.Widgets.MessageBox import Coin.Utils.TableView
src/Coin/UI/Raports/RaportHistory.hs view
@@ -42,7 +42,7 @@  import Coin.DB.Tables import Coin.DB.Functions-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.ValueParser import Coin.UI.MainState import Coin.UI.Builder.GtkUIBuilder
src/Coin/UI/Raports/RaportQuery.hs view
@@ -47,7 +47,7 @@ import Coin.UI.Widgets.Calendar import Coin.UI.HistoryView import Coin.UI.Utils.CalendarUtils-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.ValueParser  data RaportQueryWidget = RaportQueryWidget {@@ -159,6 +159,9 @@                           root                           fromCalendar                           toCalendar++    Gtk.toggleButtonSetActive incomeCheckButton True+    Gtk.toggleButtonSetActive outcomeCheckButton True      observableRegister (mainStateAccountsUpdated mainState) $ \entities -> do         checkListClear accountsList
src/Coin/UI/Raports/RaportSummary.hs view
@@ -35,20 +35,22 @@ import Control.Monad import Data.Foldable import Data.Int+import Data.IORef import Database.Persist  import Coin.DB.Tables import Coin.DB.Functions import Coin.UI.MainState-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.Utils.TableView import Coin.Utils.ValueParser  type SummaryData = (String, String)  data RaportSummaryWidget = RaportSummaryWidget {-    raportSummaryRoot  :: Gtk.TreeView,-    raportSummaryStore :: Gtk.ListStore SummaryData+    raportSummaryRoot     :: Gtk.TreeView,+    raportSummaryStore    :: Gtk.ListStore SummaryData,+    raportSummaryAccounts :: IORef [Entity AccountsTable] }  instance Gtk.GObjectClass RaportSummaryWidget where@@ -74,21 +76,24 @@     forM_ [col1, col2] $ Gtk.treeViewAppendColumn treeView     Gtk.treeViewSetHeadersVisible treeView True -    let raportSummary = RaportSummaryWidget treeView store-    raportSummaryUpdate mainState raportSummary+    accounts <- newIORef []+    let raportSummary = RaportSummaryWidget treeView store accounts+    raportSummaryUpdate raportSummary      q <- Gtk.quarkFromString "Coin.UI.Raports.RaportSummary"     Gtk.objectSetAttribute q treeView $ Just raportSummary +    observableRegister (mainStateAccountsUpdated mainState) $ \entities -> modifyIORef' accounts (const entities)+     return raportSummary -raportSummaryUpdate' :: Gtk.WidgetClass cls => MainState -> cls -> IO ()-raportSummaryUpdate' mainState widget = castToRaportSummary widget >>= raportSummaryUpdate mainState+raportSummaryUpdate' :: Gtk.WidgetClass cls => cls -> IO ()+raportSummaryUpdate' widget = castToRaportSummary widget >>= raportSummaryUpdate -raportSummaryUpdate :: MainState -> RaportSummaryWidget -> IO ()-raportSummaryUpdate mainState raportSummary = do+raportSummaryUpdate :: RaportSummaryWidget -> IO ()+raportSummaryUpdate raportSummary = do     let store = raportSummaryStore raportSummary-    (list, s) <- raportSummarySelect mainState+    (list, s) <- raportSummarySelect raportSummary      Gtk.listStoreClear store     forM_ list $ Gtk.listStoreAppend store@@ -96,17 +101,18 @@     void $ Gtk.listStoreAppend store ("--------", "")     void $ Gtk.listStoreAppend store (__"Sum", valueShow s) -raportSummarySelect :: MainState -> IO ([SummaryData], Int64)-raportSummarySelect mainState = do-    let incomeID = mainStateIncomeID mainState-    let outcomeID = mainStateOutcomeID mainState+raportSummarySelect :: RaportSummaryWidget -> IO ([SummaryData], Int64)+raportSummarySelect raportSummary = do+    entities <- readIORef $ raportSummaryAccounts raportSummary -    entities <- runDB $-        selectList [ AccountsTableId !=. incomeID, AccountsTableId !=. outcomeID] []+    entities' <- forM entities $ \(Entity accountID _) ->+        runDB $ do+            (Just e) <- selectFirst [AccountsTableId ==. accountID] []+            return e -    let s = foldr' (\(Entity _ account) x -> x + accountsTableBalance account ) 0 entities+    let s = foldr' (\(Entity _ account) x -> x + accountsTableBalance account ) 0 entities' -    let list = flip map entities $ \(Entity _ account) ->+    let list = flip map entities' $ \(Entity _ account) ->                    (accountsTableName account, valueShow $ accountsTableBalance account)      return (list, s)
src/Coin/UI/Utils/CalendarUtils.hs view
@@ -38,7 +38,7 @@ import Data.Time import Data.Time.Calendar.WeekDate -import Coin.Utils.I18N+import Coin.Locale.Translate  data Days = Monday           | Tuesday
src/Coin/UI/Widgets/Calendar.hs view
@@ -42,7 +42,7 @@ import Coin.UI.Utils.CalendarUtils import Coin.UI.Utils.CssUtils import Coin.UI.Utils.Observable-import Coin.Utils.I18N+import Coin.Locale.Translate  data CalendarWidget = CalendarWidget {     calendarContainer     :: Gtk.Box,@@ -122,7 +122,11 @@               , "#Arrow {"               , "    font-weight: bold;"               , if calendarSize == CalendarSizeNormal then "    font-size: 2em;" else mempty+#ifdef WINDOWS+              , "    padding: 0px 4px 6px 4px;"+#else               , "    padding: 0px;"+#endif               , "    border-style: none;"               , "    border-radius: 12px;"               , "}"
src/Coin/UI/Widgets/CheckList.hs view
@@ -40,7 +40,7 @@ import Data.Foldable import Data.IORef -import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.UI.Builder.GtkUIBuilder  data CheckListWidget a = CheckListWidget {
src/Coin/UI/Widgets/MessageBox.hs view
@@ -28,7 +28,7 @@ import Graphics.UI.Gtk  import Coin.UI.Builder.GtkUIBuilder-import Coin.Utils.I18N+import Coin.Locale.Translate import Coin.UI.Widgets.ResponseButtons import Coin.UI.Utils.CssUtils 
src/Coin/UI/Widgets/MiniCalendar.hs view
@@ -41,7 +41,7 @@ import Coin.UI.Utils.CalendarUtils import Coin.UI.Utils.Observable import Coin.Utils.ColorUtils-import Coin.Utils.I18N+import Coin.Locale.Translate  data MiniCalendarWidget = MiniCalendarWidget {     miniCalendarContainer  :: Gtk.Box,@@ -100,7 +100,7 @@               , "    transition: none;"               , "    font-size: 1em;"               , "    border-radius: 8px 0px 8px 0px;"-              , "    padding: 0px;"+              , "    padding: 0px 12px 0px 12px;"               , "}"               , "#TodayButton:active {"               , "    background-color: " ++ sb ++ ";"@@ -108,7 +108,11 @@               , "#Arrow {"               , "    font-weight: bold;"               , "    font-size: 2em;"+#ifdef WINDOWS+              , "    padding: 0px 6px 6px 6px;"+#else               , "    padding: 0px 6px 0px 6px;"+#endif               , "    border-style: none;"               , "    border-radius: 12px;"               , "}"
− src/Coin/Utils/I18N.hs
@@ -1,30 +0,0 @@-{-  - *  Programmer:	Piotr Borek- *  E-mail:     piotrborek@op.pl- *  Copyright 2014 Piotr Borek- *- *  Distributed under the terms of the GPL (GNU Public License)- *- *  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 2 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, write to the Free Software- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA--}--module Coin.Utils.I18N where--import Text.I18N.GetText-import System.IO.Unsafe--{-# NOINLINE __ #-}-__ :: String -> String-__ = unsafePerformIO . getText
− src/Coin/Utils/LocaleHelper.hs
@@ -1,46 +0,0 @@-{-- *  Programmer:	Piotr Borek- *  E-mail:     piotrborek@op.pl- *  Copyright 2015 Piotr Borek- *- *  Distributed under the terms of the GPL (GNU Public License)- *- *  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 2 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, write to the Free Software- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA--}--module Coin.Utils.LocaleHelper where--import Text.I18N.GetText-import System.Directory-import System.Locale.SetLocale-import System.FilePath--import Coin.Utils.FileHelper--initLocale :: String -> String -> IO ()-initLocale programName filePath = do-    exePath <- findExecutable programName-    curDir  <- getCurrentDirectory--    _ <- setLocale LC_ALL $ Just ""-    _ <- case exePath of-            Just path -> do-                let (exeDir, _) = separateFilePath path-                bindTextDomain programName (Just $ exeDir </> filePath)-            Nothing   ->-                bindTextDomain programName (Just $ curDir </> filePath)-    _ <- textDomain $ Just programName--    return ()
src/Main.hs view
@@ -22,20 +22,16 @@  module Main (main) where -import System.FilePath import Graphics.UI.Gtk  import Coin.UI.MainState import Coin.UI.MainWindow import Coin.UI.MainInitialize-import Coin.Utils.LocaleHelper  import Coin.DB.Tables  main :: IO () main = do-    initLocale "coin" $ "resources" </> "i18n"-     initializeDatabase      _ <- initGUI