コード例 #1
0
ファイル: session.py プロジェクト: Qwoyn/randomgamegenerator
def saveSession():
    filename = promptSaveFile(translate('views', 'Save Game Session'),
                              translate('views', 'Random Game files (*.rgg)'),
                              MAP_DIR)
    if not filename:
        return
    jsondump(GlobalState.session.dump(), checkFileExtension(filename, ".rgg"))
コード例 #2
0
def respondICWhisperTarget(sender, message, chname, portrait):
	if len(portrait) > 1:
		portfile = makePortableFilename(path.join(PORTRAIT_DIR, portrait))
		ICSay(translate('remote', '<table><tr><td><img src="{port}" width="{size}" height="{size}"></td><td>{name} whispers: {message}</td></tr></table><br />').format(
			port=portfile,
			size=getPortraitSize(),
			name=linkedName(chname),
			message=message))
	else:
		ICSay(translate('remote', '{name} whispers: {message}').format(
			name=linkedName(chname),
			message=message))
コード例 #3
0
	def _cleanValue(self, value):
		try:
			value = int(value)
		except:
			raise validationError(translate('integerField', 'You must enter a number for the {0} field.').format(self.name))
		if self.min is None or self.min <= value:
			if self.max is None or self.max >= value:
				return value
		raise validationError(
			translate('integerField', 'You must enter a number for {0} between {1} and {2}.').
				format(self.name,
					self.min or translate('integerField', 'negative infinity'),
					self.max or translate('integerField', 'infinity')))
コード例 #4
0
def respondICSay(chname, message, portrait):
	if len(portrait) > 1:
		portfile = makePortableFilename(path.join(PORTRAIT_DIR, portrait))
		IAMTHEDOOMPHANTOM = crm.translateFile(makePortableFilename(path.join(PORTRAIT_DIR, portrait)), RESOURCE_IMAGE)
		#^ Don't remember whether this is still needed for transfer etc.
		ICSay(translate('remote', '<table><tr><td><img src="{port}" width="{size}" height="{size}"></td><td>{name}: {sayText}</td></tr></table><br />').format(
			port=portfile,
			size=getPortraitSize(),
			name=linkedName(chname),
			sayText=message))
	else:
		ICSay(translate('remote', '{name}: {sayText}</p>').format(
		name=linkedName(chname),
		sayText=message))
コード例 #5
0
ファイル: session.py プロジェクト: Qwoyn/randomgamegenerator
def loadSession():
    """Allows the user to load a new map."""
    filename = promptLoadFile(translate('views', 'Open Game Session'),
                              translate('views', 'Random Game files (*.rgg)'),
                              MAP_DIR)
    if not filename:
        return
    try:
        obj = jsonload(filename)
        _loadSession(obj)
        sendSession(GlobalState.session.dump())
    except Exception as e:
        showErrorMessage(
            translate('views', "Unable to read {0}.").format(filename))
        print(e)
コード例 #6
0
	def _cleanValue(self, value):
		if value is None and self.allowEmpty:
			return ''
		if isinstance(value, BASE_STRING):
			if self.allowEmpty or len(value) > 0:
				return value
		raise validationError(translate('stringField', 'You must enter text into the {0} field.').format(self.name))
コード例 #7
0
def chat(st, chname, portrait):
    """Parses and executes chat commands."""
    st = UNICODE_STRING(st)

    if (len(st) <= 0):
        return
    if ('<' in st
            and '>' not in st) or ('<' in st and '>' in st
                                   and '<' in str(st)[str(st).rfind('>'):]):
        ICSay(
            translate(
                'chat',
                "Please type &#38;#60; if you wish to include &#60; in your message."
            ))
        return

    if st[0] != '/' or len(st) > 1 and st[1] == '/':
        if len(st) > 1 and st[1] == '/':
            st = st[1:]
        command = 'say'
        message = st.strip()
    else:
        command, message = splitword(st[1:])
        command = str(command).lower()
    #print command, message

    if command in chatCommands:
        chatCommands[command](message, chname, portrait)
    else:
        if command not in ('help', '?'):
            ICSay(
                translate('chatdoc', "Invalid command.",
                          'Unknown chat command name.'))
        elif message in chatCommands:
            ICSay(translate('chatdoc', chatCommands[message].documentation))
            return
        ICSay(
            translate(
                'chatdoc', "Command Help:<br>"
                "Typing ordinary text and pressing 'enter' "
                "will display to all players. Other commands may be invoked "
                "with '/' plus the name of the command plus any arguments."
                "<dl><dt>Commands</dt><dd>{commandList}</dd></dl><br>").format(
                    commandList=translate(
                        'chatdoc', '</dd><dd>',
                        'Goes inbetween the commands in the commandList.').
                    join(chatCommandNames)))
