Ejemplo n.º 1
0
 def __init__(self):
     self.players = [p1, p2]
     self.ship_names = [
         'aircraft carrier', 'battleship', 'submarine', 'destroyer',
         'patrol'
     ]
     self.ship_lengths = [5, 4, 3, 3, 2]
     self.play_view = View()
Ejemplo n.º 2
0
 def showMessageBox(self, msg):
     warning = QMessageBox(self)
     warning.setFont(View.labelsFont())
     warning.setStyleSheet('QMessageBox {background: white}')
     warning.setWindowTitle("Error")
     warning.setText(msg)
     warning.setIcon(QMessageBox.Warning)
     warning.addButton("Ok", QMessageBox.AcceptRole).setFont(View.editsFont())
     warning.exec_()
Ejemplo n.º 3
0
 def showMessageBox(self, msg):
     warning = QMessageBox(self)
     warning.setFont(View.labelsFont())
     warning.setStyleSheet('QMessageBox {background: white}')
     warning.setWindowTitle("Error")
     warning.setText(msg)
     warning.setIcon(QMessageBox.Warning)
     warning.addButton("Ok",
                       QMessageBox.AcceptRole).setFont(View.editsFont())
     warning.exec_()
Ejemplo n.º 4
0
 def __init__(self,
              display,
              text,
              font_index=7,
              size=config.CLOCK_FONT_SIZE):
     View.__init__(self, display)
     self.text = text
     self.size = size
     self.font_path = f"./fonts/{config.FONTS[font_index][0]}"
     self._create_font()
Ejemplo n.º 5
0
 def create(attributes_transaction: dict):
     try:
         new_transaction = Transaction(**attributes_transaction)
         new_transaction.save()
         return View.get_response(new_transaction)
     except BaseException:
         return None
Ejemplo n.º 6
0
def main(debug=False, run=True):
    # loop
    loop = async_loop.new_event_loop()
    asyncio.set_event_loop(loop)
    # database
    database = PostgresqlDatabase(database=settings.DATABASE)
    #  templates
    view = View({"HTML_TEMPLATES_DIR": settings.TEMPLATES_DIR})
    # app
    app = make_app(view, database)
    app.blueprint(sessions, db=database, db_name='sessions', loop=loop)
    app.blueprint(users,
                  db=database,
                  db_name='users',
                  loop=loop,
                  sessions_db_name='sessions')
    app.blueprint(entries, db=database, db_name=BLOG_ENTRY_DB_NAME, loop=loop)
    app.blueprint(entries,
                  db=database,
                  db_name=COMMENT_ENTRY_DB_NAME,
                  loop=loop)
    app.blueprint(entries, db=database, db_name=FILES_ENTRY_DB_NAME, loop=loop)
    app.blueprint(registration, view=view)
    app.blueprint(login, view=view)
    app.blueprint(logout, view=view)
    app.blueprint(files, view=view)
    app.blueprint(blog, view=view)

    if run:
        app.run(host="0.0.0.0", port=8000, loop=loop, debug=debug)
    return app, loop, view, database
Ejemplo n.º 7
0
 def paint(self):
     log_paint.debug("ClockView::paint()")
     # Background
     self.display.draw.rectangle((0, 0, self.display.mx, self.display.my),
                                 fill=config.BG,
                                 outline=config.FG)
     # Clock
     clock_text = self._clock_text()
     text_width, text_height = self.display.draw.textsize(clock_text,
                                                          font=self.font)
     self.display.draw.text((self.display.cx - text_width // 2,
                             self.display.cy - text_height // 2),
                            clock_text,
                            font=self.font,
                            fill=config.FG)
     View.paint(self)
     self.last_clock_text = clock_text
Ejemplo n.º 8
0
 def __init__(self):
     self.engine = create_engine(
         "mysql+pymysql://root:admin@localhost:3306/oc_p5")
     self.session = Session(self.engine)
     self.controller = Controller(session=self.session)
     self.controller.add_categories_to_bdd(
         categories=self.controller.generate_categories(
             ["sandwichs", "bonbons", "jambons", "chips"]))
     self.view = View(session=self.session, controller=self.controller)
Ejemplo n.º 9
0
 def get(card_number: str, page=1):
     try:
         cursor = Transaction.objects.raw({
             'card_number': card_number
         }).limit(per_page).skip(per_page * page)
         transactions = list(cursor)
         return View.get_response(transactions)
     except errors.DoesNotExist:
         return None
Ejemplo n.º 10
0
class Controller:
	def __init__(self):
		self.view = View()
		self.TodoDB = TodoDB()

	def add_todo(self):
		content = self.view.get_todo_content()
		return Todo(content)

	# Main function
	def run(self):
		user_choice = self.view.welcome_menu()
		if int(user_choice) == 1:
			todo = self.add_todo()
			self.TodoDB.add(todo)
		elif int(user_choice) == 2:
			self.TodoDB.get_all_todos()
		else:
			self.view.error_message()
Ejemplo n.º 11
0
    def __init__(self, user=None):
        self.api = DribleAPI()
        self.view = View()
        self.user = user
        self.player = MPDClient()
        self.current_station = None

        ## Setup MPDClient
        self.player.timeout = 10
        self.player.idletimeout = None
        self.player.connect("localhost", 6600)
Ejemplo n.º 12
0
 def __init__(self, parent=None):
     super(SyncWindow, self).__init__(parent)
     
     # Sets up several UI aspects
     self.tray = QSystemTrayIcon(self)
     self.tray.setIcon(QIcon(QPixmap(':/resources/icon.png')))
     self.tray.show()
     
     self.setStyleSheet('SyncWindow {background: white}')
     self.setWindowTitle('IQBox')
     self.setWindowIcon(QIcon(QPixmap(':/resources/logobar.png')))
     self.statusBar().setFont(View.labelsFont())
     self.syncThread = None
     
     # Initializes the window with a `LoginView` widget.
     self.loginView()
Ejemplo n.º 13
0
    def __init__(self, parent=None):
        super(SyncWindow, self).__init__(parent)

        # Sets up several UI aspects
        self.tray = QSystemTrayIcon(self)
        self.tray.setIcon(QIcon(QPixmap(':/resources/icon.png')))
        self.tray.show()

        self.setStyleSheet('SyncWindow {background: white}')
        self.setWindowTitle('IQBox')
        self.setWindowIcon(QIcon(QPixmap(':/resources/logobar.png')))
        self.statusBar().setFont(View.labelsFont())
        self.syncThread = None

        # Initializes the window with a `LoginView` widget.
        self.loginView()
Ejemplo n.º 14
0
    def __init__(self, session):
        self.app = wx.App(False) 

        self.session = session

        self.view = View(None, name=self.session.subj.name, n_lick_show=self.session.lr.ACCUM_SIZE)

        # bindings
        self.view.start_button.Bind(wx.EVT_BUTTON, self.run_session)
        self.view.pause_button.Bind(wx.EVT_BUTTON, self.pause_session)
        self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_reward(evt, temp))
        self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_reward(evt, temp))
        self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_puff(evt, temp))
        self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_puff(evt, temp))

        self.view.Bind(wx.EVT_CLOSE, self.on_close)
        self.view.Show()
Ejemplo n.º 15
0
 def __init__(self):
     self.map = Map(MAP_SIZE_W, MAP_SIZE_H, BLOCKSIZE)
     pygame.init()
     window = pygame.display.set_mode((WIDTH,HEIGHT))
     pygame.display.set_caption('def')
     self.screen = pygame.display.get_surface()
     self.model = Model( self.map)
     self.camera = Camera(self.screen.get_width(),self.screen.get_height())
     
     
     self.entity_controller = EntityController(self.map)
     self.entity_view = EntityView(self.entity_controller)
     
     
     self.view = View(self.screen, self.camera, self.entity_view)
     
     self.camera_lock = True
     self.camera_follow_player = False
Ejemplo n.º 16
0
def make_app(view=None, database=None):
    if not view:
        view = View({"HTML_TEMPLATES_DIR": settings.TEMPLATES_DIR})
    if not database:
        database = PostgresqlDatabase(database=settings.DATABASE)

    app = Sanic(__name__)
    app.config = Config()
    app.config.LOGO = "Atlantis! Go FAST!"
    app.config.REQUEST_MAX_SIZE = 2000000  # 2 megababies
    app.config.REQUEST_TIMEOUT = 60 * 5  # 5 min
    app.static('/static', settings.STATIC_DIR)

    @app.middleware('response')
    async def halt_response(request, response):
        response.headers['Content-Security-Policy'] = \
            "default-src 'self' 'unsafe-inline';"

    return app
class SchoolController:
	def __init__(self):
		self.view = View()
		self.db = SchoolDB()

	def run(self):
		self.view.welcome_screen()
		user_selection = int(self.view.menu())
		if user_selection == 1:
			all_students = self.db.all_students()
			self.view.parse_students(all_students)
		elif user_selection == 2:
			name = self.view.get_student_name()
			age = self.view.get_student_age()
			new_student = Student(name, age)
			self.db.add_student(new_student)
		elif user_selection == 3:
			student = self.db.get_student()
		return self.run()
Ejemplo n.º 18
0
    def __init__(self):
        # Make app
        self.app = wx.App(False) 

        # Generate view    
        subs_list = list_subjects()
        self.view = View(None, subs=subs_list)
        if False:#not config.TESTING_MODE:
            sys.stdout=self.view.redir_out
            sys.stderr=self.view.redir_err
        setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err)

        self.tcpip = TCPIP(config.scanimage_tcpip_address)

        # Button bindings
        self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff)
        self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare)
        self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause)
        self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip)
        self.view.Bind(wx.EVT_CLOSE, self.evt_close)
        self.view.lighton_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.set_light(evt, temp))
        self.view.lightoff_but.Bind(wx.EVT_BUTTON, lambda evt, temp=0: self.set_light(evt, temp))
        self.view.puff_but.Bind(wx.EVT_BUTTON, self.evt_puff)
        self.view.deliver_but.Bind(wx.EVT_BUTTON, self.evt_deliver)
        self.view.roi_but.Bind(wx.EVT_BUTTON, self.evt_roi)
        self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub)
        self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam)
        self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput)
        self.view.slider.Bind(wx.EVT_COMMAND_SCROLL_THUMBTRACK, self.on_slide)
        self.view.ax_interactive.figure.canvas.mpl_connect('button_press_event', self.evt_interactive_click)

        # Runtime
        self.selection_pts = []
        self.selecting = False
        self.update_state(self.STATE_NULL)
        self.n_updates = 0

        # Run
        #self.view.Show()
        self.app.MainLoop()
