def init_font_config(self): self.disasm_font = QFont("DejaVu Sans Mono", 10) font_metrics = QFontMetricsF(self.disasm_font) self.disasm_font_height = font_metrics.height() self.disasm_font_width = font_metrics.width('A') self.disasm_font_ascent = font_metrics.ascent() self.symexec_font = QFont("DejaVu Sans Mono", 10) font_metrics = QFontMetricsF(self.symexec_font) self.symexec_font_height = font_metrics.height() self.symexec_font_width = font_metrics.width('A') self.symexec_font_ascent = font_metrics.ascent()
def _manage_font_cache(real_font, font, metrics, height, width, ascent): if real_font == font: return font, metrics, height, width, ascent metrics = QFontMetricsF(real_font) height = metrics.height() width = metrics.width('A') ascent = metrics.ascent() return real_font, metrics, height, width, ascent
def init_font_config(self): self.ui_default_font = QGuiApplication.font() self.disasm_font = QFont("DejaVu Sans Mono", 10) font_metrics = QFontMetricsF(self.disasm_font) self.disasm_font_height = font_metrics.height() self.disasm_font_width = font_metrics.width('A') self.disasm_font_ascent = font_metrics.ascent() self.symexec_font = QFont("DejaVu Sans Mono", 10) font_metrics = QFontMetricsF(self.symexec_font) self.symexec_font_height = font_metrics.height() self.symexec_font_width = font_metrics.width('A') self.symexec_font_ascent = font_metrics.ascent() self.code_font = QFont("Source Code Pro", 10) font_metrics = QFontMetricsF(self.code_font) self.code_font_height = font_metrics.height() self.code_font_width = font_metrics.width('A') self.code_font_ascent = font_metrics.ascent()
class ConfigurationManager: __slots__ = ['_entries'] def __init__(self, entries=None): if entries is None: self._entries = {} for entry in ENTRIES: self._entries[entry.name] = entry.copy() else: self._entries = entries def init_font_config(self): self.ui_default_font = QGuiApplication.font() self.disasm_font = QFont("DejaVu Sans Mono", 10) self.disasm_font_metrics = QFontMetricsF(self.disasm_font) self.disasm_font_height = self.disasm_font_metrics.height() self.disasm_font_width = self.disasm_font_metrics.width('A') self.disasm_font_ascent = self.disasm_font_metrics.ascent() self.symexec_font = QFont("DejaVu Sans Mono", 10) self.symexec_font_metrics = QFontMetricsF(self.symexec_font) self.symexec_font_height = self.symexec_font_metrics.height() self.symexec_font_width = self.symexec_font_metrics.width('A') self.symexec_font_ascent = self.symexec_font_metrics.ascent() self.code_font = QFont("Source Code Pro", 10) self.code_font_metrics = QFontMetricsF(self.code_font) self.code_font_height = self.code_font_metrics.height() self.code_font_width = self.code_font_metrics.width('A') self.code_font_ascent = self.code_font_metrics.ascent() def __getattr__(self, item): if item in self.__slots__: raise AttributeError() if item in self._entries: return self._entries[item].value raise AttributeError(item) def __setattr__(self, key, value): if key in self.__slots__: super(ConfigurationManager, self).__setattr__(key, value) return if key in self._entries: self._entries[key].value = value return raise AttributeError(key) def __dir__(self): return list(super().__dir__()) + list(self._entries) @classmethod def parse(cls, f): entry_map = {} for entry in ENTRIES: entry_map[entry.name] = entry.copy() try: loaded = toml.load(f) for k, v in loaded.items(): if entry.type_ in data_constructors: v = data_constructors[entry.type_](k, v) if k not in entry_map: _l.warning( 'Unknown configuration option \'%s\'. Ignoring...', k) continue entry = entry_map[k] if type(v) is not entry.type_: _l.warning( 'Value \'%s\' for configuration option \'%s\' has type \'%s\', expected type \'%s\'. Ignoring...', v, k, type(v), entry.type_) continue entry.value = v except toml.TomlDecodeError as e: _l.error( 'Failed to parse configuration file: \'%s\'. Continuing with default options...', e.msg) return cls(entry_map)