Ejemplo n.º 1
0
    def __init__(self, feed_editor, element=None, is_group=False):
        self.feed_editor = feed_editor
        self.element = element

        widgets = gtk.glade.XML(main.gladefile, "version")

        # attributes = g.ListStore(str, str)
        # attr_view = widgets.get_widget('attributes')
        # attr_view.set_model(attributes)

        # attr_view.append_column(g.TreeViewColumn('Name'))
        # attr_view.append_column(g.TreeViewColumn('Value'))

        inherit_arch = widgets.get_widget("inherit_arch")

        def shade_os_cpu():
            s = not inherit_arch.get_active()
            widgets.get_widget("cpu").set_sensitive(s)
            widgets.get_widget("os").set_sensitive(s)
            if s:
                cpu = widgets.get_widget("cpu").get_active_text()
            else:
                cpu = None
                if element:
                    parent = element.parentNode
                    while parent.nodeType == Node.ELEMENT_NODE and not cpu:
                        arch = parent.getAttribute("arch")
                        if arch and "-" in arch:
                            cpu = arch.split("-")[1]
                        parent = parent.parentNode

            if cpu == "src":
                widgets.get_widget("source_frame").show()
            else:
                widgets.get_widget("source_frame").hide()
                command = widgets.get_widget("compile_command")
                if command.get_text() == "":
                    command.set_text('"$SRCDIR/configure" --prefix="$DISTDIR" && make install')

        inherit_arch.connect("toggled", lambda cb: shade_os_cpu())
        widgets.get_widget("cpu").connect("changed", lambda cb: shade_os_cpu())

        main_menu = widgets.get_widget("main_binary")
        doc_menu = widgets.get_widget("doc_dir")

        if element:
            if element.localName == "group":
                is_group = True
                id = None
            else:
                id = element.getAttribute("id")

            version = element.getAttribute("version") + (element.getAttribute("version-modifier") or "")
            widgets.get_widget("version_number").set_text(version)
            widgets.get_widget("released").set_text(element.getAttribute("released"))

            widgets.get_widget("compile_command").set_text(element.getAttributeNS(XMLNS_COMPILE, "command"))
            widgets.get_widget("compile_binary_main").set_text(element.getAttributeNS(XMLNS_COMPILE, "binary-main"))
            widgets.get_widget("compile_binary_lib_mappings").set_text(
                element.getAttributeNS(XMLNS_COMPILE, "binary-lib-mappings")
            )

            main_binary = element.getAttribute("main")
            doc_dir = element.getAttribute("doc-dir")

            stability_menu = widgets.get_widget("stability")
            stability = element.getAttribute("stability")
            if stability:
                i = 0
                for row in stability_menu.get_model():
                    if row[0].lower() == stability:
                        stability_menu.set_active(i)
                        break
                    i += 1
            else:
                stability_menu.set_active(0)

            main.combo_set_text(widgets.get_widget("license"), element.getAttribute("license"))
            arch = element.getAttribute("arch")
            if arch:
                arch_os, arch_cpu = arch.split("-")
                main.combo_set_text(widgets.get_widget("os"), arch_os)
                main.combo_set_text(widgets.get_widget("cpu"), arch_cpu)
                inherit_arch.set_active(False)
            else:
                widgets.get_widget("os").set_active(0)
                widgets.get_widget("cpu").set_active(0)

            def ok():
                self.update_impl(element, widgets)

        else:
            released = widgets.get_widget("released")

            id = "."
            if is_group:
                widgets.get_widget("version_number").set_text("")
                released.set_text("")
            else:
                widgets.get_widget("version_number").set_text("0.1-pre")
                # released.set_text(time.strftime('%Y-%m-%d'))

            widgets.get_widget("cpu").set_active(0)
            widgets.get_widget("os").set_active(0)
            widgets.get_widget("stability").set_active(0)
            main_binary = None
            doc_dir = None

            def ok():
                if is_group:
                    element_name = "group"
                else:
                    element_name = "implementation"
                element = create_element(self.feed_editor.doc.documentElement, element_name)
                if not is_group:
                    element.setAttribute("id", ".")
                try:
                    self.update_impl(element, widgets)
                except:
                    remove_element(element)
                    raise

        shade_os_cpu()

        self.is_group = is_group

        id_label = widgets.get_widget("id_label")

        if is_group:
            id_label.set_text("(group)")
        elif id:
            id_label.set_text(id)
            if id.startswith(".") or id.startswith("/"):
                id_label.set_sensitive(True)
        else:
            id_label.set_text("-")

        def resp(dialog, r):
            if r in (g.RESPONSE_OK, RESPONSE_SAVE_AND_TEST):
                ok()
                self.feed_editor.update_version_model()
            if r == RESPONSE_SAVE_AND_TEST:
                is_src = bool(widgets.get_widget("source_frame").flags() & gtk.VISIBLE)
                self.feed_editor.save(lambda: self.test(element, is_src))
            else:
                dialog.destroy()

        if is_group and element:
            # Find a cached implementation for getting main
            for x in child_elements(element):
                if x.localName == "implementation" and x.namespaceURI == XMLNS_INTERFACE:
                    id = x.getAttribute("id")
                    try:
                        if id and (id.startswith(".") or id.startswith("/") or main.stores.lookup(id)):
                            break
                    except NotStored, ex:
                        pass
