예제 #1
0
    def __init__(self):
        gtk.gdk.threads_init()
        mainWindow = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
        mainWindow.resize(640,480)
        mainWindow.show()
        hbox = gtk.HBox(False, 0)
        mainWindow.add(hbox)
        hbox.show()
        print 'Pullin in Canvas \n '
	self.abiword_canvas = Canvas()
        print 'Canvas obtained \n'
	toolbar = Toolbar(self.abiword_canvas)
	hbox.pack_start(toolbar, False)
	toolbar.show()

	hbox.add(self.abiword_canvas)
	self.abiword_canvas.show()
        mainWindow.connect("delete_event",self._delete_cb)
#
# test out signals
#
        self.styleName_id = self.abiword_canvas.connect("style-name",self.styleName_cb)
        self.fontFamily_id = self.abiword_canvas.connect("font-family",self.fontFamily_cb)
        self.fontSize_id = self.abiword_canvas.connect("font-size",self.fontSize_cb)
        self.textSelected_id = self.abiword_canvas.connect("text-selected",self.textSelected_cb)
        self.imageSelected_id = self.abiword_canvas.connect("image-selected",self.imageSelected_cb)
        self.selectionCleared_id = self.abiword_canvas.connect("selection-cleared",self.selectionCleared_cb)
        self.enterSelection_id = self.abiword_canvas.connect("enter-selection",self.enterSelection_cb)
        self.leaveSelection_id = self.abiword_canvas.connect("leave-selection",self.leaveSelection_cb)
예제 #2
0
    def __init__(self, capacity: int, def_pos: tuple, def_cells_per_row: int,
                 color: pygame.Color, cell_color: pygame.Color):
        # The inventory's contents (a list of items)
        self.contents = [None] * capacity
        # Maximum number of items the inventory can hold
        self.capacity = capacity

        # Default position of the UI in pixels
        self.def_pos = def_pos
        # Default width of the inventory in item cells
        self.def_cells_per_row = def_cells_per_row

        # Colours of inventory rect and small grid rects respectively
        self.color = color
        self.cell_color = cell_color

        # Apply defaults (defaults are used if these params are not specified by in the open() function
        self.pos = def_pos
        self.cells_per_row = def_cells_per_row
        self.rect = pygame.Rect(self.pos, self.get_size())

        #self.search_bar = SearchBar(new_bar_pos = (def_pos[0], def_pos[1]-30))
        self.tool_bar = Toolbar(self.rect.width, self.rect.topleft,
                                pygame.Color(100, 100, 100), color)
        # Inventory menu is initialized to a "closed" state
        self.is_open = False
예제 #3
0
    def test_next_image(self):
        tool = AnnotationTool()
        tool.load_app(True) 

        # Annotation added
        tool.annotations = []
        tool.file_list = []
        tool.class_list = ['winston', 'prince', 'duckie']
        tool.colorspace = ['#0000FF', '#FF0000', '#00FF00']
        tool.current_file = 0        
        tool.num_pages = 1
        
        for i in range(5):
            a = Annotation()
            a.rotation = 3
            tool.file_list.append('file%d.jpg' % i)
            for p in range(3):
                roi = ROI()
                roi.push(0,0)
                roi.push(100.0,100.0)
                a.push(roi, i%len(tool.class_list))
            tool.annotations.append(a) 
            
        toolbar = Toolbar(tool)
        self.assertEqual(tool.current_file, 0)
        
        truth = [1, 2, 3, 4, 4]
        for i in range(5):
            toolbar._next_image()
            self.assertEqual(tool.current_file, truth[i])
예제 #4
0
    def test_delete_from_project(self):

        tool = AnnotationTool()
        tool.load_app(True) 

        # Annotation added
        tool.annotations = []
        tool.file_list = []
        tool.class_list = ['winston', 'prince', 'duckie']
        tool.colorspace = ['#0000FF', '#FF0000', '#00FF00']
        tool.current_file = 0
        tool.num_pages = 1
        tool.class_count = [5, 5, 5]        
       
        for i in range(5):
            a = Annotation()
            a.rotation = 3
            tool.file_list.append('file%d.jpg' % i)
            for p in range(3):
                roi = ROI()
                roi.push(0,0)
                roi.push(100.0,100.0)
                a.push(roi, p%len(tool.class_list))
            tool.annotations.append(a) 
            
        toolbar = Toolbar(tool)
        
        self.assertEqual(len(tool.annotations) , 5)
        self.assertEqual(len(tool.file_list) , 5)
        self.assertListEqual(tool.class_count, [5,5,5])
        toolbar._delete_from_project()
        self.assertEqual(len(tool.annotations) , 4)
        self.assertEqual(len(tool.file_list) , 4)
        self.assertListEqual(tool.class_count, [4,4,4])
예제 #5
0
    def __init__(self, arg):
        # setting
        self.name_map = arg.name_map
        self.opt = Setting()

        # pygame
        pygame.init()
        self.screen = pygame.display.set_mode(self.opt.WINDOW_SIZE)
        pygame.display.set_caption(self.opt.TITLE % self.name_map)
        self.clock = pygame.time.Clock()
        self.set_grill_surface()

        # data
        self.path = os.path.dirname(__file__)
        self.path_img = os.path.join(self.path, "..", "src", "img")
        file = self.name_map + self.opt.LUA_FORMAT
        self.path_maps = os.path.join(self.path, "..", "src", "maps", file)
        self.create = not os.path.exists(self.path_maps)

        # objects
        self.builder = Builder(self)
        self.converter = Converter(self)
        self.images = Images(self)
        self.map = Map(self)
        self.selector = Selector(self)
        self.toolbar = Toolbar(self)

        # loop
        self.saved = True
        self.loop()
        pygame.quit()
