-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathmain.py
200 lines (160 loc) · 9.18 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#qpy:quiet
'''
This is an example with how to use SL4A APIs to develop a ANDROID NATIVE App
Please put this project into /sdcard/qpython/projects/
You need to install qsl4ahelper-qpython2 before running this project
'''
from qsl4ahelper.fullscreenwrapper2 import *
import androidhelper
import datetime
import os
import caloriesdb
from caloriesdb import Calories
from utils import pathhelpers
import sys
import time
droid = androidhelper.Android()
class AddMealScreen(Layout):
def __init__(self):
#initialize your class data attributes
self._add_datetime = None
self._add_calories = None
#load and set your xml
super(AddMealScreen,self).__init__(pathhelpers.read_layout_xml("addmealscreen.xml"),"Add a Meal")
def on_show(self):
curdatetime = datetime.datetime.now()
self.views.add_meal_txt_date.text = curdatetime.date().isoformat()
self.views.add_meal_txt_time.text = curdatetime.time().isoformat()[0:5]
self.add_event(key_EventHandler("4", self,self.cancel ))
self.views.but_datechange.add_event(click_EventHandler(self.views.but_datechange, self.datechange))
self.views.but_timechange.add_event(click_EventHandler(self.views.but_timechange, self.timechange))
self.views.but_save.add_event(click_EventHandler(self.views.but_save, self.save))
self.views.but_lookup.add_event(click_EventHandler(self.views.but_lookup, self.lookup))
self.views.but_add_40.add_event(click_EventHandler(self.views.but_add_40, self.set_calories_to))
self.views.but_add_70.add_event(click_EventHandler(self.views.but_add_70, self.set_calories_to))
self.views.but_add_100.add_event(click_EventHandler(self.views.but_add_100, self.set_calories_to))
self.views.but_add_120.add_event(click_EventHandler(self.views.but_add_120, self.set_calories_to))
self.views.but_add_150.add_event(click_EventHandler(self.views.but_add_150, self.set_calories_to))
self.views.but_add_180.add_event(click_EventHandler(self.views.but_add_180, self.set_calories_to))
self.views.but_add_200.add_event(click_EventHandler(self.views.but_add_200, self.set_calories_to))
self.views.but_add_250.add_event(click_EventHandler(self.views.but_add_250, self.set_calories_to))
self.views.but_add_300.add_event(click_EventHandler(self.views.but_add_300, self.set_calories_to))
self.views.but_add_350.add_event(click_EventHandler(self.views.but_add_350, self.set_calories_to))
self.views.but_add_400.add_event(click_EventHandler(self.views.but_add_400, self.set_calories_to))
self.views.but_add_450.add_event(click_EventHandler(self.views.but_add_450, self.set_calories_to))
def on_close(self):
pass
def cancel(self,view,eventdata):
FullScreenWrapper2App.close_layout()
def datechange(self, view, eventdata):
curdateentry = self.views.add_meal_txt_date.text
droid = FullScreenWrapper2App.get_android_instance()
droid.dialogCreateDatePicker(int(curdateentry[:4]),int(curdateentry[5:7]),int(curdateentry[8:10]))
droid.dialogShow()
response=droid.dialogGetResponse().result
droid.dialogDismiss()
cur = datetime.date(response["year"],response['month'],response['day'])
self.views.add_meal_txt_date.text = cur.isoformat()
def timechange(self,view,eventdata):
curtimeentry = self.views.add_meal_txt_time.text
droid = FullScreenWrapper2App.get_android_instance()
droid.dialogCreateTimePicker(int(curtimeentry[0:2]),int(curtimeentry [3:5]),True)
droid.dialogShow()
response=droid.dialogGetResponse().result
droid.dialogDismiss()
cur = datetime.time(response["hour"],response['minute'])
self.views.add_meal_txt_time.text = cur.isoformat()[0:5]
def lookup(self,view,evemtdata):
FullScreenWrapper2App.get_android_instance().makeToast("lookup yet to be implemented")
def save(self,view,evemtdata):
#FullScreenWrapper2App.get_android_instance().makeToast("Save yet to be implemented")
calstext = self.views.add_meal_txt_calories.text
if(calstext.isdigit()):
datetext =self.views.add_meal_txt_date.text
adddate = datetime.date(int(datetext[0:4]),int(datetext[5:7]),int(datetext[8:10]))
timetext =self.views.add_meal_txt_time.text
addtime = datetime.time(int(timetext[0:2]),int(timetext[3:5]))
adddatetime = datetime.datetime.combine(adddate,addtime)
addfooditemtext = self.views.add_meal_txt_fooditem.text
addcals = int(calstext)
cals = caloriesdb.Calories()
cals.create(mealtime = adddatetime, calories = addcals, fooditem = addfooditemtext)
FullScreenWrapper2App.get_android_instance().makeToast("Saving")
FullScreenWrapper2App.close_layout()
else:
FullScreenWrapper2App.get_android_instance().makeToast("You must enter a valid number for calories")
def set_calories_to(self,view,evemtdata):
self.views.add_meal_txt_calories.text = view.text
#FullScreenWrapper2App.get_android_instance().makeToast("set_calories_to yet to be implemented")
class MainScreen(Layout):
def __init__(self):
#initialize your class data attributes
self.max_cals_per_day = 2000
self.show_meals_list =[]
self.lst_view_items =[]
self.view_day = True
#load & set your xml
super(MainScreen,self).__init__(pathhelpers.read_layout_xml("main.xml"),"CalCount")
def on_show(self):
#initialize your layout views on screen_show
self.views.logo.src = pathhelpers.get_drawable_pathname("logo.png")
self.update_todays_meals_list()
#setup the event handlers for your layout views
self.views.but_exit.add_event(click_EventHandler(self.views.but_exit, self.close_out))
self.views.but_add.add_event(click_EventHandler(self.views.but_add,self.add_meal))
self.views.lst_today_meals.add_event(itemclick_EventHandler(self.views.lst_today_meals, self.mealitem_click))
self.add_event(key_EventHandler("4", self,self.close_out ))
self.views.but_lookup.add_event(click_EventHandler(self.views.but_lookup, self.flip_today_7_days))
def flip_today_7_days(self,view, eventdata):
self.view_day = not self.view_day
self.on_show()
def on_close(self):
pass
def mealitem_click(self,view,eventdata):
if not self.view_day:
return
position = int(eventdata["data"]["position"])
FullScreenWrapper2App.get_android_instance().dialogCreateAlert("Do you want to delete the meal - "+str(self.show_meals_list[position]))
FullScreenWrapper2App.get_android_instance().dialogSetPositiveButtonText("Yes")
FullScreenWrapper2App.get_android_instance().dialogSetNegativeButtonText("No")
FullScreenWrapper2App.get_android_instance().dialogShow()
response=FullScreenWrapper2App.get_android_instance().dialogGetResponse().result
FullScreenWrapper2App.get_android_instance().dialogDismiss()
try:
if response["which"]=="positive":
Calories.delete_entry(self.show_meals_list[position])
except:
pass
self.update_todays_meals_list()
FullScreenWrapper2App.get_android_instance().makeToast("Deleting...")
def add_meal(self,view,eventdata):
FullScreenWrapper2App.show_layout(AddMealScreen())
def close_out(self,view,event ):
FullScreenWrapper2App.close_layout()
def update_todays_meals_list(self):
self.show_meals_list =[]
self.lst_view_items =[]
if self.view_day:
for meal in Calories.get_meals(Calories.TimeRange.DAY):
self.show_meals_list.append(meal)
self.lst_view_items.append(str(meal))
self.views.but_lookup.text = "Last 7 Days"
else:
curdate = datetime.datetime.today()
for j in range(7):
curdate = curdate - datetime.timedelta(j)
cals = Calories.get_calories(Calories.TimeRange.DAY, curdate)
text = curdate.date().isoformat() + "-"+str(cals)
self.show_meals_list.append(text)
self.lst_view_items.append(text)
self.views.but_lookup.text = "Today"
self.views.lst_today_meals.set_listitems(self.lst_view_items)
#self.views.lst_today_meals.set_listitems(["abc","def"])
picpercent = int(round(float(Calories.get_calories(Calories.TimeRange.DAY))/float(self.max_cals_per_day)*float(100),-1))
self.views.todaycal.src = pathhelpers.get_drawable_pathname(str(picpercent)+".png")
totalcals = int(round(float(Calories.get_calories(Calories.TimeRange.WEEK))/float(self.max_cals_per_day*7)*float(100),-1))
self.views.weekcal.src = pathhelpers.get_drawable_pathname(str(totalcals)+".png")
if __name__ == '__main__':
FullScreenWrapper2App.initialize(droid)
FullScreenWrapper2App.show_layout(MainScreen())
FullScreenWrapper2App.eventloop()