Пример #1
0
class Main(QtGui.QMainWindow):
    MODE_SPRITE = 0
    MODE_ACTIVE = 1
    MODE_PASSIVE = 2
    MODEKEY = {'Q': MODE_SPRITE,
               'A': MODE_ACTIVE,
               'P': MODE_PASSIVE}
    MODENAME = ['Sprite', 'Active hitbox', 'Passive hitbox']

    move = [(lambda hitbox_editor, delta: hitbox_editor.sp.__iadd__(QPoint(*delta))),
            (lambda hitbox_editor, delta: hitbox_editor.hba.translate(*delta)),
            (lambda hitbox_editor, delta: hitbox_editor.hbp.translate(*delta))]

    sizen = [(lambda hitbox_editor, delta: None),
             (lambda hitbox_editor, delta: hitbox_editor.hba.adjust(*delta)),
             (lambda hitbox_editor, delta: hitbox_editor.hbp.adjust(*delta))]

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

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.action_Save.triggered.connect(self.ui.hitbox_editor.save)

        self.filechooser = QFileDialog(self, 'Choose frame', '.')
        self.filechooser.setAcceptMode(QFileDialog.AcceptOpen)
        self.filechooser.setFileMode(QFileDialog.AnyFile)
        self.filechooser.fileSelected.connect(self.ui.hitbox_editor.load)

        self.ui.action_Open.triggered.connect(self.filechooser.open)

        self.mode = Main.MODE_SPRITE

        for key, mode in Main.MODEKEY.iteritems():
            action_mode = QAction(self)
            action_mode.setObjectName('Change mode for ' + key)
            action_mode.setShortcut(QApplication.translate('mainWindow', key, None, QApplication.UnicodeUTF8))
            action_mode.triggered.connect(self.make_mode_set(mode))
            self.addAction(action_mode)

        for idx, keys in [(0, 'FS'), (1, 'DE')]:
            for sign, key in zip((1, -1), keys):
                delta = [0, 0]
                delta[idx] = sign
                delta = tuple(delta)

                action_move = QAction(self)
                action_move.setObjectName('Move on ' + key)
                action_move.setShortcut(QApplication.translate('mainWindow', key, None, QApplication.UnicodeUTF8))
                action_move.triggered.connect(self.make_move_handler(delta))
                self.addAction(action_move)

        for idx, key in zip(xrange(4), 'JILK'):
            delta = [0, 0, 0, 0]

            # Largen
            # top and left get -1, width and height get +1
            delta[idx] = -1 if idx < 2 else 1

            action_sizen = QAction(self)
            action_sizen.setObjectName('Largen on ' + key)
            action_sizen.setShortcut(QApplication.translate('mainWindow', key, None,
                                                              QApplication.UnicodeUTF8))
            action_sizen.triggered.connect(self.make_size_handler(tuple(delta)))
            self.addAction(action_sizen)

            # Smallen
            # width and height get -1, top and left get +1
            delta[(idx + 2) % 4] = delta[idx]
            delta[idx] = 0
            key = 'Shift+' + key

            action_sizen = QAction(self)
            action_sizen.setObjectName('Smallen on ' + key)
            action_sizen.setShortcut(QApplication.translate('mainWindow', key, None,
                                                            QApplication.UnicodeUTF8))
            action_sizen.triggered.connect(self.make_size_handler(tuple(delta)))
            self.addAction(action_sizen)

    def make_mode_set(self, mode):
        '''Returns a function which sets mode to mode. Mode should be one of the MODE_
        constants above.'''

        def modeset():
            self.mode = mode

        return modeset

    def make_move_handler(self, delta):
        '''Returns a function which adjusts the location of the object for the
        current mode. Delta must be a tuple of two numbers'''

        def handler():
            Main.move[self.mode](self.ui.hitbox_editor, delta)
            self.ui.hitbox_editor.update()

        return handler

    def make_size_handler(self, delta):
        '''Returns a function which changes the size of the object for the
        current mode. Delta must be a tuple of 4 numbers for left, top, right, bottom'''

        def handler():
            Main.sizen[self.mode](self.ui.hitbox_editor, delta)
            self.ui.hitbox_editor.update()

        return handler

    @property
    def mode(self):
        return self._mode

    @mode.setter
    def mode(self, value):
        self._mode = value
        self.statusBar().showMessage('Mode: ' + Main.MODENAME[self._mode])
Пример #2
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.action_Save.triggered.connect(self.ui.hitbox_editor.save)

        self.filechooser = QFileDialog(self, 'Choose frame', '.')
        self.filechooser.setAcceptMode(QFileDialog.AcceptOpen)
        self.filechooser.setFileMode(QFileDialog.AnyFile)
        self.filechooser.fileSelected.connect(self.ui.hitbox_editor.load)

        self.ui.action_Open.triggered.connect(self.filechooser.open)

        self.mode = Main.MODE_SPRITE

        for key, mode in Main.MODEKEY.iteritems():
            action_mode = QAction(self)
            action_mode.setObjectName('Change mode for ' + key)
            action_mode.setShortcut(QApplication.translate('mainWindow', key, None, QApplication.UnicodeUTF8))
            action_mode.triggered.connect(self.make_mode_set(mode))
            self.addAction(action_mode)

        for idx, keys in [(0, 'FS'), (1, 'DE')]:
            for sign, key in zip((1, -1), keys):
                delta = [0, 0]
                delta[idx] = sign
                delta = tuple(delta)

                action_move = QAction(self)
                action_move.setObjectName('Move on ' + key)
                action_move.setShortcut(QApplication.translate('mainWindow', key, None, QApplication.UnicodeUTF8))
                action_move.triggered.connect(self.make_move_handler(delta))
                self.addAction(action_move)

        for idx, key in zip(xrange(4), 'JILK'):
            delta = [0, 0, 0, 0]

            # Largen
            # top and left get -1, width and height get +1
            delta[idx] = -1 if idx < 2 else 1

            action_sizen = QAction(self)
            action_sizen.setObjectName('Largen on ' + key)
            action_sizen.setShortcut(QApplication.translate('mainWindow', key, None,
                                                              QApplication.UnicodeUTF8))
            action_sizen.triggered.connect(self.make_size_handler(tuple(delta)))
            self.addAction(action_sizen)

            # Smallen
            # width and height get -1, top and left get +1
            delta[(idx + 2) % 4] = delta[idx]
            delta[idx] = 0
            key = 'Shift+' + key

            action_sizen = QAction(self)
            action_sizen.setObjectName('Smallen on ' + key)
            action_sizen.setShortcut(QApplication.translate('mainWindow', key, None,
                                                            QApplication.UnicodeUTF8))
            action_sizen.triggered.connect(self.make_size_handler(tuple(delta)))
            self.addAction(action_sizen)