예제 #6
0
파일: main.py 프로젝트: xdaku/TileGame-Lua
class Program:
    def __init__(self, arg):
        pygame.init()
        self.opt = Setting()
        self.name_map = arg.name_map
        self.screen = pygame.display.set_mode((self.opt.WIDTH + self.opt.TILE_SIZE*15,self.opt.HEIGHT + self.opt.TILE_SIZE*3))
        self.set_grill_surface()
        pygame.display.set_caption(self.opt.TITLE)
        self.path = os.path.dirname(__file__)
        self.path_img = os.path.join(self.path, ".." , "src", "img")
        self.images = Spritesheet(self)
        self.path_maps = os.path.join(self.path, ".." , "src", "maps", self.name_map + self.opt.LUA_FORMAT)
        self.create = not os.path.exists(self.path_maps)
        self.builder = Builder(self)
        self.clock = pygame.time.Clock()
        self.converter = Converter(self)
        self.map = Map(self)
        self.selector = Selector(self)
        self.toolbar = Toolbar(self)
        self.loop()
        pygame.quit()

    def set_grill_surface(self):
        self.grill = self.screen.copy()
        for y in range(0, self.opt.HEIGHT+1, self.opt.TILE_SIZE): pygame.draw.line(self.grill, (255,255,255), (0, y), (self.opt.WIDTH, y))
        for x in range(0, self.opt.WIDTH+1, self.opt.TILE_SIZE): pygame.draw.line(self.grill, (255,255,255), (x, 0), (x, self.opt.HEIGHT))
        self.grill.set_colorkey((0,0,0))

    def draw(self):
        self.screen.fill((0,0,0))
        self.screen.blit(self.map.screen,(0,0))
        self.screen.blit(self.grill,(0,0))
        self.toolbar.draw(self.screen)
        self.selector.draw(self.screen)
        pygame.display.flip()

    def event(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT: self.running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE: self.pause = not self.pause
                elif event.key == pygame.K_s: self.builder.save()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1: self.selector.click()
                if event.button == 3: self.selector.remove()
            elif event.type == pygame.MOUSEMOTION:
                if event.buttons[0] == 1: self.selector.click()
                if event.buttons[2] == 1: self.selector.remove()

    def loop(self):
        self.running = True
        self.pause = False
        while self.running:
            self.clock.tick(50)
            self.converter.update()
            self.selector.update()
            self.event()
            self.draw()
예제 #7
0
    def __init__(self):
        self._running = True
        self._display_surf = None
        self._image_surf = None
        self._apple_surf = None

        self.game = Game()
        self.player = Player(3, self.windowDimX, self.windowDimY)
        self.windowWidth = self.windowDimX * self.player.step
        self.windowHeight = self.windowDimY * self.player.step
        self.toolbar = Toolbar(self.toolbarWidth, self.windowWidth,
                               self.windowHeight)
        self.apple = Apple(randint(0, self.windowDimX - 1),
                           randint(0, self.windowDimY - 1))
예제 #8
0
 def __init__(self, options):
     self.options = options
     self.main_window = MainWindow(self)
     self.session_manager = debugsession.SessionManager(self)
     self.console = Console(self)
     self.main_window.console = self.console
     self.stack = StackViewer(self)
     self.namespace = AllNamespaceViewer(self)
     self.threads = ThreadsViewer(self)
     self.source = SourceViewer(self)
     self.status = StatusBar(self)
     self.breaks = BreakpointViewer(self)
     self.toolbar = Toolbar(self)
     debugsession.connect_events(self)
예제 #9
0
    def test_delete_from_project_button(self):
        tool = AnnotationTool()
        tool.load_app(True) 

        # Annotation added
        tool.annotations = []
        tool.file_list = []
        tool.class_list = ['winston', 'prince', 'duckie']
        tool.colorspace = ['#0000FF', '#FF0000', '#00FF00']
        tool.current_file = 0        
        tool.num_pages = 1
        
        for i in range(5):
            a = Annotation()
            a.rotation = 3
            tool.file_list.append('file%d.jpg' % i)
            for p in range(3):
                roi = ROI()
                roi.push(0,0)
                roi.push(100.0,100.0)
                a.push(roi, i%len(tool.class_list))
            tool.annotations.append(a) 
            
        toolbar = Toolbar(tool)
        button = toolbar.toolbar_frame.winfo_children()[1]
        
        self.assertEqual(button.cget('text'), '')        
        self.assertEqual(button.cget('width'), 40)        
        self.assertEqual(button.cget('height'), 40)        
예제 #10
0
파일: main.py 프로젝트: gofrankhan/Python
    def paned_window(self):
        self.panedwindow = ttk.Panedwindow(self.parent, orient = tk.HORIZONTAL)
        self.panedwindow.pack(expand = True, fill = tk.BOTH)

        self.left_pane = ttk.Frame(self.panedwindow, height = root.winfo_screenheight() - 140, relief = tk.SUNKEN)
        self.middle_pane = ttk.Frame(self.panedwindow, height = (root.winfo_screenheight() - 140), relief = tk.SUNKEN)
        self.right_pane = ttk.Frame(self.panedwindow, height = (root.winfo_screenheight() - 140), relief = tk.SUNKEN)
        self.panedwindow.add(self.left_pane, weight = 1)
        self.panedwindow.add(self.middle_pane, weight = 1) 
        self.panedwindow.add(self.right_pane, weight = 10)

        self.panedwindow_left = ttk.Panedwindow(self.left_pane, orient = tk.VERTICAL)
        self.panedwindow_left.pack(expand = True, fill = tk.BOTH)
        self.pane_projects = ttk.Frame(self.panedwindow_left, height = (root.winfo_screenheight() - 140) / 2, relief = tk.SUNKEN)
        self.pane_actions = ttk.Frame(self.panedwindow_left, height = (root.winfo_screenheight() - 140) / 2, relief = tk.SUNKEN)
        self.panedwindow_left.add(self.pane_projects, weight = 1)
        self.panedwindow_left.add(self.pane_actions, weight = 1)

        self.panewindow_middle = ttk.PanedWindow(self.middle_pane, orient = tk.VERTICAL)
        self.panewindow_middle.pack(expand = True, fill = tk.BOTH)
        self.pane_canvas = ttk.Frame(self.panewindow_middle, relief = tk.SUNKEN)
        self.pane_resources = ttk.Frame(self.panewindow_middle, width = 100, relief = tk.SUNKEN)
        self.panewindow_middle.add(self.pane_canvas, weight = 5)
        self.panewindow_middle.add(self.pane_resources, weight = 1)

        self.menubar = Menubar(self.parent)
        self.properties = Properties(self.right_pane)
        self.canvas = Canvas(self.properties)
        self.toolbar = Toolbar(self.pane_canvas, self.canvas)
        self.project_explorer = ProjectExplorer(self.pane_projects)
        self.canvas.create_Ui(self.pane_canvas)
        self.actions = Actions(self.pane_actions, self.canvas, self.properties)
        self.resources = Resources(self.pane_resources)
예제 #11
0
    def __init__(self,dq,state,freq):
        self._running = True
        self._display_surf = None
        self._image_surf = None
        self._apple_surf = None

        self.game = Game()
        self.player = Player(3,self.windowDimX, self.windowDimY)
        self.windowWidth = self.windowDimX*self.player.step
        self.windowHeight = self.windowDimY*self.player.step 
        self.toolbar = Toolbar(self.toolbarWidth, self.windowWidth, self.windowHeight)
        self.apple = Apple(randint(0,self.windowDimX-1), randint(0,self.windowDimY-1))
        self.dataCollect = DataCollector()
        self.displayq=dq
        self.state_size = state
        self.frequency = freq
예제 #12
0
    def __init__(self):
        self.root = self._create_root_app()
        self.curdir = os.getcwd()
        self.curfile = f'{os.path.dirname(self.curdir)}\\images\\asciify.jpg'
        self.curimg = None
        self.ascii_image = ""
        self.gradientEntry = tk.StringVar()
        self.use_custom_gradient = tk.BooleanVar(value=False)
        self.gradientStep = tk.StringVar(value=str(settings.gradient["step"]))
        self.fontsize = tk.StringVar(value=str(settings.font["size"]))
        self.curfont = tk.StringVar(value=settings.font["family"])
        self.percent = tk.StringVar(value=float(settings.output["percent"]))
        self.outputSize = tk.StringVar(value="0x0")
        self.targetWidth = tk.IntVar(value=int(settings.output["width"]))
        self.targetHeight = tk.IntVar(value=int(settings.output["height"]))
        self.curoutputoption = tk.StringVar(value=settings.output["type"])
        self.contrast = tk.StringVar(value=settings.adjustments["contrast"])
        self.brightness = tk.StringVar(
            value=settings.adjustments["brightness"])
        self.aspectRatioFit = (16, 9)

        # application elements
        self.menubar = MenuBar(self)
        self.toolbar_widget = Toolbar(self)
        self.ascii_wdiget = self.create_ascii_zone()

        self.update_current_working_img()
        self.update_ascii()
예제 #13
0
 def parse(self, model, root_node, fields):
     attrs = common.node_attributes(root_node)
     self.title = attrs.get('string', 'Unknown')
     vbox = gtk.VBox()
     if not Calendar_:
         return vbox, {}, [], '', [], None
     goocalendar = Calendar_(attrs=attrs,
                             model=model,
                             root_node=root_node,
                             fields=fields,
                             screen=self.screen)
     toolbar = Toolbar(goocalendar)
     goocalendar.connect('view-changed', self.on_view_changed, toolbar)
     goocalendar.connect('page-changed', self.on_page_changed, toolbar)
     goocalendar.connect('event-pressed', self.on_event_pressed)
     goocalendar.connect('event-activated', self.on_event_activated)
     goocalendar.connect('event-released', self.on_event_released, attrs)
     goocalendar.connect('day-pressed', self.on_day_pressed)
     goocalendar.connect('day-activated', self.on_day_activated)
     scrolledWindow = gtk.ScrolledWindow()
     scrolledWindow.add_with_viewport(goocalendar)
     vbox.pack_start(toolbar, False, False)
     vbox.pack_start(scrolledWindow, True, True)
     return vbox, {
         'root': scrolledWindow,
         'toolbar': toolbar,
         'goocalendar': goocalendar
     }, [], '', [], None
예제 #14
0
    def test_draw_class_selection_menu(self):
        
        tool = AnnotationTool()
        tool.load_app(True) 

        # Annotation added
        tool.annotations = []
        tool.file_list = []
        tool.class_list = ['winston', 'prince', 'duckie']
        tool.colorspace = ['#0000FF', '#FF0000', '#00FF00']
        tool.current_file = 0
        tool.num_pages = 1
        tool.class_count = [5, 5, 5]        
       
        for i in range(5):
            a = Annotation()
            a.rotation = 3
            tool.file_list.append('file%d.jpg' % i)
            for p in range(3):
                roi = ROI()
                roi.push(0,0)
                roi.push(100.0,100.0)
                a.push(roi, p%len(tool.class_list))
            tool.annotations.append(a) 
            
        toolbar = Toolbar(tool)        
        option_menu = toolbar.toolbar_frame.winfo_children()[2]
        self.assertEqual(option_menu.winfo_name(), '!optionmenu')
예제 #15
0
    def test_draw_image_navigator(self):
        tool = AnnotationTool()
        tool.load_app(True) 

        # Annotation added
        tool.annotations = []
        tool.file_list = []
        tool.class_list = ['winston', 'prince', 'duckie']
        tool.colorspace = ['#0000FF', '#FF0000', '#00FF00']
        tool.current_file = 0        
        tool.num_pages = 1
        
        for i in range(5):
            a = Annotation()
            a.rotation = 3
            tool.file_list.append('file%d.jpg' % i)
            for p in range(3):
                roi = ROI()
                roi.push(0,0)
                roi.push(100.0,100.0)
                a.push(roi, i%len(tool.class_list))
            tool.annotations.append(a) 
            
        toolbar = Toolbar(tool)
        nav_frame = toolbar.toolbar_frame.winfo_children()[0]
        nav_frame_children = nav_frame.winfo_children()
        
        self.assertEqual(len(nav_frame_children), 3)
        self.assertEqual(nav_frame_children[0].cget('text'), "Page 1/2")
예제 #16
0
    def __init__(self, config=default):
        """Create an instance of a PyRysunek application.

        Optional arguments:
        config -- dictionary containing configuration values (see `config.default`)
        """
        self.config = config
        self.width, self.height = self.config.window_size

        self.toolbar = Toolbar(self.config.toolbar)
        self.context = Context(
            objects=ObjectList(),
            color_picker=self.toolbar.color_picker,
        )

        self._init_opengl()

        if config.auto_load_on_start:
            self.load()
예제 #17
0
    def __init__(self):
        gtk.gdk.threads_init()
        mainWindow = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
        mainWindow.resize(640,480)
        mainWindow.show()
        hbox = gtk.HBox(False, 0)
        mainWindow.add(hbox)
        hbox.show()
        print 'Pullin in Canvas \n '
	self.abiword_canvas = Canvas()
        print 'Canvas obtained \n'
	toolbar = Toolbar(self.abiword_canvas)
	hbox.pack_start(toolbar, False)
	toolbar.show()

	hbox.add(self.abiword_canvas)
	self.abiword_canvas.load_file("", "")
	#self.abiword_canvas.set_property("shadow-type", gtk.SHADOW_ETCHED_OUT)
	self.abiword_canvas.show()
        mainWindow.connect("delete_event",self._delete_cb)
예제 #18
0
파일: main.py 프로젝트: xdaku/TileGame-Lua
 def __init__(self, arg):
     pygame.init()
     self.opt = Setting()
     self.name_map = arg.name_map
     self.screen = pygame.display.set_mode((self.opt.WIDTH + self.opt.TILE_SIZE*15,self.opt.HEIGHT + self.opt.TILE_SIZE*3))
     self.set_grill_surface()
     pygame.display.set_caption(self.opt.TITLE)
     self.path = os.path.dirname(__file__)
     self.path_img = os.path.join(self.path, ".." , "src", "img")
     self.images = Spritesheet(self)
     self.path_maps = os.path.join(self.path, ".." , "src", "maps", self.name_map + self.opt.LUA_FORMAT)
     self.create = not os.path.exists(self.path_maps)
     self.builder = Builder(self)
     self.clock = pygame.time.Clock()
     self.converter = Converter(self)
     self.map = Map(self)
     self.selector = Selector(self)
     self.toolbar = Toolbar(self)
     self.loop()
     pygame.quit()
예제 #19
0
파일: sheet.py 프로젝트: cyberixae/kunquat
    def __init__(self):
        QWidget.__init__(self)
        self._ui_model = None
        self._toolbar = Toolbar()
        self._sheet_area = SheetArea()

        v = QVBoxLayout()
        v.setMargin(0)
        v.addWidget(self._toolbar)
        v.addWidget(self._sheet_area)
        self.setLayout(v)
예제 #20
0
파일: sheet.py 프로젝트: cyberixae/kunquat
class Sheet(QWidget):

    def __init__(self):
        QWidget.__init__(self)
        self._ui_model = None
        self._toolbar = Toolbar()
        self._sheet_area = SheetArea()

        v = QVBoxLayout()
        v.setMargin(0)
        v.addWidget(self._toolbar)
        v.addWidget(self._sheet_area)
        self.setLayout(v)

    def set_ui_model(self, ui_model):
        self._ui_model = ui_model
        self._toolbar.set_ui_model(ui_model)
        self._sheet_area.set_ui_model(ui_model)

    def unregister_updaters(self):
        self._sheet_area.unregister_updaters()
        self._toolbar.unregister_updaters()
예제 #21
0
    def _draw_workspace(self):
        '''
        This draws the main project in the background frame
        
        Parameters
        ----------
        None
    
        Attributes
        ----------
        background : tkinter Frame object
            This is the frame that covers the entire window object
            
        Raises
        ------
        None
    
        Returns
        -------
        complete : bool
            Returns True for unittesting
    
        '''         
        self.app_menu._draw_menu()
        
        self.background.destroy()
        
        # Build Background Frame                       
        self.background = Frame(self.window,
                                bg="gray",
                                width=self.window_width,
                                height=self.window_height)
        self.background.place(x=0, 
                              y=0,
                              width = self.window_width,
                              height = self.window_height)

        if self.annotations:
            self.num_pages = int(len(self.annotations)/self.img_per_page)

        # Draw Toolbar on Left
        toolbar = Toolbar(self)
           
        # Draw Canvas on Right
        self.draw_canvas()
                        
        if len(self.annotations):
            self.navigator = Navigator(self)

        return True
예제 #22
0
 def __init__(self, options):
     self.options = options
     self.main_window = MainWindow(self)
     self.session_manager = debugsession.SessionManager(self)
     self.console = Console(self)
     self.main_window.console = self.console
     self.stack = StackViewer(self)
     self.namespace = AllNamespaceViewer(self)
     self.threads = ThreadsViewer(self)
     self.source = SourceViewer(self)
     self.status = StatusBar(self)
     self.breaks = BreakpointViewer(self)
     self.toolbar = Toolbar(self)
     debugsession.connect_events(self)
예제 #23
0
 def __init__(self, width=640, height=400, fps=30):
     """Initialize pygame, window, background, font,...
     """
     pygame.init()
     pygame.display.set_caption("Press ESC to quit")
     self.pygame = pygame
     self.width = width
     self.height = height
     #self.height = width // 4
     self.display = pygame.display
     self.screen = pygame.display.set_mode((self.width, self.height),
                                           pygame.DOUBLEBUF)
     self.background = pygame.Surface(self.screen.get_size()).convert()
     self.clock = pygame.time.Clock()
     self.fps = fps
     self.playtime = 0.0
     self.font = PygFont(pygame)
     self.sudoku = Sudoku()
     self.helper = False
     self.x_loc = 30
     self.y_loc = 30
     self.x_size = 450
     self.y_size = 450
     self.x_inc = self.x_size / 9  #number of columns
     self.y_inc = self.y_size / 9  #number of rows
     self.grid_x = -1
     self.grid_y = -1
     self.stats_x_loc = self.x_loc + self.x_size + 30
     self.stats_y_loc = self.y_loc
     self.stats_x_size = 50
     self.stats_y_size = 450
     self.toolbar_x_loc = 20
     self.toolbar_y_loc = self.y_loc + self.y_size + 70
     self.toolbar_x_size = 600
     self.toolbar_y_size = 80
     self.toolbar = Toolbar(self.toolbar_x_size, self.toolbar_y_size,
                            self.toolbar_x_loc, self.toolbar_y_loc)
예제 #24
0
    def test_init(self):
        tool = AnnotationTool()
        tool.load_app(True) 


        # Annotation added
        tool.annotations = []
        tool.file_list = []
        tool.class_list = ['winston', 'prince', 'duckie']
        tool.colorspace = ['#0000FF', '#FF0000', '#00FF00']
        tool.current_file = 0  
        tool.num_pages = 1
        toolbar = Toolbar(tool)

        self.assertEqual(toolbar.root_app, tool)
        self.assertEqual(toolbar.toolbar_width, tool.window_width)
        self.assertEqual(toolbar.toolbar_height, tool.toolbar_height)
        self.assertEqual(len(toolbar.toolbar_frame.winfo_children()), 0)
        
        
        for i in range(5):
            a = Annotation()
            a.rotation = 3
            tool.file_list.append('file%d.jpg' % i)
            for p in range(3):
                roi = ROI()
                roi.push(0,0)
                roi.push(100.0,100.0)
                a.push(roi, i%len(tool.class_list))
            tool.annotations.append(a) 
            
        toolbar = Toolbar(tool)
        self.assertEqual(toolbar.root_app, tool)
        self.assertEqual(toolbar.toolbar_width, tool.window_width)
        self.assertEqual(toolbar.toolbar_height, tool.toolbar_height)
        self.assertEqual(len(toolbar.toolbar_frame.winfo_children()), 3)
예제 #25
0
    def __init__(self):
        super().__init__()

        self.title = 'ADF Explorer'
        self.width = 640
        self.height = 512

        self.adf = ADF(self)

        self.actions = Actions(self)
        self.toolbar = Toolbar(self)
        self.menu = Menu(self)
        self.path = Path(self)
        self.browser = Browser(self)
        self.status = Status(self)

        self.initUI()
예제 #26
0
    def __init__(self, config=default):
        """Create an instance of a PyRysunek application.

        Optional arguments:
        config -- dictionary containing configuration values (see `config.default`)
        """
        self.config = config
        self.width, self.height = self.config.window_size

        self.toolbar = Toolbar(self.config.toolbar)
        self.context = Context(
            objects = ObjectList(),
            color_picker = self.toolbar.color_picker,
        )

        self._init_opengl()

        if config.auto_load_on_start:
            self.load()
예제 #27
0
    def _init_ui(self):
        menu_cb = {
            'new': self._new_cmd,
            'open': self._open_cmd,
            'save': self._save_cmd,
            'save_as': self._save_as_cmd,
            'exit': self._exit_cmd
        }

        toolbar_cb = {
            'snap': self.set_snap,
            'zoom': {
                'zoomx': self.set_zoomx,
                'zoomy': self.set_zoomy
            },
            'tool': self.set_canvas_tool
        }

        bottombar_cb = {
            'length': self.set_canvas_length,
            'timesig': self.set_canvas_timesig
        }

        root = self._root()
        menu = PianoRollMenu(root, menu_cb)
        root.config(menu=menu)
        root.title(make_title("Untitled", self._dirty))

        try:
            image = PhotoImage(file=ICON_IMG_PATH)
            root.tk.call('wm', 'iconphoto', root._w, image)
        except TclError:
            print "Couldn't load icon file"

        self.toolbar = Toolbar(self, toolbar_cb)
        self.piano_roll_frame = PianoRollFrame(
            self, lambda *args, **kwargs: self.set_dirty(True))
        self.bottombar = BottomBar(self, bottombar_cb)

        self.toolbar.pack(side=TOP, fill=X)
        self.bottombar.pack(side=BOTTOM, fill=X)
        self.piano_roll_frame.pack(fill=BOTH, expand=True)
        self.pack(fill=BOTH, expand=True)
예제 #28
0
    def initUI(self):
        """Initialize GUi's elements"""

        main_layout = QVBoxLayout()
        self.setStyleSheet('background-color: rgb(51,51,51); color: white')
        self.setLayout(main_layout)

        # define view's widgets

        central_layout = QHBoxLayout()
        toolbar = Toolbar(self.configuration, self.controller, self.parent)
        self.matrix = LayoutMatrix(self.layout_configuration,
                                   self.configuration, self)
        central_layout.addWidget(toolbar)
        central_layout.addWidget(self.matrix)

        # main_layout.addWidget(logo)
        main_layout.addLayout(central_layout)

        self.show_information_popup()
예제 #29
0
class frm_main(tk.Tk):
    """Start object to render the application window.\n
    use:\n
    import libs.frm_main as mainwindow\n
    if __name__ == "__main__":\n
         app = mainwindow()\n
         app.mainloop()\n\n
    """
    settings = configparser.ConfigParser()
    settings_file = "settings.ini"
    viewlogg = False
    gfxpath = "gfx/"
    _data_list = dict()
    _data_list['targets'] = list()
    _data_list['hosts'] = list()
    listwidget = dict()
    
    def __init__(self, settingspath="conf/", gfxpath="gfx/"):
        tk.Tk.__init__(self)
        self.settings_file = os.path.join(settingspath, self.settings_file)
        self.gfxpath = gfxpath
        self.wm_title("Tracemac 2.0")
        self.mainframe = tk.Frame(master=self, bg="white")
        self.minsize(width=800, height=640)
        self.mainframe.pack(expand=True, fill=BOTH)
        self.logg = Logwindow(self.mainframe)
        self.createWidgets()
        self.bind_all("<Control-x>", self.quit)
        self.bind_all("<Control-t>", lambda x:self.list_add(widget=self.list_targets))
        self.bind_all("<Control-h>", lambda x:self.list_add(widget=self.list_hosts))
        #self.list_targets.insert(END, "1.1.1.1")
        
        #checks if the settings_file exists, if not it creates it with defaults.
        if os.path.isfile(self.settings_file):
            self.settings.read(self.settings_file)
        else:
            print("No settings file - reverting to standard and saving file to conf/settings.ini")
            self.settings['DEFAULT'] = { 'community': 'public',
                                    'community_password': '******' }
            self.settings['userdata'] = {}
            self._save_settings_to_file()

    def quit(self, *event):
        """
        master frame destroy. Quits the application.
        """
        self.destroy()

    def list_add(self, widget=None):
        """add new target to list of targets"""
        datacol = Collectdata(self, title="Enter IP-addres", gfxpath=self.gfxpath)
        valid, ip, ip2, mask = datacol.show()
        lst = widget.get(0, END)
        dname = self.listwidget[widget.winfo_name]
        if valid:
            if ip and ip2:
                #It's a range
                v=dict()
                item = ip + "-" + ip2
                if item in lst:
                    messagebox.showinfo("message", "IP-Range %s is allready in the list of targets!" % item)
                else:
                    v = { item: {
                    'ip': ip,
                    'ip2': ip2,
                    'mask': mask,
                    'type': 'range'
                    }}
                    self._data_list[dname].append(v)
                    widget.insert(END, item)
            elif ip and mask and not ip2:
                #It's a network with a mask
                #Need to deside how to add these to the list?!?!
                print("It's a Network %s/%s" % (ip, mask))
                if len(mask) < 3:
                    mask = self.convertmask(int(mask))
                print("New mask:", mask)
            elif ip and not ip2 and not mask:
                #It's a single IP-address ( same as /32 mask )
                print("It's a single ip-adress:", ip)
                if ip in lst:
                    messagebox.showinfo("message", "Ip %s is allready in the list of targets!" % ip)
                else:
                    widget.insert(END, ip)
    @staticmethod
    def convertmask(mask:int) -> str:
        b = newmask = ""
        cnt=0
        for a in range(32):
            b += "1" if a <= mask else "0"
        nums = [int(b[i:i+8], 2) for i in range(0, 32, 8)]
        
        for cnt, item in enumerate(nums):
            newmask += str(item) + "." if cnt < 3 else str(item)
        return newmask
    
    def edit_item(self, widget=None):
        """Edits selected target"""
        #Need to check if anything is selected!
        curselec = widget.curselection()
        if curselec:
            index = int(curselec[0])
            curitem = widget.get(index)
            d = Collectdata(self, title="Edit target", edit=widget.get(curselec), gfxpath=self.gfxpath)
            valid, ip, ip2, mask = d.show()
            if ip is not curitem:
                try:
                    widget.delete(index)
                except:
                    pass
                widget.insert(index, ip)

    def delete_item(self, widget=None):
        try:
            curindex = widget.curselection()
            curtarget = widget.get(curindex)
            ret = messagebox.askyesnocancel(title="Delete?", message="Do you want to delete target:\n%s" % curtarget)
            if ret is True:
                try:
                    widget.delete(curindex)
                except:
                    pass
        except:
            messagebox.showinfo(title="Info", message="Nothing selected!")

    def createWidgets(self):
        """ Creates and lays out the widgets for the mainwindow."""
        # create Menus:
        self.menubar = tk.Menu(self.mainframe)
        filemenu = tk.Menu(self.menubar, tearoff=0)
        mnuimport = tk.Menu(filemenu, tearoff=0)
        mnuimport.add_command(label="Target list", command=self._file_menu_import_target_list)
        mnuimport.add_command(label="Switch list", command=self._file_menu_import_switch_list)
        filemenu.add_command(label="New search", command=self._file_menu_new_search, underline=1)
        filemenu.add_cascade(label="Import", menu=mnuimport)
        filemenu.add_separator()
        filemenu.add_command(label="Settings", command=self._file_menu_settings, underline=0)
        filemenu.add_command(label="Exit", command=self.quit, underline=1, accelerator="Ctrl+X")
        #--end-- File menu build

        #--start-- edit menu build
        editmenu = Menu(self.menubar, tearoff=0)
        editmenu.add_command(label="Add target(s)", underline=4, accelerator="Ctrl-T", command=self._edit_menu_add_target_to_list)
        editmenu.add_command(label="Edit selected target", command=self._edit_menu_edit_selected_target)
        editmenu.add_command(label="Delete selected target", command=self._edit_menu_del_selected_target)
        editmenu.add_separator()
        editmenu.add_command(label="Add host(s)", underline=4, accelerator="Ctrl-H", command=self._edit_menu_add_host_to_list)
        editmenu.add_command(label="Edit selected host", command=self._edit_menu_edit_selected_host)
        editmenu.add_command(label="Delete selected host", command=self._edit_menu_del_selected_host)
        editmenu.add_separator()
        editmenu.add_command(label="Clear log window", command=self.logg.clear)
        #--end-- edit menu build

        #--start-- view menu
        viewmenu = Menu(self.menubar, tearoff=0)
        viewmenu.add_checkbutton(label="Show/hide Logg", onvalue=True, offvalue=False, variable=self.viewlogg, command=self._viewmenu_show_window_pane)
        #--end-- viewmenu
        
        #--start-- help menu build
        hlpmenu = tk.Menu(self.menubar, tearoff=0)
        hlpmenu.add_command(label="Help", command=self._help_menu_help)
        hlpmenu.add_command(label="About", command=self._help_menu_about)
        #--end-- help menu build
        
        #--start-- adding menus to main menu
        self.menubar.add_cascade(label="File", menu=filemenu)
        self.menubar.add_cascade(label="Edit", menu=editmenu)
        self.menubar.add_cascade(label="View", menu=viewmenu)
        self.menubar.add_cascade(label="Help", menu=hlpmenu)
        #--end-- adding menus to main menu
        try:
            self.config(menu=self.menubar)
        except AttributeError:
            print("this faild!!!!")
            # master is a toplevel window (Python 1.4/Tkinter 1.63)
            tk.call(self, "config", "-menu", self.menubar)

        #create Toolbar
        toolbar = Toolbar(parent=self.mainframe)
        toolbar.add(wtype="button", gfxpath=self.gfxpath + "start.png",
                    tooltip="Start the search", command=self.addtext)
        toolbar.add(wtype="button", gfxpath=self.gfxpath + "new.png",
                    tooltip="Clears all results and start fresh")
        toolbar.add(wtype="separator")
##        toolbar.add(wtype="button", gfxpath=self.gfxpath + "addtarget.png",
##                    tooltip="Add target or a range of targets to targetslist", command=self.list_add)
##        toolbar.add(wtype="button", gfxpath=self.gfxpath + "addhost.png",
##                    tooltip="Add a host or range of hosts to hostslist")
##        toolbar.add(wtype="separator")
        toolbar.add(wtype="button", gfxpath=self.gfxpath + "exit.png",
                    tooltip="Exits the program. (Ctrl-X)", command=self.quit)
        toolbar.show()

        # create Statusbar
        self.status = StringVar()
        self.statusbar = Label(self, textvariable=self.status, bd=1, relief=SUNKEN, anchor=W)
        self.statusbar.pack(side=BOTTOM, fill=X)
        self.status.set("Idle")
        
        #create input boxes:
        self.inputframe = Frame(self.mainframe, width=50, bd=1, relief=GROOVE, padx=12, pady=12)
        Label(self.inputframe, text="Targets to look for:", pady=2).pack()
        self.list_targets = Listbox(self.inputframe, selectmode=BROWSE)
        self.list_targets.pack(side=TOP, pady=5)
        self.listwidgets[self.list_targets.winfo_name] = 'targets'
        self.list_targets_toolbar = Toolbar(parent=self.inputframe)
        self.list_targets_toolbar.add(wtype="button", gfxpath=self.gfxpath + "addtarget.png",
                                      tooltip="Add new target", command=lambda: self.list_add(widget=self.list_targets))
        self.list_targets_toolbar.add(wtype="button", gfxpath=self.gfxpath + "edit.png",
                                      tooltip="Edit selected target", command=lambda: self.edit_item(widget=self.list_targets))
        self.list_targets_toolbar.add(wtype="button", gfxpath=self.gfxpath + "trash.png",
                                      tooltip="Delete selected target", command=lambda: self.delete_item(widget=self.list_targets))
        self.list_targets_toolbar.show()
        Frame(self.inputframe, height=2, bd=1, relief=SUNKEN).pack(fill=X, padx=0, pady=10)
        Label(self.inputframe, text="Hosts to scan:", pady=2).pack()
        self.list_hosts = Listbox(self.inputframe, selectmode=BROWSE)
        self.list_hosts.pack(side=TOP, pady=5)
        self.listwidgets[self.list_hosts.winfo_name] = 'hosts'
        self.list_hosts_toolbar = Toolbar(parent=self.inputframe)
        self.list_hosts_toolbar.add(wtype="button", gfxpath=self.gfxpath + "addhost.png",
                                    tooltip="Add new host", command=lambda: self.list_add(self.list_hosts))
        self.list_hosts_toolbar.add(wtype="button", gfxpath=self.gfxpath + "edit.png",
                                    tooltip="Edit selected host", command=lambda: self.edit_item(widget=self.list_hosts))
        self.list_hosts_toolbar.add(wtype="button", gfxpath=self.gfxpath + "trash.png",
                                    tooltip="Delete selected host", command=lambda: self.delete_item(widget=self.list_hosts))
        self.list_hosts_toolbar.show()
        self.inputframe.pack(side=RIGHT, fill=Y)

    def addtext(self, *args):
            self.logg.println("test", "text2", "text3")
            self.logg.println("test", "text2", "text3", prefix="switch1")

    def _viewmenu_show_window_pane(self, *args):
        self.viewlogg = not self.viewlogg
        if self.viewlogg:
            self.logg.show()
        else:
            self.logg.hide()
    
    def _edit_menu_add_target_to_list(self):
        self.list_add(widget=self.list_targets)
    def _edit_menu_del_selected_target(self):
        self.delete_item(widget=self.list_targets)
    def _edit_menu_edit_selected_target(self):
        self.edit_item(widget=self.list_targets)
    def _edit_menu_add_host_to_list(self): pass
    def _edit_menu_del_selected_host(self): pass
    def _edit_menu_edit_selected_host(self): pass
    
    def _file_menu_import_target_list(self):
        """
        private function _file_menu_import_target_list
        opens Dialog to open a file containing a list of ip-adresses or MAC-adresses either separated with comma (,) or one line per target.
        TODO: figure out how to do this.
        """
        pass
    
    def _file_menu_import_switch_list(self):
        """
        private function _file_menu_import_switch_list
        opens Dialog to open a file containing a list of ip-adresses either separated with comma (,) or new-line (\\n)
        TODO: figure out how to do this.
        """
        pass
    
    def _file_menu_new_search(self):
        """
        function _file_menu_new_search
        clears all current settings and unloads any files imported.
        """
        pass
    
    def _help_menu_help(self):
        """
        private function _help_menu_help
        display help-window
        TODO: everything!
        """
        pass
    
    def _help_menu_about(self):
        """
        private function _help_menu_about
        Display Aoutdialog popupwindow.
        """
        about_dialog = tk.Toplevel(self)
        about_dialog.wm_title("About Tracemac v2.0")
        about_frame = tk.Frame(about_dialog, width=200, height=300)
        about_frame.pack()

        with codecs.open("texts\\about.txt", "r", "utf8") as f:
            about_text= f.read()

        about_label=tk.Label(about_frame, text=about_text)
        about_label.config(anchor="center")
        about_label.grid(columnspan="3", row="0")
        
        about_btn_OK = tk.Button(about_frame,
                                 text="OK",
                                 command=about_dialog.destroy,
                                 width="30")
        about_btn_OK.grid(column="1", row="1")
        about_dialog.mainloop()
        print("and then some!!!")
    
    def _file_menu_settings(self):
        """
        private function _file_menu_settings
        Display settingsdialog popupwindow.
        """
        settings_dialog = Settings_dialog(self, self.settings)
        return_val, changed = settings_dialog.show()
        if changed:
            self._save_settings_to_file()
    
    def _save_settings_to_file(self):
        with open(self.settings_file, 'w') as configfile:
                self.settings.write(configfile)
예제 #30
0
class Application(object):

    def __init__(self, options):
        self.options = options
        self.main_window = MainWindow(self)
        self.session_manager = debugsession.SessionManager(self)
        self.console = Console(self)
        self.main_window.console = self.console
        self.stack = StackViewer(self)
        self.namespace = AllNamespaceViewer(self)
        self.threads = ThreadsViewer(self)
        self.source = SourceViewer(self)
        self.status = StatusBar(self)
        self.breaks = BreakpointViewer(self)
        self.toolbar = Toolbar(self)
        debugsession.connect_events(self)

    def launch(self, filename):
        def _l(filename):
            import threading
            if filename is not None:
                def _t():
                    self.session_manager.launch(True, filename)
                t = threading.Thread(target=_t)
                t.start()
        gobject.idle_add(_l, filename)

    def update_threads(self, event):
        current_thread = event.m_current_thread
        threads_list = event.m_thread_list
        def _u(threads_list, current_thread):
            self.threads.update_threads(threads_list, current_thread)
        gobject.idle_add(_u, threads_list, current_thread)

    def update_thread_broken(self, event):
        print 'threadbroken'
        tid = event.m_tid
        def _u(tid):
            self.threads.broken_thread(tid)
        gobject.idle_add(_u, tid)

    def update_no_threads(self, event):
        print 'nothreads'

    def update_state(self, event):
        state = event.m_state
        print 'state', state
        def _u(state):
            self.status.update_running_status(state)
        def _u2(state):
            self.toolbar.update_state(state)
        def _u3(state):
            self.source.update_state(state)
        gobject.idle_add(_u, state)
        gobject.idle_add(_u2, state)

    def update_frame(self, event):
        print 'frame', event.m_frame_index
        index = event.m_frame_index
        def _u(index):
            self.stack.select_frame(index)
        gobject.idle_add(_u, index)
        self.update_source(-index - 1)

    def update_stack(self, event):
        print 'updatestack'
        stack = event.m_stack
        self._last_stack = stack
        def _u(stack):
            self.stack.update_stack(stack)
        gobject.idle_add(_u, stack)
        self.update_source(-1)

    def update_source(self, index):
        def _u(index):
            si =StackItem(index, *self._last_stack['stack'][index])
            self.source.goto(si.filename, si.linenumber)
        gobject.idle_add(_u, index)
            
    def update_namespace(self, event):
        def _u():
            self.namespace.update_namespace()
        gobject.idle_add(_u)

    def update_bp(self, event):
        def _u(event):
            act = event.m_action
            if event.m_bp is not None:
                filename = event.m_bp.m_filename
                linenumber = event.m_bp.m_lineno
                index = event.m_bp.m_id
                indices = None
            else:
                filename = None
                linenumber = None
                index = None
                indices = event.m_id_list
            self.breaks.update_bp(act, index, indices, filename, linenumber)
        gobject.idle_add(_u, event)
예제 #31
0
    def __init__(self, root, sizeX, sizeY, title):
        super().__init__(root)
        # self.pack(expand='no', fill='both')
        self.root = root
        self.state_ = False
        root.wm_title(title)
        root.focus_force()
        self.img_ = create_img()
        self.pack(expand=True, fill=tk.BOTH)
        set_application_icons(root, 'ico')  # imgdir
        self.path = pathlib.Path(cwddir)
        path_ = self.path.joinpath(
            'Проекты')  # каталог для файлов конвертора  'project'
        if not path_.exists():
            os.mkdir(path_)
        self.b = {}  # контейнер для виджетов
        self.dir_cvt = path_
        self._zona = config.getfloat('System', 'vzona')
        self._opgl = 0
        self.mb = config.getboolean('Amplituda', 'mb')  # 1 - RGB
        # fxen = dict(fill=tk.X, expand=False)
        (self.glub_var, self.stop_var, self.time_var, self.numstr_var,
         self.ampl_var, self.skale_var, self.porog_var,
         self.frek_var) = (tk.StringVar() for _ in range(8))

        self.tol_bar = Toolbar(self, bso_)  # объект tolbar
        self.tol_bar.pack(fill=tk.X, expand=False)
        # ttk.Separator(self).pack(**fxen)

        self.head = Head(self)  # объект этикетки head
        self.head.pack(fill=tk.X, expand=False)

        self.stbar = Footer(self, bso_)  # объект строки состояния
        self.stbar.pack(side=tk.BOTTOM, fill=tk.X)

        self.sep = ttk.Separator(self)
        self.sep.pack(side=tk.BOTTOM, fill=tk.X, pady=1)
        self.frame_upr = ttk.Frame(self)  # фрейм для управления
        self.frame_upr.pack(side=tk.BOTTOM, fill=tk.X)

        self.infobar = InfoBar(self)  # объект Info
        self.infobar.pack(side=tk.BOTTOM, fill=tk.X)

        self.board = CanvasT(self, sizeX, sizeY, bso_)  # объект CanvasT
        self.board.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        self.ser = RS232(trace)  # объект Serial
        self.gser = Gps(trace)  # объект Gps
        self.gser.tty.baudrate = 4800
        self.gser.tty.timeout = 0.01
        self._zg = config.getfloat('System', 'zagl')
        self.head.set_z(self.zg)  # zg - свойство
        self.d0 = {
            'L': 'МГ',
            'M': 'СГ',
            'H': 'БГ',
            'C': 'B8',
            'D': 'B10',
            'B': 'Б6'
        }
        self.fil_ametka = 'DodgerBlue2'
        self.stringfile = 0  # число строк записанных в файл
        self.txt_opmetka = 0  # счётчик оперативных отметок ручн.
        self.y_g = 0
        # self.error = 0                              # занулить ошибки при старте проги
        self.file_gals = None  # нет файла для записи галса
        self.man_metkawriteok = (False, False)
        self.avto_metkawriteok = False
        self.yold_ = 0.0  # для перемещен текста врем. меток
        self.hide_metka = False  # Показывать метки
        self.hide_grid = False  # Показывать гор. линии
        self.gl_0 = 0
        self.d_gps = None
        self.last_d_gps = None
        self.tavto_ = None
        self.tbname = None
        self.view_db = None
        # self.count_gps = 0
        self.ida = None
        self.ida_ = True
        self.last_sec = -1
        self.count_tmetka = 1
        self.vz_last = self.rej_last = 0
        self.diap_last = self.old_depth = 'МГ'
        self.helpDialog = None
        self.color_ch = True
        self.t_pausa = 0
        self.y_metka = self.board.y_top
        self.flag_gals = False
        self.vzvuk = 1500
        if bso_:
            self.gui_main()
            self.sep.pack_forget()
예제 #32
0
class App(ttk.Frame):
    """Класс приложения"""
    def __init__(self, root, sizeX, sizeY, title):
        super().__init__(root)
        # self.pack(expand='no', fill='both')
        self.root = root
        self.state_ = False
        root.wm_title(title)
        root.focus_force()
        self.img_ = create_img()
        self.pack(expand=True, fill=tk.BOTH)
        set_application_icons(root, 'ico')  # imgdir
        self.path = pathlib.Path(cwddir)
        path_ = self.path.joinpath(
            'Проекты')  # каталог для файлов конвертора  'project'
        if not path_.exists():
            os.mkdir(path_)
        self.b = {}  # контейнер для виджетов
        self.dir_cvt = path_
        self._zona = config.getfloat('System', 'vzona')
        self._opgl = 0
        self.mb = config.getboolean('Amplituda', 'mb')  # 1 - RGB
        # fxen = dict(fill=tk.X, expand=False)
        (self.glub_var, self.stop_var, self.time_var, self.numstr_var,
         self.ampl_var, self.skale_var, self.porog_var,
         self.frek_var) = (tk.StringVar() for _ in range(8))

        self.tol_bar = Toolbar(self, bso_)  # объект tolbar
        self.tol_bar.pack(fill=tk.X, expand=False)
        # ttk.Separator(self).pack(**fxen)

        self.head = Head(self)  # объект этикетки head
        self.head.pack(fill=tk.X, expand=False)

        self.stbar = Footer(self, bso_)  # объект строки состояния
        self.stbar.pack(side=tk.BOTTOM, fill=tk.X)

        self.sep = ttk.Separator(self)
        self.sep.pack(side=tk.BOTTOM, fill=tk.X, pady=1)
        self.frame_upr = ttk.Frame(self)  # фрейм для управления
        self.frame_upr.pack(side=tk.BOTTOM, fill=tk.X)

        self.infobar = InfoBar(self)  # объект Info
        self.infobar.pack(side=tk.BOTTOM, fill=tk.X)

        self.board = CanvasT(self, sizeX, sizeY, bso_)  # объект CanvasT
        self.board.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        self.ser = RS232(trace)  # объект Serial
        self.gser = Gps(trace)  # объект Gps
        self.gser.tty.baudrate = 4800
        self.gser.tty.timeout = 0.01
        self._zg = config.getfloat('System', 'zagl')
        self.head.set_z(self.zg)  # zg - свойство
        self.d0 = {
            'L': 'МГ',
            'M': 'СГ',
            'H': 'БГ',
            'C': 'B8',
            'D': 'B10',
            'B': 'Б6'
        }
        self.fil_ametka = 'DodgerBlue2'
        self.stringfile = 0  # число строк записанных в файл
        self.txt_opmetka = 0  # счётчик оперативных отметок ручн.
        self.y_g = 0
        # self.error = 0                              # занулить ошибки при старте проги
        self.file_gals = None  # нет файла для записи галса
        self.man_metkawriteok = (False, False)
        self.avto_metkawriteok = False
        self.yold_ = 0.0  # для перемещен текста врем. меток
        self.hide_metka = False  # Показывать метки
        self.hide_grid = False  # Показывать гор. линии
        self.gl_0 = 0
        self.d_gps = None
        self.last_d_gps = None
        self.tavto_ = None
        self.tbname = None
        self.view_db = None
        # self.count_gps = 0
        self.ida = None
        self.ida_ = True
        self.last_sec = -1
        self.count_tmetka = 1
        self.vz_last = self.rej_last = 0
        self.diap_last = self.old_depth = 'МГ'
        self.helpDialog = None
        self.color_ch = True
        self.t_pausa = 0
        self.y_metka = self.board.y_top
        self.flag_gals = False
        self.vzvuk = 1500
        if bso_:
            self.gui_main()
            self.sep.pack_forget()

    def gui_main(self):
        self.b.update(self.tol_bar.b)

        self.head.set_format(
            ('DBT', 'DBK', 'DBS')[config.getint('Preferens', 'd')])
        self.numstr_var.set('')

        # scl = config.getboolean('Scale', 'amplscl')
        # if scl:
        #     self.board.sclrbar.pack(side=tk.RIGHT, fill=tk.Y, expand=False)  # показать шкалу
        yscroll = config.getboolean('Scale', 'yscroll')
        if yscroll:
            self.board.sbar.pack(side=tk.LEFT,
                                 fill=tk.Y)  # показать полосу прокрутки
        self.board.canv.pack(side=tk.LEFT, fill=tk.BOTH,
                             expand=True)  # пакуем здесь
        self.open_port()
        self.init_board()
        path = pathlib.Path(config.get('Dir', 'dirprj'))
        # path = os.path.abspath(path)
        if path.exists():
            self.dbname = path.joinpath(path.name + '.db')  # path + '.db'
            self.tol_bar.set_dir(str(path) + '   ...Галс не выбран')
        else:
            self.tol_bar.set_dir('Проект не выбран!')
            self.tol_bar.pr_name.set('  ?!  ')
            self.b['bgals'].config(state='disabled')

    def init_board(self):
        """Создание нового полотна и очередей"""
        self.visible = False  # Показать все точки
        self.visible_len = False  # Показать длительность
        self.board.create_fild()
        self.root.update_idletasks()
        maxlen = int(self.max_width_canv() - self.board.x_right - 2)
        self.board.create_list_deque(maxlen)
        self.bind_()

    def open_port(self):
        """Открытие портов"""
        port_pui = config.get('Port', 'port_pui')
        baudrate_pui = config.getint('Port', 'baudrate_pui')
        port_gps = config.get('Port', 'port_gps')
        baudrate_gps = config.getint('Port', 'baudrate_gps')
        try:
            self.ser.open_port(port_pui)
            self.ser.tty.baudrate = baudrate_pui
        except port_exc:
            self.stbar.set_device(f'Не открыть порт {port_pui}')
            self.stbar.set_icon(self.img_['networky'])
        if self.ser.is_open():
            self.stbar.set_device(self.ser.get_port_info())
            self.stbar.set_icon(self.img_['networkon'])
        try:
            self.gser.open_port(port_gps)
            self.gser.tty.baudrate = baudrate_gps
        except port_exc:
            self.stbar.set_gps(f'Не открыть порт {port_gps}')
            self.stbar.set_icon_gps(self.img_['networky'])
        if self.gser.is_open():
            self.stbar.set_gps(self.gser.get_port_info('НАП СНС'))
            self.stbar.set_icon_gps(self.img_['networkon'])

    def runview_mem(self, arg=None):
        """Запуск просмотра Viewer"""
        # from ttkthemes import ThemedStyle
        # bakfile = None
        # if self.file_gals:
        #     fd, bakfile = tempfile.mkstemp()    # bakdir = tempfile.mkdtemp()  shutil.rmtree(bakdir)
        #     try:                                # see path_test.py
        #         shutil.copyfile(self.file_gals, bakfile)
        #         os.close(fd)
        #     except IOError:
        #         bakfile = None
        # self.root.set_theme('arc')
        top = tk.Toplevel()
        # top = ThemedTk(theme='arc', toplevel=True)
        title = 'БСО просмотр логов' if bso_ else 'ПУИ просмотр логов'
        # app_view = show_bso.App(top, title=title, filename=bakfile, galsname=self.file_gals)
        app_view = show_bso.App(top, title=title, galsname=self.file_gals)
        # style = ThemedStyle(top)
        # style.set_theme("arc")
        app_view.run()
        top.protocol("WM_DELETE_WINDOW", app_view.file_quit)
        top.iconbitmap(self.path.joinpath(imgdir, 'bookmark.ico'))
        top.focus_force()

    def clr_data(self):
        """Если ПУИ перейти в Ожидание"""
        self.init_board()
        if not bso_:
            # self.root.go_nel()
            pass

#======= callback =============#

    def new_avtom__(self, arg=None):
        """Запуск автометок"""
        if arg is None:
            return
        if self.ida:
            self.root.after_cancel(self.ida)  # остановить цикл
        if arg == 0.0:
            # self.odl_arg_time = arg
            self.b['btnmetka'].config(text='0.0 м')
            return
        else:
            # self.odl_arg_time = arg
            self.b['btnmetka'].config(text=f'{arg:0.1f} м')
            self.b['btnametka_on'].config(state='normal')
            self.count_tmetka = 1
            self.timeravto(arg)  # запустить цикл

    def new_vzona__(self, arg=None):
        if arg is not None:
            self.zona = arg

#============== metki ==========================================

    def ch_state(self, dis=(), nor=()):
        """Изменение state кнопок (list 'disabled'), (list 'normal')"""
        for obj in dis:
            self.b[obj].state(['disabled', 'selected'])
        for obj in nor:
            self.b[obj].state(['!disabled', '!selected'])

    def opavto(self, arg=None):
        """Обработчик кнопки постановки авто. метки"""
        dlg_.get_float(self,
                       'Автоинтервал',
                       'Введите интервал в мин.',
                       self.new_avtom__,
                       initial=0.0,
                       minimum=0.5,
                       maximum=100)

    def timeravto(self, t):
        """Тик для автометок 1 секунда"""
        # if t:
        sec = time.localtime(time.time())[5]
        if sec != self.last_sec:
            self.last_sec = sec  # 1 сек
            self.count_tmetka -= 1
            if self.count_tmetka == 0:
                if self.ida_:
                    self.draw_t()
                self.count_tmetka = t * 60
        self.ida = self.root.after(100, lambda: self.timeravto(t))
        # else:
        #     if self.ida:
        #         self.root.after_cancel(self.ida)

    def review_db(self, geom):
        """Обновить окно меток"""
        self.view_db.destroy()  # withdraw()
        self.opmetka_list(geom)

    def state_db_norm(self, arg=None):
        """Удалить окно просмотра меток и разблокировать кнопку db"""
        # self.b['b_db'].config(state='normal')         #
        self.view_db.destroy()  # withdraw()
        self.view_db = None  #

    def opmetka_list(self, geom=None):
        """"Обработчик кнопки просмотр BD"""
        try:
            result = request_data_all(self.dbname, self.tbname)
        except Exception:  # as er
            # print(er)
            return
        if self.view_db:
            self.view_db.destroy()
        self.view_db = ViewMetka(self, result, geom)
        self.view_db.show_tree()  #
        self.view_db.set_name_db(self.dbname)
        # self.b['b_db'].config(state='disabled')           #

    def data_coment(self, num):
        """Получить коментарий из базы"""
        return request_data_coment(self.dbname, self.tbname, num)

    def save_new_coment(self, num, txt):
        """Сохранить коментарий в базе"""
        update_table(self.dbname, self.tbname, num, txt)

    def decorate_metka(*d_arg):
        """Декоратор функции"""
        def my_decorator(func):
            def wrapped(self, *f_arg):
                if self.hide_metka:
                    for tag in d_arg:
                        self.board.canv.move(tag, 0, 100)
                func(self, *f_arg)
                if self.hide_metka:
                    for tag in d_arg:
                        self.board.canv.move(tag, 0, -100)

            return wrapped

        return my_decorator

    @decorate_metka('', 'mman_td')
    def opmanual(self, arg=None):
        """Обработчик кнопки постановки ручной метки"""
        if not self.flag_gals and bso_:
            return  # если галс не выбран то не ставим отметку
        color, tag = ("spring green", 'mman_td') if arg else ("red", 'mman_t')
        x = self.board.x0 - 3
        self.board.canv.create_line(x,
                                    self.board.y_top + 1,
                                    x,
                                    self.y_metka,
                                    fill=color,
                                    tag='mmetka')
        self.txt_opmetka += 1
        self.board.canv.create_text(x,
                                    self.board.y_top - 7 + self.yold_,
                                    text=self.txt_opmetka,
                                    anchor='center',
                                    font=('Helvetica', 8),
                                    fill=color,
                                    tag=tag)
        # Y = -100 if self.tol_bar.visible_time_metka_on else 0
        # self.board.canv.create_text(x+6, self.board.y_top+27+self.yold_+Y, text=self.gl_0, anchor=tk.CENTER,
        #                             angle=90, font=('Helvetica', 8), fill=self.fil_ametka, tag='mman_t_glub')
        self.man_metkawriteok = (True, False) if color == "red" else (True,
                                                                      True)
        req.num = self.txt_opmetka
        self.get_data_db()
        insert_table(self.dbname, self.tbname, req)
        if self.view_db:  #
            geom = self.view_db.geometry().split('+')
            self.review_db(geom)
        if self.hide_metka:
            self.board.canv.delete('mmetka')

    def del_metka_man(self):
        """Удаление ручных и авто отметок при смене галса"""
        for tag in ('mmetka', 'mman_t', 'mman_td', 'ametka', 'tametka',
                    'point', 'point_g', 'glub',
                    'timeametka'):  # 'mman_t_glub',
            self.board.canv.delete(tag)
        self.txt_opmetka = 0

    @decorate_metka('tametka', 'timeametka')
    def draw_t(self, arg=None):
        """Рисуем временные автоматич. метки"""
        x = self.board.x0 - 3
        if self.d_gps is None:
            text = time.strftime('%H:%M:%S')
        else:
            text = self.d_gps[0].split()[-1]
        self.txt_opmetka += 1
        Y = -100 if self.tol_bar.visible_time_metka_on else 0
        if not self.hide_metka:
            self.board.canv.create_line(x,
                                        self.board.y_top,
                                        x,
                                        self.y_metka,
                                        fill=self.fil_ametka,
                                        tag='ametka')
        self.board.canv.create_text(x,
                                    self.board.y_top - 7 + self.yold_,
                                    text=self.txt_opmetka,
                                    anchor=tk.CENTER,
                                    font=('Helvetica', 8),
                                    fill=self.fil_ametka,
                                    tag='tametka')
        self.board.canv.create_text(x - 6,
                                    self.board.y_top + 27 + self.yold_ + Y,
                                    text=text,
                                    anchor=tk.CENTER,
                                    angle=90,
                                    font=('Helvetica', 8),
                                    fill=self.fil_ametka,
                                    tag='timeametka')

        # self.board.canv.create_text(x+6, self.board.y_top+27+self.yold_+Y, text=self.gl_0, anchor=tk.CENTER,
        #                             angle=90, font=('Helvetica', 8), fill=self.fil_ametka, tag='timeametka')
        self.avto_metkawriteok = True
        self.get_data_db()
        req.num = self.txt_opmetka
        req.coment = 'A'
        insert_table(self.dbname, self.tbname, req)
        if self.view_db:
            geom = self.view_db.geometry().split('+')
            self.review_db(geom)

    def hide_metki(self):
        """Показать, скрыть метки"""
        if self.hide_metka:
            self.board.move_metkai_hide(hide=False)
            image = self.img_['geoon']
            ToolTip(self.b['btnmetki'], msg='Метки видны')
            if self.flag_gals:
                self.ch_state((), ('bmman', 'btnmetka'))
        else:
            self.board.move_metkai_hide(hide=True)
            image = self.img_['geooff']
            ToolTip(self.b['btnmetki'], msg='Метки скрыты')
            self.ch_state(('bmman', 'btnmetka'), ())
        self.b['btnmetki'].configure(image=image)
        self.hide_metka = not self.hide_metka

    def hide_hline(self, arg=None):
        """Показать, скрыть гор. линии поля"""
        if self.hide_grid:
            self.board.move_grid(2700, 0)
            image = self.img_['grid2']
            ToolTip(self.b['btnhidevline'], msg='Линии видны')
        else:
            self.board.move_grid(-2700, 0)
            image = self.img_['lauernogrid']
            ToolTip(self.b['btnhidevline'], msg='Линии скрыты')
        self.b['btnhidevline'].configure(image=image)
        self.hide_grid = not self.hide_grid

#----------------------------------------------------------------------------------------------#

    def ch_diap(self, *arg):
        """Вызов при смене диапазона"""
        t1 = time.time()
        if t1 - self.t_pausa > 5:  # ставить отметку не чаще чем 5 сек.
            self.t_pausa = t1
            arg = self.infobar.diap_var.get()
            if arg != self.diap_last and arg:  # не ставить если не изменился диапазон
                if self.diap_last:
                    if self.tbname and self.txt_opmetka:  # не ставить если небыло меток
                        self.opmanual("green")
                        if self.tol_bar.id_rec:
                            txt = f"Диапазон {self.infobar.diap_var.get()}"
                            num = self.txt_opmetka
                            self.save_new_coment(num, txt)
                self.diap_last = arg

    def pref_form(self, D, z):
        """Возврат результата из формы 'DBT.., z(заглубл.) если есть изменения'"""
        self.zg = z  # изменение заглубл.
        self.head.set_format(D)

    @property
    def zona(self):
        """Временная зона"""
        return self._zona

    @zona.setter
    def zona(self, value):
        self._zona = value
        self.head.set_utc(t=True)
        config.set('System', 'vzona', f'{value}')
        write_config()

    @property
    def zg(self):
        """Заглубление"""
        return self._zg

    @zg.setter
    def zg(self, value):
        """Изменение заглубления"""
        self._zg = value
        self.head.set_z(value)
        config.set('System', 'zagl', f'{value}')
        write_config()

    def gals(self, name):
        """Выбор галса"""
        path = pathlib.Path(config.get('Dir', 'dirprj'))
        dir_gals = path.joinpath(
            'Исходные данные')  # каталог галсов 'base_data'
        # if name in (i.name for i in os.scandir(dir_gals)):
        if name in os.listdir(dir_gals):
            if not box.askyesno(
                    '!',
                    'Файл с таким именем уже существует!\n Переписать файл?'):
                return
        self.file_gals = path.joinpath('Исходные данные',
                                       name)  # имя файла данных 'base_data'
        self.tol_bar.set_dir(str(self.file_gals))
        head = [
            'format_', 'glub', 'ampl', 'lenth', 'timdata', 'shir', 'dolg',
            'vs', 'kurs', 'vz', 'zg', 'ku', 'depth', 'rej', 'frek', 'cnt', 'm',
            'm_man', 'color_mm', 'm_avto'
        ]
        for i in range(20):
            head.append(f'g{i}')
            head.append(f'a{i}')
            head.append(f'l{i}')
        with open(self.file_gals, 'w',
                  newline='') as f:  # пишем в файл шапку  a!
            f_csv = csv.writer(f)
            f_csv.writerow(head)

        fname = pathlib.Path(name).stem
        md5 = hashlib.md5(fname.encode('utf-8')).hexdigest()
        # md5 = hashlib.md5(os.path.splitext(name)[0].encode('utf-8')).hexdigest()
        self.tbname = f'tb_{md5}'  # "tb_" префикс т.к. имя не может начмнаться с цмфры
        try:
            create_table(self.dbname,
                         self.tbname)  # создать таблицу и если надо базу
        except sqlite3.OperationalError as err:
            if str(err) == f'table {self.tbname} already exists':
                del_table(self.dbname, self.tbname)
            else:
                box.showerror('!', f'Ошидка базы данных!\n{str(err)}')
        req.num = 0
        self.del_metka_man()
        return True

    @staticmethod
    def get_prj_name():
        return pathlib.Path(config.get('Dir', 'dirprj')).name
        # return os.path.basename(config.get('Dir', 'dirprj'))

    def opendir_gals(self):
        """Открыть существующий проект"""
        path = pathlib.Path(config.get('Dir', 'dirprj')).parent
        # path = config.get('Dir', 'dirprj')
        # path = os.path.dirname(path)
        name = askdirectory(initialdir=path)
        if name:
            # dir_ = os.path.abspath(name)
            self.prepare_gals(name)
            self.tol_bar.set_dir(name + '   ...Галc не выбран')
            return name

    def prepare_gals(self, dir):
        config.set('Dir', 'dirprj', dir)
        write_config()
        path = pathlib.Path(dir)
        self.dbname = path.joinpath(path.name + '.db')
        # self.dbname = os.path.join(dir, os.path.split(dir)[-1] + '.db')   # dir + '.db'
        # self.ch_state(('btn', 'b_db'), ())            #
        self.ch_state(('btn', ), ())
        self.tol_bar.num_gals.set(f"{' ':^19}")
        self.flag_gals = False
        self.b['bgals'].config(state='normal')

    def vzonav_(self):
        """Обработка кнопки врем. зона"""
        ini = config.getfloat('System', 'vzona')
        dlg_.get_float(self.root,
                       'Часовой пояс',
                       'Введите часовой пояс',
                       self.new_vzona__,
                       initial=ini,
                       minimum=-12,
                       maximum=14)

    def zaglub_(self):
        """Обработка кнопки осадки"""
        Window(self)

######################## Work ############################

    def color_ch_(self, arg=None):
        """Обработчик ккнопки смены фона"""
        if self.color_ch:
            bg = 'beige'  # '#eee'
            fil = 'darkblue'
            image = self.img_['on']
        else:
            bg = 'gray22'  # '#444'
            fil = 'orange3'
            image = self.img_['off']
        self.b['btnrgb'].configure(image=image)
        self.color_ch = not self.color_ch
        self.board.reconfig()
        self.board.canv.config(background=bg)
        self.board.canv.itemconfigure('fild_t', fill=fil)
        self.board.canv.itemconfigure('ametka', fill=self.fil_ametka)
        self.board.canv.itemconfigure('tametka', fill=self.fil_ametka)

########################## Start Wait #########################

    def write_data(self, data):
        """
        Пишем данные в файл
        (b'${or %},work,rej,depth,notused,ku,vh,vl,ksh,ksl,\r\n')
        (b'! or ?, #')
        (b'$,depth,ku,m,cnt,gl_0h,gl_0l,am_0h,am_0l,glh,gll,amh,aml,...,\r\n')
        '$GPRMC,123519.xxx,A,4807.038x,N,01131.000x,E,022.4,084.4,230394,003.1,W*6A\n'
        '      ,    time  , , latitude, , logitude , ,spid ,track, data ,degrees,    '
        """
        if self.b["btn"].cget('text') == '.' and data:
            # self.b['bgals'].state(['disabled', 'selected'])         # откл кнопки галс
            if bso_:
                vz = int.from_bytes(data[6:8], 'big')  # скорость звука
                frek = '25' if data[0] == 0x25 else '50'  # частота
                rej = 'S' if data[2] == 0x53 else 'R'  # режим
                data = data[15:-2]
            else:
                vz = self.head.vz_var.get()[:-3]  ################ убрать м/с
                frek = '25' if self.frek_var.get() == '25кГц' else '50'
                rej = 'S' if self.infobar.rej_var.get() == 'Авто' else 'R'
            depth = chr(data[0])  # диапазон глубин
            ku = int(chr(data[1]), 16)  # порог
            m = data[2]  # корелир. стопы
            glub = int.from_bytes(data[4:6], 'big')
            glub += self.zg * 10 if glub else 0  # self.zg -> float
            glub = int(glub)
            #ampl = data[6] if self.mb else data[7]  # amplful = int.from_bytes(data[6:8], 'big')
            ampl = data[6]  # цвет
            # lenth = data[7]         # длительность импульса
            lenth = self.cal_len(data[7])
            # print(f'> {glub} - {data[7]}')
            # lenth = self.cal_len(data[7], self.d0[depth])
            # print(data[7], lenth)
            m_avto = m_man = color_mm = ''  # авто метка, ручн.метка, цвет ручной метки
            format_ = self.head.format_var.get()  # формат
            if self.d_gps is None:  # если нет GPS
                gps1 = gps2 = gps3 = gps4 = ''
                gps0 = time.strftime('%d.%m.%y %H:%M:%S')
            else:
                # time, shir, dolg, speed, kurs
                gps0, gps1, gps2, gps3, gps4 = (self.d_gps[i]
                                                for i in range(5))
            if self.man_metkawriteok[0]:
                m_man = self.txt_opmetka
                color_mm = "spring green" if self.man_metkawriteok[1] else "red"
            if self.avto_metkawriteok:
                m_avto = self.txt_opmetka  # авто метка
            cnt = data[3]  # стопы
            zg = self.zg  # осадка
            # формат, глубина, амплитуда, длительность, объект дата время, широта, долгота, скорость, курс, скорость звука, осадка, порог,
            # диап. глубин, режим, частота, число стопов, число кор. стопов, ручн. метка, цвет ручн. метки , авто метка.
            file_list = [
                format_, glub, ampl, lenth, gps0, gps1, gps2, gps3, gps4, vz,
                zg, ku, depth, rej, frek, cnt, m, m_man, color_mm, m_avto
            ]
            if cnt:
                st_d = []
                data = data[8:]
                if cnt > 20:
                    cn = 20  # если > 20 то except т.к. матрица = 20
                else:
                    cn = cnt
                for i in range(0, cn * 4, 4):
                    gd = int.from_bytes(data[i:i + 2], 'big')
                    gd += self.zg * 10 if gd else 0
                    gd = int(gd)
                    # ad = data[i+2] if self.mb else data[i+3]  # ad = int.from_bytes(data[i+2:i+4], 'big')
                    ad = data[i + 2]
                    # ld = data[i + 3]
                    # ld = self.cal_len(data[i + 3], self.d0[depth])
                    ld = self.cal_len(data[i + 3])
                    st_d.append(gd)
                    st_d.append(ad)
                    st_d.append(ld)
                    print(f'{gd} - {data[i + 3]}, ', end='')
                    print()
                file_list.extend(st_d)
            with open(self.file_gals, 'a', newline='') as f:
                f_csv = csv.writer(f)
                f_csv.writerow(file_list)
            self.stringfile += 1
            self.numstr_var.set(
                f'{self.stringfile:=05d}')  # число строк зап. в файл
        self.man_metkawriteok = (False, False)
        self.avto_metkawriteok = False

    def bind_(self):
        """Привязки событий"""
        self.root.bind("<Up>", self.board.up)
        self.root.bind("<Down>", self.board.down)
        self.root.bind("<Home>", self.board.home)
        self.root.bind("<End>", self.board.en)
        self.root.bind("<Alt-F4>", self.exit_)
        #        self.root.bind('<MouseWheel>', self.scroll)
        self.board.canv.bind("<Configure>", self.board.size_canv)
        self.root.bind("<Control-Alt-e>", self.stbar.err_show)
        self.root.bind("<Return>", lambda: None)

    def max_width_canv(self):
        """Возвращает максимально возможную ширину холста"""
        screen = self.root.winfo_screenwidth()
        labl = self.board.colorbar.winfo_width()
        sbar = self.board.sbar.winfo_width()
        return screen - labl - sbar

    def clr(self):
        """Тригер показ всех точек или одна цель"""
        if self.visible:
            self.board.show_data_zip(on_eco=True)
            image = self.img_['sloion']
            ToolTip(self.b['btnall'], msg='Все эхо')
        else:
            self.board.canv.delete('point')
            image = self.img_['sloi3']
            ToolTip(self.b['btnall'], msg='Одно эхо')
            # self.board.canv.itemconfigure('point_g', fill='black')     # 'green3'
        self.b['btnall'].config(image=image)
        self.visible = not self.visible
        self.board.reconfig()

    def len_view(self):  #
        """Тригер показ длительности целей"""
        if self.visible_len:
            self.board.show_data_zip(on_eco=True)
            image = self.img_['candlestick']
            ToolTip(self.b['btnlen'], msg='Длительность видна')
        else:
            self.board.canv.delete('point')
            image = self.img_['linechart']
            ToolTip(self.b['btnlen'], msg='Длительность  скрыта')
        self.b['btnlen'].config(image=image)
        self.visible_len = not self.visible_len
        self.board.reconfig()

#=================================================================

    def blink(self):
        """Мигнуть телевизорами порта"""
        self.stbar.lab_tel.config(image=self.img_['network1'])
        self.root.after(
            200,
            lambda: self.stbar.lab_tel.config(image=self.img_['network3']))

    def blink_g(self):
        """Мигнуть телевизорами порта"""
        self.stbar.lab_tel_gps.config(image=self.img_['network1'])
        self.root.after(
            200,
            lambda: self.stbar.lab_tel_gps.config(image=self.img_['network3']))

    def set_local_time(self):
        """Установка машинного времени"""
        s = ttk.Style()
        s.configure('H.TLabel', foreground='#2754aa')  # синий
        t = time.strftime('%d.%m.%y %H:%M:%S')
        self.head.set_utc(False)
        self.head.set_t(t)

    def gps_data(self, data):
        """Получение данных из GPS
        '$GPRMC,123519.xxx,A,4807.038x,N,01131.000x,E,022.4,084.4,230394,003.1,W*6A\n'"""
        s = ttk.Style()
        self.d_gps = None
        data = data.split(',')  # type list
        self.blink_g()
        try:
            s_ = data[3].split('.')
            d_ = data[5].split('.')
            sh = f"{s_[0][:-2]} {s_[0][-2:]}.{s_[1][:3]} {data[4]}"  # {0xB0:c} °
            d = f"{d_[0][:-2]} {d_[0][-2:]}.{d_[1][:3]} {data[6]}"
        except Exception:
            sh = f"xx xx.xxx x"
            d = f"xxx xx.xxx x"
        try:
            str_struct = time.strptime(data[1].split('.')[0] + data[9],
                                       "%H%M%S%d%m%y")
            tsek = time.mktime(str_struct)
            tsek += self.zona * 3600
            str_struct = time.localtime(tsek)
            t = time.strftime("%d.%m.%y %H:%M:%S", str_struct)
        except Exception:
            t = "xx.xx.xx xx:xx:xx"
        try:
            vs = f"{float(data[7]):=04.1f}"  # ! 05.1f
            k = f"{float(data[8]):=05.1f}"
        except Exception:
            vs = k = ''
        s.configure('H.TLabel', foreground='black')
        self.head.set_(sh, d, vs, k, t, True)
        # self.head.labelTime.config(foreground='green3')
        self.d_gps = (t, sh, d, vs, k)

    def get_data_db(self):
        """Получить данные для базы"""
        if self.d_gps is None:
            t, sh_, d_ = time.strftime('%d.%m.%y %H:%M:%S'), '', ''
        else:
            t, sh, d = self.d_gps[0], self.d_gps[1], self.d_gps[2]
            sh__ = sh.split()
            d__ = d.split()
            sh_ = f"{sh__[0]}{0xB0:c} {sh__[1]}{0xB4:c} {sh__[2]}"
            d_ = f"{d__[0]}{0xB0:c} {d__[1]}{0xB4:c} {d__[2]}"
        req.timedata, req.shirota, req.dolgota = t, sh_, d_
        req.glubina = f'{self.gl_0} м'
        req.coment = ''

    def update_scale(self):
        """Установка шкалы по глубине"""
        if not self.data_point:
            return
        # x = self.data_point[0]
        x = self.data_point[0] / 10
        up = (20, 40, 100, 200, 400, 800, 1000, 2000, 4000, 4500)
        down = (0, 16, 35, 75, 190, 350, 750, 950, 1900, 3900)
        if x > up[self.board.i]:
            self.board.up()
        elif x < down[self.board.i]:
            self.board.down()

    def work(self, data):
        """data = bytes"""
        # len(data)=105
        if bso_:
            vz = int.from_bytes(data[6:8], 'big')  # скорость звука
            self.infobar.vz_var.set(vz)  # for trace
            self.head.set_v(vz)
            rej = 'Авто' if data[2] == 0x53 else 'Ручной'  # режим
            self.infobar.rej_var.set(f"{rej}")
            frek = '25 кГц' if data[0] == 0x25 else '50 кГц'  # частота
            self.frek_var.set(f"{frek}")
            self.parse_data(data[15:-2], vz)

        if self.data_point[0] > 0:
            # self.y_metka = self.board.y_top + self.data_point[0] * self.board.px / self.board.k + 1
            self.y_metka = self.board.y_top + self.data_point[
                0] / 10 * self.board.px / self.board.k + 1
        else:
            self.y_metka = self.board.y_top
        self.board.update_data_deque()
        if self.tol_bar.enable_skale:
            self.update_scale()  # изменить шкалу !
        self.board.show_point()  # в canvast
        self.board.del_widht_canvas()  # удалить всё за холстом

    def getmsg(self, que):
        """Поточная функция чтения ППУ"""
        while self.flag_gals:
            msg = self.ser.read_allb()  # byte or None
            if msg:
                que.put(msg)  # ждём пока очередь будет пуста

    def getmsg_gp(self, que_gp):
        """Поточная функция чтения НСП"""
        while self.flag_gals:
            msg = self.gser.get_msg()  # str or None
            if msg:
                que_gp.put(msg)  # ждём пока очередь будет пуста

    def run_loop(self):
        """
        Работа в режиме просмотра и возможной записи в лог.
        (b'${or%},work,rej,depth,notused,ku,vh,vl,ksh,ksl,\r\n')
        (b'! or ?, #')
        (b'$,depth,ku,m,cnt,gl_0h,gl_0l,am_0h,am_0l,glh,gll,amh,aml,...,\r\n')
        """
        # Вызов при выборе галса (start)
        # s = ttk.Style()
        self.init_board(
        )  # очистить все очереди, иначе при reconfig() появяться цели от старого галса
        if not self.ser.is_open():  # нет открытого порта
            self.b["btn"].state(['disabled', 'selected'])
            return
        self.ser.clear_port()  # очистка порта
        que = queue.Queue(1)
        self.flag_gals = True
        if self.gser.is_open():
            que_g = queue.Queue(1)
            thread_g = threading.Thread(target=self.getmsg_gp,
                                        args=(que_g, ),
                                        daemon=True)  # daemon=True
            thread_g.start()
        thread_d = threading.Thread(target=self.getmsg,
                                    args=(que, ),
                                    daemon=True)
        thread_d.start()
        self.end_loop = False
        self.timer = True
        self.local = False
        self.timer_g = True
        self.not_data_g()
        while self.flag_gals:
            if self.gser.is_open():
                try:
                    data_g = que_g.get_nowait()
                except queue.Empty:
                    data_g = None
                    if self.timer_g:
                        self.timer_g = False
                        tg = threading.Timer(3.0, self.not_data_g)
                        tg.start()
                if data_g:
                    if not self.timer_g:
                        tg.cancel()
                        self.timer_g = True
                        self.local = True
                    self.gps_data(data_g)
                if not self.local:
                    self.set_local_time()  # локальное время
                    self.d_gps = None
            else:
                # s.configure('H.TLabel', foreground='#2754aa')   # синий
                self.set_local_time()
            self.root.update()
            try:
                data = que.get_nowait()  # не ждём
            except queue.Empty:
                data = None
                if self.timer:
                    self.timer = False
                    t = threading.Timer(9.5, self.not_data)
                    t.start()
            if data:
                if not self.timer:
                    t.cancel()
                    self.timer = True
                self.work(data)
                self.write_data(data)  # если надо то пишем в файл
                self.board.clr_error()  # убераем надпись Нет данных!
                self.ch_state((), ('bmman', 'btnmetka', 'btnametka_on'))
                self.blink()
                self.root.update()
                self.ida_ = True
        try:
            t.cancel()
            tg.cancel()
        except:
            pass
        self.flag_gals = False
        self.end_loop = True

    def not_data(self):
        """Вызов при отсутствии данных в линии"""
        # self.timer = True
        self.stbar.set_icon(self.img_['networkx'])
        self.board.create_error()  # Выводим на холст Нет данных
        self.ch_state(('bmman', 'btnmetka', 'btnametka_on'), ())
        self.ida_ = False

    def not_data_g(self):
        """Вызов при отсутствии данных в линии GPS"""
        # s = ttk.Style()
        # self.timer_g = True
        self.local = False
        # s.configure('H.TLabel', foreground='#2754aa')   # синий
        self.set_local_time()

    def parse_data(self, data, vz):
        """
        Разбор данных глубин и амплитуд
        (b'depth,ku,m,cnt,gl_0h,gl_0l,am_0h,am_0l,glh,gll,amh,aml,...glh,gll,amh,aml')
        """
        self.vzvuk = vz
        # data_point = []
        # data_ampl = []                                    # 1+cnt глубин и 1+cnt (амплитуд, длительностей)
        # data_len = []
        data_point = array.array('H')  # float 'f' 4 bytes 'B' 1 bytes
        data_ampl = array.array('B')  # 1 + cnt глубин, амплттуд, длительностей
        data_len = array.array('B')
        if data:
            cnt = data[3]  # число принятых стопов
            m = data[2]  # число коррелир. стопов
            ku = int(chr(data[1]), 16)  # порог
            depth = self.d0[chr(data[0])]  # диапазон глубин
            self.depth = depth
            if depth != self.old_depth or not self.infobar.diap_var.get():
                self.infobar.diap_var.set(f"{depth}")
                self.old_depth = depth
            self.porog_var.set(f"{ku}")
            self.stop_var.set(f" {m}  из  {cnt} ")
            glub = int.from_bytes(data[4:6], 'big')
            if glub:
                gl_0 = glub / 10 + self.zg
                data_point.append(glub + int(self.zg * 10))  # в дециметрах
            else:
                gl_0 = 0
                data_point.append(0)
            self.glub_var.set(
                f'{glub / 10:5.1f} м') if glub > 0 else self.glub_var.set('')
            self.board.view_glub(gl_0, self._opgl)  # вывод лгубины на холст
            # data_point.append(gl_0)                         # основной стоп
            # ampl = data[6] if self.mb else data[7]  amplful = int.from_bytes(data[6:8], 'big')
            ampl = data[6]
            lenth = data[7]
            # print(lenth)
            bg = self.board.rgbc(ampl * 7) if ampl else 'gray85'  ## ~
            self.infobar.lab_a_l.config(background=bg)
            # lenth = self.cal_len(data[7], depth)
            # lenth = lenth if lenth else '  -'
            # lenth = data[7]
            # data_ampl.append((ampl, lenth))                 # основной стоп
            data_ampl.append(ampl)  # основной стоп
            data_len.append(lenth)  # основной стоп
            a = ampl if ampl else ''
            l = str(self.cal_len(lenth)) + ' м' if lenth else ''  #
            self.ampl_var.set(
                f'{a:3} \\ {l:5}')  # вывод амплитуды и длит. в лабель
            foreground = 'black' if m else '#2754aa'  # синий
            self.infobar.lab_am_ln[1].config(foreground=foreground)
            #            self.vmeter(ampl)
            datas = data[8:]  # данные с матрицы
            if cnt > 20:
                cnt = 20
            for i in range(0, cnt * 4, 4):
                glubs = int.from_bytes(datas[i:i + 2], 'big')
                if glubs:
                    # gl = glubs / 10.0 + self.zg
                    data_point.append(glubs + int(self.zg * 10))
                else:
                    data_point.append(0)
                # data_point.append(gl)
                ampl2 = datas[i + 2]
                # lenth2 = self.cal_len(datas[i + 3], depth)    # в метрах
                lenth2 = datas[i + 3]  # в дециметрах
                data_ampl.append(ampl2)
                data_len.append(lenth2)
            self.gl_0 = round(gl_0, 1)  # глубина глобально
        self.data_point = data_point
        self.data_ampl = data_ampl
        self.data_len = data_len

    def cal_len(self, cod):
        if self.depth == 'МГ': n = 0.4
        elif self.depth == 'СГ': n = 1.6
        elif self.depth == 'БГ': n = 12.8
        elif self.depth == 'Б6': n = 12.8  # !
        else:
            n = 0
        return round(cod * n * self.vzvuk / 10000, 2)

    # def cal_len(self, cod):
    #     cod = cod * 1.5 / 100
    #     # print(depth, type(depth))
    #     if self.depth == 'МГ': n = 4
    #     elif self.depth == 'СГ': n = 32
    #     elif self.depth == 'БГ': n = 256
    #     elif self.depth == 'Б6': n = 256     # !
    #     else:
    #         n = 0
    #     return cod * n

#========================================================

    def convt(self, arg=None):
        """Конвертировать в формат ..."""
        import conv_csv
        dir__ = conv_csv.convert(self.dir_cvt)
        self.dir_cvt = dir__

    def help(self, event=None):
        """Окно справки"""
        if self.helpDialog is None:
            self.helpDialog = help_.Window(self, bso_)
        else:
            self.helpDialog.deiconify()

    def quitter(self):
        """Закрыть сокеты и убить окно"""
        if self.ser.is_open():
            self.ser.close_port()
        if self.gser.is_open():
            self.gser.close_port()
        if not bso_:
            if self.pser.is_open():
                self.pser.close_port()
        # main_thread = threading.main_thread()
        # for t in threading.enumerate():
        #     if t is main_thread:
        #         continue
        #     t.join(timeout=2.0)
        try:
            self.root.destroy()
            sys.exit(0)
        except Exception:
            pass

    def exit_(self, arg=None):
        """Обработчик меню Exit"""
        if self.okay_to_exit():
            # sys.stderr = open('err.log', 'a')   #
            self.root.withdraw()
            self.tol_bar.t = 0
            self.flag_gals = False
            shutil.rmtree(bakdir)  # удаляем tmp каталог
            self.after(500, self.quitter)

    def okay_to_exit(self):
        """Подтверждение выхода"""
        reply = box.askokcancel("Выход",
                                "Закончить работу программы?",
                                parent=self.root)
        if reply is False:
            return False
        return True


# import logging
# logging.basicConfig(
# filename = "bso.log",
# format = "%(asctime)s %(message)s", # %(levelname)-10s
# #level = logging.DEBUG
# level = logging.ERROR
# )
# logging.debug('start app')
예제 #33
0
    def __init__(self):
        """
        This method is constructor.
        """
        System()
        Gtk.Window.__init__(self, title="Mosaicode")
        self.resize(System.properties.width, System.properties.height)
        self.main_control = MainControl(self)

        # GUI components
        self.menu = Menu(self)
        self.toolbar = Toolbar(self)
        self.search = SearchBar(self)
        self.block_notebook = BlockNotebook(self)
        self.property_box = PropertyBox(self)
        self.work_area = WorkArea(self)
        self.status = Status(self)
        self.block_menu = BlockMenu()
        self.menu.add_help()

        System.set_log(self.status)

        # vbox main
        # -----------------------------------------------------
        # | Menu
        # -----------------------------------------------------
        # | Toolbar
        # -----------------------------------------------------
        # | V Paned bottom
        # -----------------------------------------------------

        # First Vertical Box
        vbox_main = Gtk.VBox()
        self.add(vbox_main)
        vbox_main.pack_start(self.menu, False, True, 0)
        vbox_main.pack_start(self.toolbar, False, False, 0)
        self.vpaned_bottom = Gtk.Paned.new(Gtk.Orientation.VERTICAL)
        vbox_main.add(self.vpaned_bottom)

        # vpaned_bottom
        # -----------------------------------------------------
        # | hpaned_work_area
        # =====================================================
        # | status
        # -----------------------------------------------------

        self.hpaned_work_area = Gtk.HPaned()
        self.hpaned_work_area.connect("accept-position", self.__resize)
        self.hpaned_work_area.set_position(System.properties.hpaned_work_area)

        self.vpaned_bottom.add1(self.hpaned_work_area)
        self.vpaned_bottom.add2(self.__create_frame(self.status))
        self.vpaned_bottom.set_position(System.properties.vpaned_bottom)
        self.vpaned_bottom.set_size_request(50, 50)

        # hpaned_work_area
        # -----------------------------------------------------
        # | vbox_left      ||   work_area
        # -----------------------------------------------------
        vbox_left = Gtk.VBox(False, 0)
        self.hpaned_work_area.add1(vbox_left)
        self.hpaned_work_area.add2(self.work_area)

        # vbox_left
        # -----------------------------------------------------
        # |search
        # -----------------------------------------------------
        # |vpaned_left
        # -----------------------------------------------------

        vbox_left.pack_start(self.search, False, False, 0)
        self.vpaned_left = Gtk.VPaned()
        vbox_left.pack_start(self.vpaned_left, True, True, 0)

        # vpaned_left
        # -----------------------------------------------------
        # |blocks_tree_view
        # =====================================================
        # |property_box
        # -----------------------------------------------------

        self.vpaned_left.add1(self.__create_frame(self.block_notebook))
        self.vpaned_left.add2(self.__create_frame(self.property_box))
        self.vpaned_left.set_position(System.properties.vpaned_left)

        self.connect("delete-event", self.main_control.exit)
        self.connect("key-press-event", self.__on_key_press)
        self.connect("check-resize", self.__resize)

        self.main_control.init()
예제 #34
0
    def __init__(self):
        '''Init Main screenshot.'''
        # Init.
        self.action = ACTION_WINDOW         # current action status
        # the windows in this workspace coordinate info
        self.screenshot_window_info = get_screenshot_window_info()
        #print "window info:", self.screenshot_window_info
        self.monitor_x, self.monitor_y, self.width, self.height = get_current_monitor_info()
        #self.width = SCREEN_WIDTH           # this monitor width
        #self.height = SCREEN_HEIGHT         # this monitor height
        #self.monitor_x = SCREEN_X           # this monitor source point's x coordinate
        #self.monitor_y = SCREEN_Y           # this monitor source point's y coordinate
        # the screenshot area's x, y, width, height
        self.x = self.y = self.rect_width = self.rect_height = 0

        self.save_op_index = SAVE_OP_AUTO   # current operation when the save button clicked

        #self.buttonToggle = None
        self.drag_position = None
        self.last_drag_position = None
        self.dragStartX = self.dragStartY = self.dragStartOffsetX = self.dragStartOffsetY = 0
        self.textDragOffsetX = self.textDragOffsetY = 0
        
        self.drag_flag = False              # a flag if the selected area can be dragged
        self.show_toolbar_flag = False      # a flag if the toolbar has shown
        self.show_colorbar_flag = False     # a flag if the colorbar has shown
        self.show_text_window_flag = False  # a flag if the text_window has shown
        self.text_drag_flag = False         # a flag if the text_window can be dragged
        self.text_modify_flag = False       # a flag if the text has been modified
        self.draw_text_layout_flag = False  # a flag if the text layout will be drawn
        self.share_to_flag = False          # a flag if the screenshot will be shared
        self.window_flag = True             # a flag if has not selected area or window

        self.is_subprocess = config.OPTION_SUB
        self.saveFiletype = 'png'
        self.saveFilename = config.OPTION_FILE
        
        # make sure the toolbar in this monitor
        self.toolbarOffsetX = self.monitor_x + 10
        self.toolbarOffsetY = self.monitor_y + 10
        #self.toolbarOffsetX = 10
        #self.toolbarOffsetY = 10
        #self.toolbar_height = 50
        
        self.action_size = ACTION_SIZE_SMALL    # the draw action's line width
        self.action_color = "#FF0000"           # the draw action's color
        self.font_name = "Sans"                 # the fontname of text to draw
        self.font_size = 12                     # the fontsize of text to draw
        
        # Init action list.
        self.current_action = None          # current drawing action
        self.action_list = []               # a list of actions have created
        self.current_text_action = None     # current drawing text action
        self.text_action_list = []          # a list of text actions have created
        self.text_action_info = {}          # the created text actions' info

        # Get desktop background.
        # a gtk.gdk.Pixbuf of the desktop_background
        self.desktop_background = self.get_desktop_snapshot()
        # a string containing the pixel data of the pixbuf
        self.desktop_background_pixels= self.desktop_background.get_pixels()
        # the number of the pixbuf channels.
        self.desktop_background_n_channels = self.desktop_background.get_n_channels()
        # the number of bytes between rows.
        self.desktop_background_rowstride = self.desktop_background.get_rowstride()
        
        # Init window.
        self.window = RootWindow(self)
        
        # Init toolbar window.
        self.toolbar = Toolbar(self.window.window, self)
        
        # Init color window.
        self.colorbar = Colorbar(self.window.window, self)

        # right button press menu
        self.right_menu = RightMenu(self)
        # Show.
        self.window.show()
        self.window.set_cursor(ACTION_WINDOW)
        dss.hide()
예제 #35
0
class Application(object):
    def __init__(self, options):
        self.options = options
        self.main_window = MainWindow(self)
        self.session_manager = debugsession.SessionManager(self)
        self.console = Console(self)
        self.main_window.console = self.console
        self.stack = StackViewer(self)
        self.namespace = AllNamespaceViewer(self)
        self.threads = ThreadsViewer(self)
        self.source = SourceViewer(self)
        self.status = StatusBar(self)
        self.breaks = BreakpointViewer(self)
        self.toolbar = Toolbar(self)
        debugsession.connect_events(self)

    def launch(self, filename):
        def _l(filename):
            import threading
            if filename is not None:

                def _t():
                    self.session_manager.launch(True, filename)

                t = threading.Thread(target=_t)
                t.start()

        gobject.idle_add(_l, filename)

    def update_threads(self, event):
        current_thread = event.m_current_thread
        threads_list = event.m_thread_list

        def _u(threads_list, current_thread):
            self.threads.update_threads(threads_list, current_thread)

        gobject.idle_add(_u, threads_list, current_thread)

    def update_thread_broken(self, event):
        print 'threadbroken'
        tid = event.m_tid

        def _u(tid):
            self.threads.broken_thread(tid)

        gobject.idle_add(_u, tid)

    def update_no_threads(self, event):
        print 'nothreads'

    def update_state(self, event):
        state = event.m_state
        print 'state', state

        def _u(state):
            self.status.update_running_status(state)

        def _u2(state):
            self.toolbar.update_state(state)

        def _u3(state):
            self.source.update_state(state)

        gobject.idle_add(_u, state)
        gobject.idle_add(_u2, state)

    def update_frame(self, event):
        print 'frame', event.m_frame_index
        index = event.m_frame_index

        def _u(index):
            self.stack.select_frame(index)

        gobject.idle_add(_u, index)
        self.update_source(-index - 1)

    def update_stack(self, event):
        print 'updatestack'
        stack = event.m_stack
        self._last_stack = stack

        def _u(stack):
            self.stack.update_stack(stack)

        gobject.idle_add(_u, stack)
        self.update_source(-1)

    def update_source(self, index):
        def _u(index):
            si = StackItem(index, *self._last_stack['stack'][index])
            self.source.goto(si.filename, si.linenumber)

        gobject.idle_add(_u, index)

    def update_namespace(self, event):
        def _u():
            self.namespace.update_namespace()

        gobject.idle_add(_u)

    def update_bp(self, event):
        def _u(event):
            act = event.m_action
            if event.m_bp is not None:
                filename = event.m_bp.m_filename
                linenumber = event.m_bp.m_lineno
                index = event.m_bp.m_id
                indices = None
            else:
                filename = None
                linenumber = None
                index = None
                indices = event.m_id_list
            self.breaks.update_bp(act, index, indices, filename, linenumber)

        gobject.idle_add(_u, event)
예제 #36
0
    def __init__(self):
        gtk.Window.__init__(self)
        self.set_size_request(640, 480)
        self.set_default_size(1366, 768)
        #self.set_default_size(800, 600)
        self.winstate = 0
        self.maximize()
        self.connect("delete-event", self.quit)

        self.bindings = gtk.AccelGroup()
        self.add_accel_group(self.bindings)

        self.setup = gtk.PageSetup()
        self.settings = gtk.PrintSettings()

        self.filename = None
        self.update_title()

        icon = gtk.gdk.pixbuf_new_from_file(os.path.join(os.path.dirname(__file__), "..", "images", "canvas-logo.png"))
        self.set_icon(icon)

        vbox = gtk.VBox()
        self.add(vbox)

        self.menu = MenuBar(self)
        vbox.pack_start(self.menu, False, False)

        self.menu.append_menu("_" + _("File"))
        self.menu.append_item(gtk.STOCK_NEW, "new", "<Control>N")
        self.menu.append_item(gtk.STOCK_OPEN, "open", "<Control>O")
        self.menu.append_item(gtk.STOCK_SAVE, "save", "<Control>S")
        self.menu.append_item(gtk.STOCK_SAVE_AS, "save-as", "<Control><Shift>S")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_PAGE_SETUP, "page-setup")
        self.menu.append_item(gtk.STOCK_PRINT_PREVIEW, "print-preview", "<Control><Shift>P")
        self.menu.append_item(gtk.STOCK_PRINT, "print", "<Control>P")
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Document"), True)
        self.menu.append_item(SET_BACKGROUND, "set-background")
        self.menu.ascend()
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Export"), True)
        self.menu.append_item(EXPORT_TO_PDF, "export-to-pdf")
        self.menu.ascend()
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_QUIT, "quit", "<Control>Q")

        self.menu.append_menu("_" + _("Edit"))
        self.menu.append_item(gtk.STOCK_UNDO, "undo", "<Control>Z")
        self.menu.append_item(gtk.STOCK_REDO, "redo", "<Control>Y")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_COPY, "copy", "<Control>C")
        self.menu.append_item(gtk.STOCK_CUT, "cut", "<Control>X")
        self.menu.append_item(gtk.STOCK_PASTE, "paste", "<Control>V")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_DELETE, "delete", "Delete")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_SELECT_ALL, "select-all", "<Control>A")

        self.menu.append_menu("_" + _("View"))
        self.menu.append_toggle(MARGINS_ENABLED, "margins")
        self.menu.append_toggle(GRID, "grid")
        self.menu.append_toggle(GUIDES, "guides")
        self.menu.append_toggle(SNAP_ENABLED, "snap")
        self.menu.append_toggle(_("Z-Order hint"), "hints", toggled = False)
        self.menu.append_separator()
        self.menu.append_toggle(gtk.STOCK_PROPERTIES, "properties")
        self.menu.append_toggle(_("Menubar"), "menubar")
        self.menu.append_toggle(_("Statusbar"), "statusbar")

        self.menu.append_menu("_" + _("Insert"))
        self.menu.append_item(LINE, "line")
        self.menu.append_item(ARC, "arc")
        self.menu.append_item(CURVE, "curve")
        self.menu.append_item(CONNECTOR, "connector")
        self.menu.append_menu(BOX, "box", True)
        self.menu.append_item(BOX, "box")
        self.menu.append_item(SPLIT_HORIZONTALLY, "split-horizontally")
        self.menu.append_item(SPLIT_VERTICALLY, "split-vertically")
        self.menu.append_item(REMOVE_SPLIT, "remove-split")
        self.menu.ascend()
        self.menu.append_item(ROUNDED_BOX, "rounded-box")
        self.menu.append_item(TEXT, "text")
        self.menu.append_item(TABLE, "table")
        self.menu.append_item(CHART, "chart")
        self.menu.append_item(BARCODE, "barcode")
        self.menu.append_item(IMAGE, "image")

        self.menu.append_menu("_" + _("Format"))
        self.menu.append_item(gtk.STOCK_SELECT_FONT, "select-font")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_SELECT_COLOR, "select-color")

        self.menu.append_menu("_" + _("Tools"))
        self.menu.append_item(GROUP, "group", "<Control>G")
        self.menu.append_item(UNGROUP, "ungroup", "<Control><Shift>G")
        self.menu.append_separator()
        self.menu.append_item(BRING_TO_FRONT, "bring-to-front", "<Control>plus")
        self.menu.append_item(BRING_TO_BACK, "bring-to-back", "<Control>minus")
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Zoom"), True)
        self.menu.append_item(gtk.STOCK_ZOOM_FIT, "zoom-fit", "<Control>0")
        self.menu.append_item(gtk.STOCK_ZOOM_100, "zoom-100", "<Control>1")
        self.menu.append_item(gtk.STOCK_ZOOM_IN, "zoom-in", "<Control><Shift>plus")
        self.menu.append_item(gtk.STOCK_ZOOM_OUT, "zoom-out", "<Control><Shift>minus")
        self.menu.ascend()
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Objects alignment"), True)
        self.menu.append_item(ALIGN_OBJECTS_NORTHWEST, "align-objects-northwest")
        self.menu.append_item(ALIGN_OBJECTS_NORTH, "align-objects-north")
        self.menu.append_item(ALIGN_OBJECTS_NORTHEAST, "align-objects-northeast")
        self.menu.append_item(ALIGN_OBJECTS_SOUTHWEST, "align-objects-southwest")
        self.menu.append_item(ALIGN_OBJECTS_SOUTH, "align-objects-south")
        self.menu.append_item(ALIGN_OBJECTS_SOUTHEAST, "align-objects-southeast")
        self.menu.append_item(ALIGN_OBJECTS_WEST, "align-objects-west")
        self.menu.append_item(ALIGN_OBJECTS_CENTER_BOTH, "align-objects-center-both")
        self.menu.append_item(ALIGN_OBJECTS_EAST, "align-objects-east")
        self.menu.append_item(ALIGN_OBJECTS_CENTER_HORIZONTAL, "align-objects-center-horizontal")
        self.menu.append_item(ALIGN_OBJECTS_CENTER_VERTICAL, "align-objects-center-vertical")
        self.menu.ascend()
        self.menu.append_menu("_" + _("Paper alignment"), True)
        self.menu.append_item(ALIGN_PAPER_NORTHWEST, "align-paper-northwest")
        self.menu.append_item(ALIGN_PAPER_NORTH, "align-paper-north")
        self.menu.append_item(ALIGN_PAPER_NORTHEAST, "align-paper-northeast")
        self.menu.append_item(ALIGN_PAPER_SOUTHWEST, "align-paper-southwest")
        self.menu.append_item(ALIGN_PAPER_SOUTH, "align-paper-south")
        self.menu.append_item(ALIGN_PAPER_SOUTHEAST, "align-paper-southeast")
        self.menu.append_item(ALIGN_PAPER_WEST, "align-paper-west")
        self.menu.append_item(ALIGN_PAPER_CENTER_BOTH, "align-paper-center-both")
        self.menu.append_item(ALIGN_PAPER_EAST, "align-paper-east")
        self.menu.append_item(ALIGN_PAPER_CENTER_HORIZONTAL, "align-paper-center-horizontal")
        self.menu.append_item(ALIGN_PAPER_CENTER_VERTICAL, "align-paper-center-vertical")
        self.menu.ascend()

        self.menu.append_menu("_" + _("Window"))
        self.menu.append_item(gtk.STOCK_FULLSCREEN, "fullscreen", "<Control>F")

        self.menu.append_menu("_" + _("Help"), right=True)
        self.menu.append_item(gtk.STOCK_HELP, "help", "F1")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_ABOUT, "about")

        self.menu.show_all()

        htoolbar = Toolbar(HORIZONTAL)
        vbox.pack_start(htoolbar, False, False)

        htoolbar.append(gtk.STOCK_NEW, "new")
        htoolbar.append(gtk.STOCK_OPEN, "open")
        htoolbar.append(gtk.STOCK_SAVE, "save")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_PRINT, "print")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_UNDO, "undo")
        htoolbar.append(gtk.STOCK_REDO, "redo")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_CUT, "cut")
        htoolbar.append(gtk.STOCK_COPY, "copy")
        htoolbar.append(gtk.STOCK_PASTE, "paste")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_DELETE, "delete")
        htoolbar.append_separator()
        htoolbar.append_with_submenu(LINE_STYLE_CONTINUOUS, "line-style-continuous")
        htoolbar.append_to_submenu(LINE_STYLE_POINT_DASH, "line-style-point-dash")
        htoolbar.append_to_submenu(LINE_STYLE_POINT, "line-style-point")
        htoolbar.append_to_submenu(LINE_STYLE_DASH, "line-style-dash")
        htoolbar.append_separator()
        htoolbar.append_with_submenu(gtk.STOCK_ZOOM_FIT, "zoom-fit")
        htoolbar.append_to_submenu(gtk.STOCK_ZOOM_100, "zoom-100")
        htoolbar.append_to_submenu(gtk.STOCK_ZOOM_IN, "zoom-in")
        htoolbar.append_to_submenu(gtk.STOCK_ZOOM_OUT, "zoom-out")
        htoolbar.append_separator()
        htoolbar.append_toggle(MARGINS_ENABLED, "margins")
        htoolbar.append_toggle(GRID, "grid")
        htoolbar.append_toggle(GUIDES, "guides")
        htoolbar.append_toggle(SNAP_ENABLED, "snap")
        htoolbar.append_separator()
        htoolbar.append(EXPORT_TO_PDF, "export-to-pdf")
        htoolbar.append_separator()
        htoolbar.append_toggle(GROUP, "group")
        htoolbar.append_separator()
        htoolbar.append(BRING_TO_FRONT, "bring-to-front")
        htoolbar.append(BRING_TO_BACK, "bring-to-back")
        htoolbar.append_separator()
        htoolbar.append_with_submenu(ALIGN_OBJECTS_CENTER_BOTH, "align-object-center-both")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_NORTHWEST, "align-object-northwest")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_NORTH, "align-object-north")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_SOUTHWEST, "align-object-southwest")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_NORTHEAST, "align-object-northeast")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_SOUTH, "align-object-south")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_SOUTHEAST, "align-object-southeast")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_WEST, "align-object-west")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_EAST, "align-object-east")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_CENTER_HORIZONTAL, "align-object-center-horizontal")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_CENTER_VERTICAL, "align-object-center-vertical")
        htoolbar.append_with_submenu(ALIGN_PAPER_CENTER_BOTH, "align-paper-center-both")
        htoolbar.append_to_submenu(ALIGN_PAPER_NORTHWEST, "align-paper-northwest")
        htoolbar.append_to_submenu(ALIGN_PAPER_NORTH, "align-paper-north")
        htoolbar.append_to_submenu(ALIGN_PAPER_SOUTHWEST, "align-paper-southwest")
        htoolbar.append_to_submenu(ALIGN_PAPER_NORTHEAST, "align-paper-northeast")
        htoolbar.append_to_submenu(ALIGN_PAPER_SOUTH, "align-paper-south")
        htoolbar.append_to_submenu(ALIGN_PAPER_SOUTHEAST, "align-paper-southeast")
        htoolbar.append_to_submenu(ALIGN_PAPER_WEST, "align-paper-west")
        htoolbar.append_to_submenu(ALIGN_PAPER_EAST, "align-paper-east")
        htoolbar.append_to_submenu(ALIGN_PAPER_CENTER_HORIZONTAL, "align-paper-center-horizontal")
        htoolbar.append_to_submenu(ALIGN_PAPER_CENTER_VERTICAL, "align-paper-center-vertical")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_HELP, "help")

        hbox = gtk.HBox()
        vbox.add(hbox)

        vtoolbar = Toolbar()
        vtoolbar.set_style(gtk.TOOLBAR_ICONS)
        hbox.pack_start(vtoolbar, False, False)

        vtoolbar.append(LINE, "line")
        vtoolbar.append(ARC, "arc")
        vtoolbar.append(CURVE, "curve")
        vtoolbar.append(CONNECTOR, "connector")
        vtoolbar.append_with_submenu(BOX, "box")
        vtoolbar.append_to_submenu(SPLIT_HORIZONTALLY, "split-horizontally")
        vtoolbar.append_to_submenu(SPLIT_VERTICALLY, "split-vertically")
        vtoolbar.append_to_submenu(REMOVE_SPLIT, "remove-split")
        vtoolbar.append(ROUNDED_BOX, "rounded-box")
        vtoolbar.append(TEXT, "text")
        vtoolbar.append(BARCODE, "barcode")
        vtoolbar.append(TABLE, "table")
        vtoolbar.append(CHART, "chart")
        vtoolbar.append(IMAGE, "image")

        notebook = gtk.Notebook()
        notebook.set_show_tabs(True)
        notebook.set_show_border(False)
        #notebook.set_tab_pos(gtk.POS_LEFT)
        notebook.set_tab_pos(gtk.POS_RIGHT)
        hbox.add(notebook)

        self.status = Statusbar()
        self.id = self.status.get_context_id(_("Edit mode"))
        vbox.pack_start(self.status, False, False)

        label = gtk.Label(_("Design view"))
        label.set_angle(90)

        self.editor = Editor(self)
        self.editor.set_paper()
        notebook.append_page(self.editor, label)

        label = gtk.Label(_("XML view"))
        label.set_angle(90)

        def get_source_view():
            source = gtk.ScrolledWindow()
            source.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

            view = gtk.TextView()
            self.code = gtk.TextBuffer()
            view.set_buffer(self.code)
            source.add(view)

            return source

        if '--source-editor-test' in sys.argv:
            while True:
                try:
                    from ui.code_editor import SourcePad
                except:
                    source = get_source_view()
                    break

                source = SourcePad(self)
                self.code = source.buffer
                source.set_language("xml")
                break
        else:
            source = get_source_view()

        notebook.append_page(source, label)

        self.menu.connect("new", self.new)
        self.menu.connect("open", self.open)
        self.menu.connect("save", self.save)
        self.menu.connect("save-as", self.save_as)
        self.menu.connect("page-setup", self.page_setup)
        self.menu.connect("export-to-pdf", self.export_to_pdf)
        self.menu.connect("set-background", self.set_background)
        self.menu.connect("quit", self.quit)

        self.menu.connect("cut", self.editor.canvas.cut)
        self.menu.connect("copy", self.editor.canvas.copy)
        self.menu.connect("paste", self.editor.canvas.paste)
        self.menu.connect("delete", self.editor.canvas.delete)
        self.menu.connect("select-all", self.editor.canvas.select_all)

        self.menu.connect("margins", self.editor.canvas.toggle_margins)
        self.menu.connect("grid", self.editor.canvas.toggle_grid)
        self.menu.connect("guides", self.editor.canvas.toggle_guides)
        self.menu.connect("snap", self.editor.canvas.toggle_snap)
        self.menu.connect("hints", self.editor.canvas.toggle_hints)
        self.menu.connect("properties", self.editor.toggle_properties)
        self.menu.connect("menubar", self.toggle_menubar)
        self.menu.connect("statusbar", self.toggle_statusbar)

        self.menu.connect("bring-to-front", self.editor.canvas.bring_to_front)
        self.menu.connect("bring-to-back", self.editor.canvas.bring_to_back)

        self.menu.connect("align-paper-center-horizontal", self.editor.canvas.paper_center_horizontal)

        self.menu.connect("line", self.create, "Line")
        self.menu.connect("curve", self.create, "Curve")
        self.menu.connect("connector", self.create, "Connector")
        self.menu.connect("box", self.create, "Box")
        self.menu.connect("rounded-box", self.create, "Rounded")
        self.menu.connect("text", self.create, "Text")
        self.menu.connect("barcode", self.create, "BarCode")
        self.menu.connect("table", self.create, "Table")
        self.menu.connect("image", self.create, "Image")
        self.menu.connect("chart", self.create, "Chart")

        self.menu.connect("fullscreen", self.fullscreen)
        self.menu.connect("about", self.about)
        self.menu.connect("help", self.help)

        self.menu.connect("split-horizontally", self.editor.canvas.split_horizontally)
        self.menu.connect("split-vertically", self.editor.canvas.split_vertically)
        self.menu.connect("remove-split", self.editor.canvas.remove_split)

        htoolbar.connect("new", self.new)
        htoolbar.connect("open", self.open)
        htoolbar.connect("save", self.save)
        htoolbar.connect("snap", self.editor.canvas.toggle_snap)
        htoolbar.connect("grid", self.editor.canvas.toggle_grid)
        htoolbar.connect("guides", self.editor.canvas.toggle_guides)
        htoolbar.connect("margins", self.editor.canvas.toggle_margins)
        htoolbar.connect("cut", self.editor.canvas.cut)
        htoolbar.connect("copy", self.editor.canvas.copy)
        htoolbar.connect("paste", self.editor.canvas.paste)
        htoolbar.connect("delete", self.editor.canvas.delete)
        htoolbar.connect("bring-to-front", self.editor.canvas.bring_to_front)
        htoolbar.connect("bring-to-back", self.editor.canvas.bring_to_back)
        htoolbar.connect("export-to-pdf", self.export_to_pdf)
        htoolbar.connect("help", self.help)

        vtoolbar.connect("line", self.create, "Line")
        vtoolbar.connect("arc", self.create, "Arc")
        vtoolbar.connect("curve", self.create, "Curve")
        vtoolbar.connect("connector", self.create, "Connector")
        vtoolbar.connect("box", self.create, "Box")
        vtoolbar.connect("rounded-box", self.create, "Rounded")
        vtoolbar.connect("text", self.create, "Text")
        vtoolbar.connect("barcode", self.create, "BarCode")
        vtoolbar.connect("table", self.create, "Table")
        vtoolbar.connect("image", self.create, "Image")
        vtoolbar.connect("chart", self.create, "Chart")

        vtoolbar.connect("split-horizontally", self.editor.canvas.split_horizontally)
        vtoolbar.connect("split-vertically", self.editor.canvas.split_vertically)
        vtoolbar.connect("remove-split", self.editor.canvas.remove_split)

        notebook.connect("switch-page", self.switch)

        self.connect("key-press-event", self.key_press)
