示例#1
0
  def _save(self):
    if self.isComplete():
      hcode = self.currentHookCode()
      th = texthook.global_()
      old_hcode = th.currentHookCode()
      if hcode == old_hcode:
        growl.msg(my.tr("Hook code is not changed"))
        self._saveButton.setEnabled(False)
        skqss.class_(self._hookEdit, 'normal')
      else:
        self._addHookToHistory(hcode)
        if old_hcode:
          growl.notify(my.tr("Override previous hook code") + "<br/>" + old_hcode)
        if th.setHookCode(hcode):
          #self.q.hide()
          growl.msg(my.tr("Hook code saved"))
          self._saveButton.setEnabled(False)
          skqss.class_(self._hookEdit, 'normal')
          self.q.hookCodeEntered.emit(hcode)
        else:
          growl.error(my.tr("Hook code does not work with the current game"))
          self._saveButton.setEnabled(False)
          skqss.class_(self._hookEdit, 'error')

    hooked = bool(texthook.global_().currentHookCode())
    self._deleteButton.setEnabled(hooked)
    dprint("pass")
示例#2
0
 def _delete(self):
   #self._hookEdit.clear()
   self._hookEdit.clearEditText()
   self._refresh()
   texthook.global_().clearHookCode()
   self.q.hookCodeDeleted.emit()
   growl.msg(my.tr("User-defined hook removed!"))
示例#3
0
 def setVisible(self, visible):
   """@reimp @public"""
   if visible and not self.isVisible():
     self.clear()
   if not visible:
     texthook.global_().setWhitelistEnabled(True)
   super(GameWizard, self).setVisible(visible)
   self.visibleChanged.emit(visible)
示例#4
0
  def hookPrefsDialog(self):
    q = self.q
    import hookprefs
    ret = hookprefs.HookPrefsDialog(q)
    ret.hookCodeEntered.connect(q.hookChanged)
    ret.hookCodeDeleted.connect(partial(
        q.hookChanged.emit, ""))

    # Automatically hide me when game exit
    texthook.global_().processDetached.connect(ret.hide)

    h = self._deletedHookCode()
    ret.setDeletedHook(h)
    return ret
示例#5
0
 def load(self):
   th = texthook.global_()
   hcode = th.currentHookCode()
   self._addHookToHistory(hcode)
   #if hcode:
   self._hookEdit.setEditText(hcode)
   self._refresh()
示例#6
0
  def _refresh(self):
    ok = self.isComplete()
    self._saveButton.setEnabled(ok)
    skqss.class_(self._hookEdit, 'normal' if ok else 'error')

    hooked = bool(texthook.global_().currentHookCode())
    self._deleteButton.setEnabled(hooked)
示例#7
0
 def cleanupPage(self):
   """@reimp @public"""
   #self._load()
   th = texthook.global_()
   th.setWhitelistEnabled(False)
   self._ignoresRepeatButton.setChecked(th.removesRepeat())
   self._keepsSpaceButton.setChecked(th.keepsSpace())
   dprint("pass")
示例#8
0
 def _setActive(self, active):
   if self._active != active:
     th = texthook.global_()
     if active:
       th.dataReceived.connect(self._addText)
     else:
       th.dataReceived.disconnect(self._addText)
     self._active = active
示例#9
0
 def setActive(self, active):
   if self._active != active:
     th = texthook.global_()
     if active:
       th.dataReceived.connect(self._addText)
       #th.hookCodeChanged.connect(self._refreshKeepsHookButton)
       #self._refreshKeepsHookButton()
     else:
       th.dataReceived.disconnect(self._addText)
       #th.hookCodeChanged.disconnect(self._refreshKeepsHookButton)
     self._active = active
示例#10
0
 def keepsSpaceButton(self):
   ret = QtWidgets.QCheckBox(
       my.tr("Insert spaces between words") +
       " (%s: %s)" % (tr_("for example"), "Howareyou! => How are you!"))
   #skqss.class_(ret, 'text-error')
   #ret.toggled.connect(lambda t:
   #    skqss.class_(ret, 'error' if t else 'text-error'))
   ret.setToolTip(my.tr("Preserve spaces between (English) words"))
   ret.toggled.connect(lambda t:
       t and self._confirmKeepSpace())
   ret.toggled.connect(texthook.global_().setKeepsSpace) # this is after confirmation
   return ret
