Ejemplo n.º 1
0
class Application(tk.Frame):
    _title = "Game of 15"

    def __init__(self, parent=None):
        super().__init__(parent)
        self._parent = parent
        self.winfo_toplevel().title(self._title)
        self.grid(sticky="NEWS")
        self.columnconfigure(0, weight=1)
        self.rowconfigure(1, weight=1)

        self.__menu = MenuBar(self,
                              on_new_game=self._on_new_game,
                              on_exit=self._on_exit)
        self.__menu.grid(row=0, column=0)
        self.__game_field = GameField(self, on_win=self._on_win)
        self.__game_field.grid(row=1, column=0)

    def _on_new_game(self):
        self.__game_field.reset_field()

    def _on_win(self):
        # NOTE: Задержка нужна для того, чтобы UI успел перерироваться перед отображением сообщения
        self.after(1, self._process_win)

    def _process_win(self):
        tk_msg.showinfo(self._title, "You won!")
        self._on_new_game()

    def _on_exit(self):
        self._parent.destroy()
Ejemplo n.º 2
0
class MainWindows(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.setGeometry(0, 30, 900, 650)
        self.setWindowTitle(_(u'Power Management'))
        self.setWindowIcon(QtGui.QIcon('icons/power-icon.png'))
        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)
        self.change_context(DashbordViewWidget)

    def change_context(self, context_widget, *args, **kwargs):

        # instanciate context
        self.view_widget = context_widget(parent=self, *args, **kwargs)

        # refresh menubar
        self.menubar.refresh()

        # attach context to window
        self.setCentralWidget(self.view_widget)

    def open_dialog(self, dialog, modal=False, *args, **kwargs):
        d = dialog(parent=self, *args, **kwargs)
        d.setModal(modal)
        d.exec_()
Ejemplo n.º 3
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.setGeometry(0, 30, 900, 650)
        self.setWindowTitle(_(u'Power Management'))
        self.setWindowIcon(QtGui.QIcon('icons/power-icon.png'))
        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)
        self.change_context(DashbordViewWidget)
Ejemplo n.º 4
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(900, 650)
        self.setWindowTitle('Principale')
        self.setWindowIcon(QtGui.QIcon('icons/fad.png'))

        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)

        self.change_context(DashbordViewWidget)
Ejemplo n.º 5
0
    def __init__(self, regions):
        Display.__init__(self, regions)
        self.root.title("ViewPY: A Data Viewing Program")

        self.menubar = MenuBar(self.root)
        self.mainframe = ttk.Frame(self.root, padding='5 5 5 5')
        self.mainframe.pack()
        self.canvas = Canvas(self.mainframe,
                             width=800,
                             height=800,
                             background='white')
        self.draw = CanvasDrawing(self.canvas, self.regions)
Ejemplo n.º 6
0
class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(900, 650)
        self.setWindowTitle(_(u"AN Budgets Manager"))
        self.setWindowIcon(QtGui.QIcon("images/icon32.png"))

        self._account = None

        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)

        if not period_has_budgets(current_period()):
            from balanceupdateview import BalanceUpdateWidget

            create_empty_budgets(current_period())
            self.change_context(BalanceUpdateWidget, force_current=True)
        else:
            self.change_context(BalanceViewWidget)

    def getaccount(self):
        return self._account

    def setaccount(self, value):
        if not isinstance(value, (Account, None.__class__)):
            raise ValueError(_(u"account must be an Account or None."))
        self._account = value

    def clear_account(self):
        self.account = None

    account = property(getaccount, setaccount)

    def change_context(self, context_widget, *args, **kwargs):
        # remove account before switching
        self.clear_account()

        # instanciate context
        self.view_widget = context_widget(parent=self, *args, **kwargs)

        # refresh menubar
        self.menubar.refresh()

        # attach context to window
        self.setCentralWidget(self.view_widget)

    def open_dialog(self, dialog, modal=False, *args, **kwargs):
        d = dialog(parent=self, *args, **kwargs)
        d.setModal(modal)
        d.exec_()
Ejemplo n.º 7
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self._parent = parent
        self.winfo_toplevel().title(self._title)
        self.grid(sticky="NEWS")
        self.columnconfigure(0, weight=1)
        self.rowconfigure(1, weight=1)

        self.__menu = MenuBar(self,
                              on_new_game=self._on_new_game,
                              on_exit=self._on_exit)
        self.__menu.grid(row=0, column=0)
        self.__game_field = GameField(self, on_win=self._on_win)
        self.__game_field.grid(row=1, column=0)
Ejemplo n.º 8
0
    def __init__(self, **kwargs):
        super(Designer, self).__init__(**kwargs)
        self.root_name = ""
        self.popup = None
        self.file = ""
        
        # A count variable to give ids to generated widget
        self.count = 0

        #This variable updates to True when ctrl is pressed
        self.ctrl_pressed = False
        
        #Instantiate the WidgetTree
        self.widget_tree = WidgetTree(self)
        self.widget_tree_box.add_widget(self.widget_tree)
        
        #Instantiate MenuBar
        self.menubar = MenuBar(designer = self, pos_hint = {'x':0,'top':1}, \
                            canvas_area = self.canvas_area, size_hint = (.70,None),height = 25)
        self.add_widget(self.menubar)
        
        #Instantiate right widgets bar
        # We update the same widgets bar, and dont create new instances everytime
        self.widgetbar = NewWidgetsMenu(self)
        self.rightbox.add_widget(self.widgetbar)
        
        #Initialize the keyboard and set up handlers for key press and release
        self.canvas_area._keyboard = Window.request_keyboard(self._keyboard_closed,self)
        self.canvas_area._keyboard.bind(on_key_down=self._on_keyboard_down)
        self.canvas_area._keyboard.bind(on_key_up = self._on_keyboard_up)
        # Setup canvas for highlighting
        with self.canvas.after:
            self.gcolor = Color(1, 1, 0, .25)
            PushMatrix()
            self.gtranslate = Translate(0, 0, 0)
            self.grotate = Rotate(0, 0, 0, 1)
            self.gscale = Scale(1.)
            self.grect = Rectangle(size=(0, 0))
            PopMatrix()
        # Instantiate Statusbar
        self.status_bar = StatusBar(size_hint = (1,.05))
        self.leftbox.add_widget(self.status_bar)
        
        #Show properties binding
        # self.widget -> updated on_touch_down in 'canvas_area'
        # So, whenever we have a new self.widget, we call show_properties
        self.bind(widget = self.show_properties)
        self.bind(widget = self.widget_tree.select_highlighted)
Ejemplo n.º 9
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()
Ejemplo n.º 10
0
    def initSubWidget(self):
        # 右上角关闭等最小化按钮
        self.menuBar = MenuBar(self)
        #self.menuBar.hide()
        self.menuBar.show()

        #开启监听,接受云主机发送的信息
        
        #USB
        

        #监视是否有关闭的window进程

        #重启网络信息提示窗口
        self.waitingDlg = InfoHintDialog(None)

        #重启网络线程
        #虚拟机打开可控线程
        

        # 加载窗口

        
        #广播监听
        self.broadcast = WaitingBroadCast()
Ejemplo n.º 11
0
class Layout(Display):
    def __init__(self, regions):
        Display.__init__(self, regions)
        self.root.title("ViewPY: A Data Viewing Program")

        self.menubar = MenuBar(self.root)
        self.mainframe = ttk.Frame(self.root, padding='5 5 5 5')
        self.mainframe.pack()
        self.canvas = Canvas(self.mainframe,
                             width=800,
                             height=800,
                             background='white')
        self.draw = CanvasDrawing(self.canvas, self.regions)

    def set_layout(self):
        self.menubar.add_all_menus()
        self.menubar.build_popupmenu(self.canvas)
        self.draw.setup()
        self.canvas.grid(column=0, row=0, rowspan=8, sticky=(E, W, N, S))
        close = ttk.Button(self.mainframe,
                           text='Quit',
                           command=self.close_window)
        scale = ttk.Button(self.mainframe,
                           text='Set color scale',
                           command=self.color_scaler)
        vict = ttk.Label(self.mainframe, text='You did it')
        close.grid(column=1, row=0, sticky=(E, W))
        scale.grid(column=1, row=1, sticky=(E, W))
        vict.grid(column=1, row=2, sticky=(E, W))

        self.root.mainloop()

    def color_scaler(self):
        top = Toplevel(self.root)
        cs = ColorScaler(top, self.regions, self.draw)
        cs.main()

    def close_window(self):
        self.root.destroy()

    def save(self):
        # This is all just untested code at the moment
        ps = self.canvas.postscript(colormode='color')
        img = Image.open(io.BytesIO(ps.encode('utf-8')))
        img.save("test.jpg")
Ejemplo n.º 12
0
	def __init__(self, master=None):
		Frame.__init__(self, master)
		self.menubar = MenuBar(self)
                self.menubar.master.pack({'side':'top', 'fill':'x'})
                self.menubar.pack({'fill':'x'})
		self.create_file_menu()
		self.Squares = Squares
		self.create_canvas()
		self.pack()
Ejemplo n.º 13
0
class Board(Frame):
	def __init__(self, master=None):
		Frame.__init__(self, master)
		self.menubar = MenuBar(self)
                self.menubar.master.pack({'side':'top', 'fill':'x'})
                self.menubar.pack({'fill':'x'})
		self.create_file_menu()
		self.Squares = Squares
		self.create_canvas()
		self.pack()

	def create_file_menu(self):
		self.file = self.menubar.new('File')
		self.file.add('command', {'label':'Quit', 'command':quit_game})

	def create_canvas(self):
		BoardWidth = Cell * 15
		self.draw = Canvas(self, {"width" : `BoardWidth`, "height" : `BoardWidth`})
Ejemplo n.º 14
0
    def __init__(self,
                 name,
                 menubar,
                 idle_icon_path=ICON_UNKNOWN,
                 open_icon_path=None,
                 function=None,
                 is_folder=False):
        self.name = name  # Name of app
        self.menubar = menubar  # The parent menubar
        self.function = function

        if is_folder:
            self.function = self.toggle_is_open

            idle_icon_path = ICON_FOLDER
            open_icon_path = ICON_FOLDER_OPEN

        self.idle_rect = pygame.Rect(0, 0, APP_DIMENSION, APP_DIMENSION)
        self.selected_rect = pygame.Rect(0, 0, APP_DIMENSION + UI_PADDING,
                                         APP_DIMENSION + UI_PADDING)
        self.rect = self.idle_rect

        self.idle_icon = pygame.transform.scale(
            pygame.image.load(idle_icon_path), self.idle_rect.size)
        self.selected_icon = pygame.transform.scale(self.idle_icon,
                                                    self.selected_rect.size)
        self.open_icon = pygame.transform.scale(
            pygame.image.load(idle_icon_path if open_icon_path ==
                              None else open_icon_path), self.idle_rect.size)
        self.open_selected_icon = pygame.transform.scale(
            self.open_icon, self.selected_rect.size)
        self.icon = self.idle_icon

        self.sub_apps = []
        self.sub_app_menubar = MenuBar(
            self.menubar.screen, self.menubar.font,
            self.menubar.rect[1] + APP_MENUBAR_OFFSET)

        self.is_selected = False
        self.is_open = False

        self.resize()
Ejemplo n.º 15
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(900, 650)
        self.setWindowTitle('Principale')
        self.setWindowIcon(QtGui.QIcon('icons/fad.png'))

        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)

        self.change_context(DashbordViewWidget)
Ejemplo n.º 16
0
    def __init__(self, parent=None):
        super(fMain, self).__init__(parent)

        self.setWindowTitle("Transient Spectra Analyzer")

        self.resize(1800, 1000)

        self.console = Console(self)
        self.matrix = None  # object of LFP matrix

        self.addDockWidget(Qt.RightDockWidgetArea, self.console)
        # fixing the resize bug https://stackoverflow.com/questions/48119969/qdockwidget-splitter-jumps-when-qmainwindow-resized
        # self.resizeDocks([self.dockTreeWidget], [270], Qt.Horizontal)
        self.resizeDocks([self.console], [200], Qt.Horizontal)
        # self.setCorner(Qt.BottomLeftCorner, Qt.LeftDockWidgetArea)

        self.coor_label = QLabel()  # coordinates

        self.plot_widget = PlotWidget(
            set_coordinate_func=self.coor_label.setText, parent=self)
        self.SVD_widget = SVDWidget(self)
        self.fit_widget = FitWidget(None, self)

        self.tabWidget = QtWidgets.QTabWidget(self)
        self.tabWidget.addTab(self.plot_widget, "Data")
        self.tabWidget.addTab(self.SVD_widget, "SVD + EFA")
        self.tabWidget.addTab(self.fit_widget, "Fit")

        self.tabWidget.currentChanged.connect(self.tabChanged)

        self.setCentralWidget(self.tabWidget)

        self.createStatusBar()
        self.logger = Logger(self.console.show_message,
                             self.statusBar().showMessage)
        sys.stdout = Transcript()

        self.user_namespace = UserNamespace(self)

        self.setMenuBar(MenuBar(self))
        Settings.load()

        self.update_recent_files()

        Console.push_variables({'main_widget': self})

        Console.execute_command(
            "from LFP_matrix import LFP_matrix\nimport fitmodels as m\n"
            "import matplotlib.pyplot as plt\nfrom Widgets.fit_widget import FitWidget\n"
            "import augmentedmatrix")

        Console.push_variables({'pw': self.plot_widget})
        Console.push_variables({'fw': self.fit_widget})
        Console.push_variables({'sw': self.SVD_widget})
