Exemple #1
0
class Window(QWidget):
    def __init__(self):
        super().__init__()
        uic.loadUi('main.ui', self)
        self.toolButton: QToolButton = self.toolButton
        self.toolButton.clicked.connect(self.openSettings)
        w0, h0 = self.width() // 4, self.height() // 4
        self.ps = PointSet([[w0, h0], [w0, h0 * 3], [w0 * 3, h0 * 3]])
        self.moving = False
        self.current_point = None
        self.repaint()

    def paintEvent(self, event: QPaintEvent):
        painter = QPainter()
        painter.begin(self)
        self.ps.draw(painter)
        painter.end()

    def mousePressEvent(self, event: QMouseEvent):
        if event.button() == Qt.LeftButton:
            if self.ps.get_point(event.x(), event.y()) is None:
                self.ps.add(event.x(), event.y())
            self.current_point = self.ps.get_point(event.x(), event.y())
            self.moving = True
        if event.button() == Qt.RightButton:
            removee = self.ps.get_point(event.x(), event.y())
            if removee is not None and len(self.ps.points) > 3:
                Color.pop(removee.idx)
                self.ps.points.pop(removee.idx)

    def mouseReleaseEvent(self, event: QMouseEvent):
        self.moving = False
        self.repaint()

    def mouseMoveEvent(self, event: QMouseEvent):
        if self.moving:
            self.current_point.set(x=event.x(), y=event.y())
            self.repaint()

    def in_ball(self, x, y):
        return (x - self.ball_x)**2 + (y - self.ball_y)**2 <= self.ball_r**2

    def openSettings(self):
        self.stg = SettingsWindow(self.repaint)
        self.stg.show()
