Ejemplo n.º 1
0
class Dashboard(BoxLayout):
    """Home tab that displays user statistics"""
    def __init__(self,sm,**kwargs):
        super(Dashboard, self).__init__(**kwargs)
        self.sm = sm

        self.ahse_cred = 0      
        self.engr_cred = 0
        self.mth_cred = 0
        self.sci_cred = 0        
        will_grad = 'No'

        ## USER INFORMATION HALF ##
        self.info = GridLayout(rows=5,size_hint=(0.5,1.0))

        # User's Name #
        self.display_name = Label(size_hint=(1.0,0.05))

        # Grad Year #
        self.years = BoxLayout(size_hint=(1.0,0.1))

        year1 = BoxLayout(size_hint=(0.2,1.0))
        self.year1_check=CheckBox(active=False,group='year',size_hint=(0.1,1.0))
        self.year1_label = Label(text=str(2014),size_hint=(0.9,1.0))
        year1.add_widget(self.year1_label)
        year1.add_widget(self.year1_check)
        year2 = BoxLayout(size_hint=(0.2,1.0))
        self.year2_check=CheckBox(active=False,group='year',size_hint=(0.1,1.0))
        self.year2_label = Label(text=str(2015),size_hint=(0.9,1.0))
        year2.add_widget(self.year2_label)
        year2.add_widget(self.year2_check)
        year3 = BoxLayout(size_hint=(0.2,1.0))
        self.year3_check=CheckBox(active=False,group='year',size_hint=(0.1,1.0))
        self.year3_label = Label(text=str(2016),size_hint=(0.9,1.0))
        year3.add_widget(self.year3_label)
        year3.add_widget(self.year3_check)
        year4 = BoxLayout(size_hint=(0.2,1.0))
        self.year4_check=CheckBox(active=False,group='year',size_hint=(0.1,1.0))
        self.year4_label = Label(text=str(2017),size_hint=(0.9,1.0))
        year4.add_widget(self.year4_label)
        year4.add_widget(self.year4_check)

        self.years.add_widget(Label(size_hint=(0.1,1.0)))
        radio_buttons1=[year1,year2,year3,year4]        
        for button in radio_buttons1:
            self.years.add_widget(button)
        self.years.add_widget(Label(size_hint=(0.1,1.0)))
         
        # Major #  
        self.majors = GridLayout(cols=1,size_hint=(1.0,0.7))        
        ece = BoxLayout()
        self.ece_check = CheckBox(active=False,group='majors')
        self.ece_label = Label(text='ECE')
        ece.add_widget(Label())
        ece.add_widget(self.ece_label)
        ece.add_widget(self.ece_check)
        ece.add_widget(Label())
        meche = BoxLayout()       
        self.meche_check = CheckBox(active=False,group='majors')
        self.meche_label = Label(text='MechE')
        meche.add_widget(Label())
        meche.add_widget(self.meche_label)
        meche.add_widget(self.meche_check)
        meche.add_widget(Label())
        roboe = BoxLayout()       
        self.roboe_check = CheckBox(active=False,group='majors')
        self.roboe_label = Label(text='E:Robo')
        roboe.add_widget(Label())
        roboe.add_widget(self.roboe_label)
        roboe.add_widget(self.roboe_check)
        roboe.add_widget(Label())
        bioe = BoxLayout()       
        self.bioe_check = CheckBox(active=False,group='majors')
        self.bioe_label = Label(text='E:Bio')
        bioe.add_widget(Label())
        bioe.add_widget(self.bioe_label)
        bioe.add_widget(self.bioe_check)
        bioe.add_widget(Label())
        designe = BoxLayout()       
        self.designe_check = CheckBox(active=False,group='majors')
        self.designe_label = Label(text='E:Design')
        designe.add_widget(Label())
        designe.add_widget(self.designe_label)
        designe.add_widget(self.designe_check)
        designe.add_widget(Label())
        ec = BoxLayout()       
        self.ec_check = CheckBox(active=False,group='majors')
        self.ec_label = Label(text='E:C')
        ec.add_widget(Label())
        ec.add_widget(self.ec_label)
        ec.add_widget(self.ec_check)
        ec.add_widget(Label())
        syse= BoxLayout()       
        self.syse_check = CheckBox(active=False,group='majors')
        self.syse_label = Label(text='E:Sys')
        syse.add_widget(Label())
        syse.add_widget(self.syse_label)
        syse.add_widget(self.syse_check)
        syse.add_widget(Label())
        matscie = BoxLayout()       
        self.matscie_check = CheckBox(active=False,group='majors')
        self.matscie_label = Label(text='E:MatSci')
        matscie.add_widget(Label())
        matscie.add_widget(self.matscie_label)
        matscie.add_widget(self.matscie_check)
        matscie.add_widget(Label())
        other = BoxLayout()
        self.other_check = CheckBox(active=False,group='majors')
        self.other_label = Label(text='Other')
        other.add_widget(Label())
        other.add_widget(self.other_label)
        other.add_widget(self.other_check)
        other.add_widget(Label())

        options=[ece, meche, roboe, bioe, designe, ec, syse, matscie, other] 
        for choice in options:
            self.majors.add_widget(choice)

        # Export and Save Buttons #
        self.options_bar = BoxLayout(size_hint=(1.0,0.05))        
        self.export_button = Button(text='Export to Spreadsheet',on_press=self.export_user_info)
        self.save_button = Button(text='Save User Information',on_press=self.save_user_info)
        self.options_bar.add_widget(self.export_button)
        self.options_bar.add_widget(self.save_button)       

        # Add Widgets to User Information Half #       
        self.info.add_widget(Label(text='Your Information',font_size = 17,size_hint=(1.0,0.1)))
        self.info.add_widget(self.display_name)
        self.info.add_widget(self.years)
        self.info.add_widget(self.majors)
        self.info.add_widget(self.options_bar)
                

        ## STATS AND NOTES HALF ##
        self.stats_and_notes = BoxLayout(orientation='vertical',size_hint=(0.5,1.0))

        # STATS QUADRANT # 
        self.stats = BoxLayout(orientation='vertical',size_hint=(1.0,0.5))
        # Stats #
        self.information = GridLayout(rows = 3, size_hint = (1.0,0.8))
        self.grad = Label(text='Enough credits to graduate?:  ' + will_grad,size_hint=(1.0,0.4))        
        self.credits = GridLayout(cols=4,rows=2,size_hint=(1.0,0.6))
        self.credits.add_widget (Label())       
        self.credits.add_widget(Label(text = 'AHSE: '+str(self.ahse_cred)))
        self.credits.add_widget(Label(text = 'ENGR: '+str(self.engr_cred)))
        self.credits.add_widget (Label())
        self.credits.add_widget (Label())       
        self.credits.add_widget(Label(text = 'MTH: '+str(self.mth_cred)))
        self.credits.add_widget(Label(text = 'SCI: '+str(self.sci_cred)))
        self.credits.add_widget (Label())  
        self.information.add_widget(self.credits)
        self.information.add_widget(self.grad)

        # Add Widgets to Quadrant #
        self.stats.add_widget(Label(text = 'Credits',font_size = 17,size_hint =(1.0,0.2)))
        self.stats.add_widget(self.information)
        
        # NOTES QUADRANT #        
        self.notes = GridLayout(cols=1,size_hint =(1.0,0.5))
        self.n_label = Label(text='Notes',font_size = 17,size_hint = (1.0,0.15))        
        self.n_entry = TextInput(multiline=True,padding=15,size_hint=(1.0,0.85))              
        self.notes.add_widget(self.n_label)      
        self.notes.add_widget(self.n_entry)

        # Add Stats and Notes to Half #
        self.stats_and_notes.add_widget(self.stats)
        self.stats_and_notes.add_widget(self.notes)


        ## Add Halves to Home Tab ##
        self.add_widget(self.info)       
        self.add_widget(self.stats_and_notes)       

        Clock.schedule_interval(self.update_stats,0.1)

    def update_stats(self,instance):
        """Updates the information displayed on the Home tab and saves info to the user file"""      
        if self.sm.tabs.tabspanel.current_tab == self.sm.tabs.tabspanel.tab1:            
            ahse_cred = all_globals.user.credits['AHSE']         
            engr_cred = all_globals.user.credits['ENGR']
            mth_cred = all_globals.user.credits['MTH']
            sci_cred = all_globals.user.credits['SCI']
            ahse_req = 28
            engr_req = 28
            mth_req = 28
            sci_req = 28      

            ## Add major to user file ##
            if self.ece_check.active == True:           
                all_globals.user.major = self.ece_label.text
            if self.meche_check.active == True:
                all_globals.user.major = self.meche_label.text
            if self.roboe_check.active == True:           
                all_globals.user.major = self.roboe_label.text
            if self.bioe_check.active == True:            
                all_globals.user.major = self.bioe_label.text
            if self.designe_check.active == True:         
                all_globals.user.major = self.designe_label.text
            if self.ec_check.active == True:           
                all_globals.user.major = self.ec_label.text
            if self.syse_check.active == True:            
                all_globals.user.major = self.syse_label.text            
            if self.matscie_check.active == True:            
                all_globals.user.major = self.matscie_label.text
            if self.other_check.active == True:            
                all_globals.user.major = self.other_label.text

            ## Determine if user has enough credits to graduate ##
            if ahse_cred+engr_cred+mth_cred+sci_cred >= 128:
                will_grad = 'Yes'
            else:
                will_grad = 'No' 

            ## Update the displayed credits & name ##
            self.grad.clear_widgets()
            self.grad = Label(text='Enough credits to graduate?:  ' + will_grad)
            self.credits.clear_widgets()
            self.credits.add_widget (Label())
            self.credits.add_widget (Label(text = 'AHSE: '+str(ahse_cred)+' / '+str(ahse_req)))
            self.credits.add_widget (Label(text = 'ENGR: '+str(engr_cred)+' / '+str(engr_req)))
            self.credits.add_widget (Label())
            self.credits.add_widget (Label())
            self.credits.add_widget (Label(text = 'MTH: '+str(mth_cred)+' / '+str(mth_req)))
            self.credits.add_widget (Label(text = 'SCI: '+str(sci_cred)+' / '+str(sci_req)))
            self.credits.add_widget (Label())       
            self.display_name.text = all_globals.user.name
           
            ## Add grad year to user file ##
            if self.year1_check.active == True:
                all_globals.user.grad_year = int(self.year1_label.text)
            elif self.year2_check.active == True:
                all_globals.user.grad_year = int(self.year2_label.text)
            elif self.year3_check.active == True:
                all_globals.user.grad_year = int(self.year3_label.text)
            elif self.year4_check.active == True:
                all_globals.user.grad_year = int(self.year4_label.text)

            ## Add notes to user file ##
            all_globals.user.notes=self.n_entry.text       

    def save_user_info(self,instance):
        #print 'User info saved!'
        all_globals.fm.save_user(all_globals.user)

    def export_user_info(self,instance):
        #print 'User info exported!'
        all_globals.fm.export_user(all_globals.user)