Ejemplo n.º 2
0
	def __init__(self, feed_editor, parent, element = None):
		self.feed_editor = feed_editor
		self.element = element

		self.widgets = gtk.glade.XML(main.gladefile, 'requires')

		uri = self.widgets.get_widget('requires_uri')
		stream = os.popen('0launch --list')
		self.known_ifaces = [line.strip() for line in stream if not line.startswith('/')]
		self.known_ifaces.sort()
		stream.close()

		for x in self.known_ifaces:
			uri.append_text(x)

		uri.connect('changed', self.update_uri)

		self.version_element = None	# Last <version> child
		self.env_element = None		# Last <environment> child

		env_combo = self.widgets.get_widget('env_mode')
		main.combo_set_text(env_combo, 'Prepend')
		def mode_changed(combo):
			self.widgets.get_widget('env_default').set_sensitive(env_combo.get_active_text() != 'Replace')
		env_combo.connect('changed', mode_changed)

		if element:
			main.combo_set_text(uri, element.getAttribute('interface'))

			for child in child_elements(element):
				if child.namespaceURI != XMLNS_INTERFACE: continue
				if child.localName == 'version':
					self.version_element = child
				elif child.localName == 'environment':
					self.env_element = child

			if self.version_element:
				self.widgets.get_widget('before').set_text(self.version_element.getAttribute('before') or '')
				self.widgets.get_widget('not_before').set_text(self.version_element.getAttribute('not-before') or '')
			if self.env_element:
				for x in ['name', 'insert']:
					main.combo_set_text(self.widgets.get_widget('env_' + x), self.env_element.getAttribute(x))
				self.widgets.get_widget('env_default').set_text(self.env_element.getAttribute('default') or '')
				main.combo_set_text(env_combo,
						    self.env_element.getAttribute('mode').capitalize() or 'Prepend')

			def ok():
				self.update_element(element, self.widgets)
		else:
			def ok():
				element = create_element(parent, 'requires')
				self.update_element(element, self.widgets)

		def resp(dialog, r):
			if r == g.RESPONSE_OK:
				ok()
				self.feed_editor.update_version_model()
			dialog.destroy()

		mode_changed(env_combo)
		dialog = self.widgets.get_widget('requires')
		dialog.connect('response', resp)
Ejemplo n.º 3
0
                    relbasedir = dirpath[len(cached_impl) + 1 :]
                    for file in filenames:
                        info = os.lstat(os.path.join(dirpath, file))
                        if info.st_mode & 0111:
                            new = os.path.join(relbasedir, file)
                            possible_mains.append(new)
                    for d in dirnames[:]:
                        if d.startswith("."):
                            dirnames.remove(d)
                        else:
                            possible_docs.append(os.path.join(relbasedir, d))
                for option in sorted(possible_mains):
                    main_menu.append_text(option)
                for option in sorted(possible_docs):
                    doc_menu.append_text(option)
        main.combo_set_text(main_menu, main_binary)
        main.combo_set_text(doc_menu, doc_dir)

        dialog = widgets.get_widget("version")
        dialog.connect("response", resp)

    def update_impl(self, element, widgets):
        version = widgets.get_widget("version_number").get_text()
        released = widgets.get_widget("released").get_text()
        inherit_arch = widgets.get_widget("inherit_arch")

        def get_combo(name):
            widget = widgets.get_widget(name)
            return widget.get_active_text()

        cpu = get_combo("cpu")