Exemple #2
0
class MainDialog(QMainWindow, gui.Ui_MainWindow):

    connected = False

    DATA = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'DATA')
    modulesBank = {}
    clients = {}

    def __init__(self, reactor, plugins, plugins_dir, parent=None):
        super(MainDialog, self).__init__(parent)
        self.reactor = reactor
        self.setupUi(self)
        self.settings = Settings(self)

        self.anim = QPropertyAnimation(self, 'windowOpacity')
        self.anim.setDuration(1000)
        self.anim.setStartValue(0)
        self.anim.setEndValue(self.settings.moderatOpacity)
        self.anim.start()

        self.clientsTable.horizontalHeader().setStyleSheet('background: none;')

        # Multi Lang
        self.translate = Translate(self)
        self.MString = lambda _word: self.translate.word(_word)
        self.theme = Theme(self)

        # Init Log Dir
        if not os.path.exists(self.DATA):
            os.makedirs(self.DATA)
        self.assets = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                                   'assets')
        self.flags = os.path.join(self.assets, 'flags')
        self.plugins = plugins
        self.plugins_dir = plugins_dir
        self.directServerRunning = False
        self.filter = Filter(self)
        # Setup Settings
        self.set_config()
        self.pagination = pagination.Pagination(self)
        self.tables = tables.updateClientsTable(self)
        # Init UI
        self.ui = ui.updateUi(self)
        # Init Tray
        self.tray = tray.ModeratTrayIcon(self)
        self.rmenu = rmenu.moderatRightClickMenu(self)
        # Session ID
        self.session_id = None
        # Privileges
        self.privs = 0
        # Checkers
        self.moderators_checker = None
        self.clients_checker = None
        # Create Protocol
        self.create_server_protocol()
        self.create_moderator_protocol()
        # Init Triggers
        triggers.ModeratTriggers(self)
        # Init Shortcuts
        shortcuts.ModeratShortcuts(self)
        # Create Actions Object
        self.action = Actions(self)
        # Create Modes Object
        self.modes = Modes(self)

        self.onlineLoading = loading.Loading(self.clientsTabs)
        self.onlineLoading.hide()
        self.showMaximized()

    def set_config(self):

        self.translate.__init__(self)
        self.theme.__init__(self)
        self.setStyleSheet(self.theme.stylesheet)
        self.setWindowOpacity(self.settings.moderatOpacity / 100)
        self.setWindowTitle(self.MString('TITLE'))

        self.menuRemote_Server.setTitle(self.MString('REMOTE_SERVER'))
        self.actionConnect.setText(self.MString('CONNECT'))
        self.actionDisconnect.setText(self.MString('DISCONNECT'))
        self.actionExit.setText(self.MString('EXIT'))
        self.menuLocal_Server.setTitle(self.MString('LOCAL_SERVER'))
        self.actionStartServer.setText(self.MString('START_SERVER'))
        self.actionStopServer.setText(self.MString('STOP_SERVER'))
        self.menuFilter.setTitle(self.MString('FILTERS'))
        self.actionSetupFilters.setText(self.MString('SETUP_FILTERS'))
        self.menuSettings.setTitle(self.MString('SETTINGS_TITLE'))
        self.actionRunSettings.setText(self.MString('RUN_SETTINGS'))

        self.clientsTabs.setTabText(0, self.MString('CLIENTS_TAB_ONLINE'))
        self.clientsTabs.setTabText(1, self.MString('CLIENTS_TAB_DIRECT'))
        self.clientsTabs.setTabText(2, self.MString('CLIENTS_TAB_OFFLINE'))
        self.clientsTabs.setTabText(3, self.MString('CLIENTS_TAB_MODERATORS'))

        # HEADERS
        self.clientsTable.horizontalHeaderItem(0).setText(
            self.MString('HEADER_IP_ADDRESS'))
        self.clientsTable.horizontalHeaderItem(1).setText(
            self.MString('HEADER_ID'))
        self.clientsTable.horizontalHeaderItem(2).setText(
            self.MString('HEADER_USER'))
        self.clientsTable.horizontalHeaderItem(3).setText(
            self.MString('HEADER_ALIAS'))
        self.clientsTable.horizontalHeaderItem(4).setText(
            self.MString('HEADER_ACTIVE_WINDOW_TITLE'))

        self.offlineClientsTable.horizontalHeaderItem(0).setText(
            self.MString('HEADER_MODERATOR'))
        self.offlineClientsTable.horizontalHeaderItem(1).setText(
            self.MString('HEADER_ID'))
        self.offlineClientsTable.horizontalHeaderItem(2).setText(
            self.MString('HEADER_ALIAS'))
        self.offlineClientsTable.horizontalHeaderItem(3).setText(
            self.MString('HEADER_IP_ADDRESS'))
        self.offlineClientsTable.horizontalHeaderItem(4).setText(
            self.MString('HEADER_LAST_ONLINE'))

        self.moderatorsTable.horizontalHeaderItem(0).setText(
            self.MString('MODERATORS_HEADER_ID'))
        self.moderatorsTable.horizontalHeaderItem(1).setText(
            self.MString('MODERATORS_HEADER_ONLINE'))
        self.moderatorsTable.horizontalHeaderItem(2).setText(
            self.MString('MODERATORS_HEADER_OFFLINE'))
        self.moderatorsTable.horizontalHeaderItem(3).setText(
            self.MString('MODERATORS_HEADER_PRIVILEGES'))
        self.moderatorsTable.horizontalHeaderItem(4).setText(
            self.MString('MODERATORS_HEADER_STATUS'))
        self.moderatorsTable.horizontalHeaderItem(5).setText(
            self.MString('MODERATORS_HEADER_LASTONLINE'))

        self.directClientsTable.horizontalHeaderItem(0).setText(
            self.MString('HEADER_IP_ADDRESS'))
        self.directClientsTable.horizontalHeaderItem(1).setText(
            self.MString('HEADER_ID'))
        self.directClientsTable.horizontalHeaderItem(2).setText(
            self.MString('HEADER_MARK'))
        # END HEADERS

        #self.filterButton.filterButton.setText(self.MString('SIDEBAR_FILTER'))

        # Header Refresh
        self.clientsTable.setColumnHidden(0, not self.settings.headerIpAddress)
        self.clientsTable.setColumnHidden(1, not self.settings.headerClientId)
        self.clientsTable.setColumnHidden(2, not self.settings.headerUser)
        self.clientsTable.setColumnHidden(3, not self.settings.headerAlias)
        self.clientsTable.setColumnHidden(4, not self.settings.headerTitle)
        self.clientsTable.resizeColumnsToContents()
        self.clientsTable.horizontalHeader().setStretchLastSection(True)
        # Offline Header Refresh
        self.offlineClientsTable.setColumnHidden(
            0, not self.settings.offlineHeaderClientId)
        self.offlineClientsTable.setColumnHidden(
            1, not self.settings.offlineHeaderAlias)
        self.offlineClientsTable.setColumnHidden(
            2, not self.settings.offlineHeaderIpAddress)
        self.offlineClientsTable.setColumnHidden(
            3, not self.settings.offlineHeaderLastOnline)
        self.offlineClientsTable.resizeColumnsToContents()
        self.offlineClientsTable.horizontalHeader().setStretchLastSection(True)
        # Direct Header Refresh
        self.directClientsTable.setColumnHidden(
            0, not self.settings.directHeaderIpAddress)
        self.directClientsTable.setColumnHidden(
            1, not self.settings.directHeaderClientId)
        self.directClientsTable.setColumnHidden(
            2, not self.settings.directHeaderComment)
        self.directClientsTable.resizeColumnsToContents()
        self.directClientsTable.horizontalHeader().setStretchLastSection(True)

        # Menu
        self.viewLogsButton.setHidden(not self.settings.menuLogViewer)
        self.noteButton.setHidden(not self.settings.menuNote)
        self.setAliasButton.setHidden(not self.settings.menuAlias)
        self.updateSourceButton.setHidden(not self.settings.menuUpdate)
        self.shellButton.setHidden(not self.settings.menuShell)
        self.explorerButton.setHidden(not self.settings.menuExplorer)
        self.scriptingButton.setHidden(not self.settings.menuScripting)
        self.screenshotButton.setHidden(not self.settings.menuScreenshot)
        self.webcamButton.setHidden(not self.settings.menuWebcam)
        # Offline Menu
        self.viewOfflineLogsButton.setHidden(
            not self.settings.offlineMenuLogViewer)
        self.setOfflineAliasButton.setHidden(
            not self.settings.offlineMenuAlias)
        self.removeClientButton.setHidden(not self.settings.offlineMenuRemove)
        # Direct Menu
        self.directShellButton.setHidden(not self.settings.directMenuShell)
        self.directExplorerButton.setHidden(
            not self.settings.directMenuExplorer)
        self.directScriptingButton.setHidden(
            not self.settings.directMenuScripting)
        self.directScreenshotButton.setHidden(
            not self.settings.directMenuScreenshot)
        self.directWebcamButton.setHidden(not self.settings.directMenuWebcam)

    def show_settings_window(self):
        self.settingsWindow = SettingsWindow(self)
        self.settingsWindow.show()

    def create_server_protocol(self):
        '''
        Create Server Protocol
        :return:
        '''
        self.server = ModeratServerFactory(self)

    def on_server_started(self):
        '''
        On Server Started
        :return:
        '''
        self.directServer = self.reactor.listenTCP(
            self.settings.directServerPort, self.server)
        self.directServerRunning = True
        self.ui.on_server_started()
        self.tray.info(
            self.MString('TRAY_SERVER_STARTED'),
            u'{} - {}'.format(self.MString('TRAY_LISTEN_PORT'),
                              self.settings.directServerPort))

    def on_server_stopped(self):
        '''
        On Server Stopped
        :return:
        '''
        if self.directServerRunning:
            self.directServer.stopListening()
            self.directServerRunning = False
        self.ui.on_server_stopped()
        self.tray.info(self.MString('TRAY_SERVER_STOPPED'))

    def create_moderator_protocol(self):
        self.moderator = SocketModeratorFactory(
            self.on_moderator_connect_success, self.on_moderator_connect_fail,
            self.on_moderator_receive)

    # Update Direct Connections Tables
    def update_direct_table(self):
        '''
        Rearrange Direct Clients
        :param clients:
        :return:
        '''
        self.tables.update_direct_clients()

    # Start Connect To Server
    def on_connect_to_server(self):
        '''
        Try Connect To Server
        :return:
        '''
        self.connection = self.reactor.connectTCP(
            self.settings.serverIpAddress, self.settings.serverPort,
            self.moderator)

    def on_moderator_connect_success(self):
        '''
        On Moderator Connected To Server
        :return:
        '''
        self.connected = True
        self.action.login()

    def on_moderator_connect_fail(self, reason):
        '''
        On Moderator Disconnected From Server
        :param reason:
        :return:
        '''
        if not type(reason) is bool:
            message.error(self, self.MString('MSGBOX_ERROR'),
                          str(reason.value))
        self.connected = False
        self.action.disconnect()

    def on_moderator_receive(self, data):
        '''
        Data Received From Server
        :param data:
        :return:
        '''
        self.modes.check_mode(data)

    def send_message(self,
                     message,
                     mode,
                     _to='',
                     session_id='',
                     module_id='',
                     p2p=False):
        if p2p:
            if self.directServerRunning:
                self.server.send_msg(_to, message, mode, session_id, module_id)
        else:
            self.moderator.send_msg(message, mode, _to, session_id, module_id)

    def set_alias(self):
        '''
        Set Alias For Client
        :return:
        '''
        self.action.set_alias()

    def remove_client(self):
        '''
        Remove Client
        :return:
        '''
        self.action.remove_client()

    def set_logs_settings(self):
        '''
        Set Client Log Settings
        :return:
        '''
        self.action.set_log_settings()

    @connected_to_server
    def update_source(self):
        '''
        Update Clients Source
        :return: Restart client
        '''
        self.action.update_source()

    def execute_module(self, module):
        '''
        execute module
        :param module:
        :return:
        '''
        self.action.execute_module(module)

    # TODO: TEMP
    def usb_spreading(self):
        self.action.usb_spreading()

    @is_administrator
    def set_moderator(self):
        '''
        Set Moderator For Client
        :return:
        '''
        self.action.administrator_set_moderator()

    @connected_to_server
    @is_administrator
    def get_moderators(self):
        '''
        Get Moderators Information
        :return:
        '''
        self.action.administrator_get_moderators()

    @connected_to_server
    @is_administrator
    def create_moderator(self):
        '''
        Create New Moderator
        :return:
        '''
        self.action.administrator_create_moderator()

    @connected_to_server
    @is_administrator
    def change_moderator_password(self):
        '''
        Change Moderator Password
        :return:
        '''
        self.action.administrator_change_moderator_password()

    @connected_to_server
    @is_administrator
    def change_moderator_privilege(self):
        '''
        Change Moderator Privileges
        :return:
        '''
        self.action.administrator_change_moderator_privilege()

    @connected_to_server
    @is_administrator
    def remove_moderator(self):
        '''
        Remove Moderator
        :return:
        '''
        self.action.administrator_remove_moderator()

    @connected_to_server
    def check_clients(self):
        '''
        Update Clients Information
        :return:
        '''
        self.action.get_clients()

    def send_signal(self, data):
        '''
        Send Received Data To Module
        :param data:
        :return:
        '''
        self.action.signal_received(data)

    def start_p2p(self):
        self.action.send_p2p_start()

    def filter_by_ip_address(self):
        self.action.filter_by_ip_address()

    def filter_by_alias(self):
        self.action.filter_by_alias()

    def filter_by_moderator(self):
        self.action.filter_by_moderator()

    def resizeEvent(self, event):
        self.onlineLoading.resize(self.clientsTabs.size())
        event.accept()

    def closeEvent(self, *args, **kwargs):
        '''
        Moderat Close Event Detected
        :param args:
        :param kwargs:
        :return:
        '''
        self.action.close_moderat()
        os._exit(1)