Ejemplo n.º 19
0
    def __init__(self, data_dir=r'D:\\deverett', wf_calib_path=r'C:\\WF\\calibration.npz'):
        # Make app
        self.app = wx.App(False) 

        self.view = View(None)

        self.view.Bind(wx.EVT_CLOSE, self.evt_close)
        
        # Button bindings
        self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub)
        self.view.but_load.Bind(wx.EVT_BUTTON, self.evt_load)
        self.view.but_reg.Bind(wx.EVT_BUTTON, self.evt_reg)
        self.view.but_freg.Bind(wx.EVT_BUTTON, self.evt_freg)
        self.view.but_save.Bind(wx.EVT_BUTTON, self.evt_save)
        
        # load initial info
        self.data_dir = data_dir
        subs = os.listdir(self.data_dir)
        self.view.add_sub(subs)
        try:
            with np.load(wf_calib_path) as cf:
                self.ppm_y = cf['pix_per_micron_y']
                self.ppm_x = cf['pix_per_micron_x']
        except FileNotFoundError:
            raise Exception('Calibration file not found. Please calibrate before registering.')
        
        # runtime
        self.cam = Camera()
        self.mp285 = MP285()
        self.current_sub = None
        self.register_mode = None
        self.result = None
        self.update()

        # Run
        self.app.MainLoop()
init(autoreset=True)

if "--help" in sys.argv:
    f.instructions()
    time.sleep(10)
else:
    pass

print(40 * "*")
print(Fore.GREEN +
      """Welcome to the Website Availability Python Terminal Application!""")
print(40 * "*")

while True:
    website_address = input("Which website would you like to check? \n")
    get_new_website = View(website_address)
    new_website = get_new_website.get_website()
    print("*" * 40)
    print(new_website[1])
    print("*" * 40)

    if new_website[0] is True:
        break
    elif new_website[0] is False:
        continue

while True:
    try:
        get_new_website = View(website_address)
        options = get_new_website.show_options()
        individual_website_response = input(options)
Ejemplo n.º 21
0
 def __init__(self, display):
     View.__init__(self, display)
     random.seed()
     self._randomize()
Ejemplo n.º 22
0
class Controller():

    def __init__(self, user=None):
        self.api = DribleAPI()
        self.view = View()
        self.user = user
        self.player = MPDClient()
        self.current_station = None

        ## Setup MPDClient
        self.player.timeout = 10
        self.player.idletimeout = None
        self.player.connect("localhost", 6600)

    def login(self):
        while True:
            username = self.view.login()

            if username == "exit()":
                break

            self.user = User.get(username=username)

            ## User not found
            if self.user is None:
                ans = self.view.user_not_found(username)
                if ans == 'y' or ans == 'Y':
                    if User.create(username=username) is None:
                        self.view.error()
                    continue
            else:
                self.__user_menu()


    def __user_menu(self):
        while True:
            choice = self.view.user_menu(self.user.username)

            ## Logout
            if choice == '5':
                break

            elif choice == '1':
                current_station = self.api.get_random_station()
                self.player.add(current_station['streamurl'])
                self.player.play()

                while True:
                    choice = self.view.player_menu(current_station['name'], self.player.status()['volume'])
                    if choice == '1':
                        ## Make sure connection
                        try:
                            self.player.connect("localhost", 6600)
                        except ConnectionError:
                            ## already connected
                            pass

                        self.player.stop()
                        self.player.clear()
                        break

                    elif choice == '2':
                        vol = self.view.user_prompt('Set volume to (0~100): ')
                        try:
                            self.player.setvol(vol)
                        except CommandError:
                            self.view.error("Invalid volume value, only accept an integer between 0-100")

            else:
                continue
