app: update clients to use `root_window`
[nit.git] / contrib / benitlux / src / client / views / home_views.nit
index 6834a74..460e1be 100644 (file)
@@ -19,24 +19,9 @@ import beer_views
 import social_views
 import user_views
 
-redef class App
-       redef fun on_create
-       do
-               if debug then print "App::on_create"
-
-               # Create the main window
-               show_home
-               super
-       end
-
-       # Show the home/main windows
-       fun show_home
-       do
-               var window = new HomeWindow
-               window.refresh
-               push_window window
-       end
+redef fun root_window do return new HomeWindow
 
+redef class App
        redef fun on_log_in
        do
                super
@@ -54,37 +39,29 @@ class HomeWindow
 
        # Cut-point for the iOS adaptation
        var layout_user = new VerticalLayout(parent=layout)
-       private var layout_login = new HorizontalLayout(parent=layout_user)
-       private var lbl_login_status = new Label(parent=layout_login, text="Welcome".t, size=1.5)
-       private var but_login = new Button(parent=layout_login, text="Login or signup".t)
-       private var but_preferences = new Button(parent=layout_login, text="Preferences".t)
+       private var layout_login = new SectionHeader(parent=layout_user)
+       private var but_preferences: nullable Button = null
+       private var but_login: nullable Button = null
 
        private var layout_beers = new VerticalLayout(parent=layout)
-       var layout_beers_title = new HorizontalLayout(parent=layout_beers)
+       var layout_beers_title = new SectionHeader(parent=layout_beers)
        var title_beers = new SectionTitle(parent=layout_beers_title, text="Beer Menu".t, size=1.5)
        private var beer_button = new Button(parent=layout_beers_title, text="View all".t)
        private var beer_list = new VerticalLayout(parent=layout_beers)
        private var beer_temp_lbl = new Label(parent=beer_list, text="Loading...".t)
 
        private var layout_social = new VerticalLayout(parent=layout)
-       private var social_header = new HorizontalLayout(parent=layout_social)
+       private var social_header = new SectionHeader(parent=layout_social)
        private var social_title = new SectionTitle(parent=social_header, text="Friends".t, size=1.5)
        private var social_button = new Button(parent=social_header, text="Manage".t)
        private var social_list = new VerticalLayout(parent=layout_social)
        private var social_temp_lbl = new Label(parent=social_list, text="Loading...".t)
 
        private var layout_news = new VerticalLayout(parent=layout)
-       private var news_header = new HorizontalLayout(parent=layout_news)
+       var news_header = new SectionHeader(parent=layout_news)
        private var news_title = new SectionTitle(parent=news_header, text="Events".t, size=1.5)
        #private var news_button = new Button(parent=news_header, text="Open website") # TODO
-       private var news_label = new Label(parent=layout_news, text="Bière en cask le jeudi!")
-
-       init
-       do
-               for c in [but_login, but_preferences, beer_button, social_button] do
-                       c.observers.add self
-               end
-       end
+       private var news_cask = new EventView(parent=layout_news, text="Bière en cask le jeudi!")
 
        redef fun on_resume do refresh
 
@@ -96,13 +73,12 @@ class HomeWindow
                layout_login.clear
                if app.user != null then
                        # Logged in
-                       lbl_login_status.parent = layout_login
-                       but_preferences.parent = layout_login
+                       var lbl_login_status = new SectionTitle(parent=layout_login, text="Welcome".t, size=1.5)
                        lbl_login_status.set_welcome
                else
-                       but_login.parent = layout_login
-                       but_preferences.parent = layout_login
+                       self.but_login = new Button(parent=layout_login, text="Login or signup".t)
                end
+               self.but_preferences = new Button(parent=layout_login, text="Preferences".t)
 
                # Fill beers
                (new ListDiffAction(self, "rest/since?token={app.token}")).start
@@ -111,7 +87,7 @@ class HomeWindow
                (new HomeListPeopleAction(self, "rest/friends?token={app.token}")).start
 
                # Check if token is still valid
-               (new CheckTokenAction(self, "rest/check_token?token={app.token}")).start
+               if app.token != "none" then (new CheckTokenAction(self, "rest/check_token?token={app.token}")).start
        end
 
        redef fun on_event(event)
@@ -141,8 +117,15 @@ class HomeWindow
        end
 end
 
-# `Label` used in section headers
-class SectionTitle super Label end
+private class EventView
+       super VerticalLayout
+       super ItemView
+
+       var text: Text
+
+       var lbl = new Label(parent=self, text=text) is lazy
+       init do lbl
+end
 
 # Async request to update the beer list on the home screen
 class ListDiffAction
@@ -203,6 +186,18 @@ class CheckTokenAction
        redef fun on_load(res, status) do intercept_error(res)
 end
 
+redef class BenitluxHttpRequest
+       redef fun intercept_error(res)
+       do
+               var r = super
+               if res isa BenitluxTokenError then
+                       var window = app.window
+                       if window isa HomeWindow then window.refresh
+               end
+               return r
+       end
+end
+
 # Today's date as a `String`
 fun today: String
 do