예제 #37
0
class L1(object):
    def __init__(self, windowSurface, mainClock, SKY_BLUE, gameData, showFPS):

        self.getFiles = File
        #Create game data
        self.lockedGuns = gameData['lockedGuns']
        self.lockedTools = gameData['lockedTools']
        self.sound = gameData['sound']
        self.runGame = True
        self.showFPS = showFPS

        #Setup theme music
        pygame.mixer.music.load('files//sound//gameTheme.mp3')

        #Constants
        self.BPS = 8 #(Bullets Per Second)
        self.TOTAL_SUPPLIES = 12 #Total Supplies for each powerup
        self.SKY_BLUE = SKY_BLUE #Sky color
        self.TOTAL_COPS = 32 #Total number of all cops in level
        #Variables
        self.windowSurface = windowSurface
        self.clock = mainClock
        #Setup Dr. Taco's Direction
        self.moveRight = False
        self.moveLeft = False
        #Set Start Weapon and tool, and make sure menus are closed.
        self.currentWeapon = '9mm'
        self.currentTool = 'crowbar'
        self.dropDownGun = False
        self.dropDownTool = False
        #Set Basic Values
        self.score = 0
        self.ammo = 30
        self.hit = False
        self.gunButtonCoords = [695, 30, 735, 30, 715, 50]
        self.toolButtonCoords = [395, 30, 435, 30, 415, 50]
        self.officerX = 1500
        self.officerGunX = {'right':abs(self.officerX) + 55, 'left':self.officerX + -3}
        self.gunXlist = []
        self.takeStep = 0
        self.direction = 1
        self.goUp = None
        self.shootBullet = False
        self.message = 'This is the Message Box.'
        self.skill_level = 800
        self.centered = False
        self.drop = False
        self.paused = False
        self.reload = False
        self.endReload = False
        self.endBack = False
        self.die = False
        self.val = None
        self.rapidFire = [0, False]
        self.lifeLeft = 0
        self.endPoint = 0
        self.back = False
        self.tacosCollected = 0
        self.first = True
        self.flame = False

        #Initialize Objects
        self.level_1 = Level_1(self.windowSurface)
        self.tools = Toolbar(self.lockedGuns, self.windowSurface)
        self.gunMenu = selectGunMenu(self.lockedGuns)
        self.toolMenu = selectToolMenu(self.lockedTools)
        self.gunArrowButton = Button(self.windowSurface)
        self.toolArrowButton = Button(self.windowSurface)
        self.DrTaco = Person('Doctor Taco', self.windowSurface, self.officerX, self.officerGunX)
        
        self.wingame = Popups(self.windowSurface)

        #Default lists
        self.copList = []
        self.Xlist = []
        self.num = 700
        #Add a cop every 250 pixels for the range in TOTAL_COPS
        for i in range(0, self.TOTAL_COPS):
            self.Xlist.append(self.num)
            self.num += 250
        self.num = 0

        #Add the cop object
        self.index = 0
        for cop in range(0, self.TOTAL_COPS):
            self.copList.append(AI(self.windowSurface, self.skill_level, self.Xlist[self.index]))
            self.index += 1

        #Add the cops gun
        self.index = 0
        for i in range(0, self.TOTAL_COPS):
            self.gunXlist.append({'right':abs(self.Xlist[self.index]) + 80, 'left':self.Xlist[self.index] + -10})
            self.index += 1

        #Add Supplies to random locations
        self.healthX = []
        self.tacosX = []
        self.tacosY = []
        self.ammoX = []
        self.ammoBoxes = []
        self.healthBoxes = []
        self.tacos = []
        for i in range(0, self.TOTAL_SUPPLIES):
            self.ammoBoxes.append(Powerups(self.windowSurface, self.score))
            self.healthBoxes.append(Powerups(self.windowSurface, self.score))
            for i in range(0, 2):
                self.tacos.append(Powerups(self.windowSurface, self.score))
                self.tacosX.append(random.randint(300, 9000))
                self.tacosY.append(random.randint(300, 490))
            self.healthX.append(random.randint(300, 9000))
            self.ammoX.append(random.randint(300, 9000))

    def play(self, highscore, totalscore):
        #If there is no quit event, (i.e reload or back)
        while self.runGame == True:
            self.stopAll = False
            #Setup rect list and blit background
            self.reload = False
            self.ammoX, self.healthX, self.tacosX, self.endPoint = self.level_1.blitBackground(self.moveRight, self.moveLeft, self.ammoX,
                                                                                               self.healthX, self.tacosX, self.copList, self.centered)
            #Setup all the cops gun position.
            self.index = 0
            for cop in self.copList:
                self.gunXlist[self.index] = {'right':self.copList[self.index].get_rect()[0] + 80, 'left':self.copList[self.index].get_rect()[0] + -10}
                self.index += 1
                
            for event in pygame.event.get():
                self.sound, self.paused, self.reload, self.back = self.tools.addButtons(self.sound, event)
                if event.type == QUIT:
                    self.runGame = False
                    self.stopAll = True
                if event.type == KEYDOWN:
                    if event.key == K_RIGHT:
                        self.direction = 1
                        self.moveRight = True 
                        self.moveLeft = False
                    if event.key == K_LEFT:
                        self.direction = 0
                        self.moveLeft = True
                        self.moveRight = False
                    if event.key == K_UP:
                        if self.goUp == None:
                            self.goUp = True
                    if event.key == K_SPACE:
                        self.shootBullet = True
                        self.rapidFire[1] = True
                if event.type == KEYUP:
                    self.moveRight = False
                    self.moveLeft = False
                    self.shootBullet = False
                    self.rapidFire[1] = False
                    if self.currentWeapon == 'flamethrower':
                        self.shootBullet =  False

                self.dropDownGun = self.gunArrowButton.arrow(self.dropDownGun, event, self.gunButtonCoords)
                self.dropDownTool = self.toolArrowButton.arrow(self.dropDownTool, event, self.toolButtonCoords)
                if self.dropDownGun:
                    self.currentWeapon = self.gunMenu.selectGunButton(self.currentWeapon, event)
                if self.dropDownTool:
                    self.currentTool = self.toolMenu.selectToolButton(self.currentTool, event)

            self.rapidFire[0] += 1
            if self.rapidFire[0] == self.BPS:
                self.rapidFire[0] = 0
                if self.rapidFire[1]:
                    if self.currentWeapon == 'AK-47':
                        self.shootBullet = True

            #Add Health bar, score, message box, buttons, and ammo text to screen
            self.tools.display()
            self.tools.messageBox(self.message)
            self.tools.countScore(self.score)
            self.tools.countAmmo(self.ammo, self.currentWeapon)
            self.sound, self.paused, self.reaload, self.backk = self.tools.addButtons(self.sound, None)
            self.tools.health(self.lifeLeft)

            #Blit select gun menu, select tool menu, and drop down arrows to screen and allow user to select weapon (or gun)
            self.dropDownGun, self.currentWeapon = self.gunMenu.chooseGun(self.windowSurface, self.dropDownGun, self.currentWeapon)
            self.dropDownTool, self.currentTool = self.toolMenu.chooseTool(self.windowSurface, self.dropDownTool, self.currentTool)    
            self.gunArrowButton.blitArrow(self.windowSurface, self.dropDownGun, self.gunButtonCoords)
            self.toolArrowButton.blitArrow(self.windowSurface, self.dropDownTool, self.toolButtonCoords)

            #Get Frames per second and and it to screen
            self.fps = int(self.clock.get_fps())
            self.tools.FPS(self.fps, self.showFPS)

            #If game is not paused, let Dr. Taco walk, jump, and shoot selected weapon
            if self.paused != True:
                #Make it so Dr. Taco can jump and move
                self.takeStep, self.centered = self.DrTaco.walk(self.takeStep, self.direction, self.moveLeft, self.moveRight, self.currentWeapon)
                self.goUp = self.DrTaco.jump(self.goUp)
                #If weapon is the Pistol, put it in Dr. Taco's hand and enable it for use.
                if self.currentWeapon == '9mm':
                    self.shootBullet, self.hit, self.ammo, self.message, self.score, self.officerX, self.drop, self.val, self.val, self.lifeLeft = self.DrTaco.shootPistol(
                        self.shootBullet, self.hit, self.direction, self.officerGunX, self.sound, self.copList, self.ammo, self.message, self.score,
                        lifeLeft = self.lifeLeft)
                #If weapon is the Shotgun, put it in Dr. Taco's hand and enable it for use.
                if self.currentWeapon == 'shotgun':
                    self.shootBullet, self.hit, self.ammo, self.message, self.score, self.officerX, self.drop, self.val, self.lifeLeft = self.DrTaco.shootShotgun(
                        self.shootBullet, self.hit, self.direction, self.officerGunX, self.sound, self.copList, self.ammo, self.message, self.score,
                        lifeLeft = self.lifeLeft)
                #If weapon is the AK-47, put it in Dr. Taco's hand and enable it for use.
                if self.currentWeapon == 'AK-47':
                    self.shootBullet, self.hit, self.ammo, self.message, self.score, self.officerX, self.drop, self.val, self.lifeLeft = self.DrTaco.shootAK(
                        self.shootBullet, self.hit, self.direction, self.officerGunX, self.sound, self.copList, self.ammo, self.message, self.score,
                        lifeLeft = self.lifeLeft)
                    self.shootBullet = False
                #If weapon is the bazooka, put it in Dr. Taco's hand and enable it for use.
                if self.currentWeapon == 'bazooka':
                    self.shootBullet, self.hit, self.ammo, self.message, self.score, self.officerX, self.drop, self.val, self.lifeLeft = self.DrTaco.shootBazooka(
                        self.shootBullet, self.hit, self.direction, self.officerGunX, self.sound, self.copList, self.ammo, self.message, self.score,
                        self.currentWeapon, lifeLeft = self.lifeLeft)
                #If weapon is the flamethrower, put it in Dr. Taco's hand and enable it for use.
                if self.currentWeapon == 'flamethrower':
                    self.shootBullet, self.hit, self.ammo, self.message, self.score, self.officerX, self.drop, self.val, self.lifeLeft, self.flame = self.DrTaco.shootFlame(
                        self.shootBullet, self.hit, self.direction, self.officerGunX, self.sound, self.copList, self.ammo, self.message, self.score,
                        self.currentWeapon, self.lifeLeft)                

                #Make all the cops think
                self.index = 0
                for cop in self.copList:                
                    self.hit, self.endReload, self.endBack, self.lifeLeft = cop.think(self.DrTaco.get_rect(), self.copList[self.index].get_rect()[0], self.gunXlist[self.index],
                                                         self.drop, self.hit, self.sound, self.lifeLeft, self.flame)
                    #If Dr. Taco is dead break out of loop
                    if self.endReload:
                        break
                    if self.endBack:
                        break
                    self.index += 1

            #Blit all the supplies to the screen by running their functions
            self.index = 0
            for box in self.ammoBoxes:
                self.score, self.ammo = box.ammoBox(self.ammoX[self.index], 490, self.DrTaco.get_rect(), self.ammo, self.score, self.sound)
                self.index += 1
            self.index = 0
            for box in self.healthBoxes:
                self.score, self.lifeLeft = box.healthBox(self.healthX[self.index], 490, self.DrTaco.get_rect(), self.lifeLeft, self.sound, self.score)
                self.index += 1
            self.index = 0
            for box in self.tacos:
                self.score, self.tacosCollected = box.taco(self.tacosX[self.index], self.tacosY[self.index],
                                                           self.DrTaco.get_rect(), self.sound, self.score, self.tacosCollected)
                self.index += 1

            #If Dr. Taco has reached the end of the level, display level completed popup and exit loop
            if self.endPoint < 298:
                self.endReload, self.back = self.wingame.wingame(self.score, self.tacosCollected)
            #If the health bar length is too much set it to right size
            if self.lifeLeft >= 20:
                self.lifeLeft = 20

            #Update screen and fill background
            pygame.display.update()
            self.clock.tick()
            self.windowSurface.fill(self.SKY_BLUE)

            #If reload button is clicked exit loop and enter another object
            if self.endReload:
                pygame.mixer.music.stop()
                self.runGame = False
                self.reload = True
            if self.reload:
                pygame.mixer.music.stop()
                self.runGame = False
            if self.back:
                pygame.mixer.music.stop()
                self.runGame = False
            if self.endBack:
                pygame.mixer.music.stop()
                self.runGame = False
                self.back = True

            #Add score to total score
            if self.runGame != True:
                totalscore += self.score
            #Check for high score
            if highscore < self.score:
                highscore = self.score

            #Play music
            if self.sound == True:
                if self.first:
                    pygame.mixer.music.play(-1, 0.0)
                    self.first = False
            else:
                pygame.mixer.music.stop()
                self.first = True
        return self.reload, self.back, highscore, totalscore, self.stopAll