示例#11
0
  def initializePage(self):
    """@reimp @public"""
    pid = self.wizard().profile().pid
    if pid and pid != texthook.global_().currentPid():
      ok = inject.inject_vnrhook(pid)
      dprint("attached = %s" % ok)

      #if ok:
      #  from gameengine import gameengine
      #  gameengine.inject(pid)
    self._refresh()
    dprint("pass")
示例#12
0
 def ignoresRepeatButton(self):
   ret = QtWidgets.QCheckBox(
       my.tr("Ignore infinite cyclic repetition in the text") +
       " (%s: %s)" % (tr_("for example"), "YesYesYes... => Yes"))
   skqss.class_(ret, 'text-error')
   ret.toggled.connect(lambda t:
       skqss.class_(ret, 'error' if t else 'text-error'))
   ret.setToolTip(my.tr("Warning: Please do not turn on repetition filters unless there are repetitions!"))
   ret.toggled.connect(lambda t:
       t and self._confirmRemoveRepeat(ret))
   ret.toggled.connect(texthook.global_().setRemovesRepeat) # this is after confirmation
   return ret
示例#13
0
  def setVisible(self, visible):
    """@reimp @public"""
    d = self.__d
    if visible:
      g = _gameprofile()
      icon = g.icon() if g else None
      if not icon or icon.isNull():
        icon = rc.icon('logo-reader')
      self.setWindowIcon(icon)

      title = "%s (%s)" % (
        mytr_("Text Settings"),
        my.tr("Engine: ITH"),
      )

      name = g.name() if g else None
      if name:
        title = "%s - %s" % (name, title)
      self.setWindowTitle(title)

    if visible:
      texthook.global_().hijackProcess()

    if visible != self.isVisible():
      if visible:
        d.clear()
        d.load()
        self.updateEnabled()
        skevents.runlater(self.updateSize)
      else:
        d.unload()

    texthook.global_().setWhitelistEnabled(not visible)

    d.setActive(visible)
    super(TextPrefsDialog, self).setVisible(visible)
示例#14
0
 def inject_vnrhook(pid, hijack=True):
     """
 @param* pid  ulong
 @param* handle  HANDLE
 @return  bool
 """
     dprint("enter")
     for dllpath in config.VNRHOOK_DLLS:
         #dllpath = os.path.abspath(dllpath)
         dllpath = skpaths.abspath(dllpath)
         assert os.path.exists(
             dllpath), "needed dll does not exist: %s" % dllpath
         skwinsec.injectdll(dllpath, pid=pid)  #and ret
     ret = texthook.global_().attachProcess(pid, hijack=hijack)
     dprint("leave: ret = %s" % ret)
     return ret
示例#15
0
  def load(self):
    th = texthook.global_()

    self.currentIgnoresRepeat = th.removesRepeat()
    self.ignoresRepeatButton.setChecked(self.currentIgnoresRepeat)

    self.currentKeepsSpace = th.keepsSpace()
    self.keepsSpaceButton.setChecked(self.currentKeepsSpace)

    tm = textman.manager()
    self.removesRepeatButton.setChecked(tm.removesRepeatText())

    self.keepsThreadsButton.setChecked(tm.keepsThreads())
    #self.keepsThreadsButton.setEnabled(bool(texthook.global_().currentHookCode()))

    lang = tm.gameLanguage()
    try: langIndex = config.LANGUAGES.index(lang)
    except ValueError: langIndex = 0
    self.languageEdit.setCurrentIndex(langIndex)

    enc = tm.encoding()
    self._setEncoding(enc)


    nullThreadFound = False
    for t in tm.threads():
      if t.name == defs.NULL_THREAD_NAME:
        nullThreadFound = True
      self._updateThread(t, encoding=enc)

    if not nullThreadFound:
      t = textman.TextThread(name=defs.NULL_THREAD_NAME, signature=defs.NULL_THREAD_SIGNATURE)
      self._updateThread(t, encoding=enc)

    self._refreshSaveButton()

    self._refreshHookDialog()
示例#16
0
 def _ignoresRepeat(self):
   """
   @return  bool
   """
   return texthook.global_().removesRepeat()