コード例 #8
0
def emote(message, chname, portrait):
    if not message:
        ICSay(
            translate(
                'chat', "Syntax: /me DOES ACTION. Displays '[HANDLE] DOES "
                "ACTION' in italic font."))
    else:
        sendICEmote(message, chname, portrait)
コード例 #9
0
def emote(message):
    if not message:
        say(
            translate(
                'chat', "Syntax: /me DOES ACTION. Displays '[HANDLE] DOES "
                "ACTION' in italic font."))
    else:
        sendEmote(message)
コード例 #10
0
def whisper(message):
    if not message:
        say(
            translate(
                'chat', "Syntax: /whisper HANDLE MESSAGE. Sends a message "
                "only to the specified user. Spaces MUST be correct."
                " Handle may be caps-sensitive."))
    else:
        target, rest = splitword(message)
        if target.lower() == localuser().username:
            emote(translate('chat', "mutters something."))
        elif not rest:
            say(
                translate('chat', "What do you want to tell {target}?").format(
                    target=target))
        else:
            sendWhisper(target, rest)
コード例 #11
0
def clientConnect(client, username):
	"""Occurs when the client is ready to start sending data."""
	#print "Client connected."
	renameuser(localhandle(), username)
	_closeAllMaps()
	setUwidgetLocal()
	say(translate('remote', "Welcome, {name}!").format(name=username))
	client.preemptivelyOpenTransferSocket()
コード例 #12
0
ファイル: session.py プロジェクト: Qwoyn/randomgamegenerator
def clearSession():
    if promptYesNo(
            translate(
                'views',
                'Are you sure you want to clear the current session completely for all connected players?'
            )) == 16384:
        _clearSession()
        sendClearSession()
コード例 #13
0
def randomname(message):
    if len(message) <= 0:
        say(
            translate(
                'chat',
                "Syntax: /generate NAMETYPE. For a list of available generators, see /generate keys. Use /generate help NAMETYPE for more information on a generator."
            ))
    else:
        generateName(*splitword(message.lower()))
コード例 #14
0
def clientDisconnect(client, errorMessage):
	"""Occurs when the client connection disconnects without being told to.

	errorMessage -- a human-readable error message for why the connection failed

	"""
	#print "Client disconnected."
	say(translate('remote', "Disconnected. {0}").format(errorMessage))
	clearUserList()
コード例 #15
0
 def __init__(self,
              host=None,
              port=6812,
              username=translate('net', 'Anonymous',
                                 'default connection username'),
              passw=''):
     self.host = host or localUser() or localHost()
     self.port = port
     self.username = username
     self.password = passw
コード例 #16
0
def respondError(message, *args, **kwargs):
	"""Responds as an error message.

	message -- the error message to send
		should be fake translated so it is
		done on the client instead of the server.

	Extra arguments are passed to format the translated string.

	"""
	say(translate('error', message).format(*args, **kwargs))