Exemple #3
0
def main():
    with open('ClientSettings.txt') as f:
        data = ast.literal_eval(f.read())

    colors = data['Colors']

    figure_colors = [Color([color]) for color in colors['FigureColors']]
    background = Color([colors['FontColors'][0], colors['FontColors'][1]])
    border = Color([colors['BorderColors'][0], colors['BorderColors'][1]])

    cell_size = 43

    x, y = data['Resolution']
    left, top = 10, 10

    size = 2 * left + x * (cell_size + 1) + 1, 2 * top + y * (cell_size + 1) + 1

    figure_x, figure_y = 4, 4
    figure_left, figure_top = size[0], top

    size = size[0] + left + figure_x * (cell_size + 1) + 1, size[1]

    buttons_x, buttons_y = 4, 1
    buttons_left, buttons_top = figure_left, figure_top + top + figure_y * (cell_size + 1)

    pygame.init()
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption('TETRIS')

    main_board = MainBoard(x, y, screen, left, top, cell_size, background, border)
    figure_board = FigureBoard(figure_x, figure_y, screen, figure_left, figure_top, cell_size,
                               background, border, figure_colors)
    buttons_board = ButtonsBoard(buttons_x, buttons_y, screen, buttons_left, buttons_top, cell_size, background, border)

    points_x, points_y = figure_x * (cell_size + 1) + 1, 55
    points_left, points_top = figure_left, figure_top + top + figure_y * (cell_size + 1) + top + buttons_y * (
                cell_size + 1)

    timer_x, timer_y = points_x, 55
    timer_left, timer_top = figure_left, figure_top + top + figure_y * (cell_size + 1) + top + buttons_y * (
            cell_size + 1) + points_y + top

    status_x, status_y = points_x, 55
    status_left, status_top = figure_left, figure_top + top + figure_y * (cell_size + 1) + top + buttons_y * (
            cell_size + 1) + points_y + top + timer_y + top

    points_info = InfoWindow(points_x, points_y, screen, points_left, points_top, border, border, border, 'points:')
    timer = InfoWindow(timer_x, timer_y, screen, timer_left, timer_top, border, border, border, 'timer:')
    status_bar = InfoWindow(status_x, status_y, screen, status_left, status_top, border, border, border, 'status:')

    running = True
    buttons_board.game_running = False

    clock = pygame.time.Clock()
    delta_t = 0
    lock = data['Speed']
    timer_t = 0

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
                cell = buttons_board.get_cell(event.pos)
                if cell is None:
                    pass
                else:
                    cell = cell[0]
                    if cell == 0:
                        if not buttons_board.game_running:
                            buttons_board.game_running = True
                        restart(main_board, figure_board)
                        timer_t = 0
                    elif cell == 1:
                        if buttons_board.game_running:
                            buttons_board.game_running = False
                    elif cell == 2:
                        ex = SettingsWindow()
                        ex.show()
                    elif cell == 3:
                        background.switch_color()
                        border.switch_color()
            if event.type == pygame.KEYDOWN and main_board.figure and buttons_board.game_running:
                if event.key == pygame.K_LEFT and main_board.can_move(x=-1):
                    main_board.x -= 1
                if event.key == pygame.K_RIGHT and main_board.can_move(x=1):
                    main_board.x += 1
                if event.key == pygame.K_UP:
                    figure = transpose(main_board.figure)
                    if main_board.can_move(figure=figure):
                        main_board.figure = figure
                if event.key == pygame.K_DOWN:
                    if main_board.can_move(y=1):
                        main_board.y += 1
                main_board.update()

        t = clock.tick()
        if buttons_board.game_running:
            delta_t += t
            timer_t += t
            if delta_t > lock:
                delta_t = 0
                if main_board.figure and main_board.can_move(y=1):
                    main_board.y += 1
                    main_board.update()
                else:
                    next_figure(main_board, figure_board)
                    if main_board.can_move():
                        main_board.update()
                    else:
                        buttons_board.game_running = False

        screen.fill(background.color)
        main_board.render()
        figure_board.render()
        buttons_board.render()

        points_info.draw(str(main_board.points))
        timer.draw(str(timer_t // 1000))
        status_bar.draw({True: 'on', False: 'off'}[buttons_board.game_running])
        pygame.display.flip()
    pygame.quit()