예제 #1
0
파일: gtkpcilist.py 프로젝트: d4nj1/TLPUI
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()
예제 #2
0
파일: renderer.py 프로젝트: palob/formiko
    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
예제 #3
0
 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)
예제 #4
0
    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)
예제 #5
0
    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
예제 #6
0
 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()
예제 #7
0
 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('')
예제 #8
0
    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()
예제 #9
0
    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)
예제 #10
0
 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()
예제 #11
0
    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()
예제 #12
0
 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()
예제 #13
0
    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)
예제 #14
0
    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)
예제 #15
0
파일: sidebar.py 프로젝트: zluca/deluge
    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()
예제 #16
0
파일: renderer.py 프로젝트: ondratu/formiko
    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
예제 #17
0
    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)
예제 #18
0
 def get_string_from_label(label: Gtk.Label) -> str:
     """
     Returns the displayed string from a label
     :return: the label string
     """
     return label.get_text()
예제 #19
0
파일: renderer.py 프로젝트: ondratu/formiko
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)
예제 #21
0
    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)
예제 #22
0
	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())
예제 #23
0
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()
예제 #24
0
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()
예제 #25
0
파일: renderer.py 프로젝트: palob/formiko
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("&", "&amp;"))
        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)
예제 #26
0
    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()
예제 #27
0
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()