Ejemplo n.º 23
0
class Controller:

    REFRESH_INTERVAL = 500 #ms
    STATE_NULL = 0
    STATE_PREPARED = 1
    STATE_RUNNING = 2
    STATE_KILLED_SESSION = 3
    STATE_RUN_COMPLETE = 4

    def __init__(self):
        # Make app
        self.app = wx.App(False) 

        # Generate view    
        subs_list = list_subjects()
        self.view = View(None, subs=subs_list)
        if False:#not config.TESTING_MODE:
            sys.stdout=self.view.redir_out
            sys.stderr=self.view.redir_err
        setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err)

        self.tcpip = TCPIP(config.scanimage_tcpip_address)

        # Button bindings
        self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff)
        self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare)
        self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause)
        self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip)
        self.view.Bind(wx.EVT_CLOSE, self.evt_close)
        self.view.lighton_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.set_light(evt, temp))
        self.view.lightoff_but.Bind(wx.EVT_BUTTON, lambda evt, temp=0: self.set_light(evt, temp))
        self.view.puff_but.Bind(wx.EVT_BUTTON, self.evt_puff)
        self.view.deliver_but.Bind(wx.EVT_BUTTON, self.evt_deliver)
        self.view.roi_but.Bind(wx.EVT_BUTTON, self.evt_roi)
        self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub)
        self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam)
        self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput)
        self.view.slider.Bind(wx.EVT_COMMAND_SCROLL_THUMBTRACK, self.on_slide)
        self.view.ax_interactive.figure.canvas.mpl_connect('button_press_event', self.evt_interactive_click)

        # Runtime
        self.selection_pts = []
        self.selecting = False
        self.update_state(self.STATE_NULL)
        self.n_updates = 0

        # Run
        #self.view.Show()
        self.app.MainLoop()

    def update_state(self, st=None):
        if st is not None:
            self.state = st

        if self.state == self.STATE_NULL:
            self.view.prepare_button.Enable()
            self.view.prepare_button.SetLabel('Prepare Session')
            self.view.add_sub_button.Enable()
            self.view.start_button.Disable()
            self.view.pause_button.Disable()
            self.view.update_sub_choices()
        elif self.state == self.STATE_PREPARED:
            self.view.usrinput_box.SetValue('(notes)')
            self.view.prepare_button.SetLabel('Cancel Session')
            self.view.prepare_button.Enable()
            self.view.add_sub_button.Disable()
            self.view.start_button.SetLabel("Run Session")
            self.view.start_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Enable()
            self.view.pause_button.Disable()
        elif self.state == self.STATE_RUNNING:
            self.view.prepare_button.Disable()
            self.view.prepare_button.SetLabel('Prepare Session')
            self.view.add_sub_button.Disable()
            self.view.start_button.Disable()
            self.view.start_button.SetLabel('End Session')
            self.view.start_button.SetBackgroundColour((255,0,0))
            self.view.pause_button.Enable()
        elif self.state == self.STATE_KILLED_SESSION:
            self.view.start_button.SetLabel('Ending...')
            self.view.start_button.Disable()
            self.view.pause_button.Disable()
            if self.session.session_on:
                self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update_state)
            else:
                self.update_state(self.STATE_RUN_COMPLETE)
            
        elif self.state == self.STATE_RUN_COMPLETE:
            self.view.SetTitle('Puffs Experiment Control')
            self.update_timer.Stop()
            self.view.start_button.SetLabel("Run Session")
            self.view.start_button.SetBackgroundColour((0,255,0))
            self.view.prepare_button.Enable()
            self.view.prepare_button.SetLabel('Prepare Session')
            self.view.add_sub_button.Enable()
            self.view.start_button.Disable()
            self.view.pause_button.Disable()
            self.view.update_sub_choices()
    
    def update(self):
        if (not self.session.session_on) and self.state == self.STATE_RUNNING:
            self.update_state(self.STATE_RUN_COMPLETE)
            return

        # checks
        if self.view.trial_n_widg.GetValue() == str(self.session.trial_idx):
            new_trial_flag = False
        else:
            new_trial_flag = True

        # clocks
        self.view.session_runtime_widg.SetValue(pretty_time(self.session.session_runtime))
        self.view.trial_runtime_widg.SetValue(pretty_time(self.session.trial_runtime))

        # plots
        try:
            aq = self.session.ar.get_accum()
            self.view.set_live_data((None,aq), (None,self.session.eyelid_buffer))
        except Queue.Empty:
            pass

        # movie
        cam_frame = self.session.im
        #self.view.panel_mov.set_frame(cam_frame)
        self.mov_im.set_data(cam_frame)
        self.view.ax_interactive.figure.canvas.draw()
        
        # trial
        if new_trial_flag:
            self.update_trial()
            
        # past
        if self.session.past_flag != False:
            cs,us = self.session.past_flag
            self.session.past_flag = False
            self.view.set_past_data(self.session.eyelid_buffer_ts,self.session.eyelid_buffer,cs,us)

        # pauses
        if self.session.paused:
            self.view.pause_button.SetLabel('Unpause')
            self.view.pause_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Disable()
        elif not self.session.paused:
            self.view.pause_button.SetLabel('Pause')
            self.view.pause_button.SetBackgroundColour((0,150,150))
            if self.session.session_on and not self.session.session_kill:
                self.view.start_button.Enable()
        
        self.n_updates += 1
        self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update)

    def update_trial(self):
        if self.session.trial_idx < 0:
            return
        self.view.trial_n_widg.SetValue("%s"%(str(self.session.trial_idx)))
        self.view.trial_type_widg.SetValue(self.session.current_stim_state)

    ####### EVENTS ########
    def evt_prepare(self, evt):
        if self.state == self.STATE_PREPARED:
            self.session.end()
            self.update_state(self.STATE_NULL)

        else:
            sel_sub = self.view.sub_box.GetSelection()
            if wx.NOT_FOUND in [sel_sub]:
                dlg = wx.MessageDialog(self.view, message='Selections not made.', caption='Preparation not performed.', style=wx.OK)
                res = dlg.ShowModal()
                dlg.Destroy()
                return

            sub_name = self.view.sub_names[sel_sub]
            imaging = self.view.imaging_box.GetValue()

            sub = Subject(sub_name)
            ph = ParamHandler(sub, imaging=imaging)
            self.session = Session(ph.params, ax_interactive=self.view.ax_interactive)

            # tcpip communication
            if imaging:
                si_path = config.si_data_path+r'\\{}'.format(sub_name)
                seshname = self.session.name_as_str()
                dic = dict(path=si_path, name=seshname, idx=1)
                cont = True
                while cont:
                    suc = self.tcpip.send(dic)
                    if not suc:
                        dlg = wx.MessageDialog(self.view, caption='ScanImage preparation failed.', message='Try again?', style=wx.YES_NO)
                        res = dlg.ShowModal()
                        dlg.Destroy()
                        cont = res==wx.ID_YES
                        if cont:
                            self.evt_tcpip(None)
                    else:
                        cont = False

            #self.view.setup_axlive()
            self.view.SetTitle('Subject {}'.format(sub_name))
            
            _,im = self.session.cam.get()
            self.view.ax_interactive.clear()
            self.view.ax_interactive.axis('off')
            self.mov_im = self.view.ax_interactive.imshow(im, cmap=pl.cm.Greys_r)

            self.update_state(self.STATE_PREPARED)
            self.update()
        
    def evt_tcpip(self, evt):
        bi = wx.BusyInfo('Connecting TCPIP; click connect on remote machine...', self.view)
        suc = self.tcpip.reconnect()
        bi.Destroy()
        if not suc:
            dlg = wx.MessageDialog(self.view, caption='TCPIP reconnection failed.', message='TCPIP not active.', style=wx.OK)
            res = dlg.ShowModal()
            dlg.Destroy()
        else:
            logging.info('TCPIP connected.')

    def evt_onoff(self, evt):
        if self.state != self.STATE_RUNNING:
            self.update_state(self.STATE_RUNNING)
            self.run_th = threading.Thread(target=self.session.run)
            self.run_th.start()
        elif self.state == self.STATE_RUNNING:
            self.session.session_kill = True
            self.update_state(self.STATE_KILLED_SESSION)

    def evt_pause(self, evt):
        if not self.session.paused:
            self.session.pause(True)
            self.view.pause_button.SetLabel('Unpause')
            self.view.pause_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Disable()
        elif self.session.paused:
            self.session.pause(False)
            self.view.pause_button.SetLabel('Pause')
            self.view.pause_button.SetBackgroundColour((0,100,200))
            self.view.start_button.Enable()

    def evt_close(self, evt):
        if self.state in [self.STATE_RUNNING]:
            dlg = wx.MessageDialog(self.view, message='End session before closing interface.', caption='Session is active.', style=wx.OK)
            res = dlg.ShowModal()
            dlg.Destroy()
            evt.Veto()
        elif self.state in [self.STATE_NULL, self.STATE_RUN_COMPLETE, self.STATE_PREPARED]:
            dlg = wx.MessageDialog(self.view, message="", caption="Exit Experiment?", style=wx.OK|wx.CANCEL)
            result = dlg.ShowModal()
            dlg.Destroy()
            if result == wx.ID_OK:
                if self.state == self.STATE_PREPARED:
                    self.session.end()
                    self.update_state(self.STATE_KILLED_SESSION)
                    while self.state != self.STATE_RUN_COMPLETE:
                        pass
                self.tcpip.end()
                self.view.Destroy()
            else:
                evt.Veto()

    def evt_addsub(self, evt):
        dlg = wx.TextEntryDialog(self.view, message='Enter new subject name:')
        ret = dlg.ShowModal()
        if ret == wx.ID_OK:
            self.view.add_sub(dlg.GetValue().strip().lower())
        else:
            pass

    def set_light(self, evt, state):
        if self.state in [self.STATE_PREPARED,self.STATE_RUNNING,self.STATE_KILLED_SESSION]:
            self.session.dummy_light(state)
        else:
            dummy_light(state)
    def evt_puff(self, evt):
        if self.state in [self.STATE_PREPARED,self.STATE_RUNNING,self.STATE_KILLED_SESSION]:
            self.session.dummy_puff()
        else:
            dummy_puff()
    def evt_deliver(self, evt):
        if self.state in [self.STATE_RUNNING]:
            self.session.deliver_override = True
            logging.info('Manual trial delivering.')
        else:
            logging.info('No session running to deliver trial.')
    def update_usrinput(self, evt):
        self.session.notes = self.view.usrinput_box.GetValue()
        logging.info('Metadata updated.')
    def evt_roi(self, evt):
        if self.state not in [self.STATE_PREPARED, self.STATE_RUNNING]:
            logging.info('No session for ROI selection.')
            return
            
        if not self.selecting:
            self.view.roi_but.SetLabel('DONE')
            im = self.session.im
            self.mov_im.set_data(im)
            self.view.ax_interactive.axis([0,im.shape[1],0,im.shape[0]])
            self.view.ax_interactive.figure.canvas.draw()
            logging.info('Select ROI now, and press DONE to stop.')
            self.selecting = True
        elif self.selecting:
            self.session.roi_pts = np.copy(self.selection_pts)
            self.session.acquire_mask()
            self.view.roi_but.SetLabel('ROI')
            self.selection_pts = []
            self.selecting = False
    def evt_resetcam(self, evt):
        if self.state in [self.STATE_PREPARED, self.STATE_RUNNING]:
            self.session.cam.reset_cams()
    def evt_interactive_click(self, event):
        if self.selecting:
            self.selection_pts.append((event.xdata, event.ydata))
            lims = self.view.ax_interactive.axis()
            self.view.ax_interactive.plot(event.xdata,event.ydata,'rx')
            self.view.ax_interactive.axis(lims)
            self.view.ax_interactive.figure.canvas.draw()
    def on_slide(self, evt):
        if self.state in [self.STATE_PREPARED, self.STATE_RUNNING]:
            self.session.eyelid_thresh = self.view.slider.GetValue()
        self.view.update_thresh()
Ejemplo n.º 24
0
class MasterController:
    def __init__(self):
        self.map = Map(MAP_SIZE_W, MAP_SIZE_H, BLOCKSIZE)
        pygame.init()
        window = pygame.display.set_mode((WIDTH,HEIGHT))
        pygame.display.set_caption('def')
        self.screen = pygame.display.get_surface()
        self.model = Model( self.map)
        self.camera = Camera(self.screen.get_width(),self.screen.get_height())
        
        
        self.entity_controller = EntityController(self.map)
        self.entity_view = EntityView(self.entity_controller)
        
        
        self.view = View(self.screen, self.camera, self.entity_view)
        
        self.camera_lock = True
        self.camera_follow_player = False
        #music here atm
          
     #   pygame.mixer.music.load("src/music/04.ogg")
     #   pygame.mixer.music.play()
        
        
    def menu_mode(self):
        self.menu = Menu()
        while 1:
            self.screen.fill((0,0,0))
            self.menu.draw(self.screen)
            
            
    def run(self):
        self.map.load_map("map1.map")
        #self.map.load_map("test.out")
      #  self.map.init_adjacent()
        self.entity_controller.update_enemy_path()
        self.entity_controller.add_entity()
  
        while 1:
            self.screen.fill((0,0,50))
            self.update()
            self.handle_events(pygame.event.get())
            self.view.draw_level(self.screen, self.map)
            
            self.entity_controller.update()
            pygame.display.update()
            pygame.display.flip() 
           
    def update(self):
        # CAMERA MOUSE
        self.update_camera()
        if not self.camera_lock and not self.camera_follow_player:
            self.camera.update()
        elif self.camera_follow_player:
            self.camera.set_pos(
                                ((WIDTH/2)-(self.entity_controller.get_player_pos().get_pos()[0]*BLOCKSIZE*self.camera.get_zoom()),
                                 (HEIGHT/2)-(self.entity_controller.get_player_pos().get_pos()[1]*BLOCKSIZE*self.camera.get_zoom())
                                 )
                                )
    def update_camera(self):
       #PREVENT ouside window mouse scrolling
      #  if not pygame.mouse.get_focused():
       #     self.camera.set_speed((0,0))
        #    return
        if self.view.freeze_camera_movement_areas(pygame.mouse.get_pos()):
            self.camera.set_speed((0,0))
            return 
        
        if pygame.mouse.get_pos()[0] < self.screen.get_width()/10:
            self.camera.set_speed((CAMERA_SPEED,self.camera.get_speed()[1]))
        if pygame.mouse.get_pos()[0] > self.screen.get_width()-(self.screen.get_width()/10):
            self.camera.set_speed((-1*CAMERA_SPEED,self.camera.get_speed()[1]))
        
        if self.camera.get_speed()[0] != 0 and pygame.mouse.get_pos()[0] > self.screen.get_width()/10 and pygame.mouse.get_pos()[0] < self.screen.get_width() -(self.screen.get_width()/10):
            self.camera.set_speed((0,self.camera.get_speed()[1]))
        # UP N DOWN
        if pygame.mouse.get_pos()[1] < self.screen.get_height()/10:
            self.camera.set_speed((self.camera.get_speed()[0],CAMERA_SPEED))
        # dont scroll on hud
        
        if pygame.mouse.get_pos()[1] > self.screen.get_height()-200:
            self.camera.set_speed((self.camera.get_speed()[0],-1*CAMERA_SPEED))
        
        if self.camera.get_speed()[1] != 0 and pygame.mouse.get_pos()[1] > self.screen.get_height()/10 and pygame.mouse.get_pos()[1] <  self.screen.get_height()-300:#self.screen.get_height() -(self.screen.get_height()/10):
            self.camera.set_speed((self.camera.get_speed()[0],0))
        

    def handle_events(self, events):
        for event in events:
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                      # HANDLE SAVEINPUT N STUFF
                if event.key == K_UP:
                    self.map.save_map("test.out")
                if event.key == K_DOWN:
                    self.map.load_map()
                    self.entity_controller.set_map(self.map)
                if event.key == K_SPACE: # add entity(enemy)..
                    self.entity_controller.add_entity()
                if event.key == K_c:
                    self.camera.center_map()
                if event.key == K_F1:
                    self.view.toggle_lines()
                if event.key == K_F2:
                    if self.camera_lock:
                        self.camera_lock = False
                    else:
                        self.camera_lock = True
                                    
                if event.key == K_F3:
                    if self.camera_follow_player:
                        self.camera_follow_player = False
                    else:
                        self.camera_follow_player = True
                              
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            
            self.view.handle_event(event,self.map)

            if event.type == pygame.MOUSEBUTTONDOWN:
                if pygame.mouse.get_pressed()[0] == 1:
                    self.map.change_color_at((pygame.mouse.get_pos()[0]-self.camera.get_x()
                                              ,pygame.mouse.get_pos()[1]-self.camera.get_y())
                                             , self.view.get_selected_color(), self.camera.get_zoom())
           
                if event.button == 5:
                    self.camera.set_zoom(self.camera.get_zoom()/2.0)
            
                if event.button == 4:
                    self.camera.set_zoom(self.camera.get_zoom()*2.0)
            
            if pygame.mouse.get_pressed()[2] == 1:
                self.entity_controller.add_tower(self.map.tile_at(pygame.mouse.get_pos()))