Ejemplo n.º 17
0
	def initGui(self, screen_width, screen_height):
		bar_height = 30
		
		self._statusbar = StatusBar(text=u"", panel_size=bar_height)
		self._toolbar = ToolBar(title=u"Toolbar", button_style=0)
		self._menubar = MenuBar(min_size=(screen_width, bar_height), position=(0, 0))
		
		# Set up root widget
		self._rootwidget = pychan.widgets.VBox(padding=0, vexpand=1, hexpand=1)
		self._rootwidget.min_size = \
		self._rootwidget.max_size = (screen_width, screen_height)
		self._rootwidget.opaque = False
		
		self._dockareas[DOCKAREA['left']] = DockArea("left")
		self._dockareas[DOCKAREA['right']] = DockArea("right")
		self._dockareas[DOCKAREA['top']] = DockArea("top")
		self._dockareas[DOCKAREA['bottom']] = DockArea("bottom")

		self._toolbarareas[DOCKAREA['left']] = pychan.widgets.VBox(margins=(0,0,0,0))
		self._toolbarareas[DOCKAREA['right']] = pychan.widgets.VBox(margins=(0,0,0,0))
		self._toolbarareas[DOCKAREA['top']] = pychan.widgets.HBox(margins=(0,0,0,0))
		self._toolbarareas[DOCKAREA['bottom']] = pychan.widgets.HBox(margins=(0,0,0,0))
		
		# This is where the map will be displayed
		self._centralwidget = pychan.widgets.VBox(vexpand=1, hexpand=1)
		self._centralwidget.opaque = False
		
		middle = pychan.widgets.HBox(padding=0, vexpand=1, hexpand=1)
		middle.opaque = False
		
		# Pychan bug? Adding a spacer instead of a container creates
		# a gap after the right dockarea
		middle.addChild(self._toolbarareas['left'])
		middle.addChild(self._dockareas['left'])
		middle.addChild(self._centralwidget)
		#middle.addSpacer(pychan.widgets.Spacer())
		middle.addChild(self._dockareas['right'])
		middle.addChild(self._toolbarareas['right'])
		
		self._rootwidget.addChild(self._menubar)
		#self._rootwidget.addChild(self._toolbar)
		self._rootwidget.addChild(self._toolbarareas['top'])
		self._rootwidget.addChild(self._dockareas['top'])
		self._rootwidget.addChild(middle)
		self._rootwidget.addChild(self._dockareas['bottom'])
		self._rootwidget.addChild(self._toolbarareas['bottom'])
		self._rootwidget.addChild(self._statusbar)

		self._toolbar.setDocked(True)
		self.dockWidgetTo(self._toolbar, "top")
		
		self._rootwidget.show()
Ejemplo n.º 18
0
class MainWindows(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(900, 650)
        self.setWindowTitle('Principale')
        self.setWindowIcon(QtGui.QIcon('icons/fad.png'))

        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)

        self.change_context(DashbordViewWidget)

    # pour changer les pages
    def change_context(self, context_widget, *args, **kwargs):

        # instanciate context
        self.view_widget = context_widget(parent=self, *args, **kwargs)

        # refresh menubar
        self.menubar.refresh()

        # attach context to window
        self.setCentralWidget(self.view_widget)

    def closeEvent(self, event):
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes |
            QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def open_dialog(self, dialog, modal=False, *args, **kwargs):
        d = dialog(parent=self, *args, **kwargs)
        d.setModal(modal)
        d.exec_()
Ejemplo n.º 19
0
class MainWindows(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(900, 650)
        self.setWindowTitle('Principale')
        self.setWindowIcon(QtGui.QIcon('icons/fad.png'))

        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)

        self.change_context(DashbordViewWidget)

    # pour changer les pages
    def change_context(self, context_widget, *args, **kwargs):

        # instanciate context
        self.view_widget = context_widget(parent=self, *args, **kwargs)

        # refresh menubar
        self.menubar.refresh()

        # attach context to window
        self.setCentralWidget(self.view_widget)

    def closeEvent(self, event):
        reply = QtGui.QMessageBox.question(
            self, 'Message', "Are you sure to quit?",
            QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def open_dialog(self, dialog, modal=False, *args, **kwargs):
        d = dialog(parent=self, *args, **kwargs)
        d.setModal(modal)
        d.exec_()
Ejemplo n.º 20
0
class App():

    def __init__(self):

        self.app = Window()
        self.app.set_size(400,70)
        self.app.set_title("Searchapp")

        self.menuu = MenuBar()
        self.vbox = Gtk.VBox(False, 10)
        self.vbox.pack_start(self.menuu.return_menu(), False, False, 0)

        self.textentry = Gtk.Entry()
        self.textentry.connect("activate", self.do_stuff)

        self.table = Gtk.Table(2, 1, False)
        self.app.add_to_win(self.table)
        self.table.attach(self.vbox, 0, 1, 0, 1)
        self.table.attach(self.textentry, 0, 1, 1, 2, xpadding=10, ypadding=10)

        accGroup = Gtk.AccelGroup()
        key, modifier = Gtk.accelerator_parse('Escape')
        accGroup.connect(key, modifier, Gtk.AccelFlags.VISIBLE, Gtk.main_quit)
        self.app.add_accel_group(accGroup)

        self.app.show_all()

    def do_stuff(self, widget):

        text = widget.get_text() # Gets text from widget
        parsed = text.split(" ", 1) # Splits until the first space

        with open('config.json', 'rb') as json_file:
            data = json.load(json_file)
            alldata = data['all']
            commandsdata = data['commands']
            if parsed[0] == '!default' and parsed[1] == 'none':
                StuffDoer().set_default_none()
            if parsed[0] == '!default' and parsed[1] != 'none':
                StuffDoer().set_default(parsed[1])
            if commandsdata[0]['val'] == 'true':
                StuffDoer().search_default(text)
            if commandsdata[0]['val'] == 'false' and len(parsed) > 1:
                StuffDoer().search_common(parsed[0], parsed[1])
            else:
                dialog2 = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO,Gtk.ButtonsType.OK, "Error")
                dialog2.format_secondary_text("Doesn't work that way. See 'How to' on the Menu.")
                dialog2.run()
                dialog2.destroy()
Ejemplo n.º 21
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(900, 650)
        self.setWindowTitle(_(u"AN Budgets Manager"))
        self.setWindowIcon(QtGui.QIcon("images/icon32.png"))

        self._account = None

        self.menubar = MenuBar(self)
        self.setMenuBar(self.menubar)

        if not period_has_budgets(current_period()):
            from balanceupdateview import BalanceUpdateWidget

            create_empty_budgets(current_period())
            self.change_context(BalanceUpdateWidget, force_current=True)
        else:
            self.change_context(BalanceViewWidget)
Ejemplo n.º 22
0
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        #initialize menu
        self.config(menu=MenuBar(self))
        self.title('FIFA 17 Auto Buyer')
        self.geometry('950x650-5+40')
        self.minsize(width=650, height=450)

        # bind ctrl+a
        if(platform == 'darwin'):
            self.bind_class("Entry", "<Command-a>", self.selectall)
        else:
            self.bind_class("Entry", "<Control-a>", self.selectall)

        self.status = StatusBar(self)
        self.status.pack(side='bottom', fill='x')
        self.status.set_credits('0')

        self.appFrame = Application(self)
        self.appFrame.pack(side='top', fill='both', expand='True')
Ejemplo n.º 23
0
    def __init__(self):

        self.app = Window()
        self.app.set_size(400,70)
        self.app.set_title("Searchapp")

        self.menuu = MenuBar()
        self.vbox = Gtk.VBox(False, 10)
        self.vbox.pack_start(self.menuu.return_menu(), False, False, 0)

        self.textentry = Gtk.Entry()
        self.textentry.connect("activate", self.do_stuff)

        self.table = Gtk.Table(2, 1, False)
        self.app.add_to_win(self.table)
        self.table.attach(self.vbox, 0, 1, 0, 1)
        self.table.attach(self.textentry, 0, 1, 1, 2, xpadding=10, ypadding=10)

        accGroup = Gtk.AccelGroup()
        key, modifier = Gtk.accelerator_parse('Escape')
        accGroup.connect(key, modifier, Gtk.AccelFlags.VISIBLE, Gtk.main_quit)
        self.app.add_accel_group(accGroup)

        self.app.show_all()
