コード例 #1
0
 def _setupfields(self):
     numfields = len(self.fields)
     for fnum in range(numfields):
         fname = self.fields[fnum]
         entry = KLineEdit('', self)
         self.entries[fname] = entry
         self.grid.addWidget(entry, fnum + 1, 1)
         label = QLabel(entry, fname, self, fname)
         self.grid.addWidget(label, fnum + 1, 0)
     self.insButton = KPushButton('insert/new', self)
     self.updButton = KPushButton('update', self)
     self.grid.addWidget(self.insButton, numfields, 0)
     self.grid.addWidget(self.updButton, numfields, 1)
コード例 #2
0
    def __init__(self, parent, name='SuiteTraitComboBox'):
        QFrame.__init__(self, parent, name)
        self.app = get_application_pointer()
        self.conn = self.app.conn
        self.suiteCursor = Suites(self.conn)
        self.suites = self.suiteCursor.list()
        self.traits = Traits(self.conn, self.suites[0])
        self.scombo = KComboBox(self, 'SuiteComboBox')
        self.scombo.insertStrList(self.suites)
        self.tcombo = KComboBox(self, 'TypeComboBox')
        self.tcombo.insertStrList(['template', 'script'])
        self.trcombo = KComboBox(self, 'TraitComboBox')
        self.update_btn = KPushButton('update', self)
        self.listView = TraitListView(self)
        self.vbox = QVBoxLayout(self)
        for attribute in [
                'listView', 'scombo', 'tcombo', 'trcombo', 'update_btn'
        ]:
            widget = getattr(self, attribute)
            self.vbox.addWidget(widget)
        # we need to redo the signals and the methods that are called
        self.connect(self.scombo, SIGNAL('activated(int)'), self.update_traits)

        self.connect(self.update_btn, SIGNAL('clicked()'),
                     self.refreshlistView)
コード例 #3
0
class TestConfigTab(QWidget):
    def __init__(self, parent, name='TestConfigTab'):
        QWidget.__init__(self, parent, name)
        self.grid = QGridLayout(self, 2, 1, 0, 1, 'TestConfigTabLayout')
        self.textbrowser = KTextBrowser(self)
        self.grid.addWidget(self.textbrowser, 0, 0)
        self.button = KPushButton(self)
        self.button.setText('test get_config')
        self.grid.addWidget(self.button, 1, 0)
        
    def set_config(self, cfg):
        tfile = StringIO()
        cfg.write(tfile)
        tfile.seek(0)
        text = tfile.read()
        self.textbrowser.setText(text)
コード例 #4
0
 def __init__(self, app, parent):
     KMainWindow.__init__(self, parent)
     dbwidget(self, app)
     self.manager = InstallerManager(self.conn)
     self.mainView = KPushButton('hello there', self)
     self.setCentralWidget(self.mainView)
     self.setCaption('Installer Management')
     self.show()
コード例 #5
0
 def __init__(self, parent, name='TestConfigTab'):
     QWidget.__init__(self, parent, name)
     self.grid = QGridLayout(self, 2, 1, 0, 1, 'TestConfigTabLayout')
     self.textbrowser = KTextBrowser(self)
     self.grid.addWidget(self.textbrowser, 0, 0)
     self.button = KPushButton(self)
     self.button.setText('test get_config')
     self.grid.addWidget(self.button, 1, 0)
コード例 #6
0
class BaseGuestWorksFrame(QFrame):
    def __init__(self, parent, name='BaseGuestWorksFrame'):
        QFrame.__init__(self, parent, name)
        self.works_entries = []
        margin = 0
        space = 1
        self.grid = QGridLayout(self, 2, 6, margin, space)
        self.works_lbl = QLabel('Works', self)
        self.grid.addMultiCellWidget(self.works_lbl, 0, 0, 0, 4)
        self.add_works_btn = KPushButton('+', self, 'add_works_button')
        self.add_works_btn.connect(self.add_works_btn,
                                   SIGNAL('clicked()'),
                                   self.add_works_entries)
        self.grid.addWidget(self.add_works_btn, 0, 5)
        
    def add_works_entries(self):
        frame = BaseWorksEntryFrame(self)
        row = len(self.works_entries) + 1
        self.grid.addMultiCellWidget(frame, row, row, 0, -1)
        self.works_entries.append(frame)
        frame.show()