예제 #38
0
class App(object):

    """A simple OpenGL drawing application."""

    def __init__(self, config=default):
        """Create an instance of a PyRysunek application.

        Optional arguments:
        config -- dictionary containing configuration values (see `config.default`)
        """
        self.config = config
        self.width, self.height = self.config.window_size

        self.toolbar = Toolbar(self.config.toolbar)
        self.context = Context(
            objects = ObjectList(),
            color_picker = self.toolbar.color_picker,
        )

        self._init_opengl()

        if config.auto_load_on_start:
            self.load()

    def _init_opengl(self):
        """OpenGL initialization commands."""
        glutInit(sys.argv)
        glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE)
        glutInitWindowSize(self.width, self.height)
        glutInitWindowPosition(*self.config.window_position)
        glutCreateWindow(self.config.window_title)

        # Assign callback functions
        glutDisplayFunc(self.display)
        glutReshapeFunc(self.reshape)
        glutMouseFunc(self.mouse)
        glutMotionFunc(self.motion)
        glutIdleFunc(self.display)
        glutKeyboardFunc(self.keyboard)

        # Set background color
        glClearColor(*self.config.bg_color)

    def display(self):
        """Callback to draw the application in the screen."""
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()
        # Clear frame buffer
        glClear(GL_COLOR_BUFFER_BIT)

        for obj in self.context.objects:
            obj.draw()

        # Make sure that toolbar is on top of everything
        self.toolbar.draw()

        # Flush and swap buffers
        glutSwapBuffers()

    def reshape(self, w, h):
        """Callback to adjust the coordinate system whenever a window is
        created, moved or resized.
        """
        self.width, self.height = w, h
        glViewport(0, 0, w, h)
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        # Define left, right, bottom, top coordinates
        gluOrtho2D(0.0, w, h, 0.0)

    def mouse(self, button, state, x, y):
        """Callback to handle mouse click events."""
        if (x, y) in self.toolbar:
            self.toolbar.mouse(button, state, x, y)
        else:
            if state == GLUT_DOWN:
                self.toolbar.current_tool.mouse_down(x, y, self.context)

            elif state == GLUT_UP:
                self.toolbar.current_tool.mouse_up(x, y, self.context)

        if DEBUG:
            print "<Mouse click event>"
            print "  button=%s, state=%s, x=%s, y=%s" % (button, state, x, y)
            print "  current_tool = %s" % self.toolbar.current_tool
            print "  len(objects) = %s" % len(self.context.objects)
            print "  objects[-3:] = %s" % self.context.objects[-3:]

    def motion(self, x, y):
        """Callback to handle mouse drag events.

        This method is called by OpenGL/GLUT when a mouse button is pressed
        and movement occurs.

        """
        self.toolbar.current_tool.mouse_move(x, y, self.context)

    def keyboard(self, key, x, y):
        """Callback to handle key down events."""
        if key == "\x1b":
            # Exit on `ESC` keycode.
            sys.exit(0)
        elif key == "\x13":
            # Ctrl+s
            self.save()
        elif key == "\x12":
            # Ctrl+r
            self.load()
        else:
            # Propagate event to toolbar.
            self.toolbar.keyboard(key, x, y)

    def save(self):
        """Save the current objects to disk.

        Fail silently if `self.config.temp_file` fails to open.

        """
        try:
            temp_file = open(self.config.temp_file, "wb")
            pickle.dump(self.context.objects, temp_file)
            temp_file.close()
            if DEBUG:
                print "<Saved objects>"
        except IOError:
            if DEBUG:
                print "<Failed to save objects>"

    def load(self):
        """Load objects from disk.

        Fail silently if `self.config.temp_file` fails to open.

        """
        try:
            temp_file = open(self.config.temp_file, "rb")
            self.context.objects = pickle.load(temp_file)
            temp_file.close()
            if DEBUG:
                print "<Load objects>"
        except IOError:
            if DEBUG:
                print "<Failed to load objects>"