Ejemplo n.º 25
0
def main():
    controller = Controller(View(), Game())
    controller.run()
 def __init__(self):
   self.players = [p1, p2]
   self.ship_names = ['aircraft carrier', 'battleship','submarine','destroyer','patrol']
   self.ship_lengths = [5,4,3,3,2]
   self.play_view = View()
Ejemplo n.º 27
0
def test_render_with_context():
    view = View({"HTML_TEMPLATES_DIR": 'templates'})
    html = view.render('example', {'name': 'AKJWFaawkjfbaw'})
    assert '<!DOCTYPE html>' in html
    assert '<h1>hello! AKJWFaawkjfbaw</h1>' in html
Ejemplo n.º 28
0
	def __init__(self):
		self.view = View()
Ejemplo n.º 29
0
class Controller:
    REFRESH_INTERVAL = 300 #ms
    def __init__(self, session):
        self.app = wx.App(False) 

        self.session = session

        self.view = View(None, name=self.session.subj.name, n_lick_show=self.session.lr.ACCUM_SIZE)

        # bindings
        self.view.start_button.Bind(wx.EVT_BUTTON, self.run_session)
        self.view.pause_button.Bind(wx.EVT_BUTTON, self.pause_session)
        self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_reward(evt, temp))
        self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_reward(evt, temp))
        self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.L: self.give_puff(evt, temp))
        self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=self.session.R: self.give_puff(evt, temp))

        self.view.Bind(wx.EVT_CLOSE, self.on_close)
        self.view.Show()
    def run(self):
        self.trial_n = self.session.trial_idx
        self.update_vals()
        self.app.MainLoop()
    
    def give_reward(self, evt, side):
        self.session.spout.go(side)
    def give_puff(self, evt, side):
        self.session.stimulator.go(side, dur=self.session.stim_duration)
    def pretty_time(self, t):
        if t<60:
            return '%0.0f s'%t
        else:
            return '%0.0f m, %0.0f s'%(np.floor(t/60.),t%60.)
    def update_vals(self):
        # values
        self.view.trial_n_widg.SetValue("%s (%s)"%(str(self.session.valid_trial_idx),str(self.session.trial_idx)))
        self.view.session_runtime_widg.SetValue(self.pretty_time(self.session.session_runtime))
        self.view.trial_runtime_widg.SetValue(self.pretty_time(self.session.trial_runtime))

        # plots
        self.view.set_lick_data(self.session.lr.get_accum())

        # movie
        self.view.panel_mov.set_frame(self.session.cam.get_current_frame(self.session.cam.cS))
        
        
        # trial
        trn = self.session.trial_idx
        if trn != self.trial_n and self.session.session_on:
            self.trial_n = trn
            if self.session.use_trials:
                self.view.set_trial_data(self.session.trials[self.trial_n], self.session.stim_phase_intro_duration, self.session.phase_durations[self.session.PHASE_DELAY], self.session.stim_phase_end_duration)
            self.view.set_perf_data(*self.session.get_cum_performance())
            self.view.rewarded_widg.SetValue(str(self.session.rewards_given))
            self.view.perc_widg.SetValue(' / '.join(['%0.2f [%i]'%(p,n) for p,n in zip(self.session.percentages[::-1], self.session.side_ns[::-1])]))
            self.view.bias_widg.SetValue(' / '.join(['%0.2f'%s for s in self.session.bias_correction_percentages[::-1]])+' [%i]'%self.session.bias_correction_window)
            self.view.pvalid_widg.SetValue('%0.2f'%self.session.perc_valid)
        # controls
        if self.session.session_complete or self.session.session_kill:
            self.view.start_button.Disable()

        # pauses
        if self.session.paused:
            self.view.pause_button.SetLabel('Unpause')
            self.view.pause_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Disable()
        elif not self.session.paused:
            self.view.pause_button.SetLabel('Pause')
            self.view.pause_button.SetBackgroundColour((0,150,150))
            if self.session.session_on and not self.session.session_kill:
                self.view.start_button.Enable()
            
        self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update_vals)

    def run_session(self, evt):
        if not self.session.session_on:
            self.run_th = threading.Thread(target=self.session.run)
            self.run_th.start()
            self.view.start_button.SetLabel('End Session')
            self.view.start_button.SetBackgroundColour((255,0,0))
            self.view.pause_button.Enable()
        elif self.session.session_on:
            self.session.session_kill = True
            self.view.start_button.Disable()
            self.view.puffr_but.Disable()
            self.view.puffl_but.Disable()
            self.view.rewardr_but.Disable()
            self.view.rewardl_but.Disable()
            self.view.pause_button.Disable()
    def pause_session(self, evt):
        if not self.session.paused:
            self.session.paused += 1
            self.view.pause_button.SetLabel('Unpause')
            self.view.pause_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Disable()
        elif self.session.paused:
            self.session.paused = max(self.session.paused-1,0)
            self.view.pause_button.SetLabel('Pause')
            self.view.pause_button.SetBackgroundColour((0,100,200))
            self.view.start_button.Enable()

    def on_close(self, evt):
        if self.session.session_on:
            dlg = wx.MessageDialog(self.view, message='End session before closing interface.', caption='Session is active.', style=wx.OK)
            res = dlg.ShowModal()
            dlg.Destroy()
        
        else:
            dlg = wx.MessageDialog(self.view, message="Some data may be lost.", caption="Exit Experiment?", style=wx.OK|wx.CANCEL)
            result = dlg.ShowModal()
            dlg.Destroy()
            if result == wx.ID_OK:
                self.update_timer.Stop()
                self.view.Destroy()