示例#17
0
 def unload(self):
   texthook.global_().setRemovesRepeat(self.currentIgnoresRepeat)
   texthook.global_().setKeepsSpace(self.currentKeepsSpace)
示例#18
0
  def __init__(self, wiz):
    super(SelectThreadPage, self).__init__(wiz)
    self.setTitle(my.tr("Select the text thread"))
    self.setCommitPage(True)

    self._active = False

    wiz.visibleChanged.connect(self._setActive)
    wiz.visibleChanged.connect(self._clear)

    self._threads = {} # {long signature:TextThread}

    introLabel = QtWidgets.QLabel(my.tr(
      "Please play the game a little bit, and pick one text thread that has the same contents as the game text. If no text thread appears, please try editing the /H hook code for this game."
    ))
    introLabel.setWordWrap(True)

    # grid of thread sources
    self._grid = skwidgets.SkRadioButtonGrid(self, col=2)
    self._grid.currentIndexChanged.connect(self._refresh)
    self._grid.currentIndexChanged.connect(self.completeChanged)
    threadGroup = QtWidgets.QGroupBox()
    threadGroup.setLayout(self._grid.layout())
    threadGroup.setTitle(mytr_("Text threads"))

    self._encodingEdit = QtWidgets.QComboBox()
    self._encodingEdit.setEditable(False)
    self._encodingEdit.setToolTip(tr_("Text encoding"))
    self._encodingEdit.addItems(map(i18n.encoding_desc, config.ENCODINGS))
    self._encodingEdit.currentIndexChanged.connect(self._refresh)

    self._keepsSpaceButton = QtWidgets.QCheckBox(
        my.tr("Insert spaces between words") +
        " (%s: %s)" % (tr_("for example"), "Howareyou! => How are you!"))
    self._keepsSpaceButton.toggled.connect(texthook.global_().setKeepsSpace)

    self._removesRepeatButton = QtWidgets.QCheckBox(
        my.tr("Eliminate finite repetition in the text") +
        " (%s: %s)" % (tr_("for example"), "YYeess!!NoNo! => Yes!No!"))
    self._removesRepeatButton.toggled.connect(self._refresh)

    self._ignoresRepeatButton = QtWidgets.QCheckBox(
        my.tr("Ignore infinite cyclic repetition in the text") +
        " (%s: %s)" % (tr_("for example"), "YesYesYes... => Yes"))
    self._ignoresRepeatButton.toggled.connect(texthook.global_().setRemovesRepeat)

    clearButton = QtWidgets.QPushButton(tr_("Clear"))
    clearButton.clicked.connect(self._clear)
    skqss.class_(clearButton, 'btn btn-danger')

    hookPrefsButton = QtWidgets.QPushButton(my.tr("Edit /H Hook Code"))
    skqss.class_(hookPrefsButton, 'btn btn-info')
    hookPrefsButton.clicked.connect(lambda: self.hookPrefsDialog.show())

    helpButton = QtWidgets.QPushButton(tr_("Help"))
    skqss.class_(helpButton, 'btn btn-success')
    helpButton.clicked.connect(lambda: self.helpDialog.show())

    self._textEdit = QtWidgets.QPlainTextEdit()
    self._textEdit.setReadOnly(True)
    self._textEdit.setToolTip(mytr_("Game text"))
    self._textEdit.setPlainText(my.tr("No game text"))

    layout = QtWidgets.QVBoxLayout()
    layout.addWidget(introLabel)
    row = QtWidgets.QHBoxLayout()
    row.addWidget(self._encodingEdit)
    row.addWidget(clearButton)
    row.addStretch()

    row.addWidget(hookPrefsButton)
    row.addWidget(helpButton)
    layout.addLayout(row)
    layout.addWidget(self._removesRepeatButton)
    layout.addWidget(self._ignoresRepeatButton)
    layout.addWidget(self._keepsSpaceButton)
    layout.addWidget(threadGroup)
    layout.addWidget(self._textEdit)
    self.setLayout(layout)
示例#19
0
 def addHook(self, code, name=''):  # str, str -> bool
     from texthook import texthook
     return texthook.global_().addHook(code,
                                       name=name or self.name(),
                                       verbose=self.DEBUG)
示例#20
0
 def _keepsSpace(self):
   """
   @return  bool
   """
   return texthook.global_().keepsSpace()