コード例 #17
0
    def __init__(self,
                 mapExistenceCheck=None,
                 pogExistenceCheck=None,
                 charExistenceCheck=None):

        main = mainWindow

        self.menubar = main.menuBar()

        self.mapExistenceCheck = mapExistenceCheck
        self.pogExistenceCheck = pogExistenceCheck
        self.charExistenceCheck = charExistenceCheck

        # ACTIONS

        self.newMapAct = QAction(translate("menubar", "&New Map..."), main)
        self.newMapAct.setShortcut("Ctrl+N")

        self.loadMapAct = QAction(translate("menubar", "Load Map..."), main)
        #self.loadMapAct.setShortcut("Ctrl+L")

        self.saveMapAct = QAction(translate("menubar", "Save Map As..."), main)
        #self.saveMapAct.setShortcut("Ctrl+S")

        self.closeSpecificMapAct = QAction(translate("menubar", "Close Map"),
                                           main)

        self.closeMapAct = QAction(translate("menubar", "&Close All Maps"),
                                   main)
        self.closeMapAct.setShortcut("Ctrl+Shift+W")

        self.loadSessAct = QAction(translate("menubar", "&Load Session..."),
                                   main)
        self.loadSessAct.setShortcut("Ctrl+L")

        self.saveSessAct = QAction(translate("menubar", "&Save Session As..."),
                                   main)
        self.saveSessAct.setShortcut("Ctrl+S")

        self.clearSessAct = QAction(translate("menubar", "Clear Session"),
                                    main)

        self.deletePogsAct = QAction(translate("menubar", "Delete All Pogs"),
                                     main)

        self.saveCharsAct = QAction(
            translate("menubar", "Save IC Characters As..."), main)

        self.loadCharsAct = QAction(
            translate("menubar", "Load IC Characters..."), main)

        self.gfxSettingsAct = QAction(
            translate("menubar", "Configure Graphics..."), main)

        self.drawTimerSettingsAct = QAction(
            translate("menubar", "Configure FPS..."), main)

        self.hostGameAct = QAction(translate("menubar", "&Host Game..."), main)
        self.hostGameAct.setShortcut("Ctrl+H")

        self.joinGameAct = QAction(translate("menubar", "&Join Game..."), main)
        self.joinGameAct.setShortcut("Ctrl+J")

        self.disconnectAct = QAction(translate("menubar", "&Disconnect"), main)
        self.disconnectAct.setShortcut("Ctrl+D")

        self.sendFileAct = QAction(translate("menubar", "Send file..."), main)

        self.createSurveyAct = QAction(
            translate("menubar", "Create Survey..."), main)

        self.aboutAct = QAction(translate("menubar", "&About"), main)
        self.aboutAct.setShortcut("Ctrl+A")

        self.thicknessOneAct = QAction(translate("menubar", "&One"), main)
        self.thicknessTwoAct = QAction(translate("menubar", "&Two"), main)
        self.thicknessThreeAct = QAction(translate("menubar", "&Three"), main)

        self.toggleAlertsAct = QAction(
            translate("menubar", "Chat Username Notify"), main)
        self.toggleAlertsAct.setCheckable(True)
        self.toggleAlertsAct.setChecked(True)

        self.toggleTimestampsAct = QAction(
            translate("menubar", "OOC Chat Timestamps"), main)
        self.toggleTimestampsAct.setCheckable(True)
        self.toggleTimestampsAct.setChecked(False)

        self.toggleRightclickAct = QAction(
            translate("menubar", "Right-Click Opens Pog Ctrl-Click Menu"),
            main)
        self.toggleRightclickAct.setCheckable(True)
        self.toggleRightclickAct.setChecked(True)

        self.lockToGridAct = QAction(
            translate("menubar", "Lock Pogs to Map Grid"), main)
        self.lockToGridAct.setCheckable(True)
        self.lockToGridAct.setChecked(False)

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.notify', js.get('notify')) == "Off":
                self.toggleAlertsAct.setChecked(False)
        except:
            pass

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.rightclick',
                          js.get('rightclick')) == "Off":
                self.toggleRightclickAct.setChecked(False)
        except:
            pass

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.timestamp', js.get('timestamp')) == "On":
                self.toggleTimestampsAct.setChecked(True)
        except:
            pass

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.gridlock', js.get('gridlock')) == "On":
                self.lockToGridAct.setChecked(True)
        except:
            pass

        self.setTimestampFormatAct = QAction(
            translate("menubar", "Set Timestamp Format..."), main)

        self.portraitMenu = QAction(
            translate("menubar", "Set IC Portrait Size..."), main)

        self.selectIcon = QAction(QIcon("./data/FAD-select-icon.png"),
                                  "Select Tool", main)
        self.selectIcon.setShortcut("Ctrl+T")
        self.selectIcon.setToolTip("Select Tool (Ctrl+T)")

        #self.moveIcon = QAction(QIcon("./data/FAD-move-icon.png"), "Move Tool", main)
        #self.moveIcon.setShortcut("Ctrl+M")
        #self.moveIcon.setToolTip("Move Tool (Ctrl+M)")

        self.drawIcon = QAction(QIcon("./data/FAD-freehand-icon.png"),
                                "Draw Tool", main)
        self.drawIcon.setShortcut("Ctrl+E")
        self.drawIcon.setToolTip("Draw Tool (Ctrl+E)")

        self.deleteIcon = QAction(QIcon("./data/FAD-eraser-icon.png"),
                                  "Delete Tool", main)
        self.deleteIcon.setShortcut("Ctrl+R")
        self.deleteIcon.setToolTip("Delete Tool (Ctrl+R)")

        # MENUS

        fileMenu = QMenu(translate("menubar", "&File"), main)
        fileMenu.addAction(self.newMapAct)
        fileMenu.addAction(self.loadMapAct)
        fileMenu.addAction(self.saveMapAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.closeSpecificMapAct)
        fileMenu.addAction(self.closeMapAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.deletePogsAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.saveCharsAct)
        fileMenu.addAction(self.loadCharsAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.saveSessAct)
        fileMenu.addAction(self.loadSessAct)
        fileMenu.addAction(self.clearSessAct)

        self.mapExistsActs = [
            self.saveMapAct, self.closeSpecificMapAct, self.closeMapAct
        ]
        self.pogExistsActs = [
            self.deletePogsAct,
        ]
        self.characterExistsActs = [
            self.saveCharsAct,
        ]

        self.internetMenu = QMenu(translate("menubar", "&Internet"), main)
        self.internetMenu.addAction(self.hostGameAct)
        self.internetMenu.addAction(self.joinGameAct)
        self.internetMenu.addSeparator()
        self.internetMenu.addAction(self.createSurveyAct)
        self.internetMenu.addAction(self.sendFileAct)
        self.internetMenu.addSeparator()
        self.internetMenu.addAction(self.disconnectAct)

        self.connectedActs = [
            self.createSurveyAct, self.sendFileAct, self.disconnectAct
        ]
        self.disconnectedActs = [self.hostGameAct, self.joinGameAct]

        self.thicknessMenu = QMenu(translate("menubar", "&Thickness"), main)
        for x in range(1, 11):
            self.thicknessMenu.addAction(QAction(str(x), main))

        self.colourMenu = QMenu(translate("menubar", "&Colour"), main)
        #Don't translate colour names yet
        self.colourMenu.addAction(QAction("White", main))
        self.colourMenu.addAction(QAction("Red", main))
        self.colourMenu.addAction(QAction("Orange", main))
        self.colourMenu.addAction(QAction("Yellow", main))
        self.colourMenu.addAction(QAction("Green", main))
        self.colourMenu.addAction(QAction("Blue", main))
        self.colourMenu.addAction(QAction("Purple", main))
        self.colourMenu.addAction(QAction("Black", main))
        self.colourMenu.addAction(QAction("Custom...", main))

        drawMenu = QMenu(translate("menubar", "&Draw"), main)
        drawMenu.addMenu(self.thicknessMenu)
        drawMenu.addMenu(self.colourMenu)

        self.stylesMenu = QMenu(translate("menubar", "&Styles"), main)
        for style in list(sheets.keys()):
            act = QAction(style, main)
            act.isDark = sheets[style][1]
            self.stylesMenu.addAction(act)

        self.langMenu = QMenu(translate("menubar", "&Language"), main)
        ned = QAction(translate("menubar", "Dutch"), main)
        ned.setIconText("Dutch")
        self.langMenu.addAction(ned)
        eng = QAction(translate("menubar", "English"), main)
        eng.setIconText("English")
        self.langMenu.addAction(eng)
        nhn = QAction(translate("menubar", "Japanese"), main)
        nhn.setIconText("Japanese")
        self.langMenu.addAction(nhn)
        deu = QAction(translate("menubar", "German"), main)
        deu.setIconText("German")
        self.langMenu.addAction(deu)

        self.optionsMenu = QMenu(translate("menubar", "&Options"), main)
        self.optionsMenu.addMenu(self.langMenu)
        self.optionsMenu.addMenu(self.stylesMenu)
        self.optionsMenu.addSeparator()
        self.optionsMenu.addAction(self.toggleAlertsAct)
        self.optionsMenu.addAction(self.toggleTimestampsAct)
        self.optionsMenu.addAction(self.toggleRightclickAct)
        self.optionsMenu.addAction(self.lockToGridAct)
        self.optionsMenu.addAction(self.setTimestampFormatAct)
        self.optionsMenu.addAction(self.portraitMenu)
        self.optionsMenu.addAction(self.gfxSettingsAct)
        self.optionsMenu.addAction(self.drawTimerSettingsAct)

        self.windowMenu = QMenu(translate("menubar", "Window"), main)

        self.helpMenu = QMenu(translate("menubar", "&Help"), main)
        self.helpMenu.addAction(self.aboutAct)

        # MENUBAR

        self.menubar.addMenu(fileMenu)
        self.menubar.addMenu(self.internetMenu)
        self.menubar.addMenu(drawMenu)
        self.menubar.addMenu(self.optionsMenu)
        if list(int(r) for r in PYQT_VERSION_STR.split(".")) < [4, 8, 0]:
            warning = QMessageBox()
            warning.setText("".join((
                "Your version of PyQt (", PYQT_VERSION_STR,
                ") is incompatible with RGG's Window menu, which requires 4.8.0 or newer. Right-click on the menu bar to get an alternate menu."
            )))
            warning.exec_()
        else:
            self.menubar.addMenu(self.windowMenu)
        self.menubar.addMenu(self.helpMenu)
        self.menubar.addSeparator()
        self.menubar.addAction(self.selectIcon)
        #self.menubar.addAction(self.moveIcon)
        self.menubar.addAction(self.drawIcon)
        self.menubar.addAction(self.deleteIcon)

        # EVENTS

        self.selectIconClicked()
        self.selectIcon.triggered.connect(self.selectIconClicked)
        #self.moveIcon.triggered.connect(self.moveIconClicked)
        self.drawIcon.triggered.connect(self.drawIconClicked)
        self.deleteIcon.triggered.connect(self.deleteIconClicked)

        fileMenu.aboutToShow.connect(self.updateFileMenu)
        self.internetMenu.aboutToShow.connect(self.updateInternetMenu)
        self.windowMenu.aboutToShow.connect(self.updateWidgetMenu)

        self.aboutAct.triggered.connect(self.about)