コード例 #7
0
 def __init__(self, parent, name='BaseGuestWorksFrame'):
     QFrame.__init__(self, parent, name)
     self.works_entries = []
     margin = 0
     space = 1
     self.grid = QGridLayout(self, 2, 6, margin, space)
     self.works_lbl = QLabel('Works', self)
     self.grid.addMultiCellWidget(self.works_lbl, 0, 0, 0, 4)
     self.add_works_btn = KPushButton('+', self, 'add_works_button')
     self.add_works_btn.connect(self.add_works_btn,
                                SIGNAL('clicked()'),
                                self.add_works_entries)
     self.grid.addWidget(self.add_works_btn, 0, 5)
コード例 #8
0
ファイル: profile.py プロジェクト: pombredanne/paella-svn
 def __init__(self, app, parent, profile):
     KMainWindow.__init__(self, parent, 'TraitAssigner')
     self.page = QFrame(self)
     self.vbox = QVBoxLayout(self.page, 5, 7)
     self.listBox = KActionSelector(self.page)
     self.listBox.setShowUpDownButtons(True)
     self.setCentralWidget(self.page)
     self.vbox.addWidget(self.listBox)
     hbox = QHBoxLayout(self.page, 5, 7)
     self.vbox.addLayout(hbox)
     self.ok_button = KPushButton('ok', self.page)
     self.cancel_button = KPushButton('cancel', self.page)
     hbox.addWidget(self.ok_button)
     hbox.addWidget(self.cancel_button)
     self.app = app
     self.db = app.db
     self.profile = Profile(app.conn)
     self.profile.set_profile(profile)
     self.suite = self.profile.current.suite
     self.traits = StatementCursor(app.conn)
     self.traits.set_table('%s_traits'  % self.suite)
     self.initlistView()
     self.show()
コード例 #9
0
ファイル: differ.py プロジェクト: pombredanne/paella-svn
 def __init__(self, app, parent, name='SuiteTraitCombo'):
     QWidget.__init__(self, parent, name)
     dbwidget(self, app)
     self.suiteCursor = Suites(self.conn)
     self.suites = self.suiteCursor.list()
     self.traits = Traits(self.conn, self.suites[0])
     self.scombo = SuiteCombo(self, self.suites)
     self.tcombo = MyCombo(self, 'TypeCombo')
     self.tcombo.fill(['template', 'script'])
     self.ubutton = KPushButton('update', self)
     self.listView = TraitList(self.app, self)
     self.vbox = QVBoxLayout(self)
     for member in ['listView', 'scombo', 'tcombo', 'ubutton']:
         widget = getattr(self, member)
         self.vbox.addWidget(widget)
     self.connect(self.scombo, SIGNAL('highlighted(int)'),
                  self.update_traits)
     self.connect(self.ubutton, SIGNAL('clicked()'), self.refreshlistView)
