def populate(self): """Fill combobox with samples from databases """ self.mother_combo.clear() self.father_combo.clear() self.child_combo.clear() samples = [i["name"] for i in sql.get_samples(self.conn)] for sample in samples: self.mother_combo.addItem(FIcon(0xF1077), sample) self.father_combo.addItem(FIcon(0xF0643), sample) self.child_combo.addItem(FIcon(0xF0E7D), sample)
def __init__(self): super().__init__() self.setWindowTitle(self.tr("Network")) self.setWindowIcon(FIcon(0xF0484)) self.combo_box = QComboBox() self.host_edit = QLineEdit() self.port_edit = QSpinBox() self.user_edit = QLineEdit() self.pass_edit = QLineEdit() # Load proxy type for key in network.PROXY_TYPES: self.combo_box.addItem(key, network.PROXY_TYPES[key]) # edit restriction self.pass_edit.setEchoMode(QLineEdit.PasswordEchoOnEdit) f_layout = QFormLayout() f_layout.addRow(self.tr("Type"), self.combo_box) f_layout.addRow(self.tr("Proxy host"), self.host_edit) f_layout.addRow(self.tr("Proxy Port"), self.port_edit) f_layout.addRow(self.tr("Username"), self.user_edit) f_layout.addRow(self.tr("Password"), self.pass_edit) self.combo_box.currentIndexChanged.connect(self.on_combo_changed) self.setLayout(f_layout)
def load_plugins(self): """ Add plugins settings """ from cutevariant.gui import plugin for extension in plugin.find_plugins(): if "setting" in extension: settings_widget_class = extension["setting"] if not settings_widget_class.ENABLE: # Skip disabled plugins continue widget = settings_widget_class() # Create rprefix settings ! For instance [VariantView] # widget.prefix_settings = widget.__class__.__name__.replace( # "SettingsWidget", "" # ) if not widget.windowTitle(): widget.setWindowTitle(extension["name"]) if not widget.windowIcon(): widget.setWindowIcon(FIcon(0xF0431)) self.add_section(widget)
def __init__(self): super().__init__() self.setWindowTitle(self.tr("Translation")) self.setWindowIcon(FIcon(0xF05CA)) self.locales_combobox = QComboBox() mainLayout = QFormLayout() mainLayout.addRow(self.tr("&Choose a locale:"), self.locales_combobox) self.setLayout(mainLayout)
def __init__(self): super().__init__() self.setWindowTitle(self.tr("Path")) self.setWindowIcon(FIcon(0xF1080)) self.edit = widgets.FileEdit() self.edit.set_path_type("dir") main_layout = QFormLayout() main_layout.addRow("path", self.edit) self.setLayout(main_layout)
def populate(self): """Actualize the list of word sets""" self.view.clear() self.set_names = list() for data in get_wordsets(self.conn): set_name = data["name"] item = QListWidgetItem() item.setText(set_name) item.setIcon(FIcon(0xF0A38)) self.view.addItem(item) self.set_names.append(set_name)
def __init__(self): super().__init__() self.setWindowTitle(self.tr("Plugins")) self.setWindowIcon(FIcon(0xF0431)) self.view = QTreeWidget() self.view.setColumnCount(3) self.view.setHeaderLabels(["Name", "Description", "Version"]) self.view.header().setSectionResizeMode(QHeaderView.ResizeToContents) main_layout = QVBoxLayout() main_layout.addWidget(self.view) self.setLayout(main_layout)
def setup_toolbar(self): """Top tool bar setup: items and actions .. note:: Require selection_widget and some actions of Menubar """ # Tool bar self.toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.toolbar.addAction(self.new_project_action) self.toolbar.addAction(self.open_project_action) self.toolbar.addAction(FIcon(0xF02D7), self.tr("Help"), QWhatsThis.enterWhatsThisMode) self.toolbar.addSeparator()
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle(self.tr("About Cutevariant")) self.setWindowIcon(QIcon(cm.DIR_ICONS + "app.png")) self.tab_widget = QTabWidget() self.header_lbl = QLabel() self.button_box = QDialogButtonBox() github_button = self.button_box.addButton("GitHub", QDialogButtonBox.HelpRole) twitter_button = self.button_box.addButton("Twitter", QDialogButtonBox.HelpRole) self.button_box.addButton(QDialogButtonBox.Ok) github_button.setIcon(FIcon(0xF02A4)) twitter_button.setIcon(FIcon(0xF0544)) vLayout = QVBoxLayout() vLayout.addWidget(self.header_lbl) vLayout.addWidget(self.tab_widget) vLayout.addWidget(self.button_box) self.setLayout(vLayout) self.addTab("LICENSE") # self.addTab("AUTHORS") # self.addTab("CREDITS") # self.addTab("CHANGELOG") self.drawHeader() # Connexions self.button_box.button(QDialogButtonBox.Ok).clicked.connect(self.close) github_button.clicked.connect(self.open_github_page) twitter_button.clicked.connect(self.open_twitter_page) self.resize(600, 400)
def __init__(self, parent=None): super().__init__(parent) self.conn = None self.set_names = list() self.setWindowTitle(self.tr("Word Sets")) self.toolbar = QToolBar() self.view = QListWidget() self.view.setIconSize(QSize(20, 20)) self.view.itemDoubleClicked.connect(self.open_wordset) self.view.setSelectionMode(QAbstractItemView.ExtendedSelection) # setup tool bar self.toolbar.setIconSize(QSize(16, 16)) self.toolbar.addAction(FIcon(0xF0415), self.tr("Add Word set"), self.add_wordset) self.edit_action = self.toolbar.addAction(FIcon(0xF0DC9), self.tr("Edit Word set"), self.open_wordset) self.remove_action = self.toolbar.addAction(FIcon(0xF0A7A), self.tr("Remove Word set"), self.remove_wordset) self.edit_action.setEnabled(False) self.remove_action.setEnabled(False) v_layout = QVBoxLayout() v_layout.setContentsMargins(0, 0, 0, 0) v_layout.setSpacing(0) v_layout.addWidget(self.view) v_layout.addWidget(self.toolbar) self.setLayout(v_layout) # Item selected in view self.view.selectionModel().selectionChanged.connect( self.on_item_selected)
def __init__(self): """Init StyleSettingsWidget Args: mainwindow (QMainWindow): Current main ui of cutevariant; Used to refresh the plugins """ super().__init__() self.setWindowTitle(self.tr("Styles")) self.setWindowIcon(FIcon(0xF03D8)) self.styles_combobox = QComboBox() mainLayout = QFormLayout() mainLayout.addRow(self.tr("&Choose a style:"), self.styles_combobox) self.setLayout(mainLayout)
def load_plugins(self): """ Add plugins settings """ from cutevariant.gui import plugin for extension in plugin.find_plugins(): if "setting" in extension: settings_widget_class = extension["setting"] if not settings_widget_class.ENABLE: # Skip disabled plugins continue widget = settings_widget_class() if not widget.windowTitle(): widget.setWindowTitle(extension["name"]) if not widget.windowIcon(): widget.setWindowIcon(FIcon(0xF0431)) self.addPanel(widget)
def __init__(self): super().__init__() self.group_parent = None self.settings = QSettings() self.setWindowTitle("base") self.setWindowIcon(FIcon(0xF5CA))
def __init__(self): super().__init__() self.setWindowTitle("base") self.setWindowIcon(FIcon(0xF5CA)) self.section_widget = None
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle(self.tr("Cutevariant - Settings")) self.setWindowIcon(QIcon(cm.DIR_ICONS + "app.png")) self.widgets = [] self.list_widget = QListWidget() self.stack_widget = QStackedWidget() self.button_box = QDialogButtonBox( QDialogButtonBox.SaveAll | QDialogButtonBox.Cancel | QDialogButtonBox.Reset ) self.list_widget.setFixedWidth(200) self.list_widget.setIconSize(QSize(32, 32)) h_layout = QHBoxLayout() h_layout.addWidget(self.list_widget) h_layout.addWidget(self.stack_widget) v_layout = QVBoxLayout() v_layout.addLayout(h_layout) v_layout.addWidget(self.button_box) self.setLayout(v_layout) # Instantiate subwidgets on panels # Similar widgets for general configuration general_settings = SectionWidget() # Not a title ! general_settings.setWindowTitle(self.tr("General")) general_settings.setWindowIcon(FIcon(0xF0614)) general_settings.add_page(PathSettingsWidget()) # Cutevariant is not yet translated .. # general_settings.add_page(TranslationSettingsWidget()) general_settings.add_page(ProxySettingsWidget()) general_settings.add_page(StyleSettingsWidget()) # Activation status of plugins plugin_settings = PluginsSettingsWidget() # BOF... if parent: plugin_settings.registerPlugin.connect(parent.register_plugin) plugin_settings.deregisterPlugin.connect(parent.deregister_plugin) # Specialized widgets on panels self.add_section(general_settings) # self.add_section(plugin_settings) self.load_plugins() self.resize(800, 400) self.button_box.button(QDialogButtonBox.SaveAll).clicked.connect(self.save_all) self.button_box.button(QDialogButtonBox.Reset).clicked.connect(self.load_all) self.button_box.button(QDialogButtonBox.Cancel).clicked.connect(self.close) # Connection events self.list_widget.currentRowChanged.connect(self.stack_widget.setCurrentIndex) # Load settings self.load_all() self.accepted.connect(self.close)
def __init__(self, parent=None, default_text=""): """Init Markdown editor :param default_text: Populate source edit with current comment in db. :type default_text: <str> """ super().__init__(parent) self.setWindowTitle("Cutevariant - " + self.tr("Comment editor")) self.setWindowIcon(QIcon(cm.DIR_ICONS + "app.png")) main_vlayout = QVBoxLayout() # main_vlayout.setContentsMargins(0, 0, 0, 0) self.setLayout(main_vlayout) # Setup edit view self.rich_edit = QTextEdit() # Rich text result self.source_edit = QPlainTextEdit() # Markdown content self.source_edit.setPlainText(default_text) vlayout = QVBoxLayout() vlayout.setSpacing(1) vlayout.setContentsMargins(0, 0, 0, 0) main_vlayout.addLayout(vlayout) self.splitter = QSplitter(Qt.Horizontal) self.splitter.addWidget(self.source_edit) if parse_version(pyside_version) >= parse_version("5.14"): # RichText in Markdown is supported starting PySide 5.14 self.splitter.addWidget(self.rich_edit) # self.rich_edit.setStyleSheet( # "QWidget {background-color:'lightgray'}") self.rich_edit.setAcceptRichText(True) self.rich_edit.setAutoFormatting(QTextEdit.AutoAll) self.rich_edit.setReadOnly(True) # Update preview with Markdown content self.source_edit.textChanged.connect(self.update_rich_text) # Auto refresh rich text content now self.update_rich_text() # Setup toolbar self.toolbar = QToolBar() self.act_undo = self.toolbar.addAction(self.tr("undo"), self.source_edit.undo) self.act_undo.setIcon(FIcon(0xF054C)) self.act_undo.setShortcut(QKeySequence.Undo) self.act_redo = self.toolbar.addAction(self.tr("redo"), self.source_edit.redo) self.act_redo.setIcon(FIcon(0xF044E)) self.act_redo.setShortcut(QKeySequence.Redo) self.act_bold = self.toolbar.addAction( self.tr("bold"), lambda: self.infix("**") ) self.act_bold.setIcon(FIcon(0xF0264)) self.act_bold.setShortcut(QKeySequence("CTRL+B")) self.act_italic = self.toolbar.addAction( self.tr("italic"), lambda: self.infix("*") ) self.act_italic.setIcon(FIcon(0xF0277)) self.act_italic.setShortcut(QKeySequence("CTRL+I")) self.act_heading = self.toolbar.addAction( self.tr("insert title"), lambda: self.heading() ) self.act_heading.setShortcut(QKeySequence("CTRL+H")) self.act_heading.setIcon(FIcon(0xF0274)) self.act_unorder_list = self.toolbar.addAction( self.tr("insert list item"), self.unorder_list ) self.act_unorder_list.setIcon(FIcon(0xF0279)) self.act_quote = self.toolbar.addAction(self.tr("quote"), self.quote) self.act_quote.setIcon(FIcon(0xF027E)) self.act_link = self.toolbar.addAction(self.tr("insert link"), self.link) self.act_link.setIcon(FIcon(0xF0339)) vlayout.addWidget(self.toolbar) vlayout.addWidget(self.splitter) # Add buttons buttons = QDialogButtonBox(QDialogButtonBox.Save | QDialogButtonBox.Cancel) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) main_vlayout.addWidget(buttons)
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle(self.tr("Info variants")) # Current variant => set by on_refresh and on_open_project self.current_variant = None self.view = QTabWidget() self.toolbar = QToolBar() self.toolbar.setIconSize(QSize(16, 16)) # Build variant tab self.variant_view = QTreeWidget() self.variant_view.setColumnCount(2) self.variant_view.setAlternatingRowColors(True) # self.variant_view.setHeaderLabels(["Field", "Value"]) self.variant_view.header().setVisible(False) self.view.addTab(self.variant_view, self.tr("Variant")) # Build transcript tab self.transcript_combo = QComboBox() self.transcript_view = QTreeWidget() self.transcript_view.setColumnCount(2) self.transcript_view.setAlternatingRowColors(True) # self.transcript_view.setHeaderLabels(["Field", "Value"]) self.transcript_view.header().setVisible(False) tx_layout = QVBoxLayout() tx_layout.addWidget(self.transcript_combo) tx_layout.addWidget(self.transcript_view) tx_widget = QWidget() tx_widget.setLayout(tx_layout) self.view.addTab(tx_widget, self.tr("Transcripts")) self.transcript_combo.currentIndexChanged.connect( self.on_transcript_changed) # Build Samples tab self.sample_combo = QComboBox() self.sample_view = QTreeWidget() self.sample_view.setAlternatingRowColors(True) self.sample_view.setColumnCount(2) # self.sample_view.setHeaderLabels(["Field", "Value"]) self.sample_view.header().setVisible(False) tx_layout = QVBoxLayout() tx_layout.addWidget(self.sample_combo) tx_layout.addWidget(self.sample_view) tx_widget = QWidget() tx_widget.setLayout(tx_layout) self.view.addTab(tx_widget, self.tr("Samples")) self.sample_combo.currentIndexChanged.connect(self.on_sample_changed) # Build genotype tab self.genotype_view = QListWidget() self.genotype_view.setIconSize(QSize(20, 20)) self.view.addTab(self.genotype_view, self.tr("Genotypes")) # Build comments tab # Build Editor # TODO: edit comment on variant is disabled self.comment_input = QTextBrowser() self.comment_input.setAlignment(Qt.AlignTop | Qt.AlignLeft) self.comment_input.setOpenExternalLinks(True) self.editor = QWidget() self.editor_layout = QVBoxLayout() # Save comment functionality # sub_edit_layout = QFormLayout() # editor_layout.setRowWrapPolicy(QFormLayout.WrapAllRows) # sub_edit_layout.addWidget(self.comment_input) # sub_edit_layout.addWidget(self.save_button) # self.save_button.clicked.connect(self.on_save_clicked) self.editor_layout.addWidget(self.comment_input) self.editor.setLayout(self.editor_layout) self.view.addTab(self.editor, self.tr("Comments")) v_layout = QVBoxLayout() v_layout.setContentsMargins(0, 0, 0, 0) v_layout.addWidget(self.view) self.setLayout(v_layout) # # Create menu # TODO: restore this # self.context_menu = VariantPopupMenu() # # Ability to trigger the menu # self.view.setContextMenuPolicy(Qt.CustomContextMenu) # self.view.customContextMenuRequested.connect(self.show_menu) # self.add_tab("variants") # Cache all database fields and their descriptions for tooltips # Field names as keys, descriptions as values self.fields_descriptions = None # Cache genotype icons # Values in gt field as keys (str), FIcon as values self.genotype_icons = { key: FIcon(val) for key, val in cm.GENOTYPE_ICONS.items() }
def setup_menubar(self): """Menu bar setup: items and actions .. note:: Setup tools menu that could be dynamically augmented by plugins. """ ## File Menu self.file_menu = self.menuBar().addMenu(self.tr("&File")) self.new_project_action = self.file_menu.addAction( FIcon(0xF01BA), self.tr("&New project"), self.new_project, QKeySequence.New) self.open_project_action = self.file_menu.addAction( FIcon(0xF095D), self.tr("&Open project..."), self.open_project, QKeySequence.Open, ) ### Recent projects self.recent_files_menu = self.file_menu.addMenu(self.tr("Open recent")) self.setup_recent_menu() ### Export projects as self.export_csv_action = self.file_menu.addAction( self.tr("Export as csv"), self.export_as_csv) self.export_ped_action = self.file_menu.addAction( self.tr("Export pedigree PED/PLINK"), self.export_ped) self.file_menu.addSeparator() ### Misc self.file_menu.addAction(FIcon(0xF0493), self.tr("Settings..."), self.show_settings) self.file_menu.addSeparator() self.file_menu.addAction(self.tr("&Quit"), self.close, QKeySequence.Quit) ## Edit # TODO: if variant_view plugin is not loaded, disable this menu entries... self.edit_menu = self.menuBar().addMenu(self.tr("&Edit")) self.edit_menu.addAction( FIcon(0xF018F), self.tr("&Copy selected variants"), self.copy_variants_to_clipboard, "ctrl+shift+c", ) self.edit_menu.addSeparator() self.edit_menu.addAction( FIcon(0xF0486), self.tr("&Select all variants"), self.select_all_variants, QKeySequence.SelectAll, ) ## View self.view_menu = self.menuBar().addMenu(self.tr("&View")) self.view_menu.addAction(self.tr("Reset widgets positions"), self.reset_ui) # Set toggle footer visibility action show_action = self.view_menu.addAction(FIcon(0xF018D), self.tr("Show bottom toolbar")) show_action.setCheckable(True) show_action.setChecked(True) show_action.toggled.connect(self.toggle_footer_visibility) self.view_menu.addSeparator() ## Tools self.tool_menu = self.menuBar().addMenu(self.tr("&Tools")) ## Help self.help_menu = self.menuBar().addMenu(self.tr("Help")) self.help_menu.addAction( FIcon(0xF02D6), self.tr("What's this"), QWhatsThis.enterWhatsThisMode, QKeySequence.WhatsThis, ) self.help_menu.addAction( FIcon(0xF059F), self.tr("Documentation..."), partial(QDesktopServices.openUrl, QUrl(cm.WIKI_URL, QUrl.TolerantMode)), ) self.help_menu.addAction( FIcon(0xF0A30), self.tr("Report a bug..."), partial(QDesktopServices.openUrl, QUrl(cm.REPORT_BUG_URL, QUrl.TolerantMode)), ) self.help_menu.addSeparator() self.help_menu.addAction(self.tr("About Qt..."), QApplication.instance().aboutQt) self.help_menu.addAction( QIcon(DIR_ICONS + "app.png"), self.tr("About Cutevariant..."), self.about_cutevariant, )