root/trunk/src/CreateKit.py @ 3

Revision 3, 9.1 KB (checked in by pcabido, 5 years ago)
  • Property svn:executable set to *
Line 
1# -*- coding: utf-8 -*-
2#from metapackagehandler import mtpkgHandler
3#from repositoryhandler import repHandler
4import warnings
5warnings.filterwarnings("ignore", "apt API not stable yet", FutureWarning)
6
7import pygtk
8pygtk.require('2.0')
9import gtk
10import gtk.glade
11
12import os
13import sys
14import gobject
15import threading
16import random
17import time
18
19import apt
20import apt_pkg
21
22from util import util
23from util import aptutil
24from util import progress
25
26__title__ = "Criador de Kits"
27__version__ = "0.0.1"
28__authors__= ["Paulo Cabido <paulo.cabido@gmail.com>"]
29
30gtk.gdk.threads_init()
31apt_pkg.init()
32
33class ProgressBar():
34    def __init__(self, dialogName, pbobj):
35        self._progressbar = pbobj
36        self._dialog = dialogName
37   
38    def progressbarTimeout(self, pbobj):
39        pbobj.pulse()
40        return True
41   
42    def start(self):
43        self._dialog.show()
44        self._timer = gobject.timeout_add(100, self.progressbarTimeout, self._progressbar)
45       
46    def stop(self):
47        gobject.source_remove(self._timer)
48        self._timer = 0
49        self._dialog.hide()
50
51
52class CreateKitGTK(threading.Thread):
53   
54    def delete(self, widget, event, data=None):
55        gtk.main_quit()
56        return False
57   
58    def loadImage(self, image, path):
59        try:
60            image.set_from_file(path)
61        except:
62            pass
63   
64    #
65    # Package list
66    #       
67    def setupPackageList(self, ignore=True):
68        self.cpbar = ProgressBar(self.dialogProgress, self.pbar)
69        self.cpbar.start()
70           
71        self.treeStore = gtk.TreeStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
72       
73        time.sleep(1)
74        cache = apt_pkg.GetCache(progress.TextProgress())
75        records = apt_pkg.GetPkgRecords(cache)
76        packages = cache.Packages
77        pkgList = []
78        #while not self.stopthread.isSet():
79        count=0
80        gtk.gdk.threads_enter()
81        for pkg in packages:
82            for pkgInfo in pkg.VersionList:
83                for packFile, index in pkgInfo.FileList:
84                    count += 1
85                    print count
86                    records.Lookup((packFile,index))
87                    if packFile.IndexType != 'Debian Package Index' and ignore:
88                        continue
89                    pkgList.append((None,(None, pkg.Name, pkgInfo.VerStr, records.ShortDesc)))
90                   
91                    #self.pbar.set_fraction(util.pbarFraction(count, cache.PackageCount))
92                    #print self.pbar.get_fraction()
93                   
94                    #print (None, pkg.Name, pkgInfo.VerStr, records.ShortDesc, packFile.IndexType)             
95       
96        pkgList.sort()
97        for elm in pkgList:
98            self.treeStore.append(elm[0], (elm[1][0], elm[1][1], elm[1][2], elm[1][3]))
99       
100        time.sleep(1)
101       
102        self.rendererText = gtk.CellRendererText()
103       
104        self.rendererToggle = gtk.CellRendererToggle()
105        self.rendererToggle.set_property('activatable', True)
106        self.rendererToggle.connect( 'toggled', self.colToggledClicked, self.treeStore )
107       
108        self.colToggle = gtk.TreeViewColumn("", self.rendererToggle )
109        self.colToggle.add_attribute( self.rendererToggle, "active", 0)
110       
111        self.treeview.append_column(self.colToggle)
112       
113        self.treeview.append_column(gtk.TreeViewColumn("Pacote", self.rendererText, text=1))
114        self.treeview.append_column(gtk.TreeViewColumn("Versão", self.rendererText, text=2))
115        self.treeview.append_column(gtk.TreeViewColumn("Descrição", self.rendererText, text=3))
116       
117        self.treeview.set_model(self.treeStore)
118       
119        gtk.gdk.threads_leave()
120        self.stopthread.set()
121       
122        self.stopthread.set()
123       
124        #self.window.set_sensitive(True)
125       
126    def colToggledClicked( self, cell, path, model ):
127        """
128        Sets the toggled state on the toggle button to true or false.
129        """
130       
131        model[path][0] = not model[path][0]
132        return
133
134    #
135    # aboutdialog
136    #
137   
138    def closeAbout(self, widget, data=None):
139        self.aboutDialog.hide()
140        return True
141   
142    def showAbout(self, widget, data=None):
143        """
144        Create the about dialog.
145        @param widget: Current widget
146        @type widget: gtk widget
147        """
148       
149        print widget
150        #self.aboutDialogIcon = gtk.gdk.pixbuf_new_from_file("pixmaps/kitsalinex.svg")
151        self.aboutDialog = self.wTree.get_widget("aboutdialogCriarkits")
152        self.aboutDialog.set_name(__title__)
153        self.aboutDialog.set_version(__version__)
154        #self.aboutDialog.set_comments("GTK frontend para Criar Kits.")
155        #self.aboutDialog.set_copyright("Copyright (C) Paulo Cabido 2008")
156        self.aboutDialog.set_authors(__authors__)
157        #self.aboutDialog.set_logo(self.aboutDialogIcon)
158       
159        self.aboutDialog.connect("destroy", self.closeAbout)
160        self.aboutDialog.connect("delete_event", self.closeAbout)
161        self.aboutDialog.connect("response", self.closeAbout)
162        self.aboutDialog.show()
163       
164    #
165    # __init__
166    #
167   
168    def __init__(self):
169        self.gladefile = "CreateKit.glade"
170        self.wTree = gtk.glade.XML(self.gladefile)
171       
172        self.stopthread = threading.Event()
173       
174        #botoes do notebook
175        self.buttonNext = self.wTree.get_widget("buttonNext")
176        self.buttonNext2 = self.wTree.get_widget("buttonNext2")
177        self.buttonNext3 = self.wTree.get_widget("buttonNext3")
178        self.buttonNext4 = self.wTree.get_widget("buttonNext4")
179        self.buttonBack = self.wTree.get_widget("buttonBack")
180        self.buttonBack2 = self.wTree.get_widget("buttonBack2")
181        self.buttonBack3 = self.wTree.get_widget("buttonBack3")
182        self.buttonBack4 = self.wTree.get_widget("buttonBack4")
183       
184        self.buttonQuit = self.wTree.get_widget("buttonQuit")
185        self.buttonHelp = self.wTree.get_widget("buttonHelp")
186       
187        self.notebook = self.wTree.get_widget("notebook")
188        self.imageDadosGerais = self.wTree.get_widget("imageDadosGerais")
189        self.imageDesc = self.wTree.get_widget("imageDesc")
190        self.imagePackages = self.wTree.get_widget("imagePackages")
191        self.imagePostInst = self.wTree.get_widget("imagePostInst")
192        self.imageGenerate = self.wTree.get_widget("imageGenerate")
193        self.treeview = self.wTree.get_widget("treeviewPackages")
194       
195        self.cmbArch = self.wTree.get_widget("cmbArch")
196        self.cmbSection = self.wTree.get_widget("Section")
197        self.cmbPriority = self.wTree.get_widget("Priority")
198       
199        self.aboutMenu = self.wTree.get_widget("aboutMenu")
200        self.quitMenu = self.wTree.get_widget("quitMenu")   
201           
202        self.window_progress = self.wTree.get_widget("window_progress")
203        self.dialogProgress = self.wTree.get_widget("dialogProgress")
204        self.pbar = self.wTree.get_widget("pbarCache")
205       
206        self.window = self.wTree.get_widget("window_criarkit")
207        if (self.window):
208            self.window.set_title(__title__)
209            self.window.connect("destroy", gtk.main_quit)
210            self.window.connect("delete_event", self.delete)
211           
212            self.buttonQuit.connect("clicked", gtk.main_quit)
213           
214            #define as imagens dos tabs
215            self.loadImage(self.imageDadosGerais, "icons/package_development.png")
216            self.loadImage(self.imageDesc, "icons/emblem-documents.png")
217            self.loadImage(self.imagePackages, "icons/file-roller.png")
218            self.loadImage(self.imagePostInst, "icons/emblem-package.png")
219            self.loadImage(self.imageGenerate, "icons/application-x-deb.png")
220           
221            #notebook navigation
222            self.buttonNext.connect("clicked", lambda w: self.notebook.next_page())
223            self.buttonNext2.connect("clicked", lambda w: self.notebook.next_page())
224            self.buttonNext3.connect("clicked", lambda w: self.notebook.next_page())
225            self.buttonNext4.connect("clicked", lambda w: self.notebook.next_page())
226            self.buttonBack.connect("clicked", lambda w: self.notebook.prev_page())
227            self.buttonBack2.connect("clicked", lambda w: self.notebook.prev_page())
228            self.buttonBack3.connect("clicked", lambda w: self.notebook.prev_page())
229            self.buttonBack4.connect("clicked", lambda w: self.notebook.prev_page())
230            #o glade poe o expand False, e preciso mudar manualmente
231            for n in range(self.notebook.get_n_pages()):
232                self.notebook.set_tab_label_packing(self.notebook.get_nth_page(n), True, True, gtk.PACK_START)
233               
234            #menubar
235            self.quitMenu.connect('activate', gtk.main_quit)
236            self.aboutMenu.connect('activate', self.showAbout)
237           
238            #treeview
239            #self.cpbar = ProgressBar(self.dialogProgress, self.pbar)
240            #self.cpbar.start()
241            threading.Thread(name="self.setupPackageList", target=self.setupPackageList).start()
242           
243            #self.ProgTest()
244       
245def main():
246    gtk.main()
247    return 0
248
249if __name__ == "__main__":
250    hwg = CreateKitGTK()
251    main()
Note: See TracBrowser for help on using the browser.