コード例 #10
0
 def __init__(self, parent, name='BaseGameDataFrame'):
     QFrame.__init__(self, parent, name)
     # there will be more than two rows, but we'll start with two
     numrows = 2
     # there should onlty be two columns
     numcols = 2
     margin = 0
     space = 1
     # add a grid layout to the frame
     self.grid = QGridLayout(self, numrows, numcols,
                             margin, space, 'BaseGameDataLayout')
     # make a couple of lists to point to the weblink entries
     # order is important in these lists
     self.weblink_site_entries = []
     self.weblink_url_entries = []
     # I may use dict[site] = (site_entry, url_entry)
     # I haven't decided yet.  It could always be formed by zipping the 2 lists above.
     self.weblink_dict = {}
     # setup app pointer
     self.app = KApplication.kApplication()
     self.myconfig = self.app.myconfig
     # setup dialog pointers
     self.select_launch_command_dlg = None
     # Setup widgets
     # setup name widgets
     self.name_lbl = QLabel('<b>Name</b>', self)
     self.name_entry = KLineEdit('', self)
     # add name widgets to grid
     self.grid.addWidget(self.name_lbl, 0, 0)
     self.grid.addWidget(self.name_entry, 1, 0)
     # setup fullname widgets
     self.fullname_lbl = QLabel('<b>Full name</b>', self)
     self.fullname_entry = KLineEdit('', self)
     # add fullname widgets
     self.grid.addWidget(self.fullname_lbl, 2, 0)
     self.grid.addWidget(self.fullname_entry, 3, 0)
     # setup description widgets
     self.desc_lbl = QLabel('<b>Description</b>', self)
     self.desc_entry = KTextEdit(self, 'description_entry')
     # set plain text format for description entry
     # we do this in case there are html tags in the entry
     self.desc_entry.setTextFormat(self.PlainText)
     # add description widgets
     self.grid.addWidget(self.desc_lbl, 4, 0)
     #self.addWidget(self.desc_entry, 5, 0)
     # add the description as a multirow entity
     # default from 5 to 15
     # this allows for weblinks to be added
     # (about 5)
     # without the dialog looking ugly
     # going to 15 won't force there to be that many rows
     # until more enough widgets are added
     self.grid.addMultiCellWidget(self.desc_entry, 5, 15, 0, 0)
     # setup launch command widgets
     self.launch_lbl = QLabel('<b>Launch command</b>', self)
     self.launch_entry = KLineEdit('', self)
     self.launch_dlg_button = KPushButton('...', self, 'launch_dlg_button')
     self.launch_dlg_button.connect(self.launch_dlg_button, SIGNAL('clicked()'),
                                    self.select_launch_command)
     # add launch command widgets
     self.grid.addWidget(self.launch_lbl, 0, 1)
     self.grid.addWidget(self.launch_entry, 1, 1)
     self.grid.addWidget(self.launch_dlg_button, 1, 2)
     # setup dosboxpath widgets
     self.dosboxpath_lbl = QLabel('<b>dosbox path</b>', self)
     self.dosboxpath_entry = KLineEdit('', self)
     # add dosboxpath widgets
     self.grid.addWidget(self.dosboxpath_lbl, 2, 1)
     self.grid.addWidget(self.dosboxpath_entry, 3, 1)
     # setup main weblink widgets
     self.weblinks_lbl = QLabel('<b>weblinks</b>', self)
     self.weblinks_btn = KPushButton('+', self, 'add_weblink_button')
     self.weblinks_btn.connect(self.weblinks_btn, SIGNAL('clicked()'),
                               self.add_weblink_entries)
     # add main weblink widgets
     self.grid.addWidget(self.weblinks_lbl, 4, 1)
     self.grid.addWidget(self.weblinks_btn, 4, 2)