예제 #39
0
    def createWidgets(self):
        """ Creates and lays out the widgets for the mainwindow."""
        # create Menus:
        self.menubar = tk.Menu(self.mainframe)
        filemenu = tk.Menu(self.menubar, tearoff=0)
        mnuimport = tk.Menu(filemenu, tearoff=0)
        mnuimport.add_command(label="Target list", command=self._file_menu_import_target_list)
        mnuimport.add_command(label="Switch list", command=self._file_menu_import_switch_list)
        filemenu.add_command(label="New search", command=self._file_menu_new_search, underline=1)
        filemenu.add_cascade(label="Import", menu=mnuimport)
        filemenu.add_separator()
        filemenu.add_command(label="Settings", command=self._file_menu_settings, underline=0)
        filemenu.add_command(label="Exit", command=self.quit, underline=1, accelerator="Ctrl+X")
        #--end-- File menu build

        #--start-- edit menu build
        editmenu = Menu(self.menubar, tearoff=0)
        editmenu.add_command(label="Add target(s)", underline=4, accelerator="Ctrl-T", command=self._edit_menu_add_target_to_list)
        editmenu.add_command(label="Edit selected target", command=self._edit_menu_edit_selected_target)
        editmenu.add_command(label="Delete selected target", command=self._edit_menu_del_selected_target)
        editmenu.add_separator()
        editmenu.add_command(label="Add host(s)", underline=4, accelerator="Ctrl-H", command=self._edit_menu_add_host_to_list)
        editmenu.add_command(label="Edit selected host", command=self._edit_menu_edit_selected_host)
        editmenu.add_command(label="Delete selected host", command=self._edit_menu_del_selected_host)
        editmenu.add_separator()
        editmenu.add_command(label="Clear log window", command=self.logg.clear)
        #--end-- edit menu build

        #--start-- view menu
        viewmenu = Menu(self.menubar, tearoff=0)
        viewmenu.add_checkbutton(label="Show/hide Logg", onvalue=True, offvalue=False, variable=self.viewlogg, command=self._viewmenu_show_window_pane)
        #--end-- viewmenu
        
        #--start-- help menu build
        hlpmenu = tk.Menu(self.menubar, tearoff=0)
        hlpmenu.add_command(label="Help", command=self._help_menu_help)
        hlpmenu.add_command(label="About", command=self._help_menu_about)
        #--end-- help menu build
        
        #--start-- adding menus to main menu
        self.menubar.add_cascade(label="File", menu=filemenu)
        self.menubar.add_cascade(label="Edit", menu=editmenu)
        self.menubar.add_cascade(label="View", menu=viewmenu)
        self.menubar.add_cascade(label="Help", menu=hlpmenu)
        #--end-- adding menus to main menu
        try:
            self.config(menu=self.menubar)
        except AttributeError:
            print("this faild!!!!")
            # master is a toplevel window (Python 1.4/Tkinter 1.63)
            tk.call(self, "config", "-menu", self.menubar)

        #create Toolbar
        toolbar = Toolbar(parent=self.mainframe)
        toolbar.add(wtype="button", gfxpath=self.gfxpath + "start.png",
                    tooltip="Start the search", command=self.addtext)
        toolbar.add(wtype="button", gfxpath=self.gfxpath + "new.png",
                    tooltip="Clears all results and start fresh")
        toolbar.add(wtype="separator")