Ejemplo n.º 30
0
class Controller:

    REFRESH_INTERVAL = 500 #ms
    STATE_NULL = 0
    STATE_PREPARED = 1
    STATE_RUNNING = 2
    STATE_KILLED_SESSION = 3
    STATE_RUN_COMPLETE = 4

    def __init__(self):
        # Make app
        self.app = wx.App(False) 
        
        self.update_timer = None

        # Generate view    
        subs_list = list_subjects()
        self.cond_list = sorted(conditions.keys())
        self.manip_list = sorted(manipulations.keys())
        self.view = View(None, subs=subs_list, conditions=self.cond_list, manipulations=self.manip_list)
        self.mp285_view = MP285View(None)
        if False:#not config.TESTING_MODE:
            sys.stdout=self.view.redir_out
            sys.stderr=self.view.redir_err
        setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err)

        self.tcpip = TCPIP(config.scanimage_tcpip_address)
        self.mp285 = MP285(**config.mp285_params)
        self.actuator = LActuator(**config.actuator_params)

        # Button bindings
        self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff)
        self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare)
        self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause)
        self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip)
        self.view.mp285_button.Bind(wx.EVT_BUTTON, self.evt_mp285)
        self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam)
        self.view.resetlact_button.Bind(wx.EVT_BUTTON, self.evt_resetlact)
        self.view.Bind(wx.EVT_CLOSE, self.evt_close)
        self.view.cal_but.Bind(wx.EVT_BUTTON, self.calib)
        self.view.puffc_but.Bind(wx.EVT_BUTTON, lambda evt: puff_check())
        self.view.locklev_but.Bind(wx.EVT_BUTTON, self.locklev)
        self.view.levu_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.change_level(evt,temp))
        self.view.levd_but.Bind(wx.EVT_BUTTON, lambda evt, temp=-1: self.change_level(evt,temp))
        self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_reward(evt, temp))
        self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_reward(evt, temp))
        self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_puff(evt, temp))
        self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_puff(evt, temp))
        self.view.optoon_but.Bind(wx.EVT_BUTTON, self.opto_on)
        self.view.optooff_but.Bind(wx.EVT_BUTTON, self.opto_off)
        self.view.maniptog_but.Bind(wx.EVT_BUTTON, self.manip_toggle)
        self.view.act_ext_but.Bind(wx.EVT_BUTTON, self.actuator_extend)
        self.view.act_ret_but.Bind(wx.EVT_BUTTON, self.actuator_retract)
        self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub)
        self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput)

        # Button bindings (mp285 view)
        self.mp285_view.Bind(wx.EVT_CLOSE, self.evt_mp285_close)
        self.mp285_view.but_set_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_set(evt, temp))
        self.mp285_view.but_set_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_set(evt, temp))
        self.mp285_view.but_set_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_set(evt, temp))
        self.mp285_view.but_goto_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_goto(evt, temp))
        self.mp285_view.but_goto_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_goto(evt, temp))
        self.mp285_view.but_goto_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_goto(evt, temp))
        for direc in self.mp285_view.ctrl_buttons:
            for mag in self.mp285_view.ctrl_buttons[direc]:
                for ax in self.mp285_view.ctrl_buttons[direc][mag]:
                    self.mp285_view.ctrl_buttons[direc][mag][ax].Bind(wx.EVT_BUTTON, lambda evt, temp=(direc,mag,ax): self.evt_mp285_move(evt,temp))


        # Runtime
        self.update_state(self.STATE_NULL)
        self.last_cam_frame = None
        self.n_updates = 0

        # Run
        #self.view.Show()
        self.app.MainLoop()

    def update_state(self, st=None):
        if st is not None:
            self.state = st

        if self.state == self.STATE_NULL:
            self.view.prepare_button.Enable()
            self.view.prepare_button.SetLabel('Prepare Session')
            self.view.add_sub_button.Enable()
            self.view.start_button.Disable()
            self.view.cal_but.Enable()
            self.view.levu_but.Disable()
            self.view.levd_but.Disable()
            self.view.puffr_but.Disable()
            self.view.puffl_but.Disable()
            self.view.rewardr_but.Enable()
            self.view.rewardl_but.Enable()
            self.view.optoon_but.Disable()
            self.view.optooff_but.Disable()
            self.view.maniptog_but.Disable()
            self.view.pause_button.Disable()
            self.view.update_sub_choices(list_rewards())
            self.view.locklev_but.Disable()
            self.mp285_view.but_set_lick.Enable()
            self.mp285_view.but_set_home.Enable()
            self.mp285_view.but_set_stim.Enable()
        elif self.state == self.STATE_PREPARED:
            self.view.usrinput_box.SetValue('(notes)')
            self.view.prepare_button.SetLabel('Cancel Session')
            self.view.prepare_button.Enable()
            self.view.add_sub_button.Disable()
            self.view.cal_but.Disable()
            self.view.start_button.SetLabel("Run Session")
            self.view.start_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Enable()
            self.view.puffr_but.Enable()
            self.view.puffl_but.Enable()
            self.view.optoon_but.Enable()
            self.view.optooff_but.Enable()
            self.view.maniptog_but.Enable()
            self.view.levu_but.Disable()
            self.view.levd_but.Disable()
            self.view.rewardr_but.Enable()
            self.view.rewardl_but.Enable()
            self.view.pause_button.Disable()
            self.view.locklev_but.SetLabel('Lock')
            self.view.locklev_but.Enable()
            self.mp285_view.but_set_lick.Disable()
            self.mp285_view.but_set_home.Disable()
            self.mp285_view.but_set_stim.Disable()
        elif self.state == self.STATE_RUNNING:
            self.view.prepare_button.Disable()
            self.view.prepare_button.SetLabel('Prepare Session')
            self.view.add_sub_button.Disable()
            self.view.cal_but.Disable()
            self.view.start_button.Disable()
            self.view.puffr_but.Enable()
            self.view.puffl_but.Enable()
            self.view.levu_but.Enable()
            self.view.levd_but.Enable()
            self.view.rewardr_but.Enable()
            self.view.rewardl_but.Enable()
            self.view.optoon_but.Enable()
            self.view.optooff_but.Enable()
            self.view.maniptog_but.Enable()
            self.view.start_button.SetLabel('End Session')
            self.view.start_button.SetBackgroundColour((255,0,0))
            self.view.pause_button.Enable()
            self.view.locklev_but.Enable()
            self.mp285_view.but_set_lick.Disable()
            self.mp285_view.but_set_home.Disable()
            self.mp285_view.but_set_stim.Disable()
        elif self.state == self.STATE_KILLED_SESSION:
            self.view.start_button.SetLabel('Ending...')
            self.view.start_button.Disable()
            self.view.cal_but.Disable()
            self.view.puffr_but.Disable()
            self.view.puffl_but.Disable()
            self.view.levu_but.Disable()
            self.view.levd_but.Disable()
            self.view.rewardr_but.Disable()
            self.view.rewardl_but.Disable()
            self.view.optoon_but.Disable()
            self.view.optooff_but.Disable()
            self.view.maniptog_but.Disable()
            self.view.pause_button.Disable()
            self.view.locklev_but.Disable()
            self.mp285_view.but_set_lick.Disable()
            self.mp285_view.but_set_home.Disable()
            self.mp285_view.but_set_stim.Disable()
            if self.session.session_on:
                self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update_state)
            else:
                self.update_state(self.STATE_RUN_COMPLETE)
            
        elif self.state == self.STATE_RUN_COMPLETE:
            pos = get_mp285_home()
            self.mp285.goto(pos)
            self.view.SetTitle('Puffs Experiment Control')
            self.update_timer.Stop()
            self.view.start_button.SetLabel("Run Session")
            self.view.start_button.SetBackgroundColour((0,255,0))
            self.view.prepare_button.Enable()
            self.view.prepare_button.SetLabel('Prepare Session')
            self.view.add_sub_button.Enable()
            self.view.startlevel_box.SetValue('(level override)')
            self.view.cal_but.Enable()
            self.view.start_button.Disable()
            self.view.puffr_but.Disable()
            self.view.puffl_but.Disable()
            self.view.rewardr_but.Enable()
            self.view.rewardl_but.Enable()
            self.view.levu_but.Disable()
            self.view.levd_but.Disable()
            self.view.optoon_but.Disable()
            self.view.optooff_but.Disable()
            self.view.maniptog_but.Disable()
            self.view.pause_button.Disable()
            self.view.update_sub_choices(list_rewards())
            self.view.locklev_but.SetLabel('Lock')
            self.view.locklev_but.Disable()
            self.mp285_view.but_set_lick.Enable()
            self.mp285_view.but_set_home.Enable()
            self.mp285_view.but_set_stim.Enable()
            self.view.imaging_box.SetValue(False)
            self.view.manip_box.SetSelection(0)
            self.view.cond_box.SetSelection(0)
    
    def update(self):
        if (not self.session.session_on) and self.state == self.STATE_RUNNING:
            self.update_state(self.STATE_RUN_COMPLETE)
            return

        # checks
        if self.view.trial_n_widg.GetValue() == str(self.session.th.idx):
            new_trial_flag = False
        else:
            new_trial_flag = True

        # clocks
        self.view.session_runtime_widg.SetValue(pretty_time(self.session.session_runtime))
        self.view.trial_runtime_widg.SetValue(pretty_time(self.session.trial_runtime))

        # plots
        try:
            self.view.set_lick_data(self.session.ar.get_accum())
        except Queue.Empty:
            pass
        except:
            logging.error('Interface could not update lick info.')
            try:
                self.view.fig_lock.release()
            except:
                pass

        # movie 
        cam_frame = self.session.cam.get()
        self.view.set_cam(cam_frame)
        # commented out b/c causes lags
        #if self.last_cam_frame is not None and self.n_updates>60 and cam_frame is not None:
        #    cc = np.corrcoef(cam_frame, self.last_cam_frame)[0,1]
        #    if cc < 0.85:
        #        self.evt_resetcam(None)
        #self.last_cam_frame = cam_frame
        
        # trial
        if new_trial_flag:
            self.update_trial()

        # pauses
        if self.session.paused:
            self.view.pause_button.SetLabel('Unpause')
            self.view.pause_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Disable()
        elif not self.session.paused:
            self.view.pause_button.SetLabel('Pause')
            self.view.pause_button.SetBackgroundColour((0,150,150))
            if self.session.session_on and not self.session.session_kill:
                self.view.start_button.Enable()
        
        self.n_updates += 1
        self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update)

    def update_trial(self):
        try:
            if self.session.th.idx < 0:
                return
            self.view.trial_n_widg.SetValue("%s (%s)"%(str(self.session.th.idx),str(self.session.th.valid_idx)))
            self.view.set_trial_data(self.session.th, self.session)
            self.view.rewarded_widg.SetValue(str(self.session.rewards_given))
            self.view.set_bias(self.session.th.biases)
            self.view.set_manip(manip_strs[self.session.th.manip])
            if self.session.th.idx > 0:
                self.view.set_history(self.session.th)
        except:
            logging.error('Interface could not update trial info.')

    ####### EVENTS ########
    def evt_prepare(self, evt):
        if self.state == self.STATE_PREPARED:
            self.mp285.saver = None
            self.session.end()
            self.update_state(self.STATE_NULL)

        else:
            sel_sub = self.view.sub_box.GetSelection()
            sel_cond = self.view.cond_box.GetSelection()
            sel_manip = self.view.manip_box.GetSelection()
            if wx.NOT_FOUND in [sel_sub,sel_cond,sel_manip]:
                dlg = wx.MessageDialog(self.view, message='Selections not made.', caption='Preparation not performed.', style=wx.OK)
                res = dlg.ShowModal()
                dlg.Destroy()
                return

            sub_name = self.view.sub_names[sel_sub]
            cond_name = self.cond_list[sel_cond]
            manip_name = self.manip_list[sel_manip]
            if manip_name != 'none':
                logging.info('Manipulation: {}'.format(manip_name))
            imaging = self.view.imaging_box.GetValue()
            startlevel = self.view.startlevel_box.GetValue()
            if startlevel == '(level override)':
                startlevel = -1
            try:
                startlevel = int(startlevel)
            except:
                startlevel = -1
                logging.info('Start level not understood. Using default.')

            sub = Subject(sub_name)
            #self.mp285.goto(sub.get_position('stim')) # session can handle this
            ph = ParamHandler(sub, condition=conditions[cond_name], manipulation=manipulations[manip_name], imaging=imaging, start_level=startlevel, position=self.mp285.get_pos().tolist())
            self.session = Session(ph.params, mp285=self.mp285, actuator=self.actuator)
            self.session.live_figure = (self.view.fig,self.view.fig_lock)
            self.mp285.saver = self.session.saver

            # tcpip communication
            if imaging:
                si_path = config.si_data_path+r'\\{}'.format(sub_name)
                seshname = self.session.name_as_str()
                dic = dict(path=si_path, name=seshname, idx=1)
                cont = True
                while cont:
                    suc = self.tcpip.send(dic)
                    if not suc:
                        dlg = wx.MessageDialog(self.view, caption='ScanImage preparation failed.', message='Try again?', style=wx.YES_NO)
                        res = dlg.ShowModal()
                        dlg.Destroy()
                        cont = res==wx.ID_YES
                        if cont:
                            self.evt_tcpip(None)
                    else:
                        cont = False

            self.view.setup_axlick()
            self.view.SetTitle('{} - {} - {}'.format(sub_name,cond_name,manip_name))

            self.update_state(self.STATE_PREPARED)
            self.update()

    def evt_mp285(self, evt):
        self.mp285_view.Show()
        self.mp285_view.SetFocus()
        self.mp285_view.Raise()
    def evt_mp285_close(self, evt):
        evt.Veto()
        self.mp285_view.Hide()
    def evt_mp285_set(self, evt, detail):

        pos = self.mp285.get_pos()

        if detail in ['stim','lick']:
            sel_sub = self.view.sub_box.GetSelection()
            if sel_sub == wx.NOT_FOUND:
                dlg = wx.MessageDialog(self.view, message='No subject selected.', caption='Position not set.', style=wx.OK)
                res = dlg.ShowModal()
                dlg.Destroy()
                return
            
            sub_name = self.view.sub_names[sel_sub]
            sub = Subject(sub_name)
            sub.set_position(pos, kind=detail)
        elif detail == 'home':
            set_mp285_home(pos)
            
    def evt_mp285_goto(self, evt, detail):

        if detail in ['stim','lick']:
            sel_sub = self.view.sub_box.GetSelection()
            if sel_sub == wx.NOT_FOUND:
                dlg = wx.MessageDialog(self.view, message='No subject selected.', caption='Position not set.', style=wx.OK)
                res = dlg.ShowModal()
                dlg.Destroy()
                return
            
            sub_name = self.view.sub_names[sel_sub]
            sub = Subject(sub_name)
            pos = sub.get_position(kind=detail)
            self.mp285.goto(pos)
        elif detail == 'home':
            pos = get_mp285_home()
            self.mp285.goto(pos)
            
    def evt_mp285_move(self, evt, detail):
        direc,mag,ax = detail
        change = np.zeros(3)
        spot = dict(x=0,y=1,z=2)[ax]
        sign = dict(up=1,down=-1)[direc]
        change[spot] += sign*float(mag)

        curpos = self.mp285.get_pos()
        pos = curpos + change
        self.mp285.goto(pos)

    def evt_resetcam(self, evt):
        if self.state != self.STATE_RUNNING:
            return
        self.session.cam.reset_cams()
        
    def evt_resetlact(self, evt):
        logging.info('Resetting actuator...')
        self.actuator.end()
        self.actuator = LActuator(**config.actuator_params)
        
    def evt_tcpip(self, evt):
        bi = wx.BusyInfo('Connecting TCPIP; click connect on remote machine...', self.view)
        suc = self.tcpip.reconnect()
        bi.Destroy()
        if not suc:
            dlg = wx.MessageDialog(self.view, caption='TCPIP reconnection failed.', message='TCPIP not active.', style=wx.OK)
            res = dlg.ShowModal()
            dlg.Destroy()
        else:
            logging.info('TCPIP connected.')

    def evt_onoff(self, evt):
        #if self.state!=self.STATE_RUNNING and self.state!=self.STATE_PREPARED,:
        #    dlg = wx.MessageDialog(self.view, message='', caption='No session prepared.', style=wx.OK)
        #    res = dlg.ShowModal()
        #    dlg.Destroy()
        #    return
        if self.state != self.STATE_RUNNING:
            self.update_state(self.STATE_RUNNING)
            self.run_th = threading.Thread(target=self.session.run)
            self.run_th.start()
        elif self.state == self.STATE_RUNNING:
            # store log in session data
            self.mp285.saver = None
            self.session.notes['stdout'] = self.view.redir_out.text_ctrl.GetValue()
            self.session.notes['stderr'] = self.view.redir_err.text_ctrl.GetValue()
            self.session.session_kill = True
            self.update_state(self.STATE_KILLED_SESSION)

    def evt_pause(self, evt):
        if not self.session.paused:
            self.session.pause(True)
            self.view.pause_button.SetLabel('Unpause')
            self.view.pause_button.SetBackgroundColour((0,255,0))
            self.view.start_button.Disable()
        elif self.session.paused:
            self.session.pause(False)
            self.view.pause_button.SetLabel('Pause')
            self.view.pause_button.SetBackgroundColour((0,100,200))
            self.view.start_button.Enable()

    def evt_close(self, evt):
        if self.state in [self.STATE_RUNNING]:
            dlg = wx.MessageDialog(self.view, message='End session before closing interface.', caption='Session is active.', style=wx.OK)
            res = dlg.ShowModal()
            dlg.Destroy()
            evt.Veto()
        elif self.state in [self.STATE_NULL, self.STATE_RUN_COMPLETE, self.STATE_PREPARED]:
            dlg = wx.MessageDialog(self.view, message="", caption="Exit Experiment?", style=wx.OK|wx.CANCEL)
            result = dlg.ShowModal()
            dlg.Destroy()
            if result == wx.ID_OK:
                if self.state == self.STATE_PREPARED:
                    self.session.end()
                    self.update_state(self.STATE_KILLED_SESSION)
                    while self.state != self.STATE_RUN_COMPLETE:
                        pass
                if self.update_timer is not None:
                    self.update_timer.Stop()
                self.mp285.end()
                self.actuator.end()
                self.tcpip.end()
                self.mp285_view.Destroy()
                self.view.Destroy()
            else:
                evt.Veto()

    def evt_addsub(self, evt):
        dlg = wx.TextEntryDialog(self.view, message='Enter new subject name:')
        ret = dlg.ShowModal()
        if ret == wx.ID_OK:
            self.view.add_sub(dlg.GetValue().strip().lower(), rewards=list_rewards())
        else:
            pass

    def give_reward(self, evt, side):
        if self.state in [self.STATE_RUNNING,self.STATE_PREPARED]:
            self.session.spout.go(side)
        else:
            give_reward(side)
        logging.info('Manual reward given.')
    def give_puff(self, evt, side):
        self.session.stimulator.go(side)
        logging.info('Manual puff given.')
    def change_level(self, evt, inc):
        self.session.th.change_level(inc)
    def calib(self,evt):
        if self.view.cal_but.GetLabel() == 'OPEN':
            open_valves()
            self.view.cal_but.SetLabel('CLOSE')
        elif self.view.cal_but.GetLabel() == 'CLOSE':
            close_valves()
            self.view.cal_but.SetLabel('OPEN')
        
    def locklev(self, evt):
        if self.session.th.level_locked:
            self.session.th.level_locked = False
            self.view.locklev_but.SetLabel('Lock')
            logging.info('Level unlocked.')
        elif not self.session.th.level_locked:
            self.session.th.level_locked = True
            self.view.locklev_but.SetLabel('Unlock')
            logging.info('Level locked.')
    def opto_on(self, evt):
        self.session.opto.set(1)
    def opto_off(self, evt):
        self.session.opto.set(0)
    def manip_toggle(self, evt):
        if self.session.th.force_manip is None: # Disable manip
            self.session.th.force_manip = default_manipulation
            self.view.maniptog_but.SetLabel('ENABLE')
            logging.info('Manipulation disabled.')
        elif self.session.th.force_manip is not None: # Enable manip
            self.session.th.force_manip = None
            self.view.maniptog_but.SetLabel('DISABLE')
            logging.info('Manipulation enabled.')
    def actuator_extend(self, evt):
        self.actuator.extend()
    def actuator_retract(self, evt):
        self.actuator.retract()
            
    def update_usrinput(self, evt):
        self.session.notes['notes'] = self.view.usrinput_box.GetValue()
        logging.info('Metadata updated.')
	def __init__(self):
		self.view = View()
		self.db = SchoolDB()