コード例 #18
0
def respondSay(username, message):
	say(translate('remote', '{name}: {sayText}').format(
		name=linkedName(username),
		sayText=message))
コード例 #19
0
	def _cleanValue(self, value):
		if value <= self.max and value >= self.min:
			return value
		raise validationError(translate('sliderField', 'You must enter a valid choice for the {0} field.').format(self.name))
コード例 #20
0
def respondWhisperTarget(sender, message):
	say(translate('remote', '{username} whispers: {message}').format(
		username=linkedName(sender),
		message=message))
コード例 #21
0
def respondWhisperSender(target, message):
	say(translate('remote', 'To {username}: {message}').format(
		username=linkedName(target),
		message=message))
コード例 #22
0
def respondEmote(username, message):
	say(translate('remote', '<i>{name} {emote}</i>').format(
		name=linkedName(username),
		emote=message))
コード例 #23
0
def disconnectionMessage(message, error, *args, **kwargs):
	"""Special translation for a disconnection message."""
	#print "Server dropped user."
	error = translate('socket', error)
	say(translate('error', message).format(*args, error=disconnect, **kwargs))
コード例 #24
0
	def _cleanValue(self, value):
		if len(self.choices) <= 0:
			return ''
		if value in self.choices:
			return value
		raise validationError(translate('dropDownField', 'You must enter a valid choice for the {0} field.').format(self.name))
コード例 #25
0
def randomname(message, chname, portrait):
    if len(message) <= 0:
        ICSay(translate('chat', "Syntax: /generate NAMETYPE."))
    else:
        generateName(*splitword(message.lower()))
コード例 #26
0
def respondUserJoin(username):
	say(translate('remote', "{name} has joined!").format(name=username))
	addUserToList(username)
コード例 #27
0
def respondDice(username, message):
	say(translate('remote', '{sayText}').format(
		sayText=message))
	ICSay(translate('remote', '{sayText}').format(
		sayText=message))