##        toolbar.add(wtype="button", gfxpath=self.gfxpath + "addtarget.png",
##                    tooltip="Add target or a range of targets to targetslist", command=self.list_add)
##        toolbar.add(wtype="button", gfxpath=self.gfxpath + "addhost.png",
##                    tooltip="Add a host or range of hosts to hostslist")
##        toolbar.add(wtype="separator")
        toolbar.add(wtype="button", gfxpath=self.gfxpath + "exit.png",
                    tooltip="Exits the program. (Ctrl-X)", command=self.quit)
        toolbar.show()

        # create Statusbar
        self.status = StringVar()
        self.statusbar = Label(self, textvariable=self.status, bd=1, relief=SUNKEN, anchor=W)
        self.statusbar.pack(side=BOTTOM, fill=X)
        self.status.set("Idle")
        
        #create input boxes:
        self.inputframe = Frame(self.mainframe, width=50, bd=1, relief=GROOVE, padx=12, pady=12)
        Label(self.inputframe, text="Targets to look for:", pady=2).pack()
        self.list_targets = Listbox(self.inputframe, selectmode=BROWSE)
        self.list_targets.pack(side=TOP, pady=5)
        self.listwidgets[self.list_targets.winfo_name] = 'targets'
        self.list_targets_toolbar = Toolbar(parent=self.inputframe)
        self.list_targets_toolbar.add(wtype="button", gfxpath=self.gfxpath + "addtarget.png",
                                      tooltip="Add new target", command=lambda: self.list_add(widget=self.list_targets))
        self.list_targets_toolbar.add(wtype="button", gfxpath=self.gfxpath + "edit.png",
                                      tooltip="Edit selected target", command=lambda: self.edit_item(widget=self.list_targets))
        self.list_targets_toolbar.add(wtype="button", gfxpath=self.gfxpath + "trash.png",
                                      tooltip="Delete selected target", command=lambda: self.delete_item(widget=self.list_targets))
        self.list_targets_toolbar.show()
        Frame(self.inputframe, height=2, bd=1, relief=SUNKEN).pack(fill=X, padx=0, pady=10)
        Label(self.inputframe, text="Hosts to scan:", pady=2).pack()
        self.list_hosts = Listbox(self.inputframe, selectmode=BROWSE)
        self.list_hosts.pack(side=TOP, pady=5)
        self.listwidgets[self.list_hosts.winfo_name] = 'hosts'
        self.list_hosts_toolbar = Toolbar(parent=self.inputframe)
        self.list_hosts_toolbar.add(wtype="button", gfxpath=self.gfxpath + "addhost.png",
                                    tooltip="Add new host", command=lambda: self.list_add(self.list_hosts))
        self.list_hosts_toolbar.add(wtype="button", gfxpath=self.gfxpath + "edit.png",
                                    tooltip="Edit selected host", command=lambda: self.edit_item(widget=self.list_hosts))
        self.list_hosts_toolbar.add(wtype="button", gfxpath=self.gfxpath + "trash.png",
                                    tooltip="Delete selected host", command=lambda: self.delete_item(widget=self.list_hosts))
        self.list_hosts_toolbar.show()
        self.inputframe.pack(side=RIGHT, fill=Y)