Ejemplo n.º 32
0
 def __init__(self, display):
     View.__init__(self, display)
     self.font = ImageFont.truetype(f"./fonts/{config.FONTS[3][0]}", floor(8 * config.FONTS[3][1]))
Ejemplo n.º 33
0
class App:
    """
    Represent Category table
    """
    def __init__(self):
        self.db = DbOpenFoodFacts()
        self.view = View()

    def save_category(self):
        """
        Save a new category to OFF database.
        """
        r_cat = requests.get('https://fr.openfoodfacts.org/categories&json=1')
        data_json = r_cat.json()
        data_tags = data_json.get('tags')
        data_cat = [data.get('name') for data in data_tags]
        self.db.save_category(data_cat)

    def read(self):
        data = self.db.read_category()
        self.view.display_category(data)

    def save_product(self, categoryId, name):
        """
        Save a new product to OFF database with categoryId.
        """
        load_data = {
            'action': 'process',
            'tagtype_0': 'categories',
            'tag_contains_0': 'contains',
            'sort_by': 'unique_scans_n',
            'countries': 'France',
            'json': 1,
            'page': 1,
            'tag_0': name,
        }

        r_product = requests.get('https://fr.openfoodfacts.org/cgi/search.pl',
                                 params=load_data)
        data_json = r_product.json()
        data_tags = data_json.get('products')

        lst_product = []
        for data in data_tags[:50]:
            new_product = (
                data.get('product_name'),
                data.get('nutrition_grades'),
                data.get('ingredients_text'),
                data.get('nova_group'),
                data.get('url'),
                data.get('stores'),
            )
            lst_product.append(new_product)
            self.db.save_p(new_product)
            productId = self.db.get_product(new_product[0])
            print(productId, categoryId)
            self.db.save_product_category(categoryId, productId)

    def process(self):
        """Get CategoryId and name Product"""
        self.save_category()
        list_tuple = self.db.get_category_id_name()
        for id, name in list_tuple:
            self.save_product(id, name)

    def import_db(self):
        """import db in local by API OFF"""
        choice = int(
            input("Que souhaitez-vous faire ? \n"
                  "1 - Importer la base de donnée OFF  \n"
                  "2 - Menu Principal \n"
                  "3 - Supprimer les données \n"
                  "4 - Quitter le programme \n"
                  "Votre choix >  "))
        if choice == 1:
            self.process()
        elif choice == 2:
            pass
        elif choice == 3:
            self.db.delete_all_data_off()
            self.import_db()
        else:
            return exit()

    def scenario(self):
        value = self.view.intro()

        if value == 1:
            cat_id, cat_name = self.view.choose_category(
                self.db.get_category_id_name())
            print(cat_name)
            prod = self.view.choose_product(
                self.db.get_product_by_category(cat_id))

            if self.view.save_product(prod):
                self.db.save_product_substitut(prod[0], prod[0])
                print("Votre produit a été sauvegarder dans substitut.")

        elif value == 2:
            lst = self.db.get_substitut()
            f_lst = self.db.get_all_substitute(lst)
            self.view.substitue(f_lst)

        elif value == 3:
            lst = self.db.get_substitut()
            f_lst = self.db.get_all_substitute(lst)
            choice_product = self.view.choose_substitute(f_lst)
            self.db.delete_product_substitute(lst[choice_product][0])
            print(f"Le produit {f_lst[choice_product]} a été supprimé.")

        elif value == 4:
            return exit(0)

        else:
            self.scenario()