Ejemplo n.º 24
0
class MainWindow(QWidget):
       
    def __init__(self,parent = None):
        super(MainWindow,self).__init__(parent)      
        
        self.TYPE_VM = "offline"
        #链接状态
        self.currentLinkState = False
        self.vmListLength = 99
        self.buttonState = True
        self.startLessonFlag = False
        
        self.alllessonstart = False
        
        self.initSubWidget()
        
        #绑定相应的信号和槽函数
        self.bandSignalSlot()

        #self.localMac = globalfunc.get_mac_address()

        #self.waitingTimer = QTimer()
        #self.waitingTimer.start(5000)
        #self.connect(self.waitingTimer, SIGNAL("timeout()"), self.auto_spice)
        #self.flag = True


    def initSubWidget(self):
        # 右上角关闭等最小化按钮
        self.menuBar = MenuBar(self)
        #self.menuBar.hide()
        self.menuBar.show()

        #开启监听,接受云主机发送的信息
        
        #USB
        

        #监视是否有关闭的window进程

        #重启网络信息提示窗口
        self.waitingDlg = InfoHintDialog(None)

        #重启网络线程
        #虚拟机打开可控线程
        

        # 加载窗口

        
        #广播监听
        self.broadcast = WaitingBroadCast()
        
    
    def auto_spice(self):
        serverIp = "192.168.0.29"
        #serverIp = "192.168.1.32"
        argcList = ["smep://%s/?port=%s" % (serverIp, "5901")] 
        if self.flag:
            print "argcList:%s"  % argcList
            self.flag = False
            os.system("killall window")
            QProcess.startDetached("/opt/ccr-student/window/window", argcList)

    def tryRebindPort(self):
        self.broadcast.bindUdpPort()
        #self.tcpServer.bindTcpPort()

    def bandSignalSlot(self):
        
        #点击设置,工具或关于按钮时发送的信号
        self.connect(self.menuBar, SIGNAL("showToolDialog"),self.slotShowToolDialog)
        
        #接收到广播发送的消息,执行相应的操作
        self.connect(self.broadcast, SIGNAL("operaterCmd"),self.slotOperateBroadcastCMD)
        
        
    def slotDownloadError(self,vmname):
        
        self.initLocalVm()
    
    def initLocalVm(self):
        self.TYPE_VM = StoreInfoParser.instance().getVmType()
        if self.TYPE_VM == "offline":# or self.TYPE_VM == None or self.TYPE_VM == "" or self.TYPE_VM == False:
            lessonlist = StoreInfoParser.instance().getLessonList()
            offlessonlist = StoreInfoParser.instance().getOffLessonList()
            if lessonlist == None or offlessonlist == None:
                LogRecord.instance().logger.info(u"local list is none")
                return
            localofflist = []
            locallessonlist = json.loads(lessonlist)
            offlocallessonlist = json.loads(offlessonlist)
            localImgList = LocalImgManager.instance().getCompleteList()
            for item in offlocallessonlist:
                if item["name"] in localImgList:
                    localofflist.append(item)
                    
            StoreInfoParser.instance().setLessonList(json.dumps(localofflist))
            StoreInfoParser.instance().setLessonList(json.dumps(localofflist))
            
            if len(localofflist) == 0:
                LogRecord.instance().logger.info(u"local list is none")
                self.vmWidget.setVMInfoList(localofflist,localofflist)
                self.vmWidget.hide()
                self.loadingWiget.show()
                #self.slotChangeLinkThreadStatus("disconnect")
                self.setPosition()
                self.loadingWiget.setHintInfo("failed", 0)
                if not self.linkThread.isStartLink and self.buttonState:
                    self.loadingWiget.restartLink()
                return
            else:
                
                LogRecord.instance().logger.info(u"local list is not none")
                self.loadingWiget.hide()
                self.vmWidget.setVMInfoList(localofflist,localofflist)
                self.vmWidget.showVmList()
                self.vmWidget.show()
                self.setPosition()
                self.menuBar.show()
                self.menuBar.raise_()
        
    def postVmStateInfo(self, postInfo):
        self.updateThread.setVmInfoState(postInfo)
        
    def hideMenuBar(self):
        self.menuBar.hide()
    
    def updateWindow(self,language):
        
        self.menuBar.updateWindow()
        self.loadingWiget.updateWindow()
        
        
    def slotShowRestartNetworkInfo(self, status):
        """显示重启网络的状态信息"""
        
        language = StoreInfoParser.instance().getLanguage()
        m_pTranslator = QTranslator()
        exePath = "./"
        if language == "chinese":
            QmName = "zh_CN.qm"
        else:
            QmName = "en_US.qm"
        if(m_pTranslator.load(QmName, exePath)):
            QCoreApplication.instance().installTranslator(m_pTranslator)
        
        if status == "Start":
            #InfoHintDialog(self.tr("restarting network, please wait ...")).exec_()
            self.waitingDlg.setHintInfo(self.tr("restarting network, please wait ..."))
        elif status == "Success":
            #InfoHintDialog(self.tr("network setting success")).exec_()
            self.waitingDlg.setHintInfo(self.tr("network setting success"))
        elif status == "Failed":
            #InfoHintDialog(self.tr("network restart failed")).exec_()
            self.waitingDlg.setHintInfo(self.tr("network restart failed"))
        else:
            return
        
        if self.waitingDlg.isHidden():
            desktop = QApplication.desktop()
            self.waitingDlg.move((desktop.width() - self.waitingDlg.width())/2, (desktop.height() - self.waitingDlg.height())/2)
            self.waitingDlg.exec_()
        
    def slotOperateTcpServerCMD(self, command, value):
        
        if command == "TERMINAL_NAME":
                #修改计算机名称到系统配置文件
                StoreInfoParser.instance().setTerminalName(value)
                globalvariable.TERMINAL_NAME = value
                
                self.emit(SIGNAL("terminalchange"))
                
        elif command == "TERMINAL_NETWORK_CONFIG":
                self.operateBroadcastConfigNetwork(value)
                
        if self.TYPE_VM == "online":
            if command == "TICHU":
                #踢出当前的学生机
                globalvariable.TICHU_STATUS = True
                vmLessonInfo = VMInfoManager.instance().getLessonListInfo()
                self.vmWidget.setVMInfoList(vmLessonInfo,[])
                self.vmWidget.updateVMList()
                WindowMonitor.instance().start(2000)
            else:
                LogRecord.instance().logger.info("receive a command which is not understand")
        elif self.TYPE_VM == "offline":
            if command == "shutdown":
                self.vmWidget.domainManager.shutdownDomain()
            elif command == "poweroff":
                self.vmWidget.domainManager.poweroffDomain()
            elif command == "reset":
                self.vmWidget.domainManager.restartDomain()
            elif command == "TICHU":
                self.vmWidget.domainManager.poweroffDomain()
            else:
                LogRecord.instance().logger.info(self.tr("receive a command which is not understand"))

    def operateBroadcastConfigNetwork(self, value):
        LogRecord.instance().logger.info(self.tr("receive a command changing network"))
        self.emit(SIGNAL("update"))
        self.waitingDlg = InfoHintDialog(None)
        if not globalvariable.CLASS_STATUS:
            networkType = value[0]
            if networkType == "static":
                if len(value) >= 5:
                    IPADDR = value[1].strip()
                    NETMASK = value[2].strip()

                    if len(IPADDR) == 0 or len(NETMASK) == 0:
                        InfoHintDialog(self.tr("command is wrong")).exec_()
                        return

                    netconf = globalfunc.setJyStaticNetwork(value)
                    if netconf != "False":
                        #重新启动网络
                        self.restartNetworkTD.setNetConf(netconf)
                        self.restartNetworkTD.start()
                    else:
                        LogRecord.instance().logger.info(u"修改网络配置文件为静态网络失败")
                else:
                    LogRecord.instance().logger.info(u"云主机发送过来的静态网络数据格式有误")
            elif networkType == "dhcp":
                netconf = globalfunc.setJyDynamicNetwork()
                #重新启动网络
                if netconf:
                    self.restartNetworkTD.setNetConf(netconf)
                    self.restartNetworkTD.start()
                else:
                    InfoHintDialog(self.tr('设置自动获取IP失败')).exec_()

    def operateBroadcastStartLesson(self, command):
        """执行上课指令"""
        LogRecord.instance().logger.info(u"接收上课指令")
        globalvariable.CLASS_STATUS = True
        value = globalfunc.getVMCloudsNameFromBroadInfo(command)
        if value:
            globalvariable.CLASS_STATUS_VM_NAME = value
            #关闭所有的window
            if not self.vmWidget.isHidden():
                VMOperation.instance().autoCloseVMLesson()
                WindowMonitor.instance().clearProcessMap()
                WindowMonitor.instance().stop()
                self.startLessonFlag = True
                vmInfo = self.updateThread.getVmInfo()
                vmName = globalvariable.CLASS_STATUS_VM_NAME                         
                vmLessonInfo = VMInfoManager.instance().getLessonListInfo()
                coursename = self.updateThread.getCourseName()
                currentvm = None
                if (not vmInfo) or (not coursename):
                    return
                for item in vmLessonInfo:
                    if item["name"] == coursename:
                        currentvm = item
                        break
                if currentvm !=None:
                    tmp = vmInfo[0]["name"]
                    vmInfo[0]["name"] = coursename
                    vmInfo[0]["vmname"] = vmName
                    vmInfo[0]["os_distro"] = currentvm["os_distro"] 
                    self.vmWidget.setVMInfoList(vmInfo,[])
                else:
                    self.vmWidget.setVMInfoList(vmLessonInfo,[])
                
                self.vmWidget.updateVMList()
                self.vmWidget.show()
                self.setPosition()
                self.menuBar.show()
                self.menuBar.raise_()
                self.ownSleep(1000)
                
                self.openvmThread = threading.Thread(target=self.vmWidget.autoOpenVMLesson,args=(value,))
                self.openvmThread.start()

            elif self.vmWidget.isHidden() and not self.linkThread.isStartLink:
                self.alllessonstart = True
                self.loadingWiget.restartLink()
        else:
            self.vmWidget.hide()
            self.loadingWiget.show()
            self.setPosition()
            LogRecord.instance().logger.info(u"未查询到分配给当前学生机的虚拟机名称")
            self.loadingWiget.setHintInfo("terminalVMIsNone", None)
            time.sleep(5)

    def operateBroadcastStopLesson(self):
        """执行下课指令"""
        LogRecord.instance().logger.info(u"执行下课指令")

        globalvariable.TICHU_STATUS = False
        globalvariable.CLASS_STATUS = False
        globalvariable.CLASS_STATUS_VM_NAME = None
        self.startLessonFlag = False
        WindowMonitor.instance().start(2000)
        
        #关闭所有的window程序
        windowList = WindowMonitor.instance().getCurrentProcessId()
        for ID in windowList:
            os.system("kill -9 %s" % ID)
            
        if self.vmWidget.isHidden() and not self.linkThread.isStartLink:
            self.loadingWiget.restartLink()
        else:
            vmLessonInfo = VMInfoManager.instance().getLessonListInfo()
            self.vmWidget.setVMInfoList(vmLessonInfo,[])
            self.vmWidget.updateVMList()
        
            
    def operateBroadcastRecordUSBStatus(self, command):
        """记录USB的使用状态"""
        if len(command.split(":")) > 1:
            stateValue = command.split(":")[1]
            StoreInfoParser.instance().setUsbState(stateValue)
        else:
            LogRecord.instance().logger.info(u"云主机发送的更改USB数据有误")
            
    def operateBroadcastRecordNetStatus(self, command):
        """Net状态"""
        if len(command.split(":")) > 1:
            stateValue = command.split(":")[1]
            StoreInfoParser.instance().setNetState(stateValue)
            self.vmWidget.domainManager.defineNetFilter(stateValue)
        else:
            LogRecord.instance().logger.info(u"云主机发送的更改Net数据有误")

    def operateBroadcastShutdownByIP(self, command):
        """根据IP执行关机指令"""
        LogRecord.instance().logger.info("operateBroadcastShutdownByIP in")
        if len(command.split(":")) > 1:
            receiveIp = command.split(":")[1]
            serverIp = StoreInfoParser.instance().getCloudsServerIP()
            if receiveIp == serverIp:
                LogRecord.instance().logger.info(u"执行关机指令")
                globalfunc.shutdownTerminal()
            else:
                LogRecord.instance().logger.info(u"接受的云主机地址与当前的不一致")

    def operateBroadcastShutdownByMac(self, command):
        """根据MAC执行关机指令"""
        LogRecord.instance().logger.info(u"执行关机指令")
        LogRecord.instance().logger.info(self.localMac)
        if len(command.split("|")) > 1:
            MAC = command.split("|")[1]
            if MAC == self.localMac:
                globalfunc.shutdownTerminal()
        else:
            LogRecord.instance().logger.info(u"云主机发送的关机命令数据有误")

    def operateBroadcastResolutionModify(self, command):
        """修改学生端的分辨率"""
        if globalvariable.CLASS_STATUS:
            return
        if len(command.split(":")) >= 2:
            new_value = command.split(":")[1]
            globalfunc.setScreenResolution(new_value)
        else:
            LogRecord.instance().logger.info(u"分辨率值格式有误")

    def operateBroadcastRecordCloudServerIP(self, command):
        """记录云主机的IP值"""
        if len(command.split(" ")) >= 5:
            try:
                startIp = command.split(" ")[1].split(":")[1]
                endIp = command.split(" ")[2].split(":")[1]
                mainServerIP = command.split(" ")[3].split(":")[1]
                backupServerIP = command.split(" ")[4].split(":")[1]

                startIndex = int(startIp.split(".")[-1])
                endIndex = int(endIp.split(".")[-1])
                currentIndex = int(globalfunc.get_ip_address().split(".")[-1])

                if currentIndex >= startIndex and currentIndex <= endIndex:
                    LogRecord.instance().logger.info(u"记录云主机的IP地址:%s" % mainServerIP)
                    StoreInfoParser.instance().setServerAddress(mainServerIP)
                    StoreInfoParser.instance().setBackUpServerAddress(backupServerIP)
                    
            except Exception, e:
                LogRecord.instance().logger.info(u"解析接收的云主机IP数据格式有误:%s" % e.message)
        else:
