summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--geneticone/__init__.py12
-rw-r--r--geneticone/gui/__init__.py11
-rw-r--r--geneticone/gui/main.py407
-rw-r--r--geneticone/helper.py14
-rw-r--r--geneticone/package.py20
-rwxr-xr-xmain.py25
-rw-r--r--setup.py5
7 files changed, 293 insertions, 201 deletions
diff --git a/geneticone/__init__.py b/geneticone/__init__.py
index b1ec682..5fe8e39 100644
--- a/geneticone/__init__.py
+++ b/geneticone/__init__.py
@@ -1,4 +1,16 @@
#!/usr/bin/python
+
+#
+# File: geneticone/__init__.py
+# This file is part of the Genetic/One-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006 Necoro d.M.
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by Necoro d.M. <necoro@necoro.net>
+
import sys
# insert the gentoolkit-location into syspath
diff --git a/geneticone/gui/__init__.py b/geneticone/gui/__init__.py
index 1efeeaf..ec654af 100644
--- a/geneticone/gui/__init__.py
+++ b/geneticone/gui/__init__.py
@@ -1,3 +1,14 @@
#!/usr/bin/python
+#
+# File: geneticone/gui/__init__.py
+# This file is part of the Genetic/One-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006 Necoro d.M.
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by Necoro d.M. <necoro@necoro.net>
+
from main import *
diff --git a/geneticone/gui/main.py b/geneticone/gui/main.py
index 9329ac0..ea4309c 100644
--- a/geneticone/gui/main.py
+++ b/geneticone/gui/main.py
@@ -1,5 +1,16 @@
#!/usr/bin/python
+#
+# File: geneticone/gui/main.py
+# This file is part of the Genetic/One-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006 Necoro d.M.
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by Necoro d.M. <necoro@necoro.net>
+
# our backend stuff
import geneticone
@@ -127,6 +138,95 @@ class EmergeQueue:
class PackageWindow:
"""A window with data about a specfic package."""
+ def __init__ (self, parent, cp, queue = None, version = None):
+ """Build up window contents."""
+ self.parent = parent # parent window
+ self.cp = cp # category/package
+ self.version = version # version - if not None this is used
+ self.queue = queue
+
+ # window
+ self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ self.window.set_title(cp)
+ self.window.set_modal(True)
+ self.window.set_transient_for(parent)
+ self.window.set_destroy_with_parent(True)
+ self.window.set_resizable(False)
+ self.window.set_default_size(1,1) # as small as possible
+ self.window.connect("delete-event", lambda a,b: False)
+ #self.window.connect("configure-event", self.cbSizeCheck)
+
+ # packages and installed packages
+ self.packages = geneticone.sort_package_list(geneticone.find_packages(cp, masked=True))
+ self.instPackages = geneticone.sort_package_list(geneticone.find_installed_packages(cp, masked=True))
+
+ # main structure - the table
+ self.table = gtk.Table(rows=4,columns=2)
+ self.window.add(self.table)
+
+ # version-combo-box
+ self.vCombo = self.build_vers_combo()
+ self.table.attach(self.vCombo, 0, 1, 1, 2, yoptions = gtk.FILL)
+
+ # the label (must be here, because it depends on the combo box)
+ desc = self.actual_package().get_env_var("DESCRIPTION")
+ use_markup = True
+ if not desc:
+ desc = "<no description>"
+ use_markup = False
+ else:
+ desc = "<b>"+desc+"</b>"
+ self.descLabel = gtk.Label(desc)
+ self.descLabel.set_line_wrap(True)
+ self.descLabel.set_justify(gtk.JUSTIFY_CENTER)
+ self.descLabel.set_use_markup(use_markup)
+ self.table.attach(self.descLabel, 0, 2, 0, 1, xoptions = gtk.FILL, ypadding = 10)
+
+ # the check boxes
+ checkHB = gtk.HBox (True, 1)
+ self.table.attach(checkHB, 1, 2, 1, 2, yoptions = gtk.FILL)
+
+ self.installedCheck = gtk.CheckButton()
+ self.installedCheck.connect("button-press-event", self.cb_button_pressed)
+ self.installedCheck.set_label("Installed")
+ checkHB.pack_start(self.installedCheck, True, False)
+
+ self.maskedCheck = gtk.CheckButton()
+ self.maskedCheck.connect("button-press-event", self.cb_button_pressed)
+ self.maskedCheck.set_label("Masked")
+ checkHB.pack_start(self.maskedCheck, True, False)
+
+ self.testingCheck = gtk.CheckButton()
+ self.testingCheck.connect("button-press-event", self.cb_button_pressed)
+ self.testingCheck.set_label("Testing")
+ checkHB.pack_start(self.testingCheck, True, False)
+
+ # use list
+ self.useList = self.build_use_list()
+ self.useListScroll = gtk.ScrolledWindow()
+ self.useListScroll.add(self.useList)
+ self.useListScroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) # XXX: make this work correctly
+ self.table.attach(self.useListScroll, 0, 2, 2, 3, ypadding = 10)
+
+ # buttons
+ buttonHB = gtk.HButtonBox()
+ buttonHB.set_layout(gtk.BUTTONBOX_SPREAD)
+ self.table.attach(buttonHB, 0, 2, 3, 4)
+
+ self.emergeBtn = gtk.Button("_Emerge")
+ if not self.queue: self.emergeBtn.set_sensitive(False)
+ self.cancelBtn = gtk.Button("_Cancel")
+ self.cancelBtn.connect("clicked", lambda x: self.window.destroy())
+ self.emergeBtn.connect("clicked", self.cb_emerge_clicked)
+ buttonHB.pack_start(self.emergeBtn)
+ buttonHB.pack_start(self.cancelBtn)
+
+ # current status
+ self.cb_changed(self.vCombo)
+
+ # show
+ self.window.show_all()
+
def cb_changed (self, combo, data = None):
"""Callback for the changed ComboBox.
It then rebuilds the useList and the checkboxes."""
@@ -232,100 +332,8 @@ class PackageWindow:
view.set_child_visible(True)
return view
- def __init__ (self, parent, cp, queue = None, version = None):
- """Build up window contents."""
- self.parent = parent # parent window
- self.cp = cp # category/package
- self.version = version # version - if not None this is used
- self.queue = queue
-
- # window
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.set_title(cp)
- self.window.set_modal(True)
- self.window.set_transient_for(parent)
- self.window.set_destroy_with_parent(True)
- self.window.set_resizable(False)
- self.window.set_default_size(1,1) # as small as possible
- self.window.connect("delete-event", lambda a,b: False)
- #self.window.connect("configure-event", self.cbSizeCheck)
-
- # packages and installed packages
- self.packages = geneticone.sort_package_list(geneticone.find_packages(cp, masked=True))
- self.instPackages = geneticone.sort_package_list(geneticone.find_installed_packages(cp, masked=True))
-
- # main structure - the table
- self.table = gtk.Table(rows=4,columns=2)
- self.window.add(self.table)
-
- # version-combo-box
- self.vCombo = self.build_vers_combo()
- self.table.attach(self.vCombo, 0, 1, 1, 2, yoptions = gtk.FILL)
-
- # the label (must be here, because it depends on the combo box)
- desc = self.actual_package().get_env_var("DESCRIPTION")
- use_markup = True
- if not desc:
- desc = "<no description>"
- use_markup = False
- else:
- desc = "<b>"+desc+"</b>"
- self.descLabel = gtk.Label(desc)
- self.descLabel.set_line_wrap(True)
- self.descLabel.set_justify(gtk.JUSTIFY_CENTER)
- self.descLabel.set_use_markup(use_markup)
- self.table.attach(self.descLabel, 0, 2, 0, 1, xoptions = gtk.FILL, ypadding = 10)
-
- # the check boxes
- checkHB = gtk.HBox (True, 1)
- self.table.attach(checkHB, 1, 2, 1, 2, yoptions = gtk.FILL)
-
- self.installedCheck = gtk.CheckButton()
- self.installedCheck.connect("button-press-event", self.cb_button_pressed)
- self.installedCheck.set_label("Installed")
- checkHB.pack_start(self.installedCheck, True, False)
-
- self.maskedCheck = gtk.CheckButton()
- self.maskedCheck.connect("button-press-event", self.cb_button_pressed)
- self.maskedCheck.set_label("Masked")
- checkHB.pack_start(self.maskedCheck, True, False)
-
- self.testingCheck = gtk.CheckButton()
- self.testingCheck.connect("button-press-event", self.cb_button_pressed)
- self.testingCheck.set_label("Testing")
- checkHB.pack_start(self.testingCheck, True, False)
-
- # use list
- self.useList = self.build_use_list()
- self.useListScroll = gtk.ScrolledWindow()
- self.useListScroll.add(self.useList)
- self.useListScroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) # XXX: make this work correctly
- self.table.attach(self.useListScroll, 0, 2, 2, 3, ypadding = 10)
-
- # buttons
- buttonHB = gtk.HButtonBox()
- buttonHB.set_layout(gtk.BUTTONBOX_SPREAD)
- self.table.attach(buttonHB, 0, 2, 3, 4)
-
- self.emergeBtn = gtk.Button("_Emerge")
- if not self.queue: self.emergeBtn.set_sensitive(False)
- self.cancelBtn = gtk.Button("_Cancel")
- self.cancelBtn.connect("clicked", lambda x: self.window.destroy())
- self.emergeBtn.connect("clicked", self.cb_emerge_clicked)
- buttonHB.pack_start(self.emergeBtn)
- buttonHB.pack_start(self.cancelBtn)
-
- # current status
- self.cb_changed(self.vCombo)
-
- # show
- self.window.show_all()
-
class SearchWindow:
"""A window showing the results of a search process."""
- def cb_ok_btn_clicked (self, button, data = None):
- self.window.destroy()
- self.jump_to(self.list[self.combo.get_active()])
def __init__ (self, parent, list, jump_to):
# window
@@ -355,10 +363,122 @@ class SearchWindow:
self.window.show_all()
+ def cb_ok_btn_clicked (self, button, data = None):
+ self.window.destroy()
+ self.jump_to(self.list[self.combo.get_active()])
class MainWindow:
"""Application main window."""
+ def __init__ (self):
+ """Build up window"""
+
+ # window
+ self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ self.window.set_title("Genetic/One")
+ self.window.connect("delete_event", self.cb_delete)
+ self.window.connect("destroy", self.cb_destroy)
+ self.window.set_border_width(2)
+ self.window.set_geometry_hints (self.window, min_width = 600, min_height = 800, max_height = gtk.gdk.screen_height(), max_width = gtk.gdk.screen_width())
+ self.window.set_resizable(True)
+
+ # main vb
+ vb = gtk.VBox(False, 1)
+ self.window.add(vb)
+
+ # menubar
+ menubar = self.create_main_menu()
+ vb.pack_start(menubar, False)
+
+ # search
+ self.searchEntry = gtk.Entry()
+ self.searchBtn = gtk.Button("_Search")
+ self.searchBtn.connect("clicked", self.cb_search_clicked)
+ hbSearch = gtk.HBox(False, 5)
+ hbSearch.pack_start(self.searchEntry, True, True)
+ hbSearch.pack_start(self.searchBtn, False, False)
+ vb.pack_start(hbSearch, False, False, 5)
+
+ # VPaned holding the lists and the Terminal
+ vpaned = gtk.VPaned()
+ vpaned.set_position(400)
+ vb.pack_start(vpaned, True, True)
+
+ # a HB holding the lists
+ hb = gtk.HBox(True, 5)
+ hbFrame = gtk.Frame()
+ hbFrame.add(hb)
+ hbFrame.set_shadow_type(gtk.SHADOW_IN)
+ vpaned.pack1(hbFrame, shrink = True, resize = True)
+
+ self.scroll_1 = gtk.ScrolledWindow()
+ self.scroll_2 = gtk.ScrolledWindow()
+ self.scroll_1.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+ self.scroll_2.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+ hb.pack_start(self.scroll_1, True, True)
+ hb.pack_start(self.scroll_2, True, True)
+
+ # create cat List
+ self.catList = self.create_cat_list()
+ self.scroll_1.add(self.catList)
+
+ # create pkg list
+ self.pkgList = self.create_pkg_list()
+ self.scroll_2.add(self.pkgList)
+ # queue list
+ queueVB = gtk.VBox(False, 0)
+ hb.pack_start(queueVB, True, True)
+
+ emergeStore = gtk.TreeStore(str)
+ self.emergeView = gtk.TreeView(emergeStore)
+ cell = gtk.CellRendererText()
+ col = gtk.TreeViewColumn("Queue", cell, text = 0)
+ self.emergeView.append_column(col)
+ self.emergeView.connect("row-activated", self.cb_row_activated, emergeStore)
+ queueVB.pack_start(self.emergeView, True, True)
+
+ # buttons right unter the queue list
+ buttonBox = gtk.HButtonBox()
+ queueVB.pack_start(buttonBox, False)
+ self.emergeBtn = gtk.Button("_Emerge")
+ self.emergeBtn.connect("clicked", self.cb_emerge_clicked)
+ self.unmergeBtn = gtk.Button("_Unmerge")
+ self.unmergeBtn.connect("clicked", self.cb_emerge_clicked)
+ self.removeBtn = gtk.Button("_Remove")
+ self.removeBtn.connect("clicked", self.cb_remove_clicked)
+ buttonBox.pack_start(self.emergeBtn)
+ buttonBox.pack_start(self.removeBtn)
+ buttonBox.pack_start(self.unmergeBtn)
+
+ # the terminal
+ term = vte.Terminal()
+ term.set_scrollback_lines(1024)
+ term.set_scroll_on_output(True)
+ # XXX why is this not working with the colors
+ term.set_color_background(gtk.gdk.color_parse("white"))
+ term.set_color_foreground(gtk.gdk.color_parse("black"))
+ termBox = gtk.HBox(False, 0)
+ termScroll = gtk.VScrollbar(term.get_adjustment())
+ termBox.pack_start(term, True, True)
+ termBox.pack_start(termScroll, False)
+
+ termFrame = gtk.Frame("Console")
+ termFrame.set_shadow_type(gtk.SHADOW_IN)
+ termFrame.add(termBox)
+ vpaned.pack2(termFrame, shrink = True, resize = True)
+
+ # the status line
+ self.statusLabel = gtk.Label("Genetic/One")
+ self.statusLabel.set_alignment(0.0,0.7)
+ self.statusLabel.set_single_line_mode(True)
+ vb.pack_start(self.statusLabel, False, False)
+
+ # show
+ self.window.show_all()
+
+ # set emerge queue
+ self.queue = EmergeQueue(console=term, tree = emergeStore, packages = self.packages)
+
def cb_delete (self, widget, data = None):
"""Returns false -> window is deleted."""
return False
@@ -514,109 +634,6 @@ class MainWindow:
"""Is called when we want to jump to a specific package."""
PackageWindow(self.window, cp, self.queue)
- def __init__ (self):
- """Build up window"""
-
- # window
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.set_title("Genetic/One")
- self.window.connect("delete_event", self.cb_delete)
- self.window.connect("destroy", self.cb_destroy)
- self.window.set_border_width(2)
- self.window.set_geometry_hints (self.window, min_width = 600, min_height = 800, max_height = gtk.gdk.screen_height(), max_width = gtk.gdk.screen_width())
- self.window.set_resizable(True)
-
- # main vb
- vb = gtk.VBox(False, 1)
- self.window.add(vb)
-
- # menubar
- menubar = self.create_main_menu()
- vb.pack_start(menubar, False)
-
- # search
- self.searchEntry = gtk.Entry()
- self.searchBtn = gtk.Button("_Search")
- self.searchBtn.connect("clicked", self.cb_search_clicked)
- hbSearch = gtk.HBox(False, 5)
- hbSearch.pack_start(self.searchEntry, True, True)
- hbSearch.pack_start(self.searchBtn, False, False)
- vb.pack_start(hbSearch, False, False, 5)
-
- # VPaned holding the lists and the Terminal
- vpaned = gtk.VPaned()
- vpaned.set_position(400)
- vb.pack_start(vpaned, True, True)
-
- # a HB holding the lists
- hb = gtk.HBox(True, 5)
- hbFrame = gtk.Frame()
- hbFrame.add(hb)
- hbFrame.set_shadow_type(gtk.SHADOW_IN)
- vpaned.pack1(hbFrame, shrink = True, resize = True)
-
- self.scroll_1 = gtk.ScrolledWindow()
- self.scroll_2 = gtk.ScrolledWindow()
- self.scroll_1.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
- self.scroll_2.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
- hb.pack_start(self.scroll_1, True, True)
- hb.pack_start(self.scroll_2, True, True)
-
- # create cat List
- self.catList = self.create_cat_list()
- self.scroll_1.add(self.catList)
-
- # create pkg list
- self.pkgList = self.create_pkg_list()
- self.scroll_2.add(self.pkgList)
- # queue list
- queueVB = gtk.VBox(False, 0)
- hb.pack_start(queueVB, True, True)
-
- emergeStore = gtk.TreeStore(str)
- self.emergeView = gtk.TreeView(emergeStore)
- cell = gtk.CellRendererText()
- col = gtk.TreeViewColumn("Queue", cell, text = 0)
- self.emergeView.append_column(col)
- self.emergeView.connect("row-activated", self.cb_row_activated, emergeStore)
- queueVB.pack_start(self.emergeView, True, True)
-
- # buttons right unter the queue list
- buttonBox = gtk.HButtonBox()
- queueVB.pack_start(buttonBox, False)
- self.emergeBtn = gtk.Button("_Emerge")
- self.emergeBtn.connect("clicked", self.cb_emerge_clicked)
- self.unmergeBtn = gtk.Button("_Unmerge")
- self.unmergeBtn.connect("clicked", self.cb_emerge_clicked)
- self.removeBtn = gtk.Button("_Remove")
- self.removeBtn.connect("clicked", self.cb_remove_clicked)
- buttonBox.pack_start(self.emergeBtn)
- buttonBox.pack_start(self.removeBtn)
- buttonBox.pack_start(self.unmergeBtn)
-
- # the terminal
- term = vte.Terminal()
- term.set_scrollback_lines(1024)
- term.set_scroll_on_output(True)
- # XXX why is this not working with the colors
- term.set_color_background(gtk.gdk.color_parse("white"))
- term.set_color_foreground(gtk.gdk.color_parse("black"))
- termBox = gtk.HBox(False, 0)
- termScroll = gtk.VScrollbar(term.get_adjustment())
- termBox.pack_start(term, True, True)
- termBox.pack_start(termScroll, False)
-
- termFrame = gtk.Frame("Console")
- termFrame.set_shadow_type(gtk.SHADOW_IN)
- termFrame.add(termBox)
- vpaned.pack2(termFrame, shrink = True, resize = True)
-
- # show
- self.window.show_all()
-
- # set emerge queue
- self.queue = EmergeQueue(console=term, tree = emergeStore, packages = self.packages)
-
def main (self):
"""Main."""
gobject.threads_init()
diff --git a/geneticone/helper.py b/geneticone/helper.py
index 1b6fe71..e59ca98 100644
--- a/geneticone/helper.py
+++ b/geneticone/helper.py
@@ -1,5 +1,16 @@
#!/usr/bin/python
+#
+# File: geneticone/helper.py
+# This file is part of the Genetic/One-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006 Necoro d.M.
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by Necoro d.M. <necoro@necoro.net> et.al.
+
from geneticone import *
import geneticone
@@ -26,8 +37,7 @@ def find_lambda (name):
def geneticize_list (list_of_packages):
'''to convert the output of each gentoolkit helper function is a list of *geneticone* Package objects
'''
- cpvs=[x.get_cpv() for x in list_of_packages]
- return [geneticone.Package(x) for x in cpvs]
+ return [geneticone.Package(x) for x in list_of_packages]
def find_best_match (search_key, only_installed = False):
"""Finds the best match in the portage tree."""
diff --git a/geneticone/package.py b/geneticone/package.py
index 6ec2299..4e18392 100644
--- a/geneticone/package.py
+++ b/geneticone/package.py
@@ -1,5 +1,16 @@
#!/usr/bin/python
+#
+# File: geneticone/package.py
+# This file is part of the Genetic/One-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006 Necoro d.M.
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by Necoro d.M. <necoro@necoro.net>
+
from geneticone import *
import gentoolkit
@@ -10,6 +21,8 @@ class Package (gentoolkit.Package):
"""This is just a subclass of the Package-class of gentoolkit."""
def __init__ (self, cpv):
+ if isinstance(cpv, gentoolkit.Package):
+ cpv = cpv.get_cpv()
gentoolkit.Package.__init__(self, cpv)
def get_mask_status(self):
@@ -154,6 +167,13 @@ class Package (gentoolkit.Package):
return True
return False
+ def matches (self, criterion):
+ """This checks, whether this package matches a specific verisioning criterion - e.g.: "<=net-im/foobar-1.2"."""
+ if portage.match_from_list(criterion, [self.get_cpv()]) == []:
+ return False
+ else:
+ return True
+
def _parse_deps(self,deps,curuse=[],level=0):
"""Modified method "_parse_deps" of gentoolkit.Package.
Do NOT ignore blocks."""
diff --git a/main.py b/main.py
index f1f3b7d..fa81c58 100755
--- a/main.py
+++ b/main.py
@@ -1,7 +1,28 @@
#!/usr/bin/python
+#
+# File: main.py
+# This file is part of the Genetic/One-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006 Necoro d.M.
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by Necoro d.M. <necoro@necoro.net>
+
from geneticone.gui import MainWindow
+import sys
if __name__ == "__main__":
- m = MainWindow()
- m.main()
+ if len(sys.argv) > 1 and sys.argv[1] in ("--help","--version","-h","-v"):
+ print """Genetic/One SVN-Version
+Copyright (C) 2006 Necoro d.M.
+This is free software. You may redistribute copies of it under the terms of
+the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Necoro d.M. <necoro@necoro.net>"""
+ else:
+ m = MainWindow()
+ m.main()
diff --git a/setup.py b/setup.py
index b7612c0..08ee352 100644
--- a/setup.py
+++ b/setup.py
@@ -6,8 +6,9 @@ from distutils.core import setup, Extension
setup(name="Genetic/One",
version="SVN",
- author="Necoro d.M. et.al.",
- author_email="geneticone@projects.necoro.net",
+ author="Necoro d.M.",
+ license="GPLv2",
+ author_email="necoro@necoro.net",
packages=["geneticone", "geneticone.gui"],
#ext_modules=[thread]
)