예제 #40
0
class Inventory:
    # Global size for all item rects
    cell_size = (64, 64)
    # Global padding between inventory cells
    cell_padding = 4

    def __init__(self, capacity: int, def_pos: tuple, def_cells_per_row: int,
                 color: pygame.Color, cell_color: pygame.Color):
        # The inventory's contents (a list of items)
        self.contents = [None] * capacity
        # Maximum number of items the inventory can hold
        self.capacity = capacity

        # Default position of the UI in pixels
        self.def_pos = def_pos
        # Default width of the inventory in item cells
        self.def_cells_per_row = def_cells_per_row

        # Colours of inventory rect and small grid rects respectively
        self.color = color
        self.cell_color = cell_color

        # Apply defaults (defaults are used if these params are not specified by in the open() function
        self.pos = def_pos
        self.cells_per_row = def_cells_per_row
        self.rect = pygame.Rect(self.pos, self.get_size())

        #self.search_bar = SearchBar(new_bar_pos = (def_pos[0], def_pos[1]-30))
        self.tool_bar = Toolbar(self.rect.width, self.rect.topleft,
                                pygame.Color(100, 100, 100), color)
        # Inventory menu is initialized to a "closed" state
        self.is_open = False

    # Getters & setters

    def get_contents(self):
        return self.contents

    def get_capacity(self):
        return self.capacity

    def get_pos(self):
        return self.pos

    def get_size(self):
        width = (self.cell_size[0] +
                 self.cell_padding) * self.cells_per_row + self.cell_padding
        height = (self.cell_size[1] + self.cell_padding) * math.ceil(
            self.capacity / float(self.cells_per_row)) + self.cell_padding
        return (width, height)

    # Inventory manipulation

    def take_item(self, screen_pos: tuple):
        if isOpen:
            i = self.pos_to_index(screen_pos)
            if i is not None:
                return self.take_item(i)
        return None

    def take_item(self, index: int):
        return self.place_item(None, index)

    def place_item(self, item: item.Item, screen_pos: tuple):
        if isOpen:
            i = self.pos_to_index(screen_pos)
            if i is not None:
                return self.place_item(item, i)
        return None

    def place_item(self, item: item.Item, index: int):
        if self.contents[
                index] is not None and item is not None and self.contents[
                    index].get_id() == item.get_id():
            total_num = item.num + self.contents[index].num
            if total_num <= item.max_stack:
                self.contents[index].set_num(total_num)
                taken = None
            else:
                item.set_num(total_num - item.max_stack)
                self.contents[index].set_num(item.max_stack)
                taken = item

        else:
            taken = self.contents[index]
            self.contents[index] = item

        return taken

    def append_item(self, item: item.Item):
        if item is None:
            return

        for i in range(0, self.capacity):
            if (self.contents[i] is
                    None) or (self.contents[i].get_id() == item.get_id()
                              and self.contents[i].num < item.max_stack):
                remaining = self.place_item(item, i)
                if remaining is not None:
                    self.append_item(remaining)
                return

    # Main Interface

    def menu_update(self, event):
        # Update returns the number of the button that was pressed, set that to a number that we can use
        sort_num = self.tool_bar.update(event)

        # Yandere Dev let's GOOOOOOOOOOO!
        if sort_num == 0:
            print(len(self.contents))
            sorted = sort.sort_by_id(self.contents)
        elif sort_num == 1:
            sorted = sort.sort_by_name(self.contents)
        elif sort_num == 2:
            sorted = sort.sort_by_type(self.contents)
        elif sort_num == 3:
            sorted = sort.sort_by_number(self.contents)
            self.contents = sorted
            return
        elif sort_num == 4:
            sorted = sort.sort_by_highlight(self.contents)
        else:
            return

        self.contents = [None] * self.capacity
        for i in sorted:
            self.append_item(i)

    def items_update(self, event, cursor_item):
        if (event.type == pygame.MOUSEBUTTONDOWN
                and cursor_item is None) or (event.type == pygame.MOUSEBUTTONUP
                                             and cursor_item is not None):
            i = self.pos_to_index(event.pos)
            if i is not None:
                return self.place_item(cursor_item, i)

        return cursor_item

    def open(self, pos=None, cells_per_row=None):
        if pos is None:
            pos = self.def_pos
        if cells_per_row is None:
            cells_per_row = self.def_cells_per_row
        self.pos = pos
        self.cells_per_row = cells_per_row
        self.rect = pygame.Rect(self.pos, self.get_size())
        self.is_open = True
        self.tool_bar.set_active(True)

    def close(self):
        self.tool_bar.set_active(False)
        self.is_open = False

    def draw(self, screen: pygame.display):
        pygame.draw.rect(screen, self.color, self.rect)

        for i in range(0, self.capacity):
            cell_pos = self.index_to_pos(i)
            # Draw cell background
            pygame.draw.rect(screen, self.cell_color,
                             pygame.Rect(cell_pos, self.cell_size))

            # If cell is not empty, draw contained item
            if self.contents[i] is not None:
                self.contents[i].set_pos(cell_pos)
                self.contents[i].display(screen)

        for i in range(0, self.capacity):
            # Display amount of items and description
            if self.contents[i] is not None:
                self.contents[i].description(screen, pygame.mouse.get_pos())

        # Draw toolbar and get text from  text_input
        self.tool_bar.display(screen)
        self.search_items(self.tool_bar.get_text())

    # Utility

    def pos_to_index(self, pos: tuple):
        rel_pos = (pos[0] - self.pos[0], pos[1] - self.pos[1])
        size = self.get_size()

        if rel_pos[0] < 0 or rel_pos[0] > size[0] or rel_pos[1] < 0 or rel_pos[
                1] > size[1]:
            return None

        x = int((rel_pos[0] + float(self.cell_padding) / 2) /
                (self.cell_size[0] + self.cell_padding))
        y = int((rel_pos[1] + float(self.cell_padding) / 2) /
                (self.cell_size[1] + self.cell_padding))
        i = x + (y * self.cells_per_row)

        if i < self.capacity:
            return int(i)
        else:
            return None

    def index_to_pos(self, index: int):
        x = self.pos[0] + (index % self.cells_per_row) * (
            self.cell_size[0] + self.cell_padding) + self.cell_padding
        y = self.pos[1] + int(index / self.cells_per_row) * (
            self.cell_size[1] + self.cell_padding) + self.cell_padding
        return (x, y)

    # Use searchBar and inventory to find items from user input and highlights them
    def search_items(self, search_term):
        #print('Search term: ' + search_term)
        if search_term == '':
            self.unhighlight_all_items()
            return

        for i in self.contents:
            if i is not None:
                i.set_highlight(True)
                if search_term.lower() in i.get_name().lower():
                    i.set_highlight_color(pygame.Color(255, 255, 0))
                    i.highlight_sort = True
                else:
                    i.set_highlight_color(pygame.Color(100, 100, 100))
                    i.highlight_sort = False

    def unhighlight_all_items(self):
        for i in self.contents:
            if i is not None:
                i.set_highlight(False)
                i.highlight_sort = False
예제 #41
0
class PianoRoll(Frame):

    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.parent = parent

        self._init_data()
        self._init_ui()

    def _init_data(self):
        self._initial_dir = None
        self._filepath = None
        self._dirty = False

    def _init_ui(self):
        menu_cb = {
            'new': self._new_cmd,
            'open': self._open_cmd,
            'save': self._save_cmd,
            'save_as': self._save_as_cmd,
            'exit': self._exit_cmd
        }

        toolbar_cb = {
            'snap': self.set_snap,
            'zoom': {
                'zoomx': self.set_zoomx,
                'zoomy': self.set_zoomy
            },
            'tool': self.set_canvas_tool
        }

        bottombar_cb = {
            'length': self.set_canvas_length,
            'timesig': self.set_canvas_timesig
        }

        root = self._root()
        menu = PianoRollMenu(root, menu_cb)
        root.config(menu=menu)
        root.title(make_title("Untitled", self._dirty))

        try:
            image = PhotoImage(file=ICON_IMG_PATH)
            root.tk.call('wm', 'iconphoto', root._w, image)
        except TclError:
            print "Couldn't load icon file"

        self.toolbar = Toolbar(self, toolbar_cb)
        self.piano_roll_frame = PianoRollFrame(
            self, lambda *args, **kwargs: self.set_dirty(True))
        self.bottombar = BottomBar(self, bottombar_cb)

        self.toolbar.pack(side=TOP, fill=X)
        self.bottombar.pack(side=BOTTOM, fill=X)
        self.piano_roll_frame.pack(fill=BOTH, expand=True)
        self.pack(fill=BOTH, expand=True)

    def _new_cmd(self):
        clear_notes = True

        if self._dirty:
            title = "New Score"
            msg = "Save changes before starting a new score?"
            answer = askyesnocancel(title, msg)

            if answer == None:
                return
            elif answer:
                if self._filepath:
                    self._save_cmd()
                else:
                    clear_notes = self._save_as_cmd()

        self.set_bottombar_length((2, 1, 0))
        self.set_bottombar_timesig((4, 4))
        if clear_notes:
            self.piano_roll_frame.grid_canvas.remove_note('all')

        self._filepath = None
        self.set_dirty(False)

    def _open_cmd(self):
        if self._dirty:
            title = "New Score"
            msg = "Save changes before opening a new score?"
            answer = askyesnocancel(title, msg)

            if answer == None:
                return
            elif answer:
                if self._filepath:
                    self._save_cmd()
                elif not self._save_as_cmd():
                    return False

        filename = askopenfilename(
            parent=self, initialdir=self._initial_dir)
        if not filename: return False

        self._initial_dir = os.path.dirname(filename)
        self._filepath = filename

        song_data = load_song(filename)
        self.set_bottombar_length(song_data['length'])
        self.set_bottombar_timesig(song_data['timesig'])
        self.piano_roll_frame.setup(song_data['notes'])

        self.set_dirty(False)

    def _save_cmd(self):
        if not self._filepath:
            self._save_as_cmd()
        else:
            data = self.piano_roll_frame.get_song_state()
            save_song(self._filepath, data)

            self.set_dirty(False)

    def _save_as_cmd(self):
        from tkFileDialog import asksaveasfilename

        initial_file = os.path.basename(
            self._filepath or "Untitled")
        filename = asksaveasfilename(
            parent=self, initialdir=self._initial_dir,
            initialfile=initial_file)
        if not filename: return False

        self._filepath = filename
        self._initial_dir = os.path.dirname(filename)

        data = self.piano_roll_frame.get_song_state()
        save_song(filename, data)

        self.set_dirty(False)

        return True

    def _exit_cmd(self):
        if self._dirty:
            title = "New Score"
            msg = "Save changes before exiting?"
            answer = askyesnocancel(title, msg)

            if answer == None:
                return
            elif answer:
                if self._filepath:
                    self._save_cmd()
                elif not self._save_as_cmd():
                    return False

        self.quit()

    def set_snap(self, snap_value):
        self.piano_roll_frame.set_subdiv(snap_value)

    def set_zoomx(self, zoomx):
        self.piano_roll_frame.set_zoomx(zoomx)

    def set_zoomy(self, zoomy):
        self.piano_roll_frame.set_zoomy(zoomy)

    def set_canvas_length(self, length):
        self.piano_roll_frame.set_length(length)

    def set_bottombar_length(self, length):
        self.bottombar.set_length(length)

    def set_canvas_tool(self, tool):
        self.piano_roll_frame.grid_canvas.set_tool(tool)

    def set_toolbox_tool(self, value):
        self.toolbar.set_tool(value)

    def set_canvas_timesig(self, timesig):
        self.piano_roll_frame.set_timesig(timesig)
        self.bottombar.set_max_beat_count(timesig[0])

    def set_bottombar_timesig(self, timesig):
        self.bottombar.set_timesig(timesig)

    def set_dirty(self, dirty):
        self._dirty = dirty
        self._root().title(make_title(
            os.path.basename(self._filepath or "Untitled"), dirty))