Ejemplo n.º 25
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)
Ejemplo n.º 26
0
class Designer(FloatLayout):
    widget = ObjectProperty(None, allownone=True)
    
    #All components of the designer
    status_bar = ObjectProperty(None)
    canvas_area = ObjectProperty(None)
    leftbox = ObjectProperty(None)
    rightbox = ObjectProperty(None)
    win = ObjectProperty(None)
    menubar = ObjectProperty(None)
    widget_tree = ObjectProperty(None)
    widgetbar = None
    
    numeric_keys = ObjectProperty(None)
    boolean_keys = ObjectProperty(None)
    string_keys = ObjectProperty(None)
    remaining_keys = ObjectProperty(None)
    numeric_keys, boolean_keys, string_keys,\
         remaining_keys = ([] for i in range(4))
    
    def __init__(self, **kwargs):
        super(Designer, self).__init__(**kwargs)
        self.root_name = ""
        self.popup = None
        self.file = ""
        
        # A count variable to give ids to generated widget
        self.count = 0

        #This variable updates to True when ctrl is pressed
        self.ctrl_pressed = False
        
        #Instantiate the WidgetTree
        self.widget_tree = WidgetTree(self)
        self.widget_tree_box.add_widget(self.widget_tree)
        
        #Instantiate MenuBar
        self.menubar = MenuBar(designer = self, pos_hint = {'x':0,'top':1}, \
                            canvas_area = self.canvas_area, size_hint = (.70,None),height = 25)
        self.add_widget(self.menubar)
        
        #Instantiate right widgets bar
        # We update the same widgets bar, and dont create new instances everytime
        self.widgetbar = NewWidgetsMenu(self)
        self.rightbox.add_widget(self.widgetbar)
        
        #Initialize the keyboard and set up handlers for key press and release
        self.canvas_area._keyboard = Window.request_keyboard(self._keyboard_closed,self)
        self.canvas_area._keyboard.bind(on_key_down=self._on_keyboard_down)
        self.canvas_area._keyboard.bind(on_key_up = self._on_keyboard_up)
        # Setup canvas for highlighting
        with self.canvas.after:
            self.gcolor = Color(1, 1, 0, .25)
            PushMatrix()
            self.gtranslate = Translate(0, 0, 0)
            self.grotate = Rotate(0, 0, 0, 1)
            self.gscale = Scale(1.)
            self.grect = Rectangle(size=(0, 0))
            PopMatrix()
        # Instantiate Statusbar
        self.status_bar = StatusBar(size_hint = (1,.05))
        self.leftbox.add_widget(self.status_bar)
        
        #Show properties binding
        # self.widget -> updated on_touch_down in 'canvas_area'
        # So, whenever we have a new self.widget, we call show_properties
        self.bind(widget = self.show_properties)
        self.bind(widget = self.widget_tree.select_highlighted)
        
    def _keyboard_closed(self):
        '''Default keyboard closer necessary for initializing a keyboard'''
        self.canvas_area._keyboard.unbind(on_key_down=self._on_keyboard_down)
        self.canvas_area._keyboard = None
    
    def _on_keyboard_down(self,keyboard,keycode,*largs):
        '''If 'ctrl' button is pressed, it sets the corresponding
        boolean True'''
        modifiers =  keycode[1]
        if modifiers == 'ctrl':
            self.ctrl_pressed = True
        
    def _on_keyboard_up(self,keyboard,keycode,*largs):
        ''' If 'ctrl' key is released, it makes the corresponding boolean
        go False'''
        modifiers = keycode[1]
        if modifiers == 'ctrl':
            self.ctrl_pressed = False
    
    def redraw_canvas(self, widget, *kwargs):
        ''' This function redraws the canvas of 'Layout' widgets whenever they are
        moved or resized so that it is easy to recognize them in the canvas_area.
        As the 'Layout' widgets themselves dont have a representation.'''
        widget.canvas.clear()
        thickness = 5
        with widget.canvas:
             Color(0.5, 0.5, 0.5, .5)
             Rectangle(pos = widget.pos, size = (thickness, widget.height))
             Rectangle(pos = widget.pos, size = (widget.width, thickness))
             Rectangle(pos = (widget.x,widget.top), size = (widget.width, thickness))
             Rectangle(pos = (widget.x + widget.width, widget.y), size = (thickness, widget.height))
                  
    def drag(self, widget, touch):
        ''' This function moves the widget in the canvas_area when it is 
        dragged (on_touch_move of the widget is called)'''
        if self.widget == widget:
            '''The above check is done so that only the selected widget
            which is stored in "self.widget" is moved on drag.'''
            widget.center = touch.pos

    def on_touch_down(self,touch):
        #First priority should be given to menubar as it has 
        #to be on top  of canvas_area
        if self.menubar.collide_point(*touch.pos) or self.menubar.menu_down:
            super(Designer, self).on_touch_down(touch)
        # Next we check if touch is outside the 'canvas_area' region
        elif not self.canvas_area.collide_point(*touch.pos):
            super(Designer, self).on_touch_down(touch)
        #What's remaining is the canvas_area region
        else:
            canvas_area = self.canvas_area
            temp_widget = self.pick(canvas_area, *touch.pos)
            if temp_widget is not canvas_area:
                self.widget = temp_widget
            else:
                self.widget = None
            super(Designer, self).on_touch_down(touch)
        return True
        
    def pick(self, widget, x, y):
        ret = None
        if widget.collide_point(x, y):
            ret = widget
            x2, y2 = widget.to_local(x, y)
            for child in widget.children:
                ret = self.pick(child, x2, y2) or ret
        return ret
    
    def show_properties(self, widget, value):
        '''This function is called whenever an added widget is selected
        in the canvas area. It draws the widget properties bar
        on the right, and sets up a highlighting area around the
        selected widget'''
        if value is not None:
            #We have to stop previous highlighing
            Clock.unschedule(self.highlight_at)
            #Setting up highlighting of the selected widget
            Clock.schedule_interval(self.highlight_at, 0)
            
            # Here I instantiate a new PropertiesMenu everytime.
            # Is this very expensive?
            self.rightbox.clear_widgets()
            properties_menu = PropertiesMenu(self)
            self.rightbox.add_widget(properties_menu)
        else:
            #We have to stop highlighing
            Clock.unschedule(self.highlight_at)
            self.grect.size = (0, 0)
            # Go to basic menu
            self.rightbox.clear_widgets()
            self.rightbox.add_widget(self.widgetbar)
    
    def rebuild_menu(self, node, value, parent = None):
        '''This function is called when a widget needs to be added 
        as a child to one of the added layouts in the canvas area'''
        if value:
            self.rightbox.clear_widgets()
            self.widgetbar.build_menu(parent = parent)
            self.rightbox.add_widget(self.widgetbar)
        
    def delete_item(self, instance, *largs):
        if instance.is_selected:
            parent = self.widget.parent
            parent.remove_widget(self.widget)
            self.clear_selection(True)
            if not self.canvas_area.children:
                self.root_name = ""
                #Instantiate the WidgetTree again if the 
                #root widget itself was deleted. We have to do this as
                # treeview.remove all nodes wont remove the root at all.
                self.widget_tree_box.remove_widget(self.widget_tree)
                self.widget_tree = WidgetTree(self)
                self.widget_tree_box.add_widget(self.widget_tree)
            #Refresh the widget tree
            self.widget_tree.refresh()
            
    def clear_selection(self,*kwargs):
        '''This function takes away the highlight 
        and also nullifies the self.widget'''
        self.widget = None
        #We have to stop highlighing
        Clock.unschedule(self.highlight_at)
        self.grect.size = (0, 0)

    def highlight_at(self, *largs):
        '''A function to highlight the current self.widget'''
        gr = self.grect
        widget = self.widget
        # determine rotation
        a = Vector(1, 0)
        b = Vector(widget.to_window(*widget.to_parent(0, 0)))
        c = Vector(widget.to_window(*widget.to_parent(1, 0))) - b
        angle = -a.angle(c)

        # determine scale
        scale = c.length()

        # apply transform
        gr.size = widget.size
        self.gtranslate.xy = Vector(widget.to_window(*widget.pos))
        self.grotate.angle = angle
        self.gscale.scale = scale
    
    def give_id(self):
        self.count = self.count + 1
        return "widget"+str(self.count) 
Ejemplo n.º 27
0
def main(client, setupinfo=None):
    gameid = 'test1'  #setupinfo["request"]["parameters"]["id"]
    height = 720
    width = 1024
    screensize = (width, height)
    screen = pygame.display.set_mode(screensize)
    clock = pygame.time.Clock()
    pygame.mouse.set_visible(0)
    animate = True
    running = True

    background, background_rect = load_image("stars.jpg")
    outer_menu = MenuBar(planet1name, 1, backgroundcolor, True, (90, 0))
    menubar.pdb_image, menubar.pdbrect = load_image("pdbup.png", None)
    menubar.pdbrect.topleft = menubar.pdbboxpostion
    screen.blit(background, background_rect)
    mouse_ptr = MouseCursor("pointer2.png")
    mouse_sel = MouseCursor("selected2.png")
    mouse = pygame.sprite.RenderUpdates((mouse_ptr))
    mouse.draw(screen)
    pygame.display.flip()
    #===========================================================================
    # Object Initialization:
    #===========================================================================
    characterlist = client.root.get_state(
        game_id=gameid, object_type="Character")["response"]["character"]
    planetlist = client.root.get_state(
        game_id=gameid, object_type="Planet")["response"]["planet"]
    environlist = client.root.get_state(
        game_id=gameid, object_type="Environ")["response"]["environ"]
    militarylist = client.root.get_state(
        game_id=gameid, object_type="Unit")["response"]["unit"]
    stacklist = client.root.get_state(game_id=gameid,
                                      object_type="Stack")["response"]["stack"]
    star_system = System(screen, background, animate, characterlist,
                         planetlist, environlist, militarylist, stacklist)
    #print characterlist
    menu = Menu_Buttons.Menu(screen)

    selected_unit = None

    while running:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sysexit()
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                pygame.quit()
                sysexit()
            if not mouse_ptr.down:
                if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                    if selected_unit:
                        hover_unit = left_mouse_select_check(
                            client, mouse_sel, star_system)
                        if hover_unit != selected_unit:
                            #mergeresponse = client.root.merge_stack(unit.stack_id, selected_unit.stack_id)
                            #if mergeresponse["Success"]:
                            selected_unit.add_unit(hover_unit)
                            star_system.unit_list.remove(hover_unit)
                    print "SPACE BAR"
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if event.button == 1:
                        mouse_ptr.pressed = mouse_sel.pressed = True
                        mouse_ptr.released = mouse_sel.released = False
                        selected_unit = left_mouse_select_check(
                            client, mouse_ptr, star_system)
                        # while the mouse button is down, change its cursor
                        mouse.remove(mouse_ptr)
                        mouse.add(mouse_sel)
                        #Update Buttons and menu status
                        menu.update_buttons(mouse_ptr.rect)
                    elif event.button == 3:
                        key_mod = pygame.key.get_mods()
                        if key_mod == 4097 or key_mod == 1:
                            hover_unit = star_system.unit_list.get_sprites_at(
                                mouse_ptr.pos)
                            print "STACK REMOVING FROM", hover_unit
                            if hover_unit:
                                if hover_unit[0].stack_list[-1].charflag:
                                    splitresponse = client.root.split_stack(
                                        stack_id=hover_unit[0].stack_id,
                                        character_id=hover_unit[0].
                                        stack_list[-1].id)
                                else:
                                    splitresponse = client.root.split_stack(
                                        stack_id=hover_unit[0].stack_id,
                                        unit_id=hover_unit[0].stack_list[-1].id
                                    )
                                print splitresponse
                                if splitresponse["request"]["success"]:
                                    sprite = hover_unit[0].remove_unit()
                                    sprite.set_stack_id(
                                        splitresponse["response"]["unit"]
                                        ["stack_id"])
                                    star_system.unit_list.add(sprite)
                            print "SHIFT RIGHT CLICK"
                        else:
                            hover_unit = star_system.unit_list.get_sprites_at(
                                mouse_ptr.pos)
                            if hover_unit:
                                hover_unit[0].cycle_unit()
                            print "RIGHT CLICK"

            if event.type == pygame.MOUSEBUTTONUP:
                mouse_ptr.released = mouse_sel.released = True
                selected_unit = left_mouse_unselect_check(
                    client, mouse, selected_unit, star_system)
                # while the mouse button is up, change its cursor
                mouse.remove(mouse_sel)
                mouse.add(mouse_ptr)

        screen.blit(background, background_rect)
        star_system.update()
        if selected_unit:
            selected_unit.update(True)
        mouse.update()
        star_system.draw()
        #Draw buttons and menus
        menu.draw_buttons(screen, height, width, selected_unit)
        for planet in star_system.planet_list:
            if planet.orient == 'center':
                current_planet = planet
        try:
            outer_menu.update(current_planet.name, current_planet.loyalty,
                              current_planet.pdb_state, "Egrix", False, False)
        except:
            pass
        outer_menu.draw(background, screen, menubar_)
        mouse.draw(screen)
        pygame.display.flip()
Ejemplo n.º 28
0
        # Open Meeting Link and Update Progress Bar
        if link is not None:
            self.message["text"] = "Opening Link for Period " + str(currentperiod)
            webbrowser.open_new_tab(link)
        elif currentperiodindex is not None:
            curdiff = self.ctime - time_to_datetime(self.ctime, self.sched[currentperiodindex][1])
            fulldiff = time_to_datetime(self.ctime,self.sched[currentperiodindex][2]) - time_to_datetime(self.ctime, self.sched[currentperiodindex][1])
            self.progress["value"] = curdiff / fulldiff * 100
            self.message["text"] = ""
        else:
            self.progress["value"] = 0
            self.message["text"] = ""

        # Update Output and Sleep
        self.time["text"] = str(self.ctime)[11:16]
        root.after(60000, self.timer)

# Run Simulator
root = Tk()
root.title("Meeting Scheduler")
try:
    root.iconbitmap(resource_path("meetingschedulericon.ico"))