コード例 #11
0
class BaseGameDataFrame(QFrame):
    def __init__(self, parent, name='BaseGameDataFrame'):
        QFrame.__init__(self, parent, name)
        # there will be more than two rows, but we'll start with two
        numrows = 2
        # there should onlty be two columns
        numcols = 2
        margin = 0
        space = 1
        # add a grid layout to the frame
        self.grid = QGridLayout(self, numrows, numcols,
                                margin, space, 'BaseGameDataLayout')
        # make a couple of lists to point to the weblink entries
        # order is important in these lists
        self.weblink_site_entries = []
        self.weblink_url_entries = []
        # I may use dict[site] = (site_entry, url_entry)
        # I haven't decided yet.  It could always be formed by zipping the 2 lists above.
        self.weblink_dict = {}
        # setup app pointer
        self.app = KApplication.kApplication()
        self.myconfig = self.app.myconfig
        # setup dialog pointers
        self.select_launch_command_dlg = None
        # Setup widgets
        # setup name widgets
        self.name_lbl = QLabel('<b>Name</b>', self)
        self.name_entry = KLineEdit('', self)
        # add name widgets to grid
        self.grid.addWidget(self.name_lbl, 0, 0)
        self.grid.addWidget(self.name_entry, 1, 0)
        # setup fullname widgets
        self.fullname_lbl = QLabel('<b>Full name</b>', self)
        self.fullname_entry = KLineEdit('', self)
        # add fullname widgets
        self.grid.addWidget(self.fullname_lbl, 2, 0)
        self.grid.addWidget(self.fullname_entry, 3, 0)
        # setup description widgets
        self.desc_lbl = QLabel('<b>Description</b>', self)
        self.desc_entry = KTextEdit(self, 'description_entry')
        # set plain text format for description entry
        # we do this in case there are html tags in the entry
        self.desc_entry.setTextFormat(self.PlainText)
        # add description widgets
        self.grid.addWidget(self.desc_lbl, 4, 0)
        #self.addWidget(self.desc_entry, 5, 0)
        # add the description as a multirow entity
        # default from 5 to 15
        # this allows for weblinks to be added
        # (about 5)
        # without the dialog looking ugly
        # going to 15 won't force there to be that many rows
        # until more enough widgets are added
        self.grid.addMultiCellWidget(self.desc_entry, 5, 15, 0, 0)
        # setup launch command widgets
        self.launch_lbl = QLabel('<b>Launch command</b>', self)
        self.launch_entry = KLineEdit('', self)
        self.launch_dlg_button = KPushButton('...', self, 'launch_dlg_button')
        self.launch_dlg_button.connect(self.launch_dlg_button, SIGNAL('clicked()'),
                                       self.select_launch_command)
        # add launch command widgets
        self.grid.addWidget(self.launch_lbl, 0, 1)
        self.grid.addWidget(self.launch_entry, 1, 1)
        self.grid.addWidget(self.launch_dlg_button, 1, 2)
        # setup dosboxpath widgets
        self.dosboxpath_lbl = QLabel('<b>dosbox path</b>', self)
        self.dosboxpath_entry = KLineEdit('', self)
        # add dosboxpath widgets
        self.grid.addWidget(self.dosboxpath_lbl, 2, 1)
        self.grid.addWidget(self.dosboxpath_entry, 3, 1)
        # setup main weblink widgets
        self.weblinks_lbl = QLabel('<b>weblinks</b>', self)
        self.weblinks_btn = KPushButton('+', self, 'add_weblink_button')
        self.weblinks_btn.connect(self.weblinks_btn, SIGNAL('clicked()'),
                                  self.add_weblink_entries)
        # add main weblink widgets
        self.grid.addWidget(self.weblinks_lbl, 4, 1)
        self.grid.addWidget(self.weblinks_btn, 4, 2)
        
    def select_launch_command(self):
        if self.select_launch_command_dlg is None:
            file_filter = "*.exe *.bat *.com|Dos Executables\n*|All Files"
            dlg = KFileDialog(self.fullpath, file_filter,  self, 'select_launch_command_dlg', True)
            dlg.connect(dlg, SIGNAL('okClicked()'), self.launch_command_selected)
            dlg.connect(dlg, SIGNAL('cancelClicked()'), self.destroy_select_launch_command_dlg)
            dlg.connect(dlg, SIGNAL('closeClicked()'), self.destroy_select_launch_command_dlg)
            dlg.show()
            self.select_launch_command_dlg = dlg
        else:
            # we shouldn't need this with a modal dialog
            KMessageBox.error(self, opendlg_errormsg)

    def destroy_select_launch_command_dlg(self):
        self.select_launch_command_dlg = None

    def launch_command_selected(self):
        dlg = self.select_launch_command_dlg
        url = dlg.selectedURL()
        fullpath = str(url.path())
        launch_command = os.path.basename(fullpath)
        self.launch_entry.setText(launch_command)
        self.select_launch_command_dlg = None

    def add_weblink_entries(self, site='', url=''):
        #we start at row #5 column 1 for lbl column 2 for entry
        num_entries = len(self.weblink_url_entries)
        # we need to add 1 on lbl_num because the entries can be appended
        # until instantiated
        lbl_num = num_entries + 1
        site_lbl = QLabel('<b>site %d</b>' % lbl_num, self)
        site_entry = KLineEdit(site, self)
        self.weblink_site_entries.append(site_entry)
        url_lbl = QLabel('<b>url %d</b>' % lbl_num, self)
        url_entry = KLineEdit(url, self)
        self.weblink_url_entries.append(url_entry)
        if len(self.weblink_site_entries) != len(self.weblink_url_entries):
            KMessageBox.error(self, 'entries mismatch, something really bad happened.')
            import sys
            sys.exit(1)
        # we need a little math here to figure out the rows
        # for the widgets
        # num_entries should now be 1 greater than above
        num_entries = len(self.weblink_url_entries)
        site_row = 2*num_entries + 3
        url_row = 2*num_entries + 4
        # add weblink widgets to the grid
        top = self.grid.AlignTop
        self.grid.addWidget(site_entry, site_row, 1)
        self.grid.addWidget(site_lbl, site_row, 2)
        self.grid.addWidget(url_entry, url_row, 1)
        self.grid.addWidget(url_lbl, url_row, 2)
        # we have to call .show() explicitly on the widgets
        # as the rest of the widgets are already visible
        # when show was called on the dialog
        # show() automatically calls show() on all children
        for widget in [site_lbl, site_entry, url_lbl, url_entry]:
            widget.show()