예제 #42
0
    def __init__(self):
        gtk.Window.__init__(self)

        set_props(self, title='OCFS2 Console',
                        default_width=600,
                        default_height=460,
                        border_width=0)

        self.connect('delete_event', self.cleanup)

        notebook = gtk.Notebook()
        notebook.set_tab_pos(gtk.POS_TOP)

        info_frames = []

        for desc, info in info_items:
            frame = gtk.Frame()
            set_props(frame, shadow=gtk.SHADOW_NONE,
                             border_width=0)

            notebook.add_with_properties(frame, 'tab_label', desc)

            info_frames.append((frame, info))

        self.pv = PartitionView(info_frames)
        self.pv.set_size_request(-1, 100)

        vbox = gtk.VBox()
        self.add(vbox)

        menu = Menu(self)

        menubar, sel_items, unmounted_items = menu.get_widgets()
        vbox.pack_start(menubar, expand=False, fill=False)

        self.pv.add_sel_widgets(sel_items)
        self.pv.add_unmount_widgets(unmounted_items)

        toolbar = Toolbar(self)

        tb, buttons, filter_entry = toolbar.get_widgets()
        vbox.pack_start(tb, expand=False, fill=False)

        self.pv.add_mount_widgets([buttons['unmount']])
        self.pv.add_unmount_widgets([buttons['mount']])

        filter_entry.connect('activate', self.refresh)

        self.pv.set_filter_entry(filter_entry)

        vpaned = gtk.VPaned()
        vpaned.set_border_width(4)
        vbox.pack_start(vpaned, expand=True, fill=True)

        scrl_win = gtk.ScrolledWindow()
        set_props(scrl_win, hscrollbar_policy=gtk.POLICY_AUTOMATIC,
                            vscrollbar_policy=gtk.POLICY_AUTOMATIC)
        scrl_win.add(self.pv)
        vpaned.pack1(scrl_win)

        vpaned.pack2(notebook)

        self.pv.grab_focus()
        self.show_all()

        self.refresh()
예제 #43
0
import tkinter as tk
from toolbar import Toolbar
from text_write import TextWrite
from statusbar import Statusbar
from linebar import Linebar
from menu import Menu

main_application = tk.Tk()
toolbar = Toolbar(main_application)
linebar = Linebar(main_application)
text_write = TextWrite(main_application, toolbar)
statusbar = Statusbar(main_application, text_write, linebar)
menu = Menu(main_application, text_write, statusbar, toolbar, linebar)

main_application.mainloop()
예제 #44
0
    def __init__(self, windowSurface, mainClock, SKY_BLUE, gameData, showFPS):

        self.getFiles = File
        #Create game data
        self.lockedGuns = gameData['lockedGuns']
        self.lockedTools = gameData['lockedTools']
        self.sound = gameData['sound']
        self.runGame = True
        self.showFPS = showFPS

        #Setup theme music
        pygame.mixer.music.load('files//sound//gameTheme.mp3')

        #Constants
        self.BPS = 8 #(Bullets Per Second)
        self.TOTAL_SUPPLIES = 12 #Total Supplies for each powerup
        self.SKY_BLUE = SKY_BLUE #Sky color
        self.TOTAL_COPS = 32 #Total number of all cops in level
        #Variables
        self.windowSurface = windowSurface
        self.clock = mainClock
        #Setup Dr. Taco's Direction
        self.moveRight = False
        self.moveLeft = False
        #Set Start Weapon and tool, and make sure menus are closed.
        self.currentWeapon = '9mm'
        self.currentTool = 'crowbar'
        self.dropDownGun = False
        self.dropDownTool = False
        #Set Basic Values
        self.score = 0
        self.ammo = 30
        self.hit = False
        self.gunButtonCoords = [695, 30, 735, 30, 715, 50]
        self.toolButtonCoords = [395, 30, 435, 30, 415, 50]
        self.officerX = 1500
        self.officerGunX = {'right':abs(self.officerX) + 55, 'left':self.officerX + -3}
        self.gunXlist = []
        self.takeStep = 0
        self.direction = 1
        self.goUp = None
        self.shootBullet = False
        self.message = 'This is the Message Box.'
        self.skill_level = 800
        self.centered = False
        self.drop = False
        self.paused = False
        self.reload = False
        self.endReload = False
        self.endBack = False
        self.die = False
        self.val = None
        self.rapidFire = [0, False]
        self.lifeLeft = 0
        self.endPoint = 0
        self.back = False
        self.tacosCollected = 0
        self.first = True
        self.flame = False

        #Initialize Objects
        self.level_1 = Level_1(self.windowSurface)
        self.tools = Toolbar(self.lockedGuns, self.windowSurface)
        self.gunMenu = selectGunMenu(self.lockedGuns)
        self.toolMenu = selectToolMenu(self.lockedTools)
        self.gunArrowButton = Button(self.windowSurface)
        self.toolArrowButton = Button(self.windowSurface)
        self.DrTaco = Person('Doctor Taco', self.windowSurface, self.officerX, self.officerGunX)
        
        self.wingame = Popups(self.windowSurface)

        #Default lists
        self.copList = []
        self.Xlist = []
        self.num = 700
        #Add a cop every 250 pixels for the range in TOTAL_COPS
        for i in range(0, self.TOTAL_COPS):
            self.Xlist.append(self.num)
            self.num += 250
        self.num = 0

        #Add the cop object
        self.index = 0
        for cop in range(0, self.TOTAL_COPS):
            self.copList.append(AI(self.windowSurface, self.skill_level, self.Xlist[self.index]))
            self.index += 1

        #Add the cops gun
        self.index = 0
        for i in range(0, self.TOTAL_COPS):
            self.gunXlist.append({'right':abs(self.Xlist[self.index]) + 80, 'left':self.Xlist[self.index] + -10})
            self.index += 1

        #Add Supplies to random locations
        self.healthX = []
        self.tacosX = []
        self.tacosY = []
        self.ammoX = []
        self.ammoBoxes = []
        self.healthBoxes = []
        self.tacos = []
        for i in range(0, self.TOTAL_SUPPLIES):
            self.ammoBoxes.append(Powerups(self.windowSurface, self.score))
            self.healthBoxes.append(Powerups(self.windowSurface, self.score))
            for i in range(0, 2):
                self.tacos.append(Powerups(self.windowSurface, self.score))
                self.tacosX.append(random.randint(300, 9000))
                self.tacosY.append(random.randint(300, 490))
            self.healthX.append(random.randint(300, 9000))
            self.ammoX.append(random.randint(300, 9000))
예제 #45
0
class App:
    windowDimY = 14
    windowDimX = 18
    windowWidth = 0
    windowHeight = 0
    toolbarWidth = 200
    player = 0
    apple = 0
    toolbar = 0
    dataCollect = 0
    displayq = False
 
    def __init__(self,dq,state,freq):
        self._running = True
        self._display_surf = None
        self._image_surf = None
        self._apple_surf = None

        self.game = Game()
        self.player = Player(3,self.windowDimX, self.windowDimY)
        self.windowWidth = self.windowDimX*self.player.step
        self.windowHeight = self.windowDimY*self.player.step 
        self.toolbar = Toolbar(self.toolbarWidth, self.windowWidth, self.windowHeight)
        self.apple = Apple(randint(0,self.windowDimX-1), randint(0,self.windowDimY-1))
        self.dataCollect = DataCollector()
        self.displayq=dq
        self.state_size = state
        self.frequency = freq

    def on_init(self):
        pygame.init()
        if(self.displayq):
            self._display_surf = pygame.display.set_mode((self.windowWidth+self.toolbarWidth,self.windowHeight), pygame.HWSURFACE)
            pygame.display.set_caption('Pygame Snake game!')
            self._image_surf = pygame.image.load("images/game_objects/smake.png").convert()
            self._apple_surf = pygame.image.load("images/game_objects/smapple.png").convert()
            self.toolbar.load_images()
        self._running = True
        # self.savepath = "frames/"+time.strftime("%Y%m%d-%H%M%S")
        # os.mkdir(self.savepath)
 
    def on_event(self, event):
        if event.type == QUIT:
            self._running = False
 
    def on_loop(self): 
        self.player.update()

        # does snake collide with itself?
        for i in range(2,self.player.length):
            if self.game.isCollision(self.player.x[0],self.player.y[0],self.player.x[i], self.player.y[i],self.player.step-1):
                print("You lose! Collision with yourself: ")
                print("x[0] (" + str(self.player.x[0]) + "," + str(self.player.y[0]) + ")")
                print("x[" + str(i) + "] (" + str(self.player.x[i]) + "," + str(self.player.y[i]) + ")")
                self.player.crashed = True
                
        # does snake eat apple?
        for i in range(0,self.player.length):
            if self.game.isCollision(self.apple.x,self.apple.y,self.player.x[i], self.player.y[i],self.player.step-1):
                self.apple.x = randint(0,self.windowDimX-1) * self.player.step
                self.apple.y = randint(0,self.windowDimY-1) * self.player.step
                print("apple x=",self.apple.x,"apple y=",self.apple.y)
                self.player.eatenApple = True
 
        #does snake collide with wall?
        if(self.player.x[0]<0 or self.player.x[0]>=self.windowWidth or self.player.y[0]<0 or self.player.y[0]>=self.windowHeight):
            print("You lose! Collision with wall: ")
            print("x[0] (" + str(self.player.x[0]) + "," + str(self.player.y[0]) + ")")
            self.player.crashed = True
        
        pass

    def on_render(self, state):
        self._display_surf.fill((0,0,0))
        self.player.draw(self._display_surf, self._image_surf)
        self.apple.draw(self._display_surf, self._apple_surf)
        self.toolbar.draw(self._display_surf, self.player.direction, state)
        pygame.display.flip()
 
    def on_cleanup(self):
        pygame.quit()

    # initializing agent before the 1st move
    def init_agent(self, agent):
        state_init1 = agent.get_state(game, self.player, self.food) #first state after random placement
        #first action
        
    def reset_player(self):
        self.player = Player(3,self.windowDimX, self.windowDimY)
        #print(self.player.x)
        #print(self.player.y)

    def on_execute(self,speed):
        print('starting execution!')
        params = parameters()
        agent = dqnagent(params,self.state_size) #initialize the agent!
        if(agent.load_weights): #load weights maybe
            agent.model.load_weights(agent.weights)
            print("loaded the weights")

        counter = 0 #how many games have been played/trials done
        record = 0 #highest score

        #---------------------------------------------------------------------------
        #------------------------- LOOP THRU EPISODES ------------------------------
        #---------------------------------------------------------------------------

        while counter<params['episodes']: #still have more trials to do
            counter += 1
            print(counter)

            print("\nEPISODE ", counter, "\n")

            if not params['train']: # if you're not training it, no need for exploration
                agent.epsilon = 0
            else:
                agent.epsilon = 1.0 - ((counter -1) * params['epsilon_decay_linear'])#exploration/randomness factor that decreases over time

            #print("EPSILON = ", agent.epsilon, "\n")

            if self.on_init() == False:
                self._running = False

            #print("PLAYER\tx : ", self.player.x,"\ty : ", self.player.y, "\n")
            duration = 0

            #---------------------------------------------------------------------------
            #--------------------------- INDIVIDUAL EPISODE ----------------------------
            #---------------------------------------------------------------------------
            # indexx = 0
            while(self._running):
                if(counter%self.frequency==0):
                    self.dataCollect.record(self.player.x, self.player.y, self.apple.x, self.apple.y)
                duration+=1
                #print("\nMOVE : ", duration, "\n")
                if(self.displayq):
                    pygame.event.pump()
                    keys = pygame.key.get_pressed() 
                    if (keys[K_ESCAPE]):
                        exit(0)
                oldstate = agent.get_state(self, self.player, self.apple)
                #print("\noldstate = ", oldstate)


                #--------------------------- GET AGENT ACTION ----------------------------

                if random() < agent.epsilon: #every so often random exploration
                    action = randint(0,3) #random action
                    #print("random action : ",action)
                else: #Actionprecited by agent
                    state = oldstate.reshape(1,self.state_size**2+8)
                    predictedq= agent.model.predict(state) # predicts the q values for the action in that state
                    action = np.argmax(predictedq[0]) #maximum (highest q) action
                    #print("predicted action : ", action, "\tq-values : ", predictedq)


                #---------------------------- EXECUTE ACTION -----------------------------

                print(action)
                self.player.do_move(action) #do the action
                self.on_loop()
                newstate = agent.get_state(self, self.player, self.apple) #new state from the action we've taken
                reward = agent.set_reward(self.player)
                #print("newstate = ", newstate)
                #print("reward = ", reward)
                #print("crashed = ", self.player.crashed, "\n")


                #---------------------------- SHORT TRAINING -----------------------------

                if(params['train']):
                    agent.train_short_memory(oldstate,action, reward, newstate, self.player.crashed)
                    agent.remember(oldstate,action, reward, newstate, self.player.crashed)


                #------------------------------ RENDER GAME ------------------------------

                self._running = not(self.player.crashed)
                if(self.displayq):
                    self.on_render(newstate)
                # if(counter%self.frequency==0):
                #     self.on_render(newstate)
                #     pygame.image.save(self._display_surf,savepath+str(indexx))
                time.sleep (speed/1000.0)
                # indexx +=1


            #---------------------------------------------------------------------------
            #----------------------- TRAINING & DATA COLLECTION ------------------------
            #--------------------------------------------------------------------------- 

            if(params['train']):
                agent.replay_new(agent.memory, params['batch_size'])
            
            
            # self.dataCollect.add(self.player.length,duration,agent.epsilon,agent.history.losses)
            self.dataCollect.add(self.player.length,duration,agent.epsilon, 0.0)
            self.dataCollect.save()
            #print(agent.history.losses.length())
            #agent.history.losses = []
            self.player.reset(3,self.windowDimX, self.windowDimY )
            self.on_cleanup()

        #---------------------------------------------------------------------------
        #------------------------------ DATA OUTPUT --------------------------------
        #--------------------------------------------------------------------------- 
        if(params['train']):
             os.mkdir(params['weights_path_save'])
             agent.model.save_weights(params['weights_path_save']+'/weights.hdf5')
        self.dataCollect.save()
예제 #46
0
 def __init__(self, parent = None):
     Toolbar.__init__(self, parent)
     self.label = 'toolbar'
     self.background = ''
예제 #47
0
def run(states, level):

    # Set up the window for this game state
    gameWindow = pygame.display.get_surface()
    pygame.display.set_caption("Editor: " + level)

    # Get the window width and height
    rect = gameWindow.get_rect()
    SCREEN_WIDTH = rect.width
    SCREEN_HEIGHT = rect.height

    # Create Pygame clock to regulate frames
    clock = pygame.time.Clock()

    # Set up sprite groups
    sprites = pygame.sprite.Group()
    dummies = pygame.sprite.Group()
    Dummy.containers = sprites, dummies

    player = None

    # Load and parse the level text file
    leveltext = open(level, "r")
    for line in leveltext:
        line = line.split()
        if len(line) > 0:
            if line[0] == "dimensions":
                LEVEL_WIDTH, LEVEL_HEIGHT = int(line[1]), int(line[2])
            elif line[0] == "player":
                if player != None:
                    player.kill()
                player = Dummy(line)
            else:
                Dummy(line)

    # Create the camera
    camera = Camera(0, 0, LEVEL_WIDTH, LEVEL_HEIGHT)

    # Create the toolbar
    toolbar = Toolbar(SCREEN_WIDTH)

    # Create the variables for editor tools
    clickStart = [0, 0]
    justSaved = False
    
    makingPlatform = False

    while True:

        # Get events on the event queue
        for event in pygame.event.get():
            if event.type == QUIT:
                return states["quit"]
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    return states["menu"]
                elif event.key == K_w:
                    camera.setSpeedY(camera.getSpeedY() - 5)
                elif event.key == K_a:
                    camera.setSpeedX(camera.getSpeedX() - 5)
                elif event.key == K_s:
                    if pygame.key.get_mods() & KMOD_CTRL:
                        leveltext = open(level, "w")
                        # Save level dimensions
                        leveltext.write("dimensions " + str(LEVEL_WIDTH) + " " + str(LEVEL_HEIGHT) + "\n")
                        # Add all dummy objects to level data
                        for dummy in dummies:
                            leveltext.write(dummy.getDataString())
                        justSaved = True
                        print "Level saved as " + level
                    else:
                        camera.setSpeedY(camera.getSpeedY() + 5)
                elif event.key == K_d:
                    camera.setSpeedX(camera.getSpeedX() + 5)
                elif event.key == K_SPACE:
                    toolbar.toggle()
                elif event.key == K_1:
                    toolbar.setTool("player")
                elif event.key == K_2:
                    toolbar.setTool("platform")
                elif event.key == K_3:
                    toolbar.setTool("enemy")
                elif event.key == K_4:
                    toolbar.setTool("datboi")
            elif event.type == KEYUP:
                if event.key == K_w:
                    camera.setSpeedY(camera.getSpeedY() + 5)
                elif event.key == K_a:
                    camera.setSpeedX(camera.getSpeedX() + 5)
                elif event.key == K_s:
                    if not justSaved:
                        camera.setSpeedY(camera.getSpeedY() - 5)
                    else:
                        justSaved = False
                elif event.key == K_d:
                    camera.setSpeedX(camera.getSpeedX() - 5)
            elif event.type == MOUSEBUTTONDOWN:
                if event.button == 1:
                    
                    mouse = pygame.mouse.get_pos()
                    toolbarButton = toolbar.handleMouse(mouse, event.button)
                    
                    if toolbarButton == "none":
                        clickStart = snapToGrid([mouse[0] + camera.getX(), mouse[1] + camera.getY()])
                        if toolbar.getTool() == "platform":
                            makingPlatform = True
                        elif toolbar.getTool() == "enemy":
                            Dummy(["enemy", str(clickStart[0]), str(clickStart[1])])
                        elif toolbar.getTool() == "datboi":
                            Dummy(["datboi", str(clickStart[0]), str(clickStart[1] - 32)])
                        elif toolbar.getTool() == "player":
                            # Replace the old player dummy with the new one
                            if player != None:
                                player.kill()
                            player = Dummy(["player", str(clickStart[0]), str(clickStart[1])])

                    elif toolbarButton == "quit":

                        return states["menu"]
                            
                    elif toolbarButton == "save":
                        leveltext = open(level, "w")
                        # Save level dimensions
                        leveltext.write("dimensions " + str(LEVEL_WIDTH) + " " + str(LEVEL_HEIGHT) + "\n")
                        # Add all dummy objects to level data
                        for dummy in dummies:
                            leveltext.write(dummy.getDataString())
                        print "Level saved as " + level
                    
                elif event.button == 3:
                    mouse = pygame.mouse.get_pos()
                    for dummy in dummies:
                        if dummy.rect.left <= camera.getX() + mouse[0] <= dummy.rect.right and dummy.rect.top <= camera.getY() + mouse[1] <= dummy.rect.bottom:
                            dummy.kill()
                            break
            elif event.type == MOUSEBUTTONUP:
                if event.button == 1:
                    if toolbar.getTool() == "platform" and makingPlatform:
                        createPlatform(camera, clickStart)
                    makingPlatform = False

        camera.move()

        gameWindow.fill((18, 188, 255))
        for sprite in sprites:
            gameWindow.blit(sprite.image, (sprite.rect.left - camera.getX() + sprite.getOffset()[0], sprite.rect.top - camera.getY() + sprite.getOffset()[1]))

        if toolbar.getTool() == "platform" and pygame.mouse.get_pressed()[0] and makingPlatform:
            drawPreviewRect(gameWindow, camera, clickStart)

        drawGuidelines(gameWindow, camera, SCREEN_WIDTH, SCREEN_HEIGHT)
        drawBorderlines(gameWindow, camera, LEVEL_WIDTH, LEVEL_HEIGHT)

        toolbar.draw(gameWindow)

        clock.tick(60)
        
        pygame.display.flip()