except:
    pass
scheduler = Scheduler(root)
menu = Menu(root)
menubar = MenuBar(root, menu, scheduler)
root.configure(menu = menu, background = "white")
scheduler.mainloop()
Ejemplo n.º 29
0
    def __init__(self, filename=None):
        super().__init__([])
        self.header = None
        self.setStyle('Fusion')
        self.setApplicationName('QtFits')

        self.overlord = QWidget()
        self.overlord.resize(800, 500)

        overlord_layout = QVBoxLayout()
        self.overlord.setLayout(overlord_layout)
        overlord_layout.setContentsMargins(0, 0, 0, 0)
        overlord_layout.setSpacing(0)

        self.window = QWidget()
        self.window.resizeEvent = self.resizeEvent
        self.window.keyPressEvent = self.keyPressEvent

        grid = QGridLayout()
        grid.setContentsMargins(0, 0, 0, 0)
        self.window.setLayout(grid)

        self.minimap = MiniMap()
        grid.addWidget(self.minimap, 0, 1, 1, 1)

        self.main = ImageDisplay()
        grid.addWidget(self.main, 0, 0, 3, 1)

        self.cursordisplay = CursorDisplay()
        grid.addWidget(self.cursordisplay, 1, 1, 1, 1)

        self.box = DirList()
        grid.addWidget(self.box, 2, 1, 2, 1)

        self.histogram = ImageHistogram()
        grid.addWidget(self.histogram, 3, 0, 1, 1)

        self.menubar = MenuBar(self)
        overlord_layout.addWidget(self.menubar)
        overlord_layout.addWidget(self.window)

        self.box.main = self.main
        self.box.list.app = self

        self.main.histogram = self.histogram
        self.histogram.main = self.main

        self.minimap.main = self.main
        self.main.minimap = self.minimap

        self.main.cursordisplay = self.cursordisplay

        self.handlers = {
            Qt.Key_Escape: self.overlord.close,
            Qt.Key_Equal: self.main.increase_zoom,
            Qt.Key_Minus: self.main.decrease_zoom,
            Qt.Key_Down: self.box.list.selection_down,
            Qt.Key_Up: self.box.list.selection_up,
            Qt.Key_Return: self.box.list.select,
            Qt.Key_Right: self.box.list.select,
            Qt.Key_Backspace: self.box.list.back,
            Qt.Key_Left: self.box.list.back,
        }

        self.window.setFocusPolicy(Qt.ClickFocus)

        if filename is not None:
            self.open(filename)

        self.overlord.show()
        self.exec_()
Ejemplo n.º 30
0
class GtkUI(object):
    def __init__(self, args):
        self.daemon_bps = (0, 0, 0)
        # Setup signals
        try:
            import gnome.ui
            import gnome
            self.gnome_prog = gnome.init("Deluge", deluge.common.get_version())
            self.gnome_client = gnome.ui.master_client()

            def on_die(*args):
                reactor.stop()

            self.gnome_client.connect("die", on_die)
            log.debug("GNOME session 'die' handler registered!")
        except Exception, e:
            log.warning(
                "Unable to register a 'die' handler with the GNOME session manager: %s",
                e)

        if deluge.common.windows_check():
            from win32api import SetConsoleCtrlHandler
            from win32con import CTRL_CLOSE_EVENT
            from win32con import CTRL_SHUTDOWN_EVENT

            def win_handler(ctrl_type):
                log.debug("ctrl_type: %s", ctrl_type)
                if ctrl_type in (CTRL_CLOSE_EVENT, CTRL_SHUTDOWN_EVENT):
                    reactor.stop()
                    return 1

            SetConsoleCtrlHandler(win_handler)

        # Attempt to register a magnet URI handler with gconf, but do not overwrite
        # if already set by another program.
        common.associate_magnet_links(False)

        # Make sure gtkui.conf has at least the defaults set
        self.config = deluge.configmanager.ConfigManager(
            "gtkui.conf", DEFAULT_PREFS)

        # We need to check on exit if it was started in classic mode to ensure we
        # shutdown the daemon.
        self.started_in_classic = self.config["classic_mode"]

        # Start the IPC Interface before anything else.. Just in case we are
        # already running.
        self.queuedtorrents = QueuedTorrents()
        self.ipcinterface = IPCInterface(args)

        # Initialize gdk threading
        gtk.gdk.threads_init()

        # We make sure that the UI components start once we get a core URI
        client.set_disconnect_callback(self.__on_disconnect)

        self.trackericons = TrackerIcons()
        self.sessionproxy = SessionProxy()
        # Initialize various components of the gtkui
        self.mainwindow = MainWindow()
        self.menubar = MenuBar()
        self.toolbar = ToolBar()
        self.torrentview = TorrentView()
        self.torrentdetails = TorrentDetails()
        self.sidebar = SideBar()
        self.filtertreeview = FilterTreeView()
        self.preferences = Preferences()
        self.systemtray = SystemTray()
        self.statusbar = StatusBar()
        self.addtorrentdialog = AddTorrentDialog()

        # Initalize the plugins
        self.plugins = PluginManager()

        # Late import because of setting up translations
        from connectionmanager import ConnectionManager
        # Show the connection manager
        self.connectionmanager = ConnectionManager()

        from twisted.internet.task import LoopingCall
        rpc_stats = LoopingCall(self.print_rpc_stats)
        rpc_stats.start(10)

        reactor.callWhenRunning(self._on_reactor_start)

        # Initialize gdk threading
        gtk.gdk.threads_enter()
        reactor.run()
        self.shutdown()
        gtk.gdk.threads_leave()
Ejemplo n.º 31
0
def main():
    ''' The main method :o '''

    global PI_CLIENT
    global PI_CLIENT_CONNECTED
    global IS_RUNNING

    joysticks = [
        pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())
    ]
    PRINT('Found ' + ENC_VALUE(len(joysticks)) + ' joysticks.', INFO)

    # Initialize detected joysticks
    if len(joysticks) > 0:
        for joystick in joysticks:
            joystick.init()
            PRINT(
                '| ' + ENC_VALUE(joystick.get_id()) + ' ' +
                ENC_VALUE(joystick.get_name()), INFO)

    screen = pygame.display.set_mode(SCREEN_DIMENSION, pygame.RESIZABLE)
    screen.set_alpha(None)
    pygame.display.set_caption('LoggerheadROV Driver Station | ' +
                               random.choice(QUOTES))
    pygame.display.set_icon(
        pygame.image.load('gui/images/loggerhead_logo.png'))

    clock = pygame.time.Clock()
    horizon = Horizon(
        screen.get_size()[0] - GAUGE_DIMENSION - UI_SCREEN_PADDING - UI_BORDER,
        screen.get_size()[1] - GAUGE_DIMENSION - UI_SCREEN_PADDING - UI_BORDER)

    menubar = MenuBar(screen, FONT)
    menubar.add_app(App("Do Thing", menubar))
    menubar.add_app(App("Do Other Thing", menubar))
    folder = App("Image Recognition", menubar, is_folder=True)
    folder.add_app(App("More Things", folder.sub_app_menubar))
    menubar.add_app(folder)

    # Create thread for the connection handler loop
    connection_handler = Thread(target=connection_listener, args=(joysticks, ))
    connection_handler.start()

    while IS_RUNNING:
        mouse_data = [False] * len(pygame.mouse.get_pressed())
        key_data = [False] * len(pygame.key.get_pressed())

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                shutdown()

            if event.type == pygame.VIDEORESIZE:
                screen = pygame.display.set_mode((event.w, event.h),
                                                 pygame.RESIZABLE)
                horizon = Horizon(
                    screen.get_size()[0] - GAUGE_DIMENSION -
                    UI_SCREEN_PADDING - UI_BORDER,
                    screen.get_size()[1] - GAUGE_DIMENSION -
                    UI_SCREEN_PADDING - UI_BORDER)
                menubar.resize()

            if event.type == pygame.KEYDOWN:
                key_data = pygame.key.get_pressed()

            if event.type == pygame.MOUSEBUTTONDOWN:
                mouse_data = pygame.mouse.get_pressed()

        mouse_pos = pygame.mouse.get_pos()

        screen.fill(UI_COLOR_4)

        if PI_CLIENT_CONNECTED:
            try:
                # Get the video frame from the client and decode it
                frame = cv2.imdecode(PI_CLIENT.recv_data[DATA_IDX_VIDEO],
                                     cv2.IMREAD_COLOR)
                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                frame = np.rot90(frame)
                frame = cv2.flip(frame, 1)
                frame = pygame.surfarray.make_surface(frame)

                frame = pygame.transform.scale(frame, screen.get_size())

                screen.blit(frame, (0, 0))

                # cv2.imshow('frame', frame)
            except:
                pass

        menubar.update(mouse_data, key_data)
        # horizon.update(screen, mouse_pos[0] - (screen.get_size()[0] / 2), mouse_pos[1] - (screen.get_size()[1] / 2)) # Draws gauge too

        menubar.draw()
        draw_text(screen, FONT,
                  str(round(clock.get_fps(), 3)) + ' FPS',
                  (screen.get_size()[0] -
                   (UI_SCREEN_PADDING * 8), UI_SCREEN_PADDING), False)

        pygame.display.update()
        clock.tick(FPS)

    cv2.destroyAllWindows()
    connection_handler.join()

    PRINT('Quit.', SUCCESS)