Ejemplo n.º 34
0
def test_render_not_found_template():
    view = View({"HTML_TEMPLATES_DIR": 'templates'})
    with pytest.raises(view.ViewError) as excinfo:
        view.render('example.html')
    excinfo.match(r'View "html" .*TemplateNotFound.*example\.html\.html')
Ejemplo n.º 35
0
 def __init__(self):
     self.db = DbOpenFoodFacts()
     self.view = View()
Ejemplo n.º 36
0
def test_render_without_context():
    view = View({"HTML_TEMPLATES_DIR": 'templates'})
    html = view.render('example')
    assert '<!DOCTYPE html>' in html
    assert '<h1>hello! </h1>' in html
    def test_get_website(self):
        website = View("sdfgsdfhsfh")
        result = website.get_website()
        self.assertFalse(result[0])

        website = View(os.environ.get("TEST_DOMAIN"))
        result = website.get_website()
        self.assertTrue(result[0])

        website_address = f"https://{os.environ.get('TEST_DOMAIN')}"
        website = View(website_address)
        result = website.get_website()
        self.assertTrue(result[0])

        website_address = f"http://{os.environ.get('TEST_DOMAIN')}"
        website = View(website_address)
        result = website.get_website()
        self.assertTrue(result[0])
class Battleship:
  def __init__(self):
    self.players = [p1, p2]
    self.ship_names = ['aircraft carrier', 'battleship','submarine','destroyer','patrol']
    self.ship_lengths = [5,4,3,3,2]
    self.play_view = View()

  def set_up(self):
    for each_player in self.players:
      for i in range(5):
        self.play_view.boardDisplay([], [],each_player.ships, [], [], [])
        x = Ship(self.ship_names[i], self.ship_lengths[i])
        print ("Place your {} (length {}).".format(x.name, x.length))
        valid_placement = 'invalid'
        while valid_placement == 'invalid':
          row = self.play_view.inputRowOrColumn('ROW', 'ship\'s starting ')
          column = self.play_view.inputRowOrColumn('COLUMN', 'ship\'s starting ')
          direction = self.play_view.inputDirection()
          placement = x.place_ship(row,column,direction, each_player.ships)
          if placement == True:
            break
        each_player.ships.append(x)
      self.play_view.boardDisplay([], [], each_player.ships, [], [], [])
      end_turn = input('Finished placing ships.\n\nENTER to clear the screen.')

  def play(self):
    while True:
      self.play_view.boardDisplay([], [], [], [], [], [])
      begin_turn = input('{}, ENTER to begin your turn.'.format(self.players[0].name))
      self.play_view.boardDisplay(self.players[0].hits, self.players[0].misses, self.players[0].ships, self.players[-1].hits, self.players[-1].misses, self.players[-1].ships)
      print(self.players[0].name)
      while True:
        row = self.play_view.inputRowOrColumn('ROW')
        column = self.play_view.inputRowOrColumn('COLUMN')
        shot = [row, column]
        if shot in self.players[0].misses or shot in self.players[0].hits:
          print('You already took this shot, jackass...')
        else:
          break
      hit_or_miss = 'miss'
      for each_ship in self.players[-1].ships:
        if shot in each_ship.location:
          hit_or_miss = 'hit'
      if hit_or_miss == 'hit':
        self.players[0].hits.append(shot)
      else:
        self.players[0].misses.append(shot)
      self.play_view.boardDisplay(self.players[0].hits, self.players[0].misses, self.players[0].ships, self.players[-1].hits, self.players[-1].misses, self.players[-1].ships)
      if len(self.players[0].hits) == 17:
        input("- - - {} WINS! - - -".format(self.players[0].name))
        break
      end_turn = input('{}, {} is a {}. \n\nENTER to clear the screen and end your turn.'.format(self.players[0].name,shot, hit_or_miss.upper()))
      next_player = self.players.pop()
      self.players.insert(0, next_player)
Ejemplo n.º 39
0
class Battleship:
    def __init__(self):
        self.players = [p1, p2]
        self.ship_names = [
            'aircraft carrier', 'battleship', 'submarine', 'destroyer',
            'patrol'
        ]
        self.ship_lengths = [5, 4, 3, 3, 2]
        self.play_view = View()

    def set_up(self):
        for each_player in self.players:
            for i in range(5):
                self.play_view.boardDisplay([], [], each_player.ships, [], [],
                                            [])
                x = Ship(self.ship_names[i], self.ship_lengths[i])
                print("Place your {} (length {}).".format(x.name, x.length))
                valid_placement = 'invalid'
                while valid_placement == 'invalid':
                    row = self.play_view.inputRowOrColumn(
                        'ROW', 'ship\'s starting ')
                    column = self.play_view.inputRowOrColumn(
                        'COLUMN', 'ship\'s starting ')
                    direction = self.play_view.inputDirection()
                    placement = x.place_ship(row, column, direction,
                                             each_player.ships)
                    if placement == True:
                        break
                each_player.ships.append(x)
            self.play_view.boardDisplay([], [], each_player.ships, [], [], [])
            end_turn = input(
                'Finished placing ships.\n\nENTER to clear the screen.')

    def play(self):
        while True:
            self.play_view.boardDisplay([], [], [], [], [], [])
            begin_turn = input('{}, ENTER to begin your turn.'.format(
                self.players[0].name))
            self.play_view.boardDisplay(self.players[0].hits,
                                        self.players[0].misses,
                                        self.players[0].ships,
                                        self.players[-1].hits,
                                        self.players[-1].misses,
                                        self.players[-1].ships)
            print(self.players[0].name)
            while True:
                row = self.play_view.inputRowOrColumn('ROW')
                column = self.play_view.inputRowOrColumn('COLUMN')
                shot = [row, column]
                if shot in self.players[0].misses or shot in self.players[
                        0].hits:
                    print('You already took this shot, jackass...')
                else:
                    break
            hit_or_miss = 'miss'
            for each_ship in self.players[-1].ships:
                if shot in each_ship.location:
                    hit_or_miss = 'hit'
            if hit_or_miss == 'hit':
                self.players[0].hits.append(shot)
            else:
                self.players[0].misses.append(shot)
            self.play_view.boardDisplay(self.players[0].hits,
                                        self.players[0].misses,
                                        self.players[0].ships,
                                        self.players[-1].hits,
                                        self.players[-1].misses,
                                        self.players[-1].ships)
            if len(self.players[0].hits) == 17:
                input("- - - {} WINS! - - -".format(self.players[0].name))
                break
            end_turn = input(
                '{}, {} is a {}. \n\nENTER to clear the screen and end your turn.'
                .format(self.players[0].name, shot, hit_or_miss.upper()))
            next_player = self.players.pop()
            self.players.insert(0, next_player)
Ejemplo n.º 40
0
	def __init__(self):
		self.view = View()
		self.TodoDB = TodoDB()