コード例 #12
0
ファイル: BasketDialog.py プロジェクト: Tayyib/uludag
    def __init__(self, parent, basket):
        KDialog.__init__(self,parent,str(i18n("Basket")),True)
        self.parent = parent
        self.basket = basket
        self.totalSize = 0

        self.setCaption(i18n("Basket"))

        layout = QGridLayout(self, 1, 1, 11, 6)

        self.pkgHBox = QHBox(self)
        layout.addMultiCellWidget(self.pkgHBox, 1, 1, 0, 2)

        if self.basket.state == Basket.remove_state:
            self.pkgLabel = QLabel(i18n("Selected package(s) for removal:"), self)
            self.extraLabel = QLabel(i18n("Reverse dependencies of the selected package(s) that are also going to be removed:"), self)
        elif self.basket.state == Basket.install_state:
            self.pkgLabel = QLabel(i18n("Selected package(s) for install:"), self)
            self.extraLabel = QLabel(i18n("Extra dependencies of the selected package(s) that are also going to be installed:"), self)
        elif self.basket.state == Basket.upgrade_state:
            self.pkgLabel = QLabel(i18n("Selected package(s) for upgrade:"), self)
            self.extraLabel = QLabel(i18n("Extra dependencies of the selected package(s) that are also going to be upgraded:"), self)

        layout.addWidget(self.pkgLabel, 0, 0)
        layout.addWidget(self.extraLabel, 2, 0)

        self.depHBox = QHBox(self)
        layout.addMultiCellWidget(self.depHBox, 3, 3, 0, 2)

        self.totalSizeLabel = QLabel(i18n("Total Size:"), self)
        layout.addWidget(self.totalSizeLabel, 4, 0)

        spacer = QSpacerItem(121, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
        layout.addItem(spacer, 5, 0)

        self.updateBasketButton = KPushButton(self)
        self.updateBasketButton.setText(i18n("Update Basket"))
        self.updateBasketButton.setIconSet(loadIconSet("package"))
        layout.addWidget(self.updateBasketButton, 5, 1)

        self.applyButton = KPushButton(self)
        self.applyButton.setText(parent.operateAction.text())
        icon = parent.operateAction.iconSet()
        #Fix 6893
        if icon:
            self.applyButton.setIconSet(icon)
        layout.addWidget(self.applyButton, 5, 2)

        self.connect(self.updateBasketButton, SIGNAL('clicked()'), self.updateBasket)
        self.connect(self.applyButton, SIGNAL('clicked()'), self.applyOperation)

        self.resize(QSize(574,503).expandedTo(self.minimumSizeHint()))
        self.clearWState(Qt.WState_Polished)

        # Read Css
        cssFile = file(str(locate("data","package-manager/layout.css"))).read()
        self.css = cssFile

        self.javascript = file(str(locate("data","package-manager/animation.js"))).read()

        self.pkgHtmlPart = KHTMLPart(self.pkgHBox)
        self.depHtmlPart = KHTMLPart(self.depHBox)

        self.createSelectedPackagesList()
        self.createExtraPackagesList()

        self.connect(self.pkgHtmlPart,SIGNAL("completed()"), self.registerEventListener)
コード例 #13
0
ファイル: BasketDialog.py プロジェクト: Tayyib/uludag
class BasketDialog(KDialog):
    def __init__(self, parent, basket):
        KDialog.__init__(self,parent,str(i18n("Basket")),True)
        self.parent = parent
        self.basket = basket
        self.totalSize = 0

        self.setCaption(i18n("Basket"))

        layout = QGridLayout(self, 1, 1, 11, 6)

        self.pkgHBox = QHBox(self)
        layout.addMultiCellWidget(self.pkgHBox, 1, 1, 0, 2)

        if self.basket.state == Basket.remove_state:
            self.pkgLabel = QLabel(i18n("Selected package(s) for removal:"), self)
            self.extraLabel = QLabel(i18n("Reverse dependencies of the selected package(s) that are also going to be removed:"), self)
        elif self.basket.state == Basket.install_state:
            self.pkgLabel = QLabel(i18n("Selected package(s) for install:"), self)
            self.extraLabel = QLabel(i18n("Extra dependencies of the selected package(s) that are also going to be installed:"), self)
        elif self.basket.state == Basket.upgrade_state:
            self.pkgLabel = QLabel(i18n("Selected package(s) for upgrade:"), self)
            self.extraLabel = QLabel(i18n("Extra dependencies of the selected package(s) that are also going to be upgraded:"), self)

        layout.addWidget(self.pkgLabel, 0, 0)
        layout.addWidget(self.extraLabel, 2, 0)

        self.depHBox = QHBox(self)
        layout.addMultiCellWidget(self.depHBox, 3, 3, 0, 2)

        self.totalSizeLabel = QLabel(i18n("Total Size:"), self)
        layout.addWidget(self.totalSizeLabel, 4, 0)

        spacer = QSpacerItem(121, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
        layout.addItem(spacer, 5, 0)

        self.updateBasketButton = KPushButton(self)
        self.updateBasketButton.setText(i18n("Update Basket"))
        self.updateBasketButton.setIconSet(loadIconSet("package"))
        layout.addWidget(self.updateBasketButton, 5, 1)

        self.applyButton = KPushButton(self)
        self.applyButton.setText(parent.operateAction.text())
        icon = parent.operateAction.iconSet()
        #Fix 6893
        if icon:
            self.applyButton.setIconSet(icon)
        layout.addWidget(self.applyButton, 5, 2)

        self.connect(self.updateBasketButton, SIGNAL('clicked()'), self.updateBasket)
        self.connect(self.applyButton, SIGNAL('clicked()'), self.applyOperation)

        self.resize(QSize(574,503).expandedTo(self.minimumSizeHint()))
        self.clearWState(Qt.WState_Polished)

        # Read Css
        cssFile = file(str(locate("data","package-manager/layout.css"))).read()
        self.css = cssFile

        self.javascript = file(str(locate("data","package-manager/animation.js"))).read()

        self.pkgHtmlPart = KHTMLPart(self.pkgHBox)
        self.depHtmlPart = KHTMLPart(self.depHBox)

        self.createSelectedPackagesList()
        self.createExtraPackagesList()

        self.connect(self.pkgHtmlPart,SIGNAL("completed()"), self.registerEventListener)

    def updateBasket(self):
        self.createSelectedPackagesList()
        self.createExtraPackagesList()
        self.parent.updateStatusBar()

    def closeEvent(self, event):
        self.pkgHtmlPart = None
        self.depHtmlPart = None
        self.accept()

    def applyOperation(self):
        self.pkgHtmlPart = None
        self.depHtmlPart = None
        self.hide()
        self.done(APPLY_OPERATION)

    def registerEventListener(self):
        self.eventListener = SelectEventListener(self)
        node = self.pkgHtmlPart.document().getElementsByTagName(DOM.DOMString("body")).item(0)
        node.addEventListener(DOM.DOMString("click"),self.eventListener,True)

    def updateTotals(self):
        Globals.setWaitCursor()
        try:
            self.createExtraPackagesList()
        finally:
            Globals.setNormalCursor()

    def createSelectedPackagesList(self):
        self.createHTML(self.basket.packages, self.pkgHtmlPart, True)

    def createExtraPackagesList(self):
        self.parent.basket.update()

        if self.basket.packages:
            self.applyButton.setEnabled(True)
        else:
            self.applyButton.setEnabled(False)

        if self.basket.extraPackages:
            self.extraLabel.show()
            self.depHBox.show()
            self.createHTML(self.basket.extraPackages, self.depHtmlPart, False)
        else:
            self.extraLabel.hide()
            self.depHBox.hide()

        size = Globals.humanReadableSize(self.basket.getBasketSize())
        self.totalSizeLabel.setText(i18n("Total Size: <b>%1</b>").arg(size))

    def createHTML(self, packages, part=None, checkBox=False):
        head =  '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        '''

        if not part:
            part = self.htmlPart

        part.begin()
        part.write(head)
        part.write("<style type=\"text/css\">%s</style>" % self.css)
        part.write("<script language=\"JavaScript\">%s</script>" % self.javascript)
        part.write("</head><body>")
        part.write(self.createHTMLForPackages(packages, checkBox))
        part.write('''<body></html>''')
        part.end()

    def createHTMLForPackages(self, packages, checkBox):
        result = ''
        template ='''
        <!-- package start -->
        <div class="disabled">
        '''
        if checkBox:
            template += '''<div class="checkboks" style="%s"><input type="checkbox" checked name="%s"></div>'''

        template += '''
        <div class="package_title_disabled" style="%s">
        <img src="%s" style="float:left;" width="%dpx" height="%dpx">
        <b>%s</b><br><span style="color:#303030">%s%s<br>%s</span><br>
        </div></div>
        <!-- package end -->
        '''

        style = "background-color:%s" % KGlobalSettings.baseColor().name()
        packages.sort(key=string.lower)

        for app in packages:
            package = self.basket.getPackage(app)
            size = Globals.humanReadableSize(self.basket.getPackageSize(package))
            iconPath = getIconPath(package.icon)
            summary = package.summary
            iconSize = getIconSize()
            if checkBox:
                result += template % (style,app,style,iconPath,iconSize,iconSize,app,i18n("Size: "),size,summary)
            else:
                result += template % (style,iconPath,iconSize,iconSize,app,i18n("Size: "),size,summary)

        return result