Ejemplo n.º 32
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)
Ejemplo n.º 33
0
class Application(gtk.Window):
    """This class represents an application"""

    #    application = None
    #
    #    def __new__(cls, *args, **kwargs):
    #        if cls.application:
    #            return cls.application
    #        else:
    #            cls.application = super(Application, cls).__new__(cls)
    #            cls.application.initialize()
    #            return cls.application
    #
    #    def initialize(self):
    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)

    def run(self):
        self.show_all()
        gtk.main()

    def update_title(self):
        document = self.filename if self.filename else _("New document")
        title = _("%(document)s - Sanaviron %(version)s") % {
            "document": document,
            "version": VERSION
        }
        self.set_title(title)

    def disable_bindings(self):
        self.remove_accel_group(self.bindings)

    def enable_bindings(self):
        self.add_accel_group(self.bindings)

    def switch(self, widget, child, page):
        document = self.editor.canvas.serialize()
        self.code.set_text(document)

    def key_handler(self, keyname):
        if keyname == "<Control><Shift>V":
            self.editor.canvas.add_box_separator_vertical()
        if keyname == "<Control><Shift>H":
            self.editor.canvas.add_box_separator_horizontal()
        if keyname == "<Control><Shift>Escape":
            self.toggle_menubar()
        if keyname in ["<Control><Shift>Colon", "<Control><Shift>Period"]:
            self.editor.canvas.hints ^= 1
            self.editor.canvas.update()

    def key_press(self, widget, event):
        keyval = event.keyval
        keyname = gtk.gdk.keyval_name(keyval)
        if keyname.startswith('Control') or\
           keyname.startswith('Shift') or\
           keyname.startswith('Alt'):
            return False
        keyname = keyname.capitalize()
        if event.state & gtk.gdk.SHIFT_MASK:
            keyname = "<Shift>%s" % keyname
        if event.state & gtk.gdk.CONTROL_MASK:
            keyname = "<Control>%s" % keyname
        self.key_handler(keyname)
        return False

    def toggle_menubar(self, *args):
        if self.menu.get_visible():
            self.menu.hide()
            self.editor.notification.notificate(
                _("Press <i><b>Control+Shift+Escape</b></i> to show again."),
                INFORMATION)
        else:
            self.menu.show()

    def toggle_statusbar(self, *args):
        if self.status.get_visible():
            self.status.hide()
        else:
            self.status.show()

    def new(self, widget, data):
        self.editor.canvas.children = list()
        self.editor.canvas.queue_draw()

    def open(self, widget, data):
        # XXX funcional
        dialog = gtk.FileChooserDialog(
            title=_("Open document"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_OPEN,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK,
                     gtk.RESPONSE_ACCEPT),
            backend=None)

        dialog.set_transient_for(self)
        dialog.set_default_response(gtk.RESPONSE_OK)

        filter = gtk.FileFilter()
        filter.set_name(_("XML files"))
        filter.add_mime_type("document/xml")
        filter.add_pattern("*.xml")
        dialog.add_filter(filter)

        filter = gtk.FileFilter()
        filter.set_name(_("All files"))
        filter.add_pattern("*")
        dialog.add_filter(filter)

        response = dialog.run()

        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            self.filename = filename
            if filename is not None:
                self.editor.canvas.load_from_xml(filename)
                self.update_title()

        dialog.destroy()

    def save(self, widget, data):
        if not self.filename:
            return
        current = self.editor.canvas.serialize()
        original = open(self.filename).read()
        print original
        print current
        if original == current:
            return
        print "saving"
        #self.editor.canvas.save_to_xml(self.filename)

    def save_as(self, widget, data):
        dialog = gtk.FileChooserDialog(
            title=_("Save document as"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_SAVE,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_SAVE,
                     gtk.RESPONSE_ACCEPT),
            backend=None)

        dialog.set_transient_for(self)
        dialog.set_default_response(gtk.RESPONSE_ACCEPT)

        filter = gtk.FileFilter()
        filter.set_name(_("XML files"))
        filter.add_mime_type("document/xml")
        filter.add_pattern("*.xml")
        dialog.add_filter(filter)

        filter = gtk.FileFilter()
        filter.set_name(_("All files"))
        filter.add_pattern("*")
        dialog.add_filter(filter)

        response = dialog.run()

        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            self.filename = filename
            if filename is not None:
                self.editor.canvas.save_to_xml(filename)
                self.update_title()

        dialog.destroy()

    def page_setup(self, widget, data):
        self.setup.settings = self.settings
        self.setup = gtk.print_run_page_setup_dialog(self, self.setup,
                                                     self.settings)

        size = self.setup.get_paper_size()
        orientation = self.setup.get_orientation()

        # TODO canvas->margins
        for page in self.editor.canvas.pages:
            page.top = self.setup.get_top_margin(gtk.UNIT_POINTS)
            page.left = self.setup.get_left_margin(gtk.UNIT_POINTS)
            page.bottom = self.setup.get_bottom_margin(gtk.UNIT_POINTS)
            page.right = self.setup.get_right_margin(gtk.UNIT_POINTS)

        width = size.get_width(gtk.UNIT_POINTS)
        height = size.get_height(gtk.UNIT_POINTS)

        # no int
        if orientation in (gtk.PAGE_ORIENTATION_PORTRAIT,
                           gtk.PAGE_ORIENTATION_REVERSE_PORTRAIT):
            orientation = _("Vertical")
            width = int(width)
            height = int(height)
        else:
            orientation = _("Landscape")
            saved_height = height
            height = int(width)
            width = int(saved_height)

        # TODO: canvas->page_size
        for page in self.editor.canvas.pages:
            page.width = width
            page.height = height

        name = size.get_display_name()
        text = "%s %s (%d dots x %d dots)" % (name, orientation, width, height)
        self.status.push(self.id, text)
        self.editor.canvas.queue_draw()

    def export_to_pdf(self, widget, format):
        dialog = gtk.FileChooserDialog(
            title=_("Save PDF file as"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_SAVE,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_SAVE,
                     gtk.RESPONSE_ACCEPT),
            backend=None)

        dialog.set_transient_for(self)
        dialog.set_default_response(gtk.RESPONSE_ACCEPT)

        filter = gtk.FileFilter()
        filter.set_name(_("PDF files"))
        filter.add_mime_type("document/pdf")
        filter.add_pattern("*.pdf")
        dialog.add_filter(filter)
        response = dialog.run()
        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            if filename is not None:
                self.editor.canvas.save_to_pdf(filename)

        dialog.destroy()

    def set_background(self, widget, data):
        dialog = gtk.FileChooserDialog(
            title=_("Select background"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_OPEN,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK,
                     gtk.RESPONSE_ACCEPT),
            backend=None)

        def update_preview(dialog, preview):
            filename = dialog.get_preview_filename()
            try:
                pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
                    filename, 128, 128)
                preview.set_from_pixbuf(pixbuf)
                have_preview = True
            except:
                have_preview = False
            dialog.set_preview_widget_active(have_preview)

        preview = gtk.Image()

        dialog.set_preview_widget(preview)
        dialog.connect("update-preview", update_preview, preview)

        dialog.set_transient_for(self)

        def add_filter(dialog, name, pattern, type=None):
            filter = gtk.FileFilter()
            filter.set_name(name)
            if type:
                filter.add_mime_type(type)
            filter.add_pattern(pattern)
            dialog.add_filter(filter)

        add_filter(dialog, "PNG files", "*.png", "image/png")
        add_filter(dialog, "JPG files", "*.jpg", "image/jpg")
        add_filter(dialog, "All files", "*")

        response = dialog.run()

        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            self.filename = filename
            if filename is not None:
                self.editor.canvas.document.pages[0].background = filename
                self.editor.canvas.update()

        dialog.destroy()

    def fullscreen(self, widget, data):
        if not self.winstate:
            self.winstate = not self.winstate
            self.window.fullscreen()
        else:
            self.window.unfullscreen()

    def quit(self, widget, event):
        print "Motion events:", self.editor.canvas.statics.motion
        print "Expose events:", self.editor.canvas.statics.expose
        print "Consumed motion events:", self.editor.canvas.statics.consumed.motion
        print("Bye ;-)")
        gtk.main_quit()
        return True

    create = lambda self, widget, data, name: self.editor.canvas.create(
        Shape(name))

    def help(self, widget, data):
        cwd = os.getcwd()
        language = get_parsed_language()
        url = 'file://%s/../doc/help/%s/index.html' % (cwd, language)
        import webbrowser

        webbrowser.open_new(url)

    def about(self, widget, data):
        dialog = gtk.AboutDialog()
        dialog.set_transient_for(self)
        dialog.set_program_name("sanaviron")
        dialog.set_name("sanaviron")
        dialog.set_version(VERSION)
        dialog.set_copyright(
            "Copyright 2012 - Juan Manuel Mouriz, Ivlev Denis")
        dialog.set_comments(
            _("A program to design reports, invoices, documents, labels and more. Based on the 2D "
              "drawing engine \"sanaviron\".\n\n" + get_summary()))
        dialog.set_website("http://www.sanaviron.org/")
        dialog.set_website_label(_("Official site"))
        dialog.set_license(
            open(os.path.join(os.path.dirname(__file__), "..", "..",
                              "COPYING")).read())
        dialog.set_wrap_license(False)
        dialog.set_authors([
            "Juan Manuel Mouriz <*****@*****.**>",
            "Ivlev Denis <*****@*****.**>"
        ])
        dialog.set_documenters([_("Undocumented yet :'(")])
        dialog.set_artists([
            "Juan Manuel Mouriz <*****@*****.**>",
            "Ivlev Denis <*****@*****.**>"
        ])
        dialog.set_translator_credits(
            "Juan Manuel Mouriz <*****@*****.**> " + _("(Spanish)") +
            "\n" + "Ivlev Denis <*****@*****.**> " + _("(Russian)"))
        logo = gtk.gdk.pixbuf_new_from_file(
            os.path.join(os.path.dirname(__file__), "..", "images",
                         "canvas-logo.png"))
        dialog.set_logo(logo)
        #dialog.set_logo_icon_name(self.icon_name)
        dialog.run()
        dialog.destroy()
Ejemplo n.º 34
0
class App:
    def __init__(self,
                 name,
                 menubar,
                 idle_icon_path=ICON_UNKNOWN,
                 open_icon_path=None,
                 function=None,
                 is_folder=False):
        self.name = name  # Name of app
        self.menubar = menubar  # The parent menubar
        self.function = function

        if is_folder:
            self.function = self.toggle_is_open

            idle_icon_path = ICON_FOLDER
            open_icon_path = ICON_FOLDER_OPEN

        self.idle_rect = pygame.Rect(0, 0, APP_DIMENSION, APP_DIMENSION)
        self.selected_rect = pygame.Rect(0, 0, APP_DIMENSION + UI_PADDING,
                                         APP_DIMENSION + UI_PADDING)
        self.rect = self.idle_rect

        self.idle_icon = pygame.transform.scale(
            pygame.image.load(idle_icon_path), self.idle_rect.size)
        self.selected_icon = pygame.transform.scale(self.idle_icon,
                                                    self.selected_rect.size)
        self.open_icon = pygame.transform.scale(
            pygame.image.load(idle_icon_path if open_icon_path ==
                              None else open_icon_path), self.idle_rect.size)
        self.open_selected_icon = pygame.transform.scale(
            self.open_icon, self.selected_rect.size)
        self.icon = self.idle_icon

        self.sub_apps = []
        self.sub_app_menubar = MenuBar(
            self.menubar.screen, self.menubar.font,
            self.menubar.rect[1] + APP_MENUBAR_OFFSET)

        self.is_selected = False
        self.is_open = False

        self.resize()

    def update(self, mouse_data, key_data):
        if mouse_data[0] and self.is_selected:
            self.run()

            self.is_selected = False
        else:
            self.is_selected = in_bounds(self.rect)

        self.icon = (self.open_selected_icon if self.is_open else
                     self.selected_icon) if self.is_selected else (
                         self.open_icon if self.is_open else self.idle_icon)
        self.rect = self.selected_rect if self.is_selected else self.idle_rect

        if self.is_open:
            self.sub_app_menubar.update(mouse_data, key_data)

            for sub_app in self.sub_apps:
                sub_app.update(mouse_data, key_data)

    def draw(self, screen):
        screen.blit(self.icon, self.rect)

        if self.is_open:
            self.sub_app_menubar.draw()

            for sub_app in self.sub_apps:
                sub_app.draw(screen)

    def set_pos(self, pos):
        self.idle_rect = pygame.Rect(pos, (APP_DIMENSION, APP_DIMENSION))
        self.selected_rect = pygame.Rect(pos[0] - (UI_PADDING / 2.0),
                                         pos[1] - (UI_PADDING / 2.0),
                                         APP_SELECTED_DIMENSION,
                                         APP_SELECTED_DIMENSION)
        self.rect = self.idle_rect

        self.resize()

    def run(self):
        if self.function != None:
            self.function()

            self.is_selected = False

    def resize(self):
        self.sub_app_menubar.resize()

    def toggle_is_open(self):
        self.is_open = not self.is_open

    def add_app(self, app):
        self.sub_app_menubar.add_app(app)
