def edit_list(self, configname: str, usblistlabel: Gtk.Label, window: Gtk.Window): tlpobject = settings.tlpconfig[configname] pcilistpattern = re.compile(r'^([a-f\d]{2}:[a-f\d]{2}\.[a-f\d])(.+?)$') currentitems = tlpobject.get_value().split(' ') tlpusblist = check_output(["lspci"]).decode(sys.stdout.encoding) pciitems = OrderedDict() for line in tlpusblist.splitlines(): matcher = pcilistpattern.match(line) pciid = matcher.group(1) description = matcher.group(2).lstrip() pciitems[pciid] = [description, (pciid in currentitems)] grid = Gtk.Grid() grid.set_row_homogeneous(True) grid.set_column_spacing(12) grid.attach(Gtk.Label(''), 0, 0, 1, 1) grid.attach(Gtk.Label(label='ID', halign=Gtk.Align.START), 1, 0, 1, 1) grid.attach(Gtk.Label(label='Description', halign=Gtk.Align.START), 2, 0, 1, 1) grid.attach(Gtk.Label(''), 3, 0, 1, 1) rowindex = 2 allitems = list() selecteditems = list() for key, value in pciitems.items(): allitems.append(key) toggle = Gtk.ToggleButton(key) toggle.connect('toggled', on_button_toggled, key, selecteditems) if value[1]: toggle.set_active(True) label = Gtk.Label(value[0]) label.set_halign(Gtk.Align.START) grid.attach(toggle, 1, rowindex, 1, 1) grid.attach(label, 2, rowindex, 1, 1) rowindex += 1 dialog = Gtk.Dialog('PCI(e) devices', window, 0, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK )) contentarea = dialog.get_content_area() contentarea.set_spacing(6) contentarea.add(grid) dialog.show_all() response = dialog.run() if response == Gtk.ResponseType.OK: configvalue = ' '.join(str(item) for item in selecteditems) tlpobject.set_value(configvalue) usblistlabel.set_text(configvalue.replace(" ", "\n")) dialog.destroy()
def __init__(self, win, parser='rst', writer='html4', style=''): super(Renderer, self).__init__() self.webview = WebView() self.webview.connect("mouse-target-changed", self.on_mouse) self.webview.connect("context-menu", self.on_context_menu) self.webview.connect("button-release-event", self.on_button_release) self.add(self.webview) controller = self.webview.get_find_controller() self.search_done = None controller.connect("found-text", self.on_found_text) controller.connect("failed-to-find-text", self.on_faild_to_find_text) self.label = Label() self.label.set_halign(Align.START) self.label.set_valign(Align.END) self.add_overlay(self.label) self.link_uri = None self.context_button = 3 # will be rewrite by real value self.set_writer(writer) self.set_parser(parser) self.style = style self.tab_width = 8 self.__win = win
def set_label_string(label: Gtk.Label, text: str) -> None: """ Sets the displayed text of a label widget :param label: the label to be modified :param text: the text to be displayed :return: void """ label.set_text(text)
def _setSelectAll(self) -> None: """ Sets up widgets to select all sentences. :return: """ grid: Grid = Grid() grid.set_halign(Align.END) self._subtitles_grid.attach(grid, 0, 2, 1, 1) lbl: Label = Label(label='Select all') setMargin(lbl, 5) grid.attach(lbl, 0, 0, 1, 1) all_vid_toggle: CheckButton = CheckButton() all_vid_toggle.set_halign(Align.CENTER) all_vid_toggle.connect('toggled', self._onAllVideosToggled) setMargin(all_vid_toggle, 5) grid.attach(all_vid_toggle, 1, 0, 1, 1) lbl2: Label = Label(label='Videos') setMargin(lbl2, 5) grid.attach(lbl2, 1, 1, 1, 1) all_audio_toggle: CheckButton = CheckButton() all_audio_toggle.set_halign(Align.CENTER) all_audio_toggle.connect('toggled', self._onAllAudiosToggled, all_vid_toggle) setMargin(all_audio_toggle, 5) grid.attach(all_audio_toggle, 2, 0, 1, 1) lbl3: Label = Label(label='Audios') setMargin(lbl3, 5) grid.attach(lbl3, 2, 1, 1, 1) all_img_toggle: CheckButton = CheckButton() all_img_toggle.set_halign(Align.CENTER) all_img_toggle.connect('toggled', self._onAllImagesToggled) setMargin(all_img_toggle, 5) grid.attach(all_img_toggle, 3, 0, 1, 1) lbl4: Label = Label(label='Snapshot') setMargin(lbl4, 5) grid.attach(lbl4, 3, 1, 1, 1)
def make_group(self, group_label, widget, add_widget_to_size_group=True): self.size_groups = getattr(self, "size_groups", [SizeGroup.new(SizeGroupMode.HORIZONTAL) for x in range(2)]) box = SettingsWidget() label = Label() label.set_markup(group_label) label.props.xalign = 0.0 self.size_groups[0].add_widget(label) box.pack_start(label, False, False, 0) if add_widget_to_size_group: self.size_groups[1].add_widget(widget) box.pack_end(widget, False, False, 0) return box
def languages_callback(self, results): languages = self.config.data['languages'] self.language_results = results['results']['bindings'] for lang in languages: for r in self.language_results: if r['c']['value'] == lang: row = ListBoxRow() label = Label() label.set_text(r['itemLabel']['value']) label.props.halign = Align(1) row.add(label) self.languages.add(row) self.languages.show_all()
def _set_label_markup(label: Gtk.Label, markup: Optional[str], *args: Any) -> None: if markup is not None and None not in args: label.set_sensitive(True) label.set_markup(markup.format(*args)) else: label.set_sensitive(False) label.set_markup('')
def set_content(self, label: Gtk.Label, control: Gtk.Widget, control_expand: bool = True): h_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=64) self.add(h_box) h_box.pack_start(label, False, False, 0) h_box.pack_end(control, control_expand, control_expand, 0) label.set_margin_start(16) control.set_margin_end(16) if not control_expand: control.set_halign(Gtk.Align.END) self.set_size_request(-1, 48) self.show_all()
def set_selection_mode(self, value): """Toggle selection mode Args: value (bool): if True, activates selection mode. """ # Titlebar self.titlebar.set_selection_mode(value) # New entity button self.entity_open.set_visible(not value) # Entities search button self.entities_search.set_visible(value) # App menu self.app_menu.set_visible(not value) # Select button self.entities_select.set_visible(not value) # Cancel selection button self.cancel_entities_selection.set_visible(value) # Sidebar self.sidebar_list.set_selection_mode(value) if value: self.column_separator = Separator() self.common = Label(label="common") self.content_box.add(self.column_separator) self.content_box.add(self.common) self.content_box.show_all() else: self.content_box.remove(self.column_separator) self.content_box.remove(self.common)
def on_delete_clicked(self, label: Gtk.Label): index = int(label.get_label().split(":")[0]) self.kao.delete(self.item_id, index) self.re_render() # Mark as modified self.module.mark_as_modified() self._mark_as_modified_cb()
def __init__(self, languages, *args, **kwargs): Window.__init__(self, *args, **kwargs) icon = lambda x: IconTheme.get_default().load_icon((name), x, 0) icons = [icon(size) for size in [32, 48, 64, 96]] self.set_icon_list(icons) self.languages.set_header_func(self.update_header) for language in languages: row = ListBoxRow() label = Label() label.set_text(language['itemLabel']['value']) label.code = language['c']['value'] row.child = label row.add(label) self.languages.add(row) self.languages.show_all()
def on_delete_clicked(self, label: Gtk.Label): index = int(label.get_label().split(":")[0]) kao = self.kao.loaded_kaos[self.item_id][index] kao.empty = True kao.modified = True self.re_render() # Mark as modified self.module.mark_as_modified() self._mark_as_modified_cb()
def __init__(self, *args, **kwargs): Window.__init__(self, *args, **kwargs) icon = lambda x: IconTheme.get_default().load_icon((name), x, 0) icons = [icon(size) for size in [32, 48, 64, 96]] self.set_icon_list(icons) self.credentials.set_header_func(self.update_header) self.languages.set_header_func(self.update_header) for key in self.config.data['credentials']: row = ListBoxRow() grid = Grid() grid.props.column_homogeneous = True label = Label() label.set_text(key) label.props.halign = Align(1) context = label.get_style_context() resource = "/ml/prevete/Daty/gtk/value.css" set_style(context, resource, "dim-label", True) entry = Entry() entry.set_text(self.config.data['credentials'][key]) context = entry.get_style_context() set_style(context, resource, "flat", True) grid.attach(label, 0, 0, 1, 1) grid.attach(entry, 1, 0, 2, 1) row.add(grid) self.credentials.add(row) self.credentials.show_all() query = """SELECT ?item ?itemLabel ?c { ?item wdt:P424 ?c . MINUS{?item wdt:P31/wdt:P279* wd:Q14827288} #exclude Wikimedia projects MINUS{?item wdt:P31/wdt:P279* wd:Q17442446} #exclude Wikimedia internal stuff SERVICE wikibase:label { bd:serviceParam wikibase:language "your_first_language". } } """ query = sub("your_first_language", self.config.data['languages'][0], query) self.retrieve(query, self.languages_callback)
def _setLabels(self) -> None: """ Setup the labels for the grid. :return: """ labels: List[Label] = [ Label(label='collection.anki2 File (Required):'), Label(label='Video (Required):'), Label(label='Subtitle File with The Target Language (Required):'), Label(label='Subtitle File with Translation (Optional):'), Label(label='Deck Name (Required):') ] for (idx, lbl) in enumerate(labels): lbl.set_halign(Align.START) # Grid.attach(child, left, top, width, height) self._fst_grid.attach(lbl, 0, idx, 1, 1)
def add_tab(self, widget, tab_name, label): """Adds a tab object to the notebook.""" log.debug('add tab: %s', tab_name) self.tabs[tab_name] = widget scrolled = ScrolledWindow() scrolled.set_policy(PolicyType.AUTOMATIC, PolicyType.AUTOMATIC) scrolled.add(widget) self.notebook.insert_page(scrolled, Label(label=label), -1) scrolled.show_all() self.after_update()
def __init__(self, win, parser='rst', writer='html4', style=''): super(Renderer, self).__init__() scrolled = ScrolledWindow.new(None, None) scrolled.set_policy(PolicyType.AUTOMATIC, PolicyType.AUTOMATIC) self.sb = scrolled.get_vscrollbar() self.add(scrolled) self.webview = WebView() self.webview.connect("mouse-target-changed", self.on_mouse) scrolled.add(self.webview) self.label = Label() self.label.set_halign(Align.START) self.label.set_valign(Align.END) self.add_overlay(self.label) self.set_writer(writer) self.set_parser(parser) self.style = style self.tab_width = 8 self.__win = win
def __init__(self, parent: Window): super().__init__(title='Warning - Anki is open', transient_for=parent) self.set_default_size(width=250, height=100) self.set_modal(True) self.set_keep_above(True) self.set_decorated(False) self.set_urgency_hint(True) lbl: Label = Label( label= 'Warning: your anki is probably opened, please close it before trying again.' ) box: Box = self.get_content_area() setMargin(box, 20) # box.pack_(child, expand, fill, padding) box.pack_start(lbl, False, True, 0) img_path: Filepath = path.abspath('asts/Icons/alert.png') try: warn_pixbuf: Pixbuf = Pixbuf().new_from_file_at_scale( img_path, 50, 50, True) warn_img: Image = Image().new_from_pixbuf(warn_pixbuf) box.pack_start(warn_img, False, True, 0) setMargin(warn_img, 20) except GLib_Error: exit(f'{img_path} file not found. Failed to create pixbuf.') self.add_buttons(STOCK_OK, ResponseType.OK)
def get_string_from_label(label: Gtk.Label) -> str: """ Returns the displayed string from a label :return: the label string """ return label.get_text()
class Renderer(Overlay): def __init__(self, win, parser='rst', writer='html4', style=''): super(Renderer, self).__init__() scrolled = ScrolledWindow.new(None, None) scrolled.set_policy(PolicyType.AUTOMATIC, PolicyType.AUTOMATIC) self.sb = scrolled.get_vscrollbar() self.add(scrolled) self.webview = WebView() self.webview.connect("mouse-target-changed", self.on_mouse) scrolled.add(self.webview) self.label = Label() self.label.set_halign(Align.START) self.label.set_valign(Align.END) self.add_overlay(self.label) self.set_writer(writer) self.set_parser(parser) self.style = style self.tab_width = 8 self.__win = win def on_mouse(self, web_view, hit_test_result, modifiers): if hit_test_result.context_is_link(): text = "link: %s" % hit_test_result.get_link_uri() elif hit_test_result.context_is_image(): text = "image: %s" % hit_test_result.get_image_uri() elif hit_test_result.context_is_media(): text = "media: %s" % hit_test_result.get_media_uri() else: if self.label.is_visible(): self.label.hide() return self.label.set_markup(MARKUP % text) self.label.show() def set_writer(self, writer): assert writer in WRITERS self.__writer = WRITERS[writer] klass = self.__writer['class'] self.writer_instance = klass() if klass is not None else None idle_add(self.do_render) def get_writer(self): return self.__writer['key'] def set_parser(self, parser): assert parser in PARSERS self.__parser = PARSERS[parser] klass = self.__parser['class'] self.parser_instance = klass() if klass is not None else None idle_add(self.do_render) def get_parser(self): return self.__parser['key'] def set_style(self, style): self.style = style idle_add(self.do_render) def get_style(self): return self.style def set_tab_width(self, width): self.tab_width = width def render_output(self): if getattr(self, 'src', None) is None: return False, "", "text/plain" try: if self.__parser['class'] is None: html = NOT_FOUND.format(**self.__parser) elif self.__writer['class'] is None: html = NOT_FOUND.format(**self.__writer) elif issubclass(self.__parser['class'], JSONPreview): try: json = loads(self.src) return (False, dumps(json, sort_keys=True, ensure_ascii=False, indent=4, separators=(',', ': ')), 'application/json') except ValueError as e: return False, DATA_ERROR % ('JSON', str(e)), "text/html" else: if not issubclass(self.__parser['class'], HtmlPreview): settings = { 'warning_stream': StringIO(), 'embed_stylesheet': True, 'tab_width': self.tab_width } if self.style: settings['stylesheet'] = self.style settings['stylesheet_path'] = [] kwargs = {'source': self.src, 'parser': self.parser_instance, 'writer': self.writer_instance, 'writer_name': 'html', 'settings_overrides': settings} if self.__writer['key'] == 'pep': kwargs['reader_name'] = 'pep' kwargs.pop('parser') # pep is allways rst html = publish_string(**kwargs).decode('utf-8') return True, html, 'text/html' else: if version_info.major == 2: html = self.src.decode("utf-8") else: html = self.src # output to file or html preview return False, html, 'text/html' except DataError as e: return False, DATA_ERROR % ('Data', e), 'text/html' except BaseException: exc_str = format_exc() return False, EXCEPTION_ERROR % exc_str, 'text/html' def do_render(self): state, html, mime_type = self.render_output() if state: a, b = len(self.src[:self.pos]), len(self.src[self.pos:]) position = (float(a)/(a+b)) if a or b else 0 html += SCROLL % position if html and self.__win.runing: file_name = self.file_name or get_home_dir() self.webview.load_bytes(Bytes(html.encode("utf-8")), mime_type, "UTF-8", "file://"+file_name) def render(self, src, file_name, pos=0): self.src = src self.pos = pos self.file_name = file_name idle_add(self.do_render) def print_page(self): po = PrintOperation.new(self.webview) po.connect("failed", self.on_print_failed) po.run_dialog(self.__win) def on_print_failed(self, po, error): # FIXME: if dialog is used, application will lock :-( log_default_handler("Application", LogLevelFlags.LEVEL_WARNING, error.message)
def generate_sentence(self, generated_text_widget: Gtk.Label): text = self.__marcow_chain.generate() generated_text_widget.set_text(text)
def _setSentenceRelated(self) -> None: """ Sets up the sentence editing widgets related. Also initialize both text buffers. :return: """ box: Box = Box() self._main_box.pack_start(box, False, True, 0) box.set_orientation(Orientation.VERTICAL) setMargin(box, 5) toolbar: Toolbar = Toolbar() box.pack_start(toolbar, False, True, 0) toolbar.set_halign(Align.END) setMargin(toolbar, 5) lbl: Label = Label() lbl.set_markup('<i><b>Front</b></i>') box.pack_start(lbl, False, True, 0) lbl.set_halign(Align.START) setMargin(lbl, 5) scrl_wnd: ScrolledWindow = ScrolledWindow() scrl_wnd.set_hexpand(True) scrl_wnd.set_vexpand(True) textview: TextView = TextView() scrl_wnd.add(textview) box.pack_start(scrl_wnd, False, True, 0) self._textbuffer_front = textview.get_buffer() lbl2: Label = Label() lbl2.set_halign(Align.START) lbl2.set_markup('<i><b>Back</b></i>') box.pack_start(lbl2, False, True, 0) setMargin(lbl2, 5) scrl_wnd2: ScrolledWindow = ScrolledWindow() scrl_wnd2.set_hexpand(True) scrl_wnd2.set_vexpand(True) textview2: TextView = TextView() scrl_wnd2.add(textview2) box.pack_end(scrl_wnd2, False, True, 0) self._textbuffer_back = textview2.get_buffer() # this depends on the text buffer to be initialized self._setToolbarColorButton(toolbar) toolbar.insert(SeparatorToolItem(), 3) self._setToolbarUnderlineButton(toolbar) self._setToolbarBoldButton(toolbar) self._setToolbarItalicButton(toolbar) toolbar.insert(SeparatorToolItem(), 7) self._setToolbarTagRemoverButton(toolbar)
def addPage(self,textBuffer,pageTitle): print "INSIDE_ADD_PAGE" caption=_("Untitled"+str(self.counter)) #add hbox self.hbox=Gtk.HBox(); self.hbox.show(); #create text_buffer self.sourceBuffer= GtkSource.Buffer() #add textview self.textview=GtkSource.View() self.textview.set_buffer(self.sourceBuffer) self.textview.set_show_line_numbers(True) self.textview.set_show_line_marks(True) self.textview.set_size_request(250,400) self.setLanguage(self.textview) #check for textBuffer passed as param if textBuffer!=None: #set the textbuffer data to editor start, end = textBuffer.get_bounds() self.sourceBuffer.set_text(textBuffer.get_text(start, end, True)) #add vpane self.vpane=Gtk.VPaned(); #add scroll to text view self.scroll=Gtk.ScrolledWindow(); self.scroll.set_policy(Gtk.PolicyType.NEVER,Gtk.PolicyType.AUTOMATIC); self.scroll.add_with_viewport(self.textview) self.scroll.set_size_request(250,400) self.scroll.show() self.vpane.add(self.scroll) #add scroll to text view self.opScroll= Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) #create Vte Terminal self.vteObject=Vte.Terminal() self.opScroll.pack_start(self.vteObject, True, True, 0) self.outsb = Gtk.Scrollbar(orientation=Gtk.Orientation.VERTICAL) self.outsb.set_adjustment(self.vteObject.get_vadjustment()) self.outsb.show() self.opScroll.pack_start(self.outsb, False, False, 0) self.vteObject.set_colors(Gdk.color_parse('#000000'),Gdk.color_parse('#E7E7E7'),[]) self.vteObject.set_size_request(200,200) self.vteObject.show() #self.opScroll.set_size_request(250,200) self.opScroll.show() print "VTE_KARTIK:",self.vteObject.get_vadjustment() self.vpane.add(self.opScroll) self.vpane.show() self.hbox.pack_start(self.vpane,True,True,0) self.textview.show() #attach text-change listener for buffer self.attachTextChangedListener(self.hbox) self.hbox.set_size_request(250, 300) #if pageTitle is none then give a Untitled caption if pageTitle==None: self.newlabel=Label(caption) else: self.newlabel=Label(pageTitle) #self.newlabel.set_size_request(75,30) self.resizeLabel(self.newlabel) self.newlabel.show() self.notebook.append_page(self.hbox,self.newlabel) #assigning notebook page for the filename #self.pageMap[self.newlabel.get_text()]=self.hbox self.addPageToPageMap(self.newlabel.get_text(),self.hbox) self.counter=self.counter+1 print "Curr :",self.pageMap self.selectFileNamePage(self.newlabel.get_text())
class TabbedCanvas(Gtk.EventBox): basePath="" counter=0 saveAsFilename="" fileName="" data="" currentPageIndex="" hbox="" #property to hold <filename,notebook page> pair pageMap=dict() def __init__(self): Gtk.EventBox.__init__(self) #Adding HBox self.mainbox=Gtk.HPaned() #self.mainbox.orientation(gtk.Orientation.VERTICAL #gtk.HBox() self.elementBox=Gtk.VBox() scrolled_window = Gtk.VPaned()#gtk.ScrolledWindow() scrolled_window.set_border_width(5) scrolled_window.set_size_request(300, 300) scrolled_window.add(self.elementBox) self.treestore=Gtk.TreeStore(str) self.treestore.clear() self.exampleNode=self.treestore.append(None,[_("Examples")]) #self.newitem=self.treestore.append(self.exampleNode,["test1"]) self.programNode=self.treestore.append(None,[_("Your Programs")]) #adding treeview self.treeview=Gtk.TreeView() #adding treeviewcolumn self.tvcolumn=Gtk.TreeViewColumn(_("Explorer")) self.cell=Gtk.CellRendererText() self.tvcolumn.pack_start(self.cell,True) self.tvcolumn.add_attribute(self.cell,"text",0) self.treeview.append_column(self.tvcolumn) self.treeview.set_model(self.treestore) #add handler for row-activated signal self.treeview.connect('row-activated',self.openSelectedFile) #changed was causing different behavior as when treeview is refreshed, it calls openSelected, thus opening all files under this section #self.treeview.get_selection().connect("changed", self.openSelectedFile) #create a scrolled window for explorer self.explorerScrollWindow=Gtk.ScrolledWindow() self.explorerScrollWindow.set_policy(Gtk.PolicyType.NEVER,Gtk.PolicyType.AUTOMATIC); self.explorerScrollWindow.add(self.treeview) self.explorerScrollWindow.set_size_request(100,650) self.elementBox.pack_start(self.explorerScrollWindow,False,False,0) #self.elementBox.pack_start(self.btn2,False,False,0) #Adding Notebook self.notebook=Notebook() self.notebook.tab_curvature=100 self.notebook.set_scrollable(True) self.notebook.show() #Adding Notebook pages self.addPage(None,None) self.mainbox.add(scrolled_window) self.mainbox.add(self.notebook) self.add(self.mainbox) #method to add a page to Notebook def addPage(self,textBuffer,pageTitle): print "INSIDE_ADD_PAGE" caption=_("Untitled"+str(self.counter)) #add hbox self.hbox=Gtk.HBox(); self.hbox.show(); #create text_buffer self.sourceBuffer= GtkSource.Buffer() #add textview self.textview=GtkSource.View() self.textview.set_buffer(self.sourceBuffer) self.textview.set_show_line_numbers(True) self.textview.set_show_line_marks(True) self.textview.set_size_request(250,400) self.setLanguage(self.textview) #check for textBuffer passed as param if textBuffer!=None: #set the textbuffer data to editor start, end = textBuffer.get_bounds() self.sourceBuffer.set_text(textBuffer.get_text(start, end, True)) #add vpane self.vpane=Gtk.VPaned(); #add scroll to text view self.scroll=Gtk.ScrolledWindow(); self.scroll.set_policy(Gtk.PolicyType.NEVER,Gtk.PolicyType.AUTOMATIC); self.scroll.add_with_viewport(self.textview) self.scroll.set_size_request(250,400) self.scroll.show() self.vpane.add(self.scroll) #add scroll to text view self.opScroll= Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) #create Vte Terminal self.vteObject=Vte.Terminal() self.opScroll.pack_start(self.vteObject, True, True, 0) self.outsb = Gtk.Scrollbar(orientation=Gtk.Orientation.VERTICAL) self.outsb.set_adjustment(self.vteObject.get_vadjustment()) self.outsb.show() self.opScroll.pack_start(self.outsb, False, False, 0) self.vteObject.set_colors(Gdk.color_parse('#000000'),Gdk.color_parse('#E7E7E7'),[]) self.vteObject.set_size_request(200,200) self.vteObject.show() #self.opScroll.set_size_request(250,200) self.opScroll.show() print "VTE_KARTIK:",self.vteObject.get_vadjustment() self.vpane.add(self.opScroll) self.vpane.show() self.hbox.pack_start(self.vpane,True,True,0) self.textview.show() #attach text-change listener for buffer self.attachTextChangedListener(self.hbox) self.hbox.set_size_request(250, 300) #if pageTitle is none then give a Untitled caption if pageTitle==None: self.newlabel=Label(caption) else: self.newlabel=Label(pageTitle) #self.newlabel.set_size_request(75,30) self.resizeLabel(self.newlabel) self.newlabel.show() self.notebook.append_page(self.hbox,self.newlabel) #assigning notebook page for the filename #self.pageMap[self.newlabel.get_text()]=self.hbox self.addPageToPageMap(self.newlabel.get_text(),self.hbox) self.counter=self.counter+1 print "Curr :",self.pageMap self.selectFileNamePage(self.newlabel.get_text()) #method to add page to pageMap def addPageToPageMap(self,fileName,hbox): print "BEFORE_CURRENT_PAGE_MAP:",self.pageMap print "addPageToPageMap_called_for:",fileName try: #assigning notebook page for the filename self.pageMap[fileName]=hbox print "Page:",fileName," added to pageMap" except: print "Page already exist in pageMap" print "AFTER_CURRENT_PAGE_MAP:",self.pageMap #method to remove page from pageMap def removePageFromPageMap(self,fileName): try: print "looking for page:",fileName, " in pageMap for removal" del self.pageMap[fileName] print "Page:",fileName," removed from pageMap" except: print "Unable to remove page from pageMap" #method to resize the tab label to appropriate dimension def resizeLabel(self,label): label.set_size_request(label.get_width_chars(),40) #method to get label for tab def resizeSelectedTabLabel(self): label=self.getSelectedTabLabel() self.resizeLabel(label) #method to get hbox for selected tab def getSelectedTabHBox(self): currentPageIndex=self.notebook.get_current_page() print "current page number:",currentPageIndex hbox=self.notebook.get_nth_page(currentPageIndex) return hbox #method to get tab label for selected tab def getSelectedTabLabel(self): hbox=self.getSelectedTabHBox() label=self.notebook.get_tab_label(hbox) return label #method to get textview for selected tab( code editor) def getSelectedTabTextView(self): hbox=self.getSelectedTabHBox() children=hbox.get_children()#VPANED #ScrolledWindow #Viewport #textview textview=children[0].get_children()[0].get_children()[0].get_children()[0] return textview #method to get outputWindow text view for selected tab( output window) def getSelectedTabOutputWindowTextView(self): hbox=self.getSelectedTabHBox() children=hbox.get_children() #ScrolledWindow #Viewport #textview textview=children[0].get_children()[1].get_children()[0].get_children()[0] return textview #method to get text-buffer for selected tab( code editor) def getSelectedTabTextBuffer(self): hbox=self.getSelectedTabHBox() textview=self.getSelectedTabTextView() tvbuffer=textview.get_buffer() return tvbuffer #method to get text-buffer for selected tab( output window) def getSelectedTabOutputWindowBuffer(self): hbox=self.getSelectedTabHBox() textview=self.getSelectedTabOutputWindowTextView() tvbuffer=textview.get_buffer() return tvbuffer #method to get text-buffer for selected tab( output window) def getSelectedTabVte(self): hbox=self.getSelectedTabHBox() children=hbox.get_children() #ScrolledWindow #Viewport #vte vteObj=children[0].get_children()[1].get_children()[0]#.get_children()[0] return vteObj #method to remove the selected page def removePage(self): currentPageIndex=self.notebook.get_current_page() print "Removing page number:",currentPageIndex #remove page from pageMap first fileName_to_be_removed=self.getSelectedTabLabel() self.removePageFromPageMap(fileName_to_be_removed.get_text()) self.notebook.remove_page(currentPageIndex) #method to delete the selected page and file def deletePage(self): del_filename=self.getSelectedTabLabel().get_text() actualFileName=del_filename.replace('*','') self.showConfirmDeleteDialog(actualFileName,self.basePath) #method to confirm deletion operation def showConfirmDeleteDialog(self,fileName,basePath): print "show confirm delete dialog called" self.deleteDialog=Gtk.Dialog(_("Oopsy Alert on Delete !"),None,0,None) self.label = Gtk.Label(_("Are you sure you want to delete '"+fileName+"' ?")) self.deleteDialog.vbox.pack_start(self.label,True,True,0) #adding buttons btnOk=Gtk.Button(_("Ok")) btnOk.connect("clicked",self.hideConfirmDeleteDialogOnOK,fileName,basePath) btnCancel=Gtk.Button(_("Cancel")) btnCancel.connect("clicked",self.hideConfirmDeleteDialogOnCancel,basePath) self.deleteDialog.action_area.pack_start(btnCancel,True,True,0) self.deleteDialog.action_area.pack_start(btnOk, True, True, 0) self.deleteDialog.set_size_request(150,150) btnOk.show() btnCancel.show() self.label.show() self.deleteDialog.show() #method to hide confirm deletion operation and delete the file as user pressed OK def hideConfirmDeleteDialogOnOK(self,widget,fileName,basePath): print "hideConfirmDeleteDialogOnOK called" self.deleteDialog.hide() self.removePage() fh=FileHandler() fh.basePath=self.basePath fh.deleteFile(fileName) #refresh the explorer self.refreshExplorer(self.basePath) #method to hide confirm deletion operation as user pressed CANCEL def hideConfirmDeleteDialogOnCancel(self,widget,basePath): print "hideConfirmDeleteDialogOnCancel called" self.deleteDialog.hide() #method to apply text-changed callback to textview's text buffer def attachTextChangedListener(self,hbox): #HBOX #VPANED #SCROLL_WINDOW #ViewPort #TextView textview=self.hbox.get_children()[0].get_children()[0].get_children()[0].get_children()[0] print "L1:",self.hbox.get_children()[0] print "L2:",self.hbox.get_children()[0].get_children()[0] print "L3:",self.hbox.get_children()[0].get_children()[0].get_children()[0] print "attached text changed listener to :",textview tbuffer=textview.get_buffer() tbuffer.connect("changed",self.showUnsavedTab) print "\nAttached change listener" #method that detects text-change in text buffer and indicates on tab with a * mark def showUnsavedTab(self,widget): label=self.getSelectedTabLabel() oldTitle=label.get_text() oldTitle=oldTitle.replace('*','') oldTitle=oldTitle + '*' label.set_text(oldTitle) #method to set Language of sourceView with Language Manager def setLanguage(self,sourceView): self.lmgr=GtkSource.LanguageManager.get_default() self.language=self.lmgr.get_language('cpp') sourceView.get_buffer().set_language(self.language) #method to open the selected file from the explorer def openSelectedFile(self, widget, row, col): model=self.treeview.get_model() value = model[row][0] print "Open Selected File called for :",value filename=value page_in_pageMap=None #get page from pageMap and select already open tab for this file try: page_in_pageMap=self.pageMap[filename] print "PAGE_MAP:",page_in_pageMap," for :",filename self.selectFileNamePage(filename) except: print "NO_PAGE_IN_PAGE_MAP" #create fileHandler instance fh=FileHandler() fh.basePath=self.basePath fileData=fh.loadFileFromWorkspace(filename) print "FILE_DATA:",fileData text_buffer=Gtk.TextBuffer() text_buffer.set_text(fileData) if page_in_pageMap==None: print "since no page in pageMap thus creating page" self.addPage(text_buffer,filename) #method to select the tab with a filename def selectFileNamePage(self,filename): h_box=self.pageMap[filename] page_num=self.getPageNumberWithTabHBox(h_box) self.notebook.set_current_page(page_num) #method to get hbox for a hbox def getPageNumberWithTabHBox(self,hbox): page_number=self.notebook.page_num(hbox) return page_number #method to save the file on selected notebook page def saveFile(self,basePath): hbox=self.getSelectedTabHBox() textview_buffer=self.getSelectedTabTextBuffer() start, end = textview_buffer.get_bounds() self.data=textview_buffer.get_text(start, end, True) self.fileName=self.notebook.get_tab_label(hbox).get_text() #check if file exists on drive actualFilename=self.fileName.replace('*','') fh=FileHandler() fh.basePath=basePath if fh.checkFileExists(actualFilename): self.saveAsFilename=actualFilename self.saveToDisk(basePath) else: self.showSaveDialog(basePath) #print "HBOX has elements:",str(len(lst)) print "Got data:",self.data," with filename:",self.fileName #method to show save dialog on click of save button def showSaveDialog(self,basePath): print "save dialog called" self.dialog=Gtk.Dialog(_("Save Program"),None,0,None) self.label = Gtk.Label(_("Save your program as :")) self.entry=Gtk.Entry() self.dialog.vbox.pack_start(self.label,True,True,0) self.dialog.vbox.pack_start(self.entry,True,True,0) #adding buttons btnOk=Gtk.Button(_("Save")) btnOk.connect("clicked",self.hideSaveDialogOnSave,basePath) self.dialog.action_area.pack_start(btnOk, True, True, 0) self.dialog.set_size_request(150,150) btnOk.show() self.label.show() self.entry.show() self.dialog.show() #method to show alert dialog if file is unsaved and compile or executed is selected def showAlertDialog(self,basePath,message): print "show Alert dialog called" self.alertDialog=Gtk.Dialog(_("Oopsy Alert"),None,0,None) self.label = Gtk.Label(_(message)) self.alertDialog.vbox.pack_start(self.label,True,True,0) #adding buttons btnOk=Gtk.Button(_("Ok")) btnOk.connect("clicked",self.hideAlertDialog,basePath) self.alertDialog.action_area.pack_start(btnOk, True, True, 0) self.alertDialog.set_size_request(150,150) btnOk.show() self.label.show() self.alertDialog.show() #method to hide alert dialog def hideAlertDialog(self,widget,basePath): print "hide Alert Dialog called" self.alertDialog.hide() #method to hide save-dialog and invoke saveToDisk--for actual saving def hideSaveDialogOnSave(self,widget,basePath): print "hideSaveDialog called" self.saveAsFilename=self.entry.get_text() print "got save as filename:",self.saveAsFilename self.dialog.hide() #check if file is saved as .c or .cpp file isCFlag=self.saveAsFilename[-2:] isCppFlag=self.saveAsFilename[-4:] #if file is either of c or cpp file then proceed to save on disk if isCFlag=='.c'or isCppFlag=='.cpp': self.saveToDisk(basePath) else: self.showAlertDialog(basePath,"You must save your program as .c or .cpp file !") #method to save data from text-buffer to disk as a file def saveToDisk(self,basePath): fh=FileHandler() fh.basePath=basePath fh.saveFile(self.saveAsFilename,self.data) self.renameTabOnSave(self.saveAsFilename) #get selected Tab HBox hbox_obj=self.getSelectedTabHBox() self.addPageToPageMap(self.saveAsFilename,hbox_obj) #refresh the explorer self.refreshExplorer(basePath) #reselect file in explorer after explorer refresh self.selectFileInExplorer(self.saveAsFilename) #method to rename tab as save is clicked def renameTabOnSave(self,fileName): hbox=self.getSelectedTabHBox() self.notebook.set_tab_label_text(hbox, fileName) self.resizeSelectedTabLabel() print "Tab renamed" #method to compile selected file def compileSelectedFile(self,basePath): gc=GCCHandler() gc.basePath=basePath fn=self.getSelectedTabLabel().get_text() actualFilename=fn.replace('*','') #check if file is saved as .c or .cpp file isCFlag=actualFilename[-2:] isCppFlag=actualFilename[-4:] #if file is either of c or cpp file then proceed otherwise show alert dialog asking user to save the file first. if isCFlag=='.c'or isCppFlag=='.cpp': vteObj=self.getSelectedTabVte() compilationOutput=gc.compileFile(actualFilename,vteObj) else: self.showAlertDialog(basePath,"You must save the file before compiling or executing the program.") #method to run selected file def executeSelectedFile(self,basePath): gc=GCCHandler() gc.basePath=basePath fn=self.getSelectedTabLabel().get_text() actualFilename=fn.replace('*','') #check if file is saved as .c or .cpp file isCFlag=actualFilename[-2:] isCppFlag=actualFilename[-4:] #if file is either of c or cpp file then proceed otherwise show alert dialog asking user to save the file first. if isCFlag=='.c'or isCppFlag=='.cpp': vteObj=self.getSelectedTabVte() executionOutput=gc.execute(actualFilename,vteObj) else: self.showAlertDialog(basePath,"You must save the file before compiling or executing the program.") #clear the children under examples and your programs def clearFilesInTreeView(self): for row in self.treestore: print "ROW:",row," NAME:",row[0] rowIter=row.iterchildren() try: child=rowIter.next() except: print "No rows at all" try: while(child!=None): print "Removing CHILD:",child[0] self.treestore.remove(child.iter) child=rowIter.next() except: print "No more rows !" #method to select the row in TreeView def selectFileInExplorer(self,fileName): for row in self.treestore: print "ROW:",row," NAME:",row[0] rowIter=row.iterchildren() try: child=rowIter.next() except: print "No rows at all" try: while(child!=None): print "Checking CHILD:",child[0], " for selecting:",fileName if fileName==child[0]: self.treeSel=self.treeview.get_selection() self.treeSel.select_iter(child.iter) print "TREE_SEL:",self.treeSel break child=rowIter.next() except: print "No more rows !" #self.treeSel.select_path( #refresh explorer def refreshExplorer(self,basePath): print "flushing treestore" self.clearFilesInTreeView() self.loadExplorer(basePath) #method to load the explorer def loadExplorer(self,basePath): #flush all rows first #self.refreshExplorer() print "INSIDE_LOAD_EXPLORER" print "basePath_in_TabControl:",basePath ws=WorkspaceHandler(basePath) #add child nodes to exampleNode-which shows all examples print "ws.exampleList:",len(ws.exampleList) for item in ws.exampleList: print "adding item:",item," to examples:",self.exampleNode self.newitem=self.treestore.append(self.exampleNode,[item]) #add child nodes to programNode-which shows your programs print "ws.programList:",len(ws.programList) for item in ws.programList: print "adding item:",item," to programs:",self.programNode self.newitem=self.treestore.append(self.programNode,[item]) #now expand all nodes self.treeview.expand_all()
def edit_list(self, configname: str, usblistlabel: Gtk.Label, window: Gtk.Window): tlpobject = settings.tlpconfig[configname] pcilistpattern = re.compile(r'^([a-f\d]{2}:[a-f\d]{2}\.[a-f\d])(.+?)$') currentitems = tlpobject.get_value().split(' ') tlpusblist = check_output(["lspci"]).decode(sys.stdout.encoding) pciitems = OrderedDict() for line in tlpusblist.splitlines(): matcher = pcilistpattern.match(line) pciid = matcher.group(1) description = matcher.group(2).lstrip() pciitems[pciid] = [description, (pciid in currentitems)] grid = Gtk.Grid() grid.set_row_homogeneous(True) grid.set_column_spacing(12) grid.attach(Gtk.Label(''), 0, 0, 1, 1) grid.attach(Gtk.Label(label='ID', halign=Gtk.Align.START), 1, 0, 1, 1) grid.attach(Gtk.Label(label='Description', halign=Gtk.Align.START), 2, 0, 1, 1) grid.attach(Gtk.Label(''), 3, 0, 1, 1) rowindex = 2 allitems = list() selecteditems = list() for key, value in pciitems.items(): allitems.append(key) toggle = Gtk.ToggleButton(key) toggle.connect('toggled', on_button_toggled, key, selecteditems) if value[1]: toggle.set_active(True) label = Gtk.Label(value[0]) label.set_halign(Gtk.Align.START) grid.attach(toggle, 1, rowindex, 1, 1) grid.attach(label, 2, rowindex, 1, 1) rowindex += 1 dialog = Gtk.Dialog('PCI(e) devices', window, 0, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK)) contentarea = dialog.get_content_area() contentarea.set_spacing(6) contentarea.add(grid) dialog.show_all() response = dialog.run() if response == Gtk.ResponseType.OK: configvalue = ' '.join(str(item) for item in selecteditems) tlpobject.set_value(configvalue) usblistlabel.set_text(configvalue.replace(" ", "\n")) dialog.destroy()
class Renderer(Overlay): def __init__(self, win, parser='rst', writer='html4', style=''): super(Renderer, self).__init__() self.webview = WebView() self.webview.connect("mouse-target-changed", self.on_mouse) self.webview.connect("context-menu", self.on_context_menu) self.webview.connect("button-release-event", self.on_button_release) self.add(self.webview) controller = self.webview.get_find_controller() self.search_done = None controller.connect("found-text", self.on_found_text) controller.connect("failed-to-find-text", self.on_faild_to_find_text) self.label = Label() self.label.set_halign(Align.START) self.label.set_valign(Align.END) self.add_overlay(self.label) self.link_uri = None self.context_button = 3 # will be rewrite by real value self.set_writer(writer) self.set_parser(parser) self.style = style self.tab_width = 8 self.__win = win @property def position(self): self.__position = -1 self.webview.run_javascript(JS_POSITION, None, self.on_position_callback, None) while self.__position < 0: # this call at this place do problem, when Gdk.threads_init main_iteration() return self.__position def on_position_callback(self, webview, result, data): try: js_res = webview.run_javascript_finish(result) self.__position = js_res.get_js_value().to_double() except Error: self.__position = 0 def on_mouse(self, webview, hit_test_result, modifiers): self.link_uri = None if hit_test_result.context_is_link(): self.link_uri = hit_test_result.get_link_uri() text = "link: %s" % self.link_uri elif hit_test_result.context_is_image(): text = "image: %s" % hit_test_result.get_image_uri() elif hit_test_result.context_is_media(): text = "media: %s" % hit_test_result.get_media_uri() else: if self.label.is_visible(): self.label.hide() return self.label.set_markup(MARKUP % text.replace("&", "&")) self.label.show() def on_context_menu(self, webview, menu, event, hit_test_result): self.context_button = event.button.button return True # disable context menu for now def on_button_release(self, webview, event): """Catch release-button only when try to follow link. Context menu is catch by webview before this callback. """ if event.button == self.context_button: return True if self.link_uri: if self.link_uri.startswith("file://"): # try to open source self.find_and_opendocument(self.link_uri[7:].split('#')[0]) else: show_uri_on_window(None, self.link_uri, 0) return True def find_and_opendocument(self, file_path): ext = splitext(file_path)[1] if not ext: for EXT in LANGS.keys(): tmp = file_path + EXT if exists(tmp): file_path = tmp ext = EXT break if ext in LANGS: self.__win.open_document(file_path) elif exists(file_path): show_uri_on_window(None, "file://" + file_path, 0) else: dialog = FileNotFoundDialog(self.__win, file_path) dialog.run() dialog.destroy() def set_writer(self, writer): assert writer in WRITERS self.__writer = WRITERS[writer] klass = self.__writer['class'] self.writer_instance = klass() if klass is not None else None idle_add(self.do_render) def get_writer(self): return self.__writer['key'] def set_parser(self, parser): assert parser in PARSERS self.__parser = PARSERS[parser] klass = self.__parser['class'] self.parser_instance = klass() if klass is not None else None idle_add(self.do_render) def get_parser(self): return self.__parser['key'] def set_style(self, style): self.style = style idle_add(self.do_render) def get_style(self): return self.style def set_tab_width(self, width): self.tab_width = width def render_output(self): if getattr(self, 'src', None) is None: return False, "", "text/plain" try: if self.__parser['class'] is None: html = NOT_FOUND.format(**self.__parser) elif self.__writer['class'] is None: html = NOT_FOUND.format(**self.__writer) elif issubclass(self.__parser['class'], JSONPreview): try: json = loads(self.src) return (False, dumps(json, sort_keys=True, ensure_ascii=False, indent=4, separators=(',', ': ')), 'application/json') except ValueError as e: return False, DATA_ERROR % ('JSON', str(e)), "text/html" else: if not issubclass(self.__parser['class'], HtmlPreview): settings = { 'warning_stream': StringIO(), 'embed_stylesheet': True, 'tab_width': self.tab_width, 'file_name': self.file_name } if self.style: settings['stylesheet'] = self.style settings['stylesheet_path'] = [] kwargs = { 'source': self.src, 'parser': self.parser_instance, 'writer': self.writer_instance, 'writer_name': 'html', 'settings_overrides': settings } if self.__writer['key'] == 'pep': kwargs['reader_name'] = 'pep' kwargs.pop('parser') # pep is allways rst html = publish_string(**kwargs).decode('utf-8') return True, html, 'text/html' else: if version_info.major == 2: html = self.src.decode("utf-8") else: html = self.src # output to file or html preview return False, html, 'text/html' except DataError as e: return False, DATA_ERROR % ('Data', e), 'text/html' except NotImplementedError: exc_str = format_exc() return False, NOT_IMPLEMENTED_ERROR % exc_str, 'text/html' except BaseException: exc_str = format_exc() return False, EXCEPTION_ERROR % exc_str, 'text/html' def do_render(self): state, html, mime_type = self.render_output() if state: if self.pos > 1: # vim a, b = len(self.src[:self.pos]), len(self.src[self.pos:]) position = (float(a) / (a + b)) if a or b else 0 else: position = self.pos html += SCROLL % position if html and self.__win.runing: file_name = self.file_name or get_home_dir() self.webview.load_bytes(Bytes(html.encode("utf-8")), mime_type, "UTF-8", "file://" + file_name) def render(self, src, file_name, pos=0): self.src = src self.pos = pos self.file_name = file_name idle_add(self.do_render) def print_page(self): po = PrintOperation.new(self.webview) po.connect("failed", self.on_print_failed) po.run_dialog(self.__win) def on_print_failed(self, po, error): # FIXME: if dialog is used, application will lock :-( log_default_handler("Application", LogLevelFlags.LEVEL_WARNING, error.message) def do_next_match(self, text): controller = self.webview.get_find_controller() if controller.get_search_text() != text: self.search_done = None controller.search(text, FindOptions.WRAP_AROUND, MAXUINT) while self.search_done is None: main_iteration() elif self.search_done: controller.search_next() return self.search_done def do_previous_match(self, text): controller = self.webview.get_find_controller() if controller.get_search_text() != text: self.search_done = None controller.search(text, FindOptions.WRAP_AROUND | FindOptions.BACKWARDS, MAXUINT) while self.search_done is None: main_iteration() elif self.search_done: controller.search_previous() return self.search_done def stop_search(self): controller = self.webview.get_find_controller() controller.search_finish() def on_found_text(self, controller, count): self.search_done = True def on_faild_to_find_text(self, controller): self.search_done = False def scroll_to_position(self, position): if position is not None: self.pos = position if self.pos > 1: # vim a, b = len(self.src[:self.pos]), len(self.src[self.pos:]) position = (float(a) / (a + b)) if a or b else 0 else: position = self.pos self.webview.run_javascript(JS_SCROLL % position, None, None, None)
def on_selection_changed(self, icon_view, album=None): popup = Popover.new(self.albumview) popup.set_size_request(810, 240) if album is None: selection = icon_view.get_selected_items() if len(selection) != 1: return path = selection[0] treeiter = self.albumfilter.get_iter(path) isset, path, cell = icon_view.get_cursor() isset, rect = icon_view.get_cell_rect(path, cell) popup.set_pointing_to(rect) album_id = self.albumfilter.get_value(treeiter, 4) album_obj = self.albums[album_id] else: album_obj = album popup.set_relative_to(self.search_entry) # Handle double clicks def empty_dblclick(): self.dblclick = None if self.dblclick is None: self.dblclick = album_obj timeout_add(1000, empty_dblclick) elif self.dblclick == album_obj: self.play(album_obj) return album = album_obj.name artist = album_obj.artist glade_album = join(self.functions.datadir, 'glade', 'albumview.ui') box = gtk_builder() box.set_translation_domain('bluemindo') box.add_from_file(glade_album) popup.add(box.get_object('box1')) box.get_object('label_album').set_text(album) box.get_object('label_artist').set_text(artist) bdir = join(self.userconf.datadir, 'modules', 'player', 'covers') cover = join(bdir, self.functions.get_hash(album, artist)) if isfile(cover): cover_px = Pixbuf.new_from_file_at_scale(cover, 180, 180, True) else: cover_px = Pixbuf.new_from_file(join(self.functions.datadir, 'image', 'logo_head_big.png')) box.get_object('album_cover').set_from_pixbuf(cover_px) def play_album(wdg, album): self.play(album) def queue_album(wdg, album): self.queue(album) def change_cover(wdg, ka, album): artist_name = album.artist album_name = album.name fcdialog = FileChooserDialog( title=_('Change the cover picture for this album'), buttons=(_('Select'), ResponseType.OK)) fcdialog.set_transient_for(self.widgets[0][11]) response = fcdialog.run() if response == ResponseType.OK: filename = fcdialog.get_filename() datadir = self.userconf.datadir hash_a = self.functions.get_hash(album_name, artist_name) pictures_dir = join(datadir, 'modules', 'player', 'covers') album_file = join(pictures_dir, hash_a) copyfile(filename, album_file) new = Pixbuf.new_from_file_at_scale(album_file, 180, 180, True) box.get_object('album_cover').set_from_pixbuf(new) fcdialog.destroy() box.get_object('button_play').connect('clicked', play_album, album_obj) box.get_object('button_add').connect('clicked', queue_album, album_obj) box.get_object('coverevent').connect('button-press-event', change_cover, album_obj) i = 0 a = -1 previous_column = 0 grid_songs = box.get_object('grid_songs') grid_songs.set_size_request(-1, 200) grid_songs.set_column_spacing(5) try: kids = grid_songs.get_children() for kid in kids: grid_songs.remove(kid) except IndexError: pass for song in album_obj.tracks: i += 1 a += 1 def queue(wdg, song): self.queue(song) def play(wdg, song): self.play(song) song_wdg = Box(spacing=0) song_btr = Button() song_btr.connect('clicked', play, song) song_btr.set_relief(ReliefStyle.NONE) song_btr_content = Box(spacing=0) song_btr.add(song_btr_content) song_tr = Label() song_tr.set_markup('<span foreground="grey">' + str(song.track) + '</span>') song_tr.set_width_chars(3) song_btr_content.pack_start(song_tr, False, True, 0) song_ti = Label() song_ti.set_markup('<b>' + self.functions.view_encode(song.title, 22) + '</b>') song_ti.set_alignment(0.0, 0.5) song_ti.set_size_request(190, -1) song_btr_content.pack_start(song_ti, False, False, 0) length = self.functions.human_length(song.length) song_le = Label() song_le.set_markup('<span foreground="grey">' + length + '</span>') song_le.set_width_chars(5) song_btr_content.pack_start(song_le, False, True, 0) song_wdg.pack_start(song_btr, False, False, 0) song_add = Button.new_from_icon_name('list-add-symbolic', 0) song_add.set_property('relief', 2) song_add.set_size_request(14, 14) song_add.connect('clicked', queue, song) song_wdg.pack_start(song_add, False, False, 0) if i <= len(album_obj.tracks)/2: column = 0 previous_column = 0 row = a else: if previous_column == 0: a = 0 column = 1 previous_column = 1 row = a grid_songs.attach(song_wdg, column, row, 1, 1) popup.show_all()
def edit_list(self, configname: str, usblistlabel: Gtk.Label, window: Gtk.Window): tlpobject = settings.tlpconfig[configname] usblistpattern = re.compile(r'^.+?([a-f\d]{4}:[a-f\d]{4})(.+?)$') currentitems = OrderedDict() if tlpobject.get_value() != '': for item in tlpobject.get_value().split(' '): currentitems[item] = ["", True] tlpusblist = check_output(["tlp-usblist"]).decode(sys.stdout.encoding) usbitems = OrderedDict() for line in tlpusblist.splitlines(): matcher = usblistpattern.match(line) usbid = matcher.group(1) description = matcher.group(2) active = False # only add usb id once if usbid in usbitems: continue # check if item is selected if usbid in currentitems: active = True del currentitems[usbid] usbitems[usbid] = [description, active] usbitems.update(currentitems) grid = Gtk.Grid() grid.set_row_homogeneous(True) grid.set_column_spacing(12) grid.attach(Gtk.Label(''), 0, 0, 1, 1) grid.attach(Gtk.Label(label='ID', halign=Gtk.Align.START), 1, 0, 1, 1) grid.attach(Gtk.Label(label='Description', halign=Gtk.Align.START), 2, 0, 1, 1) grid.attach(Gtk.Label(''), 3, 0, 1, 1) rowindex = 2 allitems = list() selecteditems = list() for key, value in usbitems.items(): allitems.append(key) toggle = Gtk.ToggleButton(key) toggle.connect('toggled', on_button_toggled, key, selecteditems) if value[1]: toggle.set_active(True) label = Gtk.Label(value[0]) label.set_halign(Gtk.Align.START) grid.attach(toggle, 1, rowindex, 1, 1) grid.attach(label, 2, rowindex, 1, 1) rowindex += 1 addbutton = Gtk.Button(label=' Add', image=get_theme_image('list-add-symbolic', Gtk.IconSize.BUTTON)) addbutton.set_sensitive(False) addbutton.set_always_show_image(True) addentry = Gtk.Entry() addentry.set_width_chars(9) addentry.set_max_length(9) addentry.connect('changed', usb_entry_check, addbutton) addbutton.connect('clicked', add_usb_item, addentry, grid, allitems, selecteditems) addlabel = Gtk.Label(label='Add custom unattached USB IDs:', halign=Gtk.Align.START) addbox = Gtk.Box() addbox.pack_start(addentry, False, False, 0) addbox.pack_start(addbutton, False, False, 12) addbox.pack_start(Gtk.Label(''), True, True, 0) grid.attach(addlabel, 1, rowindex, 2, 1) grid.attach(addbox, 1, rowindex + 1, 2, 1) global indexstore indexstore = rowindex + 2 dialog = Gtk.Dialog('Usb devices', window, 0, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK)) contentarea = dialog.get_content_area() contentarea.set_spacing(6) contentarea.add(grid) dialog.show_all() response = dialog.run() if response == Gtk.ResponseType.OK: configvalue = ' '.join(str(item) for item in selecteditems) tlpobject.set_value(configvalue) usblistlabel.set_text(configvalue.replace(" ", "\n")) dialog.destroy()