def __init__(self, configdir, activation_event, dry_run): super().__init__() self.setWindowTitle('Nomia') if configdir: self.configdir = configdir else: self.configdir = join(getenv('HOME'), '.config', 'nomia') activation_event.connect(self.reload_settings) self.force_quit_flag = False # Create layouts self.stack = QtGui.QStackedLayout(self) # Index viewer self.index_viewer = IndexFrame(self, dry_run, self.configdir) self.stack.addWidget(self.index_viewer) # Popup viewer self.popup_viewer = FileViewer(self) self.stack.addWidget(self.popup_viewer) self.popuphomekey = QtGui.QShortcut(QtGui.QKeySequence(), self.popup_viewer, self.show_index) # Load settings self.defaultstyle = read_json(local_path('defaultstyle.json')) self.css_template = read_file(local_path(join('templates','template.css'))) self.index_css_template = read_file(local_path(join('templates','index_page.css'))) self.settings, self.style = {}, {} self.reload_settings() self.index_viewer.populate_view() # Misc #self.connect_signals() self.show()
class MainWindow(QtGui.QWidget): def __init__(self, configdir, activation_event, dry_run): super().__init__() self.setWindowTitle('Nomia') if configdir: self.configdir = configdir else: self.configdir = join(getenv('HOME'), '.config', 'nomia') activation_event.connect(self.reload_settings) self.force_quit_flag = False # Create layouts self.stack = QtGui.QStackedLayout(self) # Index viewer self.index_viewer = IndexFrame(self, dry_run, self.configdir) self.stack.addWidget(self.index_viewer) # Popup viewer self.popup_viewer = FileViewer(self) self.stack.addWidget(self.popup_viewer) self.popuphomekey = QtGui.QShortcut(QtGui.QKeySequence(), self.popup_viewer, self.show_index) # Load settings self.defaultstyle = read_json(local_path('defaultstyle.json')) self.css_template = read_file(local_path(join('templates','template.css'))) self.index_css_template = read_file(local_path(join('templates','index_page.css'))) self.settings, self.style = {}, {} self.reload_settings() self.index_viewer.populate_view() # Misc #self.connect_signals() self.show() def closeEvent(self, event): event.accept() def quit(self, force): # This flag is not used atm self.force_quit_flag = force self.close() def connect_signals(self): connects = ( (self.index_viewer.quit, self.close), (self.index_viewer.show_popup, self.show_popup), ) for signal, slot in connects: signal.connect(slot) def show_index(self): self.stack.setCurrentWidget(self.index_viewer) self.index_viewer.terminal.setFocus() def show_popup(self, *args): self.popup_viewer.set_page(*args) self.stack.setCurrentWidget(self.popup_viewer) def reload_settings(self): self.defaultstyle = read_json(local_path('defaultstyle.json')) self.css_template = read_file(local_path(join('templates','template.css'))) self.index_css_template = read_file(local_path(join('templates','index_page.css'))) settings, style, stylepath = read_config(self.configdir, self.defaultstyle) # TODO: FIX THIS UGLY ASS SHIT # Something somewhere f***s up and changes the settings dict, # therefor the deepcopy(). Fix pls. #if settings != self.settings: if settings['title']: self.setWindowTitle(settings['title']) else: self.setWindowTitle('Nomia') self.settings = copy.deepcopy(settings) self.index_viewer.update_settings(settings) self.popuphomekey.setKey(QtGui.QKeySequence(settings['hotkey home'])) #if style != self.style: self.style = style.copy() self.update_style(style) write_json(stylepath, style) def update_style(self, style): try: css = self.css_template.format(**style) indexcss = self.index_css_template.format(**style) except KeyError as e: print(e) #self.index_viewer.error('Invalid style config: key missing') return self.setStyleSheet(css) self.index_viewer.defaulttagcolor = style['index entry tag default background'] disclaimer = '/* AUTOGENERATED! NO POINT IN EDITING THIS */\n\n' write_file(join(self.configdir, '.index.css'), disclaimer + indexcss) self.index_viewer.css = indexcss self.index_viewer.refresh_view(keep_position=True) # ===== Input overrides =========================== def wheelEvent(self, ev): self.index_viewer.view.wheelEvent(ev) def keyPressEvent(self, ev): if self.stack.currentWidget() == self.index_viewer and ev.key() in (Qt.Key_PageUp, Qt.Key_PageDown): self.index_viewer.view.keyPressEvent(ev) else: return super().keyPressEvent(ev) def keyReleaseEvent(self, ev): if self.stack.currentWidget() == self.index_viewer and ev.key() in (Qt.Key_PageUp, Qt.Key_PageDown): self.index_viewer.view.keyReleaseEvent(ev) else: return super().keyReleaseEvent(ev)