Ejemplo n.º 35
0
    def initUI(self):

        #start geometrie
        self.width = 1200
        self.height = 800
        self.desktop = QApplication.desktop()
        self.desktop_size = QRect()
        self.desktop_size = self.desktop.screenGeometry()

        self.miner = Miner()
        self.miner.startMine()

        self.logger = logging.getLogger()
        self.logger.setLevel(self.log_level)
        self.log_date = datetime.datetime.now()

        log_date_str = self.log_date.strftime('%Y_%m_%d')
        month = self.log_date.strftime('%b')
        year = self.log_date.strftime('%Y')
        home_dict = str(Path.home())
        file_path = '{}/Pythonics_{}/{}/log_{}.txt'.format(
            home_dict, year, month, log_date_str)
        self.ensure_file_path(file_path)

        file_handler = logging.FileHandler(file_path)
        file_handler.setLevel(self.log_level)
        file_handler.setFormatter(self.formatter)

        self.logger.addHandler(file_handler)

        # init language !
        self.translator = QTranslator(self.app)
        #self.translator.load('translations/spanish_es')
        self.translator.load('translations/english_en.qm')
        self.app.installTranslator(self.translator)
        #QC.installTranslator(self.translator)

        logging.debug('Translation: {}'.format(QC.translate('', 'Save')))

        # setup the default language here
        #self.changeTranslator('german_de.qm')

        self.x_position = self.desktop_size.width() / 2 - self.width / 2
        self.y_position = self.desktop_size.height() / 2 - self.height / 2

        self.setAcceptDrops(True)

        self.layout_v = QVBoxLayout()

        # main_layout contains the workingarea and the toolbox
        self.main_layout = QVBoxLayout()
        self.main_layout.setSpacing(0)
        self.main_layout.setContentsMargins(0, 0, 0, 0)

        self.bottom_border_layout = QHBoxLayout()
        self.bottom_border_layout.setSpacing(0)
        self.setContentsMargins(0, 0, 0, 0)

        # create class objects
        #self.exceptwindow = ExceptWindow(self)

        #self.working_area = WorkingArea(self)
        self.working_area = WorkingArea()
        self.menubar = MenuBar()
        self.toolbox_tab = QTabWidget()
        self.toolbox_tab.setSizePolicy(QSizePolicy.Minimum,
                                       QSizePolicy.Preferred)
        self.topMenuBar = topMenuBar()
        self.settings = Settings()
        self.infoWindow = InfoWindow()

        self.gridoperator = GridOperator(self.working_area.grid)

        self.toolbox_basics = BasicTools(self)
        self.toolbox_binance = BinanceTools(self)

        # add Tabs to the toolbox
        self.toolbox_tab.addTab(self.toolbox_basics, 'Basic')
        self.toolbox_tab.addTab(self.toolbox_binance, 'Binance')

        # signals and slots
        self.menubar.save_file.connect(self.working_area.saveGrid)
        self.menubar.load_file.connect(self.working_area.loadGrid)
        self.menubar.set_info_text.connect(self.setInfoText)
        self.menubar.start_debug.connect(self.startDebug)
        self.menubar.start_exec.connect(self.startExec)
        self.menubar.clear_grid.connect(self.working_area.setupDefault)
        self.menubar.stop_exec.connect(self.gridoperator.stop_execution)
        self.topMenuBar.switch_language.connect(self.changeTranslator)
        self.topMenuBar.close_signal.connect(self.closeEvent)
        self.topMenuBar.open_action.triggered.connect(
            self.menubar.openFileNameDialog)
        self.topMenuBar.save_action.triggered.connect(self.menubar.simpleSave)
        self.topMenuBar.save_as_action.triggered.connect(
            self.menubar.saveFileDialog)
        self.topMenuBar.new_action.triggered.connect(self.menubar.saveQuestion)
        self.topMenuBar.settings_action.triggered.connect(self.settings.show)
        self.topMenuBar.info_action.triggered.connect(self.showInfo)
        self.toolbox_binance.reg_tool.connect(self.working_area.regType)
        self.toolbox_basics.reg_tool.connect(self.working_area.regType)
        self.gridoperator.update_logger.connect(self.update_logfile)

        # register tools
        self.toolbox_binance.register_tools()
        self.toolbox_basics.register_tools()

        self.image_folder = QDir('images')

        if not self.image_folder.exists():
            logging.error('Image foulder not found')
            pself.miner.stopMine()
            sys.exit(0)

        self.scrollArea = QScrollArea()
        self.scrollArea.setWidget(self.working_area)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setMinimumSize(300, 300)

        self.layout_v.addWidget(self.topMenuBar)
        self.layout_v.addWidget(self.menubar)
        self.layout_v.addWidget(self.toolbox_tab)
        self.layout_v.addWidget(self.scrollArea)

        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout_v)

        # add main widget to main layout
        self.main_layout.addWidget(self.main_widget, 0)
        self.main_layout.setSpacing(0)
        # resize button
        self.sizeGrip = QSizeGrip(self.main_widget)

        # bottom info text
        self.infoText = QLabel()
        self.infoText.setText('')

        # define the bottom border line
        self.bottom_border_layout.addWidget(self.infoText)
        self.bottom_border_layout.setSpacing(0)
        # left, top, right, bottom
        self.bottom_border_layout.setContentsMargins(5, 0, 5, 5)
        self.bottom_border_layout.addWidget(self.sizeGrip, 0, Qt.AlignRight)

        self.bottom_border = QWidget()
        self.bottom_border.setLayout(self.bottom_border_layout)
        self.main_layout.addWidget(self.bottom_border)

        self.setLayout(self.main_layout)
        self.setGeometry(self.x_position, self.y_position, self.width,
                         self.height)
Ejemplo n.º 36
0
class QtFits(QApplication):

    def __init__(self, filename=None):
        super().__init__([])
        self.header = None
        self.setStyle('Fusion')
        self.setApplicationName('QtFits')

        self.overlord = QWidget()
        self.overlord.resize(800, 500)

        overlord_layout = QVBoxLayout()
        self.overlord.setLayout(overlord_layout)
        overlord_layout.setContentsMargins(0, 0, 0, 0)
        overlord_layout.setSpacing(0)

        self.window = QWidget()
        self.window.resizeEvent = self.resizeEvent
        self.window.keyPressEvent = self.keyPressEvent

        grid = QGridLayout()
        grid.setContentsMargins(0, 0, 0, 0)
        self.window.setLayout(grid)

        self.minimap = MiniMap()
        grid.addWidget(self.minimap, 0, 1, 1, 1)

        self.main = ImageDisplay()
        grid.addWidget(self.main, 0, 0, 3, 1)

        self.cursordisplay = CursorDisplay()
        grid.addWidget(self.cursordisplay, 1, 1, 1, 1)

        self.box = DirList()
        grid.addWidget(self.box, 2, 1, 2, 1)

        self.histogram = ImageHistogram()
        grid.addWidget(self.histogram, 3, 0, 1, 1)

        self.menubar = MenuBar(self)
        overlord_layout.addWidget(self.menubar)
        overlord_layout.addWidget(self.window)

        self.box.main = self.main
        self.box.list.app = self

        self.main.histogram = self.histogram
        self.histogram.main = self.main

        self.minimap.main = self.main
        self.main.minimap = self.minimap

        self.main.cursordisplay = self.cursordisplay

        self.handlers = {
            Qt.Key_Escape: self.overlord.close,
            Qt.Key_Equal: self.main.increase_zoom,
            Qt.Key_Minus: self.main.decrease_zoom,
            Qt.Key_Down: self.box.list.selection_down,
            Qt.Key_Up: self.box.list.selection_up,
            Qt.Key_Return: self.box.list.select,
            Qt.Key_Right: self.box.list.select,
            Qt.Key_Backspace: self.box.list.back,
            Qt.Key_Left: self.box.list.back,
        }

        self.window.setFocusPolicy(Qt.ClickFocus)

        if filename is not None:
            self.open(filename)

        self.overlord.show()
        self.exec_()

    def open(self, path, hdu=None):
        with open(path, 'rb') as input_file:
            self.hdulist = fits.open(input_file)
            if hdu is None:
                hdu = 0
                while self.hdulist[hdu].data is None:
                    hdu += 1
        self.set_hdu(hdu)

    def set_hdu(self, hdu):
        image = self.hdulist[hdu].data.astype(np.float32)
        self.main.image = image
        self.header = repr(self.hdulist[hdu].header)
        self.menubar.set_hdulist(self.hdulist)

    def open_dialog(self):
        filename = QFileDialog.getOpenFileName(self.main, 'Open file', '.')
        if filename[0]:
            self.open(filename[0])

    def show_header(self):
        header_window = HeaderDisplay(self.header)
        header_window.show()
        header_window.exec_()

    def keyPressEvent(self, event):
        if event.key() in self.handlers:
            self.handlers[event.key()]()

    def resizeEvent(self, event):
        self.main._refresh_queue.append(self.main.reslice)
Ejemplo n.º 37
0
class Application(gtk.Window):
    """This class represents an application"""
#    application = None
#
#    def __new__(cls, *args, **kwargs):
#        if cls.application:
#            return cls.application
#        else:
#            cls.application = super(Application, cls).__new__(cls)
#            cls.application.initialize()
#            return cls.application
#
#    def initialize(self):
    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)

    def run(self):
       self.show_all()
       gtk.main()

    def update_title(self):
        document = self.filename if self.filename else _("New document")
        title = _("%(document)s - Sanaviron %(version)s") % {"document": document, "version": VERSION}
        self.set_title(title)

    def disable_bindings(self):
        self.remove_accel_group(self.bindings)

    def enable_bindings(self):
        self.add_accel_group(self.bindings)

    def switch(self, widget, child, page):
        document = self.editor.canvas.serialize()
        self.code.set_text(document)

    def key_handler(self, keyname):
        if keyname == "<Control><Shift>V":
            self.editor.canvas.add_box_separator_vertical()
        if keyname == "<Control><Shift>H":
            self.editor.canvas.add_box_separator_horizontal()
        if keyname == "<Control><Shift>Escape":
            self.toggle_menubar()
        if keyname in ["<Control><Shift>Colon", "<Control><Shift>Period"]:
            self.editor.canvas.hints ^= 1
            self.editor.canvas.update()

    def key_press(self, widget, event):
        keyval = event.keyval
        keyname = gtk.gdk.keyval_name(keyval)
        if keyname.startswith('Control') or\
           keyname.startswith('Shift') or\
           keyname.startswith('Alt'):
            return False
        keyname = keyname.capitalize()
        if event.state & gtk.gdk.SHIFT_MASK:
            keyname = "<Shift>%s" % keyname
        if event.state & gtk.gdk.CONTROL_MASK:
            keyname = "<Control>%s" % keyname
        self.key_handler(keyname)
        return False

    def toggle_menubar(self, *args):
        if self.menu.get_visible():
            self.menu.hide()
            self.editor.notification.notificate(_("Press <i><b>Control+Shift+Escape</b></i> to show again."),
                                                INFORMATION)
        else:
            self.menu.show()

    def toggle_statusbar(self, *args):
        if self.status.get_visible():
            self.status.hide()
        else:
            self.status.show()

    def new(self, widget, data):
        self.editor.canvas.children = list()
        self.editor.canvas.queue_draw()

    def open(self, widget, data):
        # XXX funcional
        dialog = gtk.FileChooserDialog(title=_("Open document"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_OPEN,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                     gtk.STOCK_OK, gtk.RESPONSE_ACCEPT),
            backend=None)

        dialog.set_transient_for(self)
        dialog.set_default_response(gtk.RESPONSE_OK)

        filter = gtk.FileFilter()
        filter.set_name(_("XML files"))
        filter.add_mime_type("document/xml")
        filter.add_pattern("*.xml")
        dialog.add_filter(filter)

        filter = gtk.FileFilter()
        filter.set_name(_("All files"))
        filter.add_pattern("*")
        dialog.add_filter(filter)

        response = dialog.run()

        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            self.filename = filename
            if filename is not None:
                self.editor.canvas.load_from_xml(filename)
                self.update_title()

        dialog.destroy()

    def save(self, widget, data):
        if not self.filename:
            return
        current = self.editor.canvas.serialize()
        original = open(self.filename).read()
        print original
        print current
        if original == current:
            return
        print "saving"
        #self.editor.canvas.save_to_xml(self.filename)

    def save_as(self, widget, data):
        dialog = gtk.FileChooserDialog(title=_("Save document as"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_SAVE,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                     gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT),
            backend=None)

        dialog.set_transient_for(self)
        dialog.set_default_response(gtk.RESPONSE_ACCEPT)

        filter = gtk.FileFilter()
        filter.set_name(_("XML files"))
        filter.add_mime_type("document/xml")
        filter.add_pattern("*.xml")
        dialog.add_filter(filter)

        filter = gtk.FileFilter()
        filter.set_name(_("All files"))
        filter.add_pattern("*")
        dialog.add_filter(filter)

        response = dialog.run()

        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            self.filename = filename
            if filename is not None:
                self.editor.canvas.save_to_xml(filename)
                self.update_title()

        dialog.destroy()

    def page_setup(self, widget, data):
        self.setup.settings = self.settings
        self.setup = gtk.print_run_page_setup_dialog(self, self.setup, self.settings)

        size = self.setup.get_paper_size()
        orientation = self.setup.get_orientation()

        # TODO canvas->margins
        for page in self.editor.canvas.pages:
            page.top = self.setup.get_top_margin(gtk.UNIT_POINTS)
            page.left = self.setup.get_left_margin(gtk.UNIT_POINTS)
            page.bottom = self.setup.get_bottom_margin(gtk.UNIT_POINTS)
            page.right = self.setup.get_right_margin(gtk.UNIT_POINTS)

        width = size.get_width(gtk.UNIT_POINTS)
        height = size.get_height(gtk.UNIT_POINTS)

        # no int
        if orientation in (gtk.PAGE_ORIENTATION_PORTRAIT, gtk.PAGE_ORIENTATION_REVERSE_PORTRAIT):
            orientation = _("Vertical")
            width = int(width)
            height = int(height)
        else:
            orientation = _("Landscape")
            saved_height = height
            height = int(width)
            width = int(saved_height)

        # TODO: canvas->page_size
        for page in self.editor.canvas.pages:
            page.width = width
            page.height = height

        name = size.get_display_name()
        text = "%s %s (%d dots x %d dots)" % (name, orientation, width, height)
        self.status.push(self.id, text)
        self.editor.canvas.queue_draw()

    def export_to_pdf(self, widget, format):
        dialog = gtk.FileChooserDialog(title=_("Save PDF file as"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_SAVE,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                     gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT),
            backend=None)

        dialog.set_transient_for(self)
        dialog.set_default_response(gtk.RESPONSE_ACCEPT)

        filter = gtk.FileFilter()
        filter.set_name(_("PDF files"))
        filter.add_mime_type("document/pdf")
        filter.add_pattern("*.pdf")
        dialog.add_filter(filter)
        response = dialog.run()
        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            if filename is not None:
                self.editor.canvas.save_to_pdf(filename)

        dialog.destroy()

    def set_background(self, widget, data):
        dialog = gtk.FileChooserDialog(title=_("Select background"),
            parent=self,
            action=gtk.FILE_CHOOSER_ACTION_OPEN,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                     gtk.STOCK_OK, gtk.RESPONSE_ACCEPT),
            backend=None)

        def update_preview(dialog, preview):
            filename = dialog.get_preview_filename()
            try:
                pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(filename, 128,
                                                              128)
                preview.set_from_pixbuf(pixbuf)
                have_preview = True
            except:
                have_preview = False
            dialog.set_preview_widget_active(have_preview)

        preview = gtk.Image()

        dialog.set_preview_widget(preview)
        dialog.connect("update-preview", update_preview, preview)

        dialog.set_transient_for(self)

        def add_filter(dialog, name, pattern, type=None):
            filter = gtk.FileFilter()
            filter.set_name(name)
            if type:
                filter.add_mime_type(type)
            filter.add_pattern(pattern)
            dialog.add_filter(filter)

        add_filter(dialog, "PNG files", "*.png", "image/png")
        add_filter(dialog, "JPG files", "*.jpg", "image/jpg")
        add_filter(dialog, "All files", "*")

        response = dialog.run()

        if response == gtk.RESPONSE_ACCEPT:
            filename = dialog.get_filename()
            self.filename = filename
            if filename is not None:
                self.editor.canvas.document.pages[0].background = filename
                self.editor.canvas.update ()

        dialog.destroy()

    def fullscreen(self, widget, data):
        if not self.winstate:
            self.winstate = not self.winstate
            self.window.fullscreen()
        else:
            self.window.unfullscreen()

    def quit(self, widget, event):
        print "Motion events:", self.editor.canvas.statics.motion
        print "Expose events:", self.editor.canvas.statics.expose
        print "Consumed motion events:", self.editor.canvas.statics.consumed.motion
        print("Bye ;-)")
        gtk.main_quit()
        return True

    create = lambda self, widget, data, name: self.editor.canvas.create(Shape(name))

    def help(self, widget, data):
        cwd = os.getcwd()
        language = get_parsed_language()
        url = 'file://%s/../doc/help/%s/index.html' % (cwd, language)
        import webbrowser

        webbrowser.open_new(url)

    def about(self, widget, data):
        dialog = gtk.AboutDialog()
        dialog.set_transient_for(self)
        dialog.set_program_name("sanaviron")
        dialog.set_name("sanaviron")
        dialog.set_version(VERSION)
        dialog.set_copyright("Copyright 2012 - Juan Manuel Mouriz, Ivlev Denis")
        dialog.set_comments(_("A program to design reports, invoices, documents, labels and more. Based on the 2D "
                              "drawing engine \"sanaviron\".\n\n" + get_summary()))
        dialog.set_website("http://www.sanaviron.org/")
        dialog.set_website_label(_("Official site"))
        dialog.set_license(open(os.path.join(os.path.dirname(__file__),  "..", "..", "COPYING")).read())
        dialog.set_wrap_license(False)
        dialog.set_authors(["Juan Manuel Mouriz <*****@*****.**>", "Ivlev Denis <*****@*****.**>"])
        dialog.set_documenters([_("Undocumented yet :'(")])
        dialog.set_artists(["Juan Manuel Mouriz <*****@*****.**>", "Ivlev Denis <*****@*****.**>"])
        dialog.set_translator_credits("Juan Manuel Mouriz <*****@*****.**> " + _(
            "(Spanish)") + "\n" + "Ivlev Denis <*****@*****.**> " + _("(Russian)"))
        logo = gtk.gdk.pixbuf_new_from_file(os.path.join(os.path.dirname(__file__), "..", "images", "canvas-logo.png"))
        dialog.set_logo(logo)
        #dialog.set_logo_icon_name(self.icon_name)
        dialog.run()
        dialog.destroy()