Ejemplo n.º 41
0
class Controller:

    REFRESH_INTERVAL = 100 #ms
    NEW,EXISTS = 0,1

    def __init__(self, data_dir=r'D:\\deverett', wf_calib_path=r'C:\\WF\\calibration.npz'):
        # Make app
        self.app = wx.App(False) 

        self.view = View(None)

        self.view.Bind(wx.EVT_CLOSE, self.evt_close)
        
        # Button bindings
        self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub)
        self.view.but_load.Bind(wx.EVT_BUTTON, self.evt_load)
        self.view.but_reg.Bind(wx.EVT_BUTTON, self.evt_reg)
        self.view.but_freg.Bind(wx.EVT_BUTTON, self.evt_freg)
        self.view.but_save.Bind(wx.EVT_BUTTON, self.evt_save)
        
        # load initial info
        self.data_dir = data_dir
        subs = os.listdir(self.data_dir)
        self.view.add_sub(subs)
        try:
            with np.load(wf_calib_path) as cf:
                self.ppm_y = cf['pix_per_micron_y']
                self.ppm_x = cf['pix_per_micron_x']
        except FileNotFoundError:
            raise Exception('Calibration file not found. Please calibrate before registering.')
        
        # runtime
        self.cam = Camera()
        self.mp285 = MP285()
        self.current_sub = None
        self.register_mode = None
        self.result = None
        self.update()

        # Run
        self.app.MainLoop()
    
    def evt_close(self, evt):
        self.update_timer.Stop()
        self.cam.end()
        self.mp285.end()
        cv2.destroyAllWindows()
        pl.close('all')
        self.view.Destroy()
    def update(self):
        self.imshow('Live Camera',self.cam.get())
        self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update)
    def get_paths(self, sub):
        if not os.path.exists(os.path.join(self.data_dir, self.current_sub)):
            os.mkdir(os.path.join(self.data_dir, self.current_sub))
        subdir = os.path.join(self.data_dir, self.current_sub)
        fov_files = [re.match('fov_(\d*)_.*.npy',f) for f in os.listdir(subdir)]
        date = time.strftime('%Y%m%d')
        if not any(fov_files):
            idx = -1
            cpath = None
        else:
            idx = max([int(i.groups()[0]) for i in fov_files])
            cpath = os.path.join(self.data_dir,self.current_sub,'fov_{:03d}_{}.npy'.format(idx, date))
        npath = os.path.join(self.data_dir,self.current_sub,'fov_{:03d}_{}.npy'.format(idx+1, date))
        return cpath,npath
    def evt_load(self, evt):
        sub = self.view.sub_box.GetSelection()
        if sub == wx.NOT_FOUND:
            return
        self.current_sub = self.view.sub_names[sub]
        self.current_path,self.next_path = self.get_paths(self.current_sub)
        if self.current_path:
            self.register_mode = self.EXISTS
            self.template = np.load(self.current_path)
        elif not self.current_path:
            self.register_mode = self.NEW
            self.template = np.zeros(self.cam.frame_shape)
        self.imshow('Existing Template: {}'.format(self.current_sub),self.template)
        self.result = None
    def evt_reg(self, evt):
        if self.register_mode is None:
            return
        if self.register_mode == self.NEW:
            before_reg = self.cam.get(n=5)
            result = self.cam.get(n=5)
            score = 1.0
        elif self.register_mode == self.EXISTS:
            before_reg = self.cam.get(n=5)
            self.update_timer.Stop()
            reg,score = register_imgs(self.template, self.cam)
            apply_registration(reg, self.mp285, np.array([self.ppm_x,self.ppm_y]))
            result = self.cam.get(n=5)
            self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update)
        pl.subplot(2,2,1)
        self.plshow('Loaded Template: {}'.format(self.current_sub), self.template)
        pl.subplot(2,2,2)
        self.plshow('Original FOV today: {}'.format(self.current_sub), before_reg)
        pl.subplot(2,2,3)
        self.plshow('Adjusted FOV (and new template): {}'.format(self.current_sub), result)
        pl.subplot(2,2,4)
        diff = np.abs(result-self.template)
        diff = diff.astype(float)
        self.plshow('Difference b/t old and new fov\nScore: {:0.3f}'.format(score), diff)
        self.register_mode = None
        self.result = result
        dlg = wx.MessageDialog(self.view, 'Remember to save.', 'Registered.', wx.OK)
        _ = dlg.ShowModal()
        dlg.Destroy()
    def evt_save(self, evt):
        if self.result is None:
            return
        np.save(self.next_path, self.result)
    def evt_freg(self, evt):
        if self.register_mode is None:
            return
        if self.register_mode == self.NEW:
            before_reg = self.cam.get(n=5)
            result = self.cam.get(n=5)
            score = 1.0
        elif self.register_mode == self.EXISTS:
            before_reg = self.cam.get(n=5)
            self.update_timer.Stop()
            # note no registration process occurs here; this is forced registration
            result = self.cam.get(n=5)
            self.update_timer = wx.CallLater(self.REFRESH_INTERVAL, self.update)
        pl.subplot(2,2,1)
        self.plshow('Loaded Template: {}'.format(self.current_sub), self.template)
        pl.subplot(2,2,2)
        self.plshow('Original FOV today: {}'.format(self.current_sub), before_reg)
        pl.subplot(2,2,3)
        self.plshow('Adjusted FOV (and new template): {}'.format(self.current_sub), result)
        pl.subplot(2,2,4)
        diff = np.abs(result-self.template)
        diff = diff.astype(float)
        self.plshow('Difference b/t old and new fov', diff)
        self.register_mode = None
        self.result = result

    def evt_addsub(self, evt):
        dlg = wx.TextEntryDialog(self.view, message='Enter new subject name:')
        ret = dlg.ShowModal()
        if ret == wx.ID_OK:
            self.view.add_sub(dlg.GetValue().strip().lower())
        else:
            pass
            
    def imshow(self, win, im):
        im = cv2.resize(im, tuple(np.array(im.shape[::-1])/3))
        cv2.imshow(win, im)
    def plshow(self, txt, im):
        pl.imshow(im, cmap='gray')
        pl.axis('off')
        pl.title(txt)
Ejemplo n.º 42
0
 def __init__(self, display):
     View.__init__(self, display)
Ejemplo n.º 43
0
 def get_profile(user_id: str):
     try:
         user = User.objects.get({'_id': fields.ObjectId(user_id)})
         return View.get_response(user)
     except errors.DoesNotExist:
         return None
Ejemplo n.º 44
0
 def __init__(self, display):
     View.__init__(self, display)
     self._set_clock_font()
Ejemplo n.º 45
0
    def __init__(self):
        # Make app
        self.app = wx.App(False) 
        
        self.update_timer = None

        # Generate view    
        subs_list = list_subjects()
        self.cond_list = sorted(conditions.keys())
        self.manip_list = sorted(manipulations.keys())
        self.view = View(None, subs=subs_list, conditions=self.cond_list, manipulations=self.manip_list)
        self.mp285_view = MP285View(None)
        if False:#not config.TESTING_MODE:
            sys.stdout=self.view.redir_out
            sys.stderr=self.view.redir_err
        setup_logging(outwin=self.view.redir_out,errwin=self.view.redir_err)

        self.tcpip = TCPIP(config.scanimage_tcpip_address)
        self.mp285 = MP285(**config.mp285_params)
        self.actuator = LActuator(**config.actuator_params)

        # Button bindings
        self.view.start_button.Bind(wx.EVT_BUTTON, self.evt_onoff)
        self.view.prepare_button.Bind(wx.EVT_BUTTON, self.evt_prepare)
        self.view.pause_button.Bind(wx.EVT_BUTTON, self.evt_pause)
        self.view.tcpip_button.Bind(wx.EVT_BUTTON, self.evt_tcpip)
        self.view.mp285_button.Bind(wx.EVT_BUTTON, self.evt_mp285)
        self.view.resetcam_button.Bind(wx.EVT_BUTTON, self.evt_resetcam)
        self.view.resetlact_button.Bind(wx.EVT_BUTTON, self.evt_resetlact)
        self.view.Bind(wx.EVT_CLOSE, self.evt_close)
        self.view.cal_but.Bind(wx.EVT_BUTTON, self.calib)
        self.view.puffc_but.Bind(wx.EVT_BUTTON, lambda evt: puff_check())
        self.view.locklev_but.Bind(wx.EVT_BUTTON, self.locklev)
        self.view.levu_but.Bind(wx.EVT_BUTTON, lambda evt, temp=1: self.change_level(evt,temp))
        self.view.levd_but.Bind(wx.EVT_BUTTON, lambda evt, temp=-1: self.change_level(evt,temp))
        self.view.rewardl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_reward(evt, temp))
        self.view.rewardr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_reward(evt, temp))
        self.view.puffl_but.Bind(wx.EVT_BUTTON, lambda evt, temp=L: self.give_puff(evt, temp))
        self.view.puffr_but.Bind(wx.EVT_BUTTON, lambda evt, temp=R: self.give_puff(evt, temp))
        self.view.optoon_but.Bind(wx.EVT_BUTTON, self.opto_on)
        self.view.optooff_but.Bind(wx.EVT_BUTTON, self.opto_off)
        self.view.maniptog_but.Bind(wx.EVT_BUTTON, self.manip_toggle)
        self.view.act_ext_but.Bind(wx.EVT_BUTTON, self.actuator_extend)
        self.view.act_ret_but.Bind(wx.EVT_BUTTON, self.actuator_retract)
        self.view.add_sub_button.Bind(wx.EVT_BUTTON, self.evt_addsub)
        self.view.usrinput_box.Bind(wx.EVT_TEXT_ENTER, self.update_usrinput)

        # Button bindings (mp285 view)
        self.mp285_view.Bind(wx.EVT_CLOSE, self.evt_mp285_close)
        self.mp285_view.but_set_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_set(evt, temp))
        self.mp285_view.but_set_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_set(evt, temp))
        self.mp285_view.but_set_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_set(evt, temp))
        self.mp285_view.but_goto_home.Bind(wx.EVT_BUTTON, lambda evt, temp='home': self.evt_mp285_goto(evt, temp))
        self.mp285_view.but_goto_stim.Bind(wx.EVT_BUTTON, lambda evt, temp='stim': self.evt_mp285_goto(evt, temp))
        self.mp285_view.but_goto_lick.Bind(wx.EVT_BUTTON, lambda evt, temp='lick': self.evt_mp285_goto(evt, temp))
        for direc in self.mp285_view.ctrl_buttons:
            for mag in self.mp285_view.ctrl_buttons[direc]:
                for ax in self.mp285_view.ctrl_buttons[direc][mag]:
                    self.mp285_view.ctrl_buttons[direc][mag][ax].Bind(wx.EVT_BUTTON, lambda evt, temp=(direc,mag,ax): self.evt_mp285_move(evt,temp))


        # Runtime
        self.update_state(self.STATE_NULL)
        self.last_cam_frame = None
        self.n_updates = 0

        # Run
        #self.view.Show()
        self.app.MainLoop()
Ejemplo n.º 46
0
from django.conf.urls.defaults import patterns, url
from django.views.generic.simple import redirect_to

from views import Inbox, View, Delete, Compose, Undelete, Unread, Read


urlpatterns = patterns('',
    url(r'^$', redirect_to, {'url': 'inbox/'}),
    url(r'^inbox/$', Inbox.as_view(), name='messages_inbox'),
    url(r'^view/(?P<pk>[\d]+)/$', View.as_view(), name='messages_view'),
    url(r'^delete_list/$', Delete.as_view(), name='messages_delete_list'),
    url(r'^delete/(?P<pk>[\d]+)/$', Delete.as_view(), name='messages_delete'),
    url(r'^compose/$', Compose.as_view(), name='messages_compose'),
    url(r'^compose/(?P<to>[\d]+)/$', Compose.as_view(), name='messages_compose_to'),
    url(r'^undelete/$', Undelete.as_view(), name='messages_undelete'),
    url(r'^mark_as_unread/$', Unread.as_view(), name='messages_unread'),
    url(r'^mark_as_read/$', Read.as_view(), name='messages_read'),
)