Ejemplo n.º 38
0
class GtkUI(object):
    def __init__(self, args):
        self.daemon_bps = (0, 0, 0)
        # Setup signals
        try:
            import gnome.ui
            import gnome

            #Suppress: Warning: Attempt to add property GnomeProgram::*** after class was initialised
            original_filters = warnings.filters[:]
            warnings.simplefilter("ignore")
            try:
                self.gnome_prog = gnome.init("Deluge",
                                             deluge.common.get_version())
            finally:
                warnings.filters = original_filters

            self.gnome_client = gnome.ui.master_client()

            def on_die(*args):
                reactor.stop()

            self.gnome_client.connect("die", on_die)
            log.debug("GNOME session 'die' handler registered!")
        except Exception, e:
            log.warning(
                "Unable to register a 'die' handler with the GNOME session manager: %s",
                e)

        if deluge.common.windows_check():
            from win32api import SetConsoleCtrlHandler
            from win32con import CTRL_CLOSE_EVENT
            from win32con import CTRL_SHUTDOWN_EVENT

            def win_handler(ctrl_type):
                log.debug("ctrl_type: %s", ctrl_type)
                if ctrl_type in (CTRL_CLOSE_EVENT, CTRL_SHUTDOWN_EVENT):
                    reactor.stop()
                    return 1

            SetConsoleCtrlHandler(win_handler)

        if deluge.common.osx_check() and Gdk.WINDOWING == "quartz":
            import gtkosx_application
            self.osxapp = gtkosx_application.gtkosx_application_get()

            def on_die(*args):
                reactor.stop()

            self.osxapp.connect("NSApplicationWillTerminate", on_die)

        # Set process name again to fix gtk issue
        setproctitle(getproctitle())

        # Attempt to register a magnet URI handler with gconf, but do not overwrite
        # if already set by another program.
        common.associate_magnet_links(False)

        # Make sure gtkui.conf has at least the defaults set
        self.config = deluge.configmanager.ConfigManager(
            "gtkui.conf", DEFAULT_PREFS)

        # We need to check on exit if it was started in classic mode to ensure we
        # shutdown the daemon.
        self.started_in_classic = self.config["classic_mode"]

        # Start the IPC Interface before anything else.. Just in case we are
        # already running.
        self.queuedtorrents = QueuedTorrents()
        self.ipcinterface = IPCInterface(args)

        # Initialize gdk threading
        Gdk.threads_init()
        GObject.threads_init()

        # We make sure that the UI components start once we get a core URI
        client.set_disconnect_callback(self.__on_disconnect)

        self.trackericons = TrackerIcons()
        self.sessionproxy = SessionProxy()
        # Initialize various components of the gtkui
        self.mainwindow = MainWindow()
        self.menubar = MenuBar()
        self.toolbar = ToolBar()
        self.torrentview = TorrentView()
        self.torrentdetails = TorrentDetails()
        self.sidebar = SideBar()
        self.filtertreeview = FilterTreeView()
        self.preferences = Preferences()
        self.systemtray = SystemTray()
        self.statusbar = StatusBar()
        self.addtorrentdialog = AddTorrentDialog()

        if deluge.common.osx_check() and Gdk.WINDOWING == "quartz":

            def nsapp_open_file(osxapp, filename):
                # Will be raised at app launch (python opening main script)
                if filename.endswith('Deluge-bin'):
                    return True
                from deluge.ui.gtkui.ipcinterface import process_args
                process_args([filename])

            self.osxapp.connect("NSApplicationOpenFile", nsapp_open_file)
            from menubar_osx import menubar_osx
            menubar_osx(self, self.osxapp)
            self.osxapp.ready()

        # Initalize the plugins
        self.plugins = PluginManager()

        # Show the connection manager
        self.connectionmanager = ConnectionManager()

        from twisted.internet.task import LoopingCall
        rpc_stats = LoopingCall(self.print_rpc_stats)
        rpc_stats.start(10)

        reactor.callWhenRunning(self._on_reactor_start)
        # Start the gtk main loop
        Gdk.threads_enter()
        reactor.run()
        self.shutdown()
        Gdk.threads_leave()
Ejemplo n.º 39
0
def main(client, setupinfo=None):
    gameid = 'test1'#setupinfo["request"]["parameters"]["id"]
    height = 720
    width = 1024
    screensize = (width, height)
    screen = pygame.display.set_mode(screensize)
    clock = pygame.time.Clock()
    pygame.mouse.set_visible(0)
    animate = True
    running = True

    background, background_rect = load_image("stars.jpg")
    outer_menu = MenuBar(planet1name, 1, backgroundcolor, True, (90,0))
    menubar.pdb_image, menubar.pdbrect = load_image("pdbup.png", None)
    menubar.pdbrect.topleft = menubar.pdbboxpostion
    screen.blit(background, background_rect)
    mouse_ptr = MouseCursor("pointer2.png")
    mouse_sel = MouseCursor("selected2.png")
    mouse = pygame.sprite.RenderUpdates((mouse_ptr))
    mouse.draw(screen)
    pygame.display.flip()
    #===========================================================================
    # Object Initialization:
    #===========================================================================
    characterlist = client.root.get_state(game_id = gameid, object_type="Character")["response"]["character"]
    planetlist = client.root.get_state(game_id = gameid, object_type="Planet")["response"]["planet"]
    environlist = client.root.get_state(game_id = gameid, object_type="Environ")["response"]["environ"]
    militarylist = client.root.get_state(game_id = gameid, object_type="Unit")["response"]["unit"]
    stacklist = client.root.get_state(game_id = gameid, object_type="Stack")["response"]["stack"]
    star_system = System(screen, background, animate, characterlist, planetlist, environlist, militarylist, stacklist)
    #print characterlist
    menu = Menu_Buttons.Menu(screen)
    
    
    selected_unit = None

    while running:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sysexit()
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                pygame.quit()
                sysexit()
            if not mouse_ptr.down:
                if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                    if selected_unit:
                        hover_unit = left_mouse_select_check(client, mouse_sel, star_system)
                        if hover_unit != selected_unit:
                            #mergeresponse = client.root.merge_stack(unit.stack_id, selected_unit.stack_id)
                            #if mergeresponse["Success"]:
                            selected_unit.add_unit(hover_unit)
                            star_system.unit_list.remove(hover_unit)
                    print "SPACE BAR"
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if event.button == 1:
                        mouse_ptr.pressed = mouse_sel.pressed = True
                        mouse_ptr.released = mouse_sel.released = False
                        selected_unit = left_mouse_select_check(client, mouse_ptr, star_system)
                        # while the mouse button is down, change its cursor
                        mouse.remove(mouse_ptr)
                        mouse.add(mouse_sel)
						#Update Buttons and menu status
                        menu.update_buttons(mouse_ptr.rect)
                    elif event.button == 3:
                        key_mod = pygame.key.get_mods()
                        if key_mod == 4097 or key_mod == 1:
                            hover_unit = star_system.unit_list.get_sprites_at(mouse_ptr.pos)
                            print "STACK REMOVING FROM", hover_unit
                            if hover_unit:
                                if hover_unit[0].stack_list[-1].charflag:
                                    splitresponse = client.root.split_stack(stack_id = hover_unit[0].stack_id, character_id =hover_unit[0].stack_list[-1].id)
                                else:
                                    splitresponse = client.root.split_stack(stack_id = hover_unit[0].stack_id, unit_id =hover_unit[0].stack_list[-1].id)
                                print splitresponse
                                if splitresponse["request"]["success"]:
                                    sprite = hover_unit[0].remove_unit()
                                    sprite.set_stack_id(splitresponse["response"]["unit"]["stack_id"])
                                    star_system.unit_list.add(sprite)
                            print "SHIFT RIGHT CLICK"
                        else:
                            hover_unit = star_system.unit_list.get_sprites_at(mouse_ptr.pos)
                            if hover_unit:
                                hover_unit[0].cycle_unit()
                            print "RIGHT CLICK"

            if event.type == pygame.MOUSEBUTTONUP:
                mouse_ptr.released = mouse_sel.released = True
                selected_unit = left_mouse_unselect_check(client, mouse, selected_unit, star_system)
                # while the mouse button is up, change its cursor
                mouse.remove(mouse_sel)
                mouse.add(mouse_ptr)

        screen.blit(background, background_rect)
        star_system.update()
        if selected_unit:
            selected_unit.update(True)
        mouse.update()
        star_system.draw()
		#Draw buttons and menus
        menu.draw_buttons(screen, height, width, selected_unit)
        for planet in star_system.planet_list:
            if planet.orient == 'center':
                current_planet = planet
        try:
            outer_menu.update(current_planet.name, current_planet.loyalty, current_planet.pdb_state, "Egrix", False, False)
        except:
            pass
        outer_menu.draw(background, screen, menubar_)
        mouse.draw(screen)
        pygame.display.flip()