diff --git a/ubiquity-frontend-kde-le/TODO b/ubiquity-frontend-kde-le/TODO new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ubiquity-frontend-kde-le/VERSAO b/ubiquity-frontend-kde-le/VERSAO new file mode 100644 index 0000000000000000000000000000000000000000..524cb55242b53f6a64cc646ea05db6acc7696d2d --- /dev/null +++ b/ubiquity-frontend-kde-le/VERSAO @@ -0,0 +1 @@ +1.1.1 diff --git a/ubiquity-frontend-kde-le/gerar.sh b/ubiquity-frontend-kde-le/gerar.sh new file mode 100755 index 0000000000000000000000000000000000000000..74a8edf718258a6e9da1fe1133b2acaabd6ccbbf --- /dev/null +++ b/ubiquity-frontend-kde-le/gerar.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# gerar.sh +# Copyright (c) 2006 by Bruno Ribas <ribas@ufpr.br> + +DIRTMP=$(mktemp -d) +VERSAO=$(cat VERSAO) + +#arrumar versao +#$1 tipo de incremento +MAJOR=$(echo $VERSAO| cut -d'.' -f1) +MINOR=$(echo $VERSAO| cut -d'.' -f2) +REVISION=$(echo $VERSAO| cut -d'.' -f3) + +case $1 in + Minor) + ((MINOR++)) + REVISION=0 + ;; + Major) + ((MAJOR++)) + MINOR=0 + REVISION=0 + ;; + help) + echo "Uso: $0 Major|Minor|Revision" + echo ' Major - Altera versao Major' + echo ' Minor - Altera versao Minor' + exit + ;; + *) + ((REVISION++)) + ;; +esac + +VERSAO="${MAJOR}.${MINOR}.${REVISION}" +echo "$VERSAO" > VERSAO + + +#Compila a documentacao do pacote no diretorio doc/ +#cd doc/ +#hevea -text *.tex +#hevea -text *.tex +#cd ../ + +cp -r pacote $DIRTMP + +#Copia a documentacao compilada para dentro do pacote. +#cp doc/*.txt $DIRTMP/pacote/usr/share/doc/prd-* + +cd $DIRTMP +find . -name ".svn" -exec rm -rf {} \; &>/dev/null +sed -i -e "s/^Version:/Version: $VERSAO/" pacote/DEBIAN/control + +fakeroot dpkg -b pacote . + +cd - + +cp $DIRTMP/*deb . +rm -rf $DIRTMP + + +# vim:tabstop=4:shiftwidth=4:encoding=iso-8859-1 diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/control b/ubiquity-frontend-kde-le/pacote/DEBIAN/control new file mode 100644 index 0000000000000000000000000000000000000000..514e971539edd402527be0d75657e19898bddb00 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/control @@ -0,0 +1,16 @@ +Package: ubiquity-frontend-kde-le +Source: ubiquity-le +Version: +Architecture: all +Maintainer: LE Maintainer <le-maintainer@c3sl.ufpr.br> +Installed-Size: 632 +Depends: python-central (>= 0.6.11), ubiquity-le, python-kde4, kde-window-manager, xauth +Conflicts: ubiquity-frontend-kde +Section: admin +Priority: optional +Description: KDE frontend for Ubiquity live installer. + This is a costumized version of ubiquity-frontend-kde from the Ubuntu, + designed to install the Linux Educacional (LE). +Bugs: http://bugzilla.c3sl.ufpr.br/ +Python-Version: current, >= 2.6 + diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/postinst b/ubiquity-frontend-kde-le/pacote/DEBIAN/postinst new file mode 100755 index 0000000000000000000000000000000000000000..51369608342dd96deb51357e8fcf8a9b25c26028 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/postinst @@ -0,0 +1,11 @@ +#!/bin/sh +set -e +# Automatically added by dh_pycentral +rm -f /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove +if which pycentral >/dev/null 2>&1; then + pycentral pkginstall ubiquity-frontend-kde-le + if grep -qs '^ubiquity-frontend-kde-le$' /var/lib/pycentral/delayed-pkgs; then + sed -i '/^ubiquity-frontend-kde-le$/d' /var/lib/pycentral/delayed-pkgs + fi +fi +# End automatically added section diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/preinst b/ubiquity-frontend-kde-le/pacote/DEBIAN/preinst new file mode 100755 index 0000000000000000000000000000000000000000..80a32d5fd4d99f5ca83feaf3c2aaaced960e81e3 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/preinst @@ -0,0 +1,10 @@ +#!/bin/sh +set -e +# Automatically added by dh_pycentral +case "$1" in + install|upgrade) + mkdir -p /var/lib/pycentral + echo '# the presence of this file allows calling pkgremove on upgrade' \ + > /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove +esac +# End automatically added section diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/prerm b/ubiquity-frontend-kde-le/pacote/DEBIAN/prerm new file mode 100755 index 0000000000000000000000000000000000000000..760db268962e91e9027b324122028a9b9267a7aa --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/prerm @@ -0,0 +1,47 @@ +#!/bin/sh +set -e +# Automatically added by dh_pycentral +case "$1" in remove|upgrade) + pkgremove=y +esac +if [ -f /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove ] || [ -f /var/lib/pycentral/pkgremove ]; then + pkgremove=y +fi +if [ "$pkgremove" = y ]; then +if which python >/dev/null 2>&1 && which pycentral >/dev/null 2>&1; then + pycentral pkgremove ubiquity-frontend-kde-le +else + flist=$(tempfile) + slist=$(tempfile) + dpkg -L ubiquity-frontend-kde-le | tee $flist | \ + while read n; do + case "$n" in + /usr/share/pyshared/*) + n2=${n#/usr/share/pyshared/*} + case "$n" in + *.py) echo "p $n";; + *) [ -d "$n" ] && echo "d $n2" || echo "f $n2" + esac + ;; + *) continue + esac + done > $slist + if [ -s $slist ]; then + for d in /usr/lib/python[0-9].[0-9]/????-packages; do + case "$d" in */python2.1/*|*/python2.2/*) continue; esac + while read t n; do + case "$t" in + p) rm -f $d/$n $d/${n}[co];; + d) rmdir $d/$n 2>/dev/null || true;; + *) rm -f $d/$n + esac + done < $slist + done + fi + awk '/\/usr\/share\/pyshared/ {next} /\.py$/ {print $0"c\n" $0"o"}' $flist \ + | xargs -r rm -f >&2 + rm -f $flist $slist +fi +rm -f /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove +fi +# End automatically added section diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py new file mode 100644 index 0000000000000000000000000000000000000000..23f383bd0faf8a60de7fad4a37013421a3b3185d --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py @@ -0,0 +1,286 @@ +# -*- coding: utf-8 -*- +from PyQt4.QtCore import Qt, QRectF +from PyQt4.QtGui import QWidget, QFont, QPainter, QPen, QPainterPath, QColor +from PyQt4.QtSvg import QSvgRenderer +from PyQt4 import uic + +import subprocess +import sys +import os + +IMG_DIR = "/usr/share/ubiquity/qt/images" + +#U+ , or +U+ ... to string +def fromUnicodeString(raw): + if raw[0:2] == "U+": + return unichr(int(raw[2:], 16)) + elif raw[0:2] == "+U": + return unichr(int(raw[3:], 16)) + + return "" + +class Keyboard(QWidget): + + kb_104 = { + "extended_return": False, + "keys": [ + (0x29, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd), + (0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x2b), + (0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28), + (0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35), + ()] + } + + kb_105 = { + "extended_return": True, + "keys": [ + (0x29, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd), + (0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b), + (0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x2b), + (0x54, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35), + ()] + } + + kb_106 = { + "extended_return": True, + "keys": [ + (0x29, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe), + (0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b), + (0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29), + (0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36), + ()] + } + + lowerFont = QFont("Helvetica", 10, QFont.DemiBold) + upperFont = QFont("Helvetica", 8) + + def __init__(self, parent = None): + QWidget.__init__(self, parent) + self.codes = [] + + self.layout = "us" + self.variant = "" + + self.kb = None + + def setLayout(self, layout): + self.layout = layout + + def setVariant(self, variant): + self.variant = variant + self.loadCodes() + self.loadInfo() + self.repaint() + + def loadInfo(self): + kbl_104 = ["us", "th"] + kbl_106 = ["jp"] + + # most keyboards are 105 key so default to that + if self.layout in kbl_104: + self.kb = self.kb_104 + elif self.layout in kbl_106: + self.kb = self.kb_106 + elif self.kb != self.kb_105: + self.kb = self.kb_105 + + def resizeEvent(self, re): + self.space = 6 + self.usable_width = self.width()-2 + self.key_w = (self.usable_width - 14 * self.space)/15 + + self.setMinimumHeight(self.key_w*4 + self.space*5) + + def paintEvent(self, pe): + p = QPainter(self) + p.setRenderHint(QPainter.Antialiasing) + + pen = QPen() + pen.setWidth(1) + pen.setColor(QColor(0x8c, 0xa3, 0xb0)) + p.setPen(pen) + + p.setBrush(QColor(0xe4, 0xec, 0xf4)) + + rx = 6 + + space = self.space + w = self.usable_width + kw = self.key_w + + def drawRow(row, sx, sy, last_end=False): + x=sx + y=sy + keys = row + rw=w-sx + i=0 + for k in keys: + rect = QRectF(x, y, kw, kw) + + if i == len(keys)-1 and last_end: + rect.setWidth(rw) + + p.drawRoundedRect(rect, rx, rx) + p.setPen(Qt.black) + + rect.adjust(5,1, 0, 0) + + p.setFont(self.lowerFont) + p.drawText(rect, Qt.AlignLeft | Qt.AlignBottom, self.regular_text(k)) + + p.setFont(self.upperFont) + p.drawText(rect, Qt.AlignLeft | Qt.AlignTop, self.shift_text(k)) + + rw = rw - space - kw + x = x + space + kw + i = i+1 + + p.setPen(pen) + return (x,rw) + + x=.5 + y=.5 + + keys = self.kb["keys"] + ext_return = self.kb["extended_return"] + + first_key_w = 0 + + rows = 4 + remaining_x = [0,0,0,0] + remaining_widths = [0,0,0,0] + + for i in range(0, rows): + if first_key_w > 0: + first_key_w = first_key_w*1.375 + + if self.kb == self.kb_105 and i==3: + first_key_w = kw * 1.275 + + rect = QRectF(x, y, first_key_w, kw) + p.drawRoundedRect(rect, rx, rx) + x = x + first_key_w + space + else: + first_key_w = kw + + x,rw = drawRow(keys[i], x, y, i==1 and not ext_return) + + remaining_x[i] = x + remaining_widths[i] = rw + + if i!=1 and i!=2: + rect = QRectF(x, y, rw, kw) + p.drawRoundedRect(rect, rx, rx) + + x=.5 + y = y + space + kw + + if ext_return: + rx=rx*2 + x1 = remaining_x[1] + y1 = .5 + kw*1 + space*1 + w1 = remaining_widths[1] + x2 = remaining_x[2] + y2 = .5 + kw*2 + space*2 + w2 = remaining_widths[2] + + # this is some serious crap... but it has to be so + # maybe one day keyboards won't look like this... + # one can only hope + pp = QPainterPath() + pp.moveTo(x1, y1+rx) + pp.arcTo(x1, y1, rx, rx, 180, -90) + pp.lineTo(x1+w1-rx, y1) + pp.arcTo(x1+w1-rx, y1, rx, rx, 90, -90) + pp.lineTo(x1+w1, y2+kw-rx) + pp.arcTo(x1+w1-rx, y2+kw-rx, rx, rx, 0, -90) + pp.lineTo(x2+rx, y2+kw) + pp.arcTo(x2, y2+kw-rx, rx, rx, -90, -90) + pp.lineTo(x2, y1+kw) + pp.lineTo(x1+rx, y1+kw) + pp.arcTo(x1, y1+kw-rx, rx, rx, -90, -90) + pp.closeSubpath() + + p.drawPath(pp) + else: + x= remaining_x[2] + y = .5 + kw*2 + space*2 + rect = QRectF(x, y, remaining_widths[2], kw) + p.drawRoundedRect(rect, rx, rx) + + QWidget.paintEvent(self, pe) + + def regular_text(self, index): + return self.codes[index - 1][0] + + def shift_text(self, index): + return self.codes[index - 1][1] + + def ctrl_text(self, index): + return self.codes[index - 1][2] + + def alt_text(self, index): + return self.codes[index - 1][3] + + def loadCodes(self): + if self.layout is None: + return + + variantParam = "" + if self.variant: + variantParam = "-variant %s" % self.variant + + cmd="ckbcomp -model pc106 -layout %s %s -compact" % (self.layout, variantParam) + #print cmd + + pipe = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=None) + cfile = pipe.communicate()[0] + + #clear the current codes + del self.codes[:] + + for l in cfile.split('\n'): + if l[:7] != "keycode": + continue + + codes = l.split('=')[1].strip().split(' ') + + plain = fromUnicodeString(codes[0]) + shift = fromUnicodeString(codes[1]) + ctrl = fromUnicodeString(codes[2]) + alt = fromUnicodeString(codes[3]) + + if ctrl == plain: + ctrl = "" + + if alt == plain: + alt = "" + + self.codes.append((plain, shift, ctrl, alt)) + +## testing +if __name__ == "__main__": + from PyQt4.QtGui import QApplication, QVBoxLayout + + IMG_DIR = "../../../gui/qt/images" + + app = QApplication(sys.argv) + + win = QWidget() + l = QVBoxLayout(win) + + def addKb(layout, variant = ""): + kb1 = Keyboard() + kb1.setLayout(layout) + kb1.setVariant(variant) + l.addWidget(kb1) + + addKb("us") + addKb("gb") + addKb("th") + addKb("gr") + addKb("jp") + + win.show() + + app.exec_() diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py new file mode 100644 index 0000000000000000000000000000000000000000..353b2314fa353af34674b5f423258483bb56c373 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py @@ -0,0 +1,259 @@ +# -*- coding: utf-8 -*- + +import os +from PyQt4 import uic +from PyQt4.QtGui import * + +from ubiquity.frontend.kde_components.PartitionBar import PartitionsBar +from ubiquity.misc import * + +_uidir="/usr/share/ubiquity/qt/" + +def addBars(parent, before_bar, after_bar): + frame = QWidget(parent) + frame.setLayout(QVBoxLayout()) + frame.layout().setSpacing(0) + + # TODO + #frame.layout().addWidget(QLabel(get_string('ubiquity/text/partition_layout_before'))) + frame.layout().addWidget(QLabel("Before:")) + frame.layout().addWidget(before_bar) + #frame.layout().addWidget(QLabel(get_string('ubiquity/text/partition_layout_after'))) + frame.layout().addWidget(QLabel("After:")) + frame.layout().addWidget(after_bar) + + parent.layout().addWidget(frame) + return frame + +class PartAuto(QWidget): + + def __init__(self): + QWidget.__init__(self) + + uic.loadUi(os.path.join(_uidir,'stepPartAuto.ui'), self) + + self.diskLayout = None + + self.autopartition_buttongroup = QButtonGroup(self) + + self._clearInfo() + + def _clearInfo(self): + self.extra_bar_frames = [] + self.autopartitionTexts = [] + self.extraChoicesText = {} + + self.resizeSize = None + self.resizeChoice = None + self.manualChoice = None + + def setDiskLayout(self, diskLayout): + self.diskLayout = diskLayout + + def setupChoices (self, choices, extra_options, + resize_choice, manual_choice, + biggest_free_choice): + self._clearInfo() + + self.resizeChoice = resize_choice + self.manualChoice = manual_choice + + # remove any previous autopartition selections + for child in self.autopart_selection_frame.children(): + if isinstance(child, QWidget): + child.setParent(None) + del child + + for child in self.barsFrame.children(): + if isinstance(child, QWidget): + self.barsFrame.layout().removeWidget(child) + child.setParent(None) + del child + + release_name = get_release_name() + + bId = 0 + for choice in choices: + button = QRadioButton(choice, self.autopart_selection_frame) + self.autopart_selection_frame.layout().addWidget(button) + self.autopartition_buttongroup.addButton(button, bId) + bId += 1 + + #Qt changes the string by adding accelerators, + #so keep pristine string here as is returned later to partman + self.autopartitionTexts.append(choice) + + ## these three things are toggled by each option + # extra options frame for the option + #frame = None + bar_frame = QFrame() + bar_frame.setLayout(QVBoxLayout()) + bar_frame.setVisible(False) + bar_frame.layout().setSpacing(0) + self.barsFrame.layout().addWidget(bar_frame) + + button.toggled[bool].connect(bar_frame.setVisible) + + # if we have more information about the choice + # i.e. various hard drives to install onto + if choice in extra_options: + # label for the before device + dev = None + + if choice == biggest_free_choice: + biggest_free_id = extra_options[choice] + dev = None + + try: + resize_path = biggest_free_id[3] + dev = self.diskLayout[resize_path.replace("/", "=").rstrip("1234567890")] + except Exception: pass + + if dev: + #create partition bars for graphical before/after display + before_bar = PartitionsBar() + after_bar = PartitionsBar() + + for p in dev: + before_bar.addPartition(p[0], int(p[1]), p[3]) + if p[1] == biggest_free_id: + after_bar.addPartition(release_name, int(p[1]), 'auto') + else: + after_bar.addPartition(p[0], int(p[1]), p[3]) + + addBars(bar_frame, before_bar, after_bar) + + # install side by side/resize + elif choice == resize_choice: + # information about what can be resized + extraInfo = extra_options[choice] + + min_size, max_size, pref_size, resize_path = extraInfo + self.resizeSize = pref_size + + try: + dev = self.diskLayout[resize_path.replace("/", "=").rstrip("1234567890")] + except Exception: pass + + if dev: + before_bar = PartitionsBar() + after_bar = PartitionsBar() + + for p in dev: + #addPartition(name, size, fs): + before_bar.addPartition(p[0], int(p[1]), p[3]) + after_bar.addPartition(p[0], int(p[1]), p[3]) + + after_bar.setResizePartition(resize_path, + min_size, max_size, pref_size, release_name) + after_bar.partitionResized.connect(self.on_partitionResized) + + addBars(bar_frame, before_bar, after_bar) + + #full disk install + elif choice != manual_choice: + # setup new frame to hold combo box + # this allows us to make the combo box indented over + # as well as not stretch to full width as it would do in the + # vertical layout + frame = QFrame() + self.autopart_selection_frame.layout().addWidget(frame) + + frame_layout = QHBoxLayout(frame) + self.extra_combo = QComboBox() + self.extra_combo.setEnabled(False) + + self.autopart_selection_frame.layout().addWidget(self.extra_combo) + + frame_layout.addSpacing(20) + frame_layout.addWidget(self.extra_combo) + frame_layout.addStretch(1) + + self.extra_bar_frames = [] + comboTexts = [] + + button.toggled[bool].connect(self.extra_combo.setEnabled) + + for extra in extra_options[choice]: + #each extra choice needs to toggle a change in the before bar + #extra is just a string with a general description + #each extra choice needs to be a before/after bar option + if extra == '': + continue + + extra_bar_frame = None + + # add the extra disk to the combo box + self.extra_combo.addItem(extra) + self.extra_combo.currentIndexChanged[int].connect(self.on_extra_combo_changed) + + #find the device to make a partition bar out of it + dev = None + for d in self.diskLayout: + disk = d + if disk.startswith('=dev='): + disk = disk[5:] + if "(%s)" % disk in extra: + dev = self.diskLayout[d] + break + + #add the bars if we found the device + if dev: + before_bar = PartitionsBar() + after_bar = PartitionsBar() + + for p in dev: + before_bar.addPartition(p[0], int(p[1]), p[3]) + + if before_bar.diskSize > 0: + after_bar.addPartition(release_name, before_bar.diskSize, 'auto') + else: + after_bar.addPartition(release_name, 1, 'auto') + + extra_bar_frame = addBars(bar_frame, before_bar, after_bar) + if len(self.extra_bar_frames) > 0: + extra_bar_frame.setVisible(False) + + if extra_bar_frame is not None: + self.extra_bar_frames.append(extra_bar_frame) + + # Qt changes the string by adding accelerators, + # so keep the pristine string here to be + # returned to partman later. + comboTexts.append(extra) + + self.extraChoicesText[choice] = comboTexts + + #select the first button + b = self.autopartition_buttongroup.button(0) + if b: + b.setChecked(True) + + # slot for when partition is resized on the bar + def on_partitionResized(self, path, size): + #self.resizePath = path + self.resizeSize = size + + def getChoice (self): + bId = self.autopartition_buttongroup.checkedId() + if bId > -1: + choice = unicode(self.autopartitionTexts[bId]) + else: + raise AssertionError, "no active autopartitioning choice" + + if choice == self.resizeChoice: + # resize choice should have been hidden otherwise + assert self.resizeSize is not None + return choice, '%d B' % self.resizeSize + elif (choice != self.manualChoice and + self.extraChoicesText.has_key(choice)): + comboId = self.extra_combo.currentIndex() + disk_texts = self.extraChoicesText[choice] + return choice, unicode(disk_texts[comboId]) + else: + return choice, None + + def on_extra_combo_changed(self, index): + for e in self.extra_bar_frames: + e.setVisible(False) + self.extra_bar_frames[index].setVisible(True) diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py new file mode 100644 index 0000000000000000000000000000000000000000..775572ee1dd723abf3256efcc8ed989438e84b36 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py @@ -0,0 +1,443 @@ +# -*- coding: utf-8 -*- + +import os +from PyQt4 import uic +from PyQt4.QtGui import * + +from ubiquity.frontend.kde_components.PartitionBar import PartitionsBar +from ubiquity.frontend.kde_components.PartitionModel import PartitionModel + +_uidir="/usr/share/ubiquity/qt/" + +# FIXME: Taken from ubi-partman, needs to be moved somewhere. +PARTITION_TYPE_PRIMARY = 0 +PARTITION_TYPE_LOGICAL = 1 + +PARTITION_PLACE_BEGINNING = 0 +PARTITION_PLACE_END = 1 + +class PartMan(QWidget): + + def __init__(self, controller): + QWidget.__init__(self) + self.ctrlr = controller + + self.edit_use_method_names = {} + self.create_dialog = None + self.edit_dialog = None + + # currently visible partition bar + self.active_bar = None + + uic.loadUi(os.path.join(_uidir,'stepPartMan.ui'), self) + self.part_advanced_warning_hbox.setVisible(False) + + self.partition_tree_model = PartitionModel(self.ctrlr, self.partition_list_treeview) + self.partition_list_treeview.setModel(self.partition_tree_model) + self.partition_list_treeview.selectionModel().selectionChanged.connect(self.on_treeviewSelectionChanged) + self.partition_button_new_label.clicked[bool].connect(self.on_new_table_clicked) + + self.partition_button_new.clicked[bool].connect(self.on_new_clicked) + self.partition_button_edit.clicked[bool].connect(self.on_edit_clicked) + self.partition_button_delete.clicked[bool].connect(self.on_delete_clicked) + self.undo_everything.clicked[bool].connect(self.on_undo_clicked) + + def update(self, disk_cache, partition_cache, cache_order): + self.partition_tree_model.clear() + + for child in self.part_advanced_bar_frame.children(): + if isinstance(child, QWidget): + child.setParent(None) + del child + + self.active_bar = None + partition_bar = None + indexCount = -1 + for item in cache_order: + if item in disk_cache: + # the item is a disk + indexCount += 1 + partition_bar = PartitionsBar(self.part_advanced_bar_frame) + self.part_advanced_bar_frame.layout().addWidget(partition_bar) + + #hide all the other bars at first + if self.active_bar: + partition_bar.setVisible(False) + else: + self.active_bar = partition_bar + + self.partition_tree_model.append([item, disk_cache[item], partition_bar], self.ctrlr) + else: + # the item is a partition, add it to the current bar + partition = partition_cache[item] + + # add the new partition to our tree display + self.partition_tree_model.append([item, partition, partition_bar], self.ctrlr) + indexCount += 1 + + # data for bar display + size = int(partition['parted']['size']) + fs = partition['parted']['fs'] + path = partition['parted']['path'].replace("/dev/","") + if fs == "free": + path = fs + partition_bar.addPartition(path, size, fs) + + self.partition_list_treeview.reset() + + def on_treeviewSelectionChanged(self, unused, deselected): + + # by default disable editing the partition + self.partition_button_new_label.setEnabled(False) + self.partition_button_new.setEnabled(False) + self.partition_button_edit.setEnabled(False) + self.partition_button_delete.setEnabled(False) + self.undo_everything.setEnabled(False) + + if self.active_bar: + self.active_bar.setVisible(False) + + indexes = self.partition_list_treeview.selectedIndexes() + if indexes: + index = indexes[0] + + item = index.internalPointer() + devpart = item.itemData[0] + partition = item.itemData[1] + + self.active_bar = item.itemData[2] + if self.active_bar: + self.active_bar.setVisible(True) + else: + devpart = None + partition = None + + if not self.ctrlr: + return + + for action in self.ctrlr.dbfilter.get_actions(devpart, partition): + if action == 'new_label': + self.partition_button_new_label.setEnabled(True) + elif action == 'new': + self.partition_button_new.setEnabled(True) + elif action == 'edit': + self.partition_button_edit.setEnabled(True) + elif action == 'delete': + self.partition_button_delete.setEnabled(True) + + self.undo_everything.setEnabled(True) + + def partman_create_dialog(self, devpart, partition): + if not self.ctrlr.allowed_change_step(): + return + + # lazy initialization + if not self.create_dialog: + self.create_dialog = QDialog(self) + uic.loadUi("%s/partition_create_dialog.ui" % _uidir, self.create_dialog) + self.create_dialog.partition_create_use_combo.currentIndexChanged[int].connect(self.on_partition_create_use_combo_changed) + + # TODO + #self.translate_widget_children(self.create_dialog) + + # TODO cjwatson 2006-11-01: Because partman doesn't use a question + # group for these, we have to figure out in advance whether each + # question is going to be asked. + + if partition['parted']['type'] == 'pri/log': + # Is there already a primary partition? + for child in self.partition_tree_model.children(): + data = child.itemData + otherpart = data[1] + if (otherpart['dev'] == partition['dev'] and + 'id' in otherpart and + otherpart['parted']['type'] == 'primary'): + self.create_dialog.partition_create_type_logical.setChecked(True) + break + else: + self.create_dialog.partition_create_type_primary.setChecked(True) + else: + self.create_dialog.partition_create_type_label.hide() + self.create_dialog.partition_create_type_widget.hide() + # Yes, I know, 1000000 bytes is annoying. Sorry. This is what + # partman expects. + max_size_mb = int(partition['parted']['size']) / 1000000 + self.create_dialog.partition_create_size_spinbutton.setMaximum(max_size_mb) + self.create_dialog.partition_create_size_spinbutton.setValue(max_size_mb) + + self.create_dialog.partition_create_place_beginning.setChecked(True) + + self.create_use_method_names = {} + for method, name, description in self.ctrlr.dbfilter.use_as(devpart, True): + self.create_use_method_names[description] = name + self.create_dialog.partition_create_use_combo.addItem(description) + if self.create_dialog.partition_create_use_combo.count() == 0: + self.create_dialog.partition_create_use_combo.setEnabled(False) + + self.create_dialog.partition_create_mount_combo.clear() + for mp, choice_c, choice in self.ctrlr.dbfilter.default_mountpoint_choices(): + ##FIXME gtk frontend has a nifty way of showing the user readable + ##'choice' text in the drop down, but only selecting the 'mp' text + self.create_dialog.partition_create_mount_combo.addItem(mp) + self.create_dialog.partition_create_mount_combo.clearEditText() + + if self.create_dialog.exec_() == QDialog.Accepted: + if partition['parted']['type'] == 'primary': + prilog = PARTITION_TYPE_PRIMARY + elif partition['parted']['type'] == 'logical': + prilog = PARTITION_TYPE_LOGICAL + elif partition['parted']['type'] == 'pri/log': + if self.create_dialog.partition_create_type_primary.isChecked(): + prilog = PARTITION_TYPE_PRIMARY + else: + prilog = PARTITION_TYPE_LOGICAL + + if self.create_dialog.partition_create_place_beginning.isChecked(): + place = PARTITION_PLACE_BEGINNING + else: + place = PARTITION_PLACE_END + + method_description = unicode(self.create_dialog.partition_create_use_combo.currentText()) + method = self.create_use_method_names[method_description] + + mountpoint = unicode(self.create_dialog.partition_create_mount_combo.currentText()) + + self.ctrlr.allow_change_step(False) + self.ctrlr.dbfilter.create_partition( + devpart, + str(self.create_dialog.partition_create_size_spinbutton.value()), + prilog, place, method, mountpoint) + + def on_partition_create_use_combo_changed (self, *args): + if not hasattr(self, 'create_use_method_names'): + return + known_filesystems = ('ext4', 'ext3', 'ext2', 'reiserfs', 'jfs', 'xfs', + 'fat16', 'fat32', 'ntfs', 'uboot') + text = unicode(self.create_dialog.partition_create_use_combo.currentText()) + if text not in self.create_use_method_names: + return + + method = self.create_use_method_names[text] + if method not in known_filesystems: + self.create_dialog.partition_create_mount_combo.clearEditText() + self.create_dialog.partition_create_mount_combo.setEnabled(False) + else: + self.create_dialog.partition_create_mount_combo.setEnabled(True) + self.create_dialog.partition_create_mount_combo.clear() + for mp, choice_c, choice in \ + self.ctrlr.dbfilter.default_mountpoint_choices(method): + self.create_dialog.partition_create_mount_combo.addItem(mp) + + def partman_edit_dialog(self, devpart, partition): + if not self.ctrlr.allowed_change_step(): + return + + #lazy loading + if not self.edit_dialog: + self.edit_dialog = QDialog(self) + uic.loadUi("%s/partition_edit_dialog.ui" % _uidir, self.edit_dialog) + self.edit_dialog.partition_edit_use_combo.currentIndexChanged[int].connect(self.on_partition_edit_use_combo_changed) + + # TODO + #self.translate_widget_children(self.edit_dialog) + + current_size = None + if ('can_resize' not in partition or not partition['can_resize'] or + 'resize_min_size' not in partition or + 'resize_max_size' not in partition): + self.edit_dialog.partition_edit_size_label.hide() + self.edit_dialog.partition_edit_size_spinbutton.hide() + else: + # Yes, I know, 1000000 bytes is annoying. Sorry. This is what + # partman expects. + min_size_mb = int(partition['resize_min_size']) / 1000000 + cur_size_mb = int(partition['parted']['size']) / 1000000 + max_size_mb = int(partition['resize_max_size']) / 1000000 + # Bad things happen if the current size is out of bounds. + min_size_mb = min(min_size_mb, cur_size_mb) + max_size_mb = max(cur_size_mb, max_size_mb) + self.edit_dialog.partition_edit_size_spinbutton.setMinimum(min_size_mb) + self.edit_dialog.partition_edit_size_spinbutton.setMaximum(max_size_mb) + self.edit_dialog.partition_edit_size_spinbutton.setSingleStep(1) + self.edit_dialog.partition_edit_size_spinbutton.setValue(cur_size_mb) + + current_size = str(self.edit_dialog.partition_edit_size_spinbutton.value()) + + self.edit_use_method_names = {} + method_descriptions = {} + self.edit_dialog.partition_edit_use_combo.clear() + for script, arg, option in partition['method_choices']: + self.edit_use_method_names[option] = arg + method_descriptions[arg] = option + self.edit_dialog.partition_edit_use_combo.addItem(option) + + current_method = self.ctrlr.dbfilter.get_current_method(partition) + if current_method and current_method in method_descriptions: + current_method_description = method_descriptions[current_method] + index = self.edit_dialog.partition_edit_use_combo.findText(current_method_description) + self.edit_dialog.partition_edit_use_combo.setCurrentIndex(index) + + if 'id' not in partition: + self.edit_dialog.partition_edit_format_label.hide() + self.edit_dialog.partition_edit_format_checkbutton.hide() + current_format = False + elif 'method' in partition: + self.edit_dialog.partition_edit_format_label.show() + self.edit_dialog.partition_edit_format_checkbutton.show() + self.edit_dialog.partition_edit_format_checkbutton.setEnabled( + 'can_activate_format' in partition) + current_format = (partition['method'] == 'format') + else: + self.edit_dialog.partition_edit_format_label.show() + self.edit_dialog.partition_edit_format_checkbutton.show() + self.edit_dialog.partition_edit_format_checkbutton.setEnabled(False) + current_format = False + self.edit_dialog.partition_edit_format_checkbutton.setChecked( + current_format) + + self.edit_dialog.partition_edit_mount_combo.clear() + if 'mountpoint_choices' in partition: + for mp, choice_c, choice in partition['mountpoint_choices']: + ##FIXME gtk frontend has a nifty way of showing the user readable + ##'choice' text in the drop down, but only selecting the 'mp' text + self.edit_dialog.partition_edit_mount_combo.addItem(mp) + current_mountpoint = self.ctrlr.dbfilter.get_current_mountpoint(partition) + if current_mountpoint is not None: + index = self.edit_dialog.partition_edit_mount_combo.findText(current_method) + if index != -1: + self.edit_dialog.partition_edit_mount_combo.setCurrentIndex(index) + else: + self.edit_dialog.partition_edit_mount_combo.addItem(current_mountpoint) + self.edit_dialog.partition_edit_mount_combo.setCurrentIndex(self.edit_dialog.partition_edit_mount_combo.count() - 1) + + if (self.edit_dialog.exec_() == QDialog.Accepted): + size = None + if current_size is not None: + size = str(self.edit_dialog.partition_edit_size_spinbutton.value()) + + method_description = unicode(self.edit_dialog.partition_edit_use_combo.currentText()) + method = self.edit_use_method_names[method_description] + + fmt = self.edit_dialog.partition_edit_format_checkbutton.isChecked() + + mountpoint = unicode(self.edit_dialog.partition_edit_mount_combo.currentText()) + + if (current_size is not None and size is not None and + current_size == size): + size = None + if method == current_method: + method = None + if fmt == current_format: + fmt = None + if mountpoint == current_mountpoint: + mountpoint = None + + if (size is not None or method is not None or fmt is not None or + mountpoint is not None): + self.ctrlr.allow_change_step(False) + edits = {'size': size, 'method': method, + 'mountpoint': mountpoint} + if fmt is not None: + edits['fmt'] = 'dummy' + self.ctrlr.dbfilter.edit_partition(devpart, **edits) + + def on_partition_edit_use_combo_changed(self, *args): + if not hasattr(self, 'edit_use_method_names'): + return + # If the selected method isn't a filesystem, then selecting a mount + # point makes no sense. TODO cjwatson 2007-01-31: Unfortunately we + # have to hardcode the list of known filesystems here. + known_filesystems = ('ext4', 'ext3', 'ext2', 'reiserfs', 'jfs', 'xfs', + 'fat16', 'fat32', 'ntfs', 'uboot') + text = unicode(self.edit_dialog.partition_edit_use_combo.currentText()) + if text not in self.edit_use_method_names: + return + method = self.edit_use_method_names[text] + + if method not in known_filesystems: + self.edit_dialog.partition_edit_mount_combo.clearEditText() + self.edit_dialog.partition_edit_mount_combo.setEnabled(False) + self.edit_dialog.partition_edit_format_checkbutton.setEnabled(False) + else: + self.edit_dialog.partition_edit_mount_combo.setEnabled(True) + self.edit_dialog.partition_edit_format_checkbutton.setEnabled(True) + self.edit_dialog.partition_edit_mount_combo.clear() + for mp, choice_c, choice in \ + self.ctrlr.dbfilter.default_mountpoint_choices(method): + self.edit_dialog.partition_edit_mount_combo.addItem(mp) + + def on_partition_list_treeview_activated(self, index): + """ activated when parition lick clicked """ + if not self.ctrlr.allowed_change_step(): + return + + item = index.internalPointer() + devpart = item.itemData[0] + partition = item.itemData[1] + + if 'id' not in partition: + # Are there already partitions on this disk? If so, don't allow + # activating the row to offer to create a new partition table, + # to avoid mishaps. + for child in self.partition_tree_model.children(): + data = child.itemData + otherpart = data[1] + if otherpart['dev'] == partition['dev'] and 'id' in otherpart: + break + else: + self.ctrlr.allow_change_step(False) + self.ctrlr.dbfilter.create_label(devpart) + elif partition['parted']['fs'] == 'free': + if 'can_new' in partition and partition['can_new']: + self.partman_create_dialog(devpart, partition) + else: + self.partman_edit_dialog(devpart, partition) + + ### actions for clicking the buttons ### + + def get_treeview_data(self): + selected = self.partition_list_treeview.selectedIndexes() + if not selected: + return (None, None) + index = selected[0] + item = index.internalPointer() + devpart = item.itemData[0] + partition = item.itemData[1] + + return (devpart, partition) + + def on_new_table_clicked(self): + if not self.ctrlr.allowed_change_step(): + return + devpart, partition = self.get_treeview_data() + if not devpart or not partition: + return + self.ctrlr.allow_change_step(False) + self.ctrlr.dbfilter.create_label(devpart) + + def on_new_clicked(self): + devpart, partition = self.get_treeview_data() + if not devpart or not partition: + return + self.partman_create_dialog(devpart, partition) + + def on_edit_clicked(self): + devpart, partition = self.get_treeview_data() + if not devpart or not partition: + return + self.partman_edit_dialog(devpart, partition) + + def on_delete_clicked(self): + if not self.ctrlr.allowed_change_step(): + return + devpart, partition = self.get_treeview_data() + if not devpart or not partition: + return + self.ctrlr.allow_change_step(False) + self.ctrlr.dbfilter.delete_partition(devpart) + + def on_undo_clicked(self): + if not self.ctrlr.allowed_change_step(): + return + self.ctrlr.allow_change_step(False) + self.ctrlr.dbfilter.undo() diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py new file mode 100644 index 0000000000000000000000000000000000000000..9274bd2a4a107ce0a805f7b596dd76c699f3d4ba --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py @@ -0,0 +1,328 @@ +# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*- +# +# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd. +# +# Author: +# Jonathan Riddell <jriddell@ubuntu.com> +# Roman Shtylman <shtylman@gmail.com> +# +# This file is part of Ubiquity. +# +# Ubiquity is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or at your option) +# any later version. +# +# Ubiquity is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with Ubiquity; if not, write to the Free Software Foundation, Inc., 51 +# Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +################################################################################## + +import sys + +from PyQt4 import * +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from ubiquity.misc import format_size + +class Partition: + # colors used to render partition types + # 'auto' is used to represent the results of automatic partitioning. + filesystemColours = {'auto': '#509DE8', + 'ext3': '#418DD4', + 'ext4': '#418DD4', + 'free': '#FFFFFF', + 'linux-swap': '#FF80E0', + 'fat32': '#C0DAFF', + 'fat16': '#C0DAFF', + 'ntfs': '#888786'} + + def __init__(self, name, size, fs): + self.size = size + self.fs = fs + self.next = None + self.index = None + self.name = name + +class PartitionsBar(QWidget): + InfoColor = '#333333' + + ## signals + partitionResized = pyqtSignal(['PyQt_PyObject', 'PyQt_PyObject']) + + def __init__(self, parent = None): + """ a widget to graphically show disk partitions. """ + QWidget.__init__(self, parent) + self.partitions = [] + self.bar_height = 20 #should be a multiple of 2 + self.diskSize = 0 + self.radius = 4 + self.setMinimumHeight(self.bar_height + 40) + self.setMinimumWidth(500) + sizePolicy = self.sizePolicy() + sizePolicy.setVerticalStretch(10) + sizePolicy.setVerticalPolicy(QSizePolicy.Fixed) + self.setSizePolicy(sizePolicy) + + self.resize_loc = 0 + self.resizing = False + self.resize_part = None + + def paintEvent(self, qPaintEvent): + painter = QPainter(self) + + #used for drawing sunken frame + sunkenFrameStyle = QStyleOptionFrame() + sunkenFrameStyle.state = QStyle.State_Sunken + + h = self.bar_height + h_2 = self.bar_height/2 + effective_width = self.width() - 1 + + path = QPainterPath() + path.addRoundedRect(1, 1, self.width()-2, h-2, self.radius, self.radius) + + part_offset = 0 + label_offset = 0 + trunc_pix = 0 + resize_handle_x = None + for p in self.partitions: + painter.setRenderHint(QPainter.Antialiasing, True) + + #this is done so that even after resizing, other partitions draw in the same places + trunc_pix += (effective_width * float(p.size) / self.diskSize) + pix_size = int(round(trunc_pix)) + trunc_pix -= pix_size + + #use the right color for the filesystem + if Partition.filesystemColours.has_key(p.fs): + pColor = QColor(Partition.filesystemColours[p.fs]) + else: + pColor = QColor(Partition.filesystemColours['free']) + + pal = QPalette(pColor) + dark = pal.color(QPalette.Dark) + mid = pColor.darker(125) + midl = mid.lighter(125) + + grad = QLinearGradient(QPointF(0, 0), QPointF(0, h)) + + if p.fs == "free": + grad.setColorAt(.25, mid) + grad.setColorAt(1, midl) + else: + grad.setColorAt(0, midl) + grad.setColorAt(.75, mid) + + painter.setPen(Qt.NoPen) + painter.setBrush(QBrush(grad)) + painter.setClipRect(part_offset, 0, pix_size, h*2) + painter.drawPath(path) + + if part_offset > 0: + painter.setPen(dark) + painter.drawLine(part_offset, 3, part_offset, h - 3) + + painter.setClipping(False) + + draw_labels = True + if draw_labels: + #draw the labels + painter.setPen(Qt.black) + + #name is the path by default, or free space if unpartitioned + name = p.name + if name == None: + if p.fs == 'free': + name = 'free space' + elif p.fs == 'swap': + name = 'swap' + else: + name = p.path + + #label vertical location + labelY = h + 8 + + texts = [] + texts.append(name) + texts.append("%.01f%% (%s)" % (float(p.size) / self.diskSize * 100, format_size(p.size))) + + nameFont = QFont("arial", 10) + infoFont = QFont("arial", 8) + + painter.setFont(nameFont) + v_off = 0 + width = 0 + for text in texts: + textSize = painter.fontMetrics().size(Qt.TextSingleLine, text) + painter.drawText(label_offset + 20, labelY + v_off + textSize.height()/2, text) + v_off += textSize.height() + painter.setFont(infoFont) + painter.setPen(QColor(PartitionsBar.InfoColor)) + width = max(width, textSize.width()) + + painter.setPen(Qt.NoPen) + painter.setBrush(mid) + labelRect = QPainterPath() + labelRect.addRoundedRect(label_offset+1, labelY - 3, 13, 13, 4, 4) + painter.drawPath(labelRect) + + sunkenFrameStyle.rect = QRect(label_offset, labelY-4, 15, 15) + self.style().drawPrimitive(QStyle.PE_Frame, sunkenFrameStyle, painter, self) + self.style().drawPrimitive(QStyle.PE_Frame, sunkenFrameStyle, painter, self) + + label_offset += width + 40 + + #set the handle location for drawing later + if self.resize_part and p == self.resize_part.next: + resize_handle_x = part_offset + + #increment the partition offset + part_offset += pix_size + + sunkenFrameStyle.rect = QRect(0, 0, self.width(), h) + self.style().drawPrimitive(QStyle.PE_Frame, sunkenFrameStyle, painter, self) + + if self.resize_part and resize_handle_x: + # draw a resize handle + part = self.resize_part + xloc = resize_handle_x + self.resize_loc = xloc + side = 1 + arr_dist = 5 + + painter.setPen(Qt.NoPen) + painter.setBrush(Qt.black) + + painter.setRenderHint(QPainter.Antialiasing, True) + #move out so not created every time + arrow_offsets = ( + (0, h/2-1), (4, h/2-1), (4, h/2-3), (8, h/2), + (4, h/2+3), (4, h/2+1), (0, h/2+1)) + + p1 = arrow_offsets[0] + if part.size > part.minsize: + arrow = QPainterPath(QPointF(xloc + -1 * p1[0], p1[1])) + for p in arrow_offsets: + arrow.lineTo(xloc + -1 * p[0] + 1, p[1]) + painter.drawPath(arrow) + + if part.size < part.maxsize: + arrow = QPainterPath(QPointF(xloc + p1[0], p1[1])) + for p in arrow_offsets: + arrow.lineTo(xloc + p[0], p[1]) + painter.drawPath(arrow) + + painter.setRenderHint(QPainter.Antialiasing, False) + painter.setPen(Qt.black) + painter.drawLine(xloc, 0, xloc, h) + + def addPartition(self, name, size, fs): + partition = Partition(name, size, fs) + self.diskSize += size + + #set the previous partition to have this one as next partition + if len(self.partitions) > 0: + last = self.partitions[len(self.partitions)-1] + last.next = partition + + self.partitions.append(partition) + + def setResizePartition(self, path, minsize, maxsize, prefsize, new_label): + part = None + index = 0 + for p in self.partitions: + if p.name == path: + part = p + break + index += 1 + + if not part: + return + + if prefsize > maxsize: + prefsize = maxsize + + new_size = part.size - prefsize + part.size = prefsize + part.minsize = minsize + part.maxsize = maxsize + part.prefsize = prefsize + + self.resize_part = part + + if part.next == None or part.next.index != -1: + #if our resize partition is at the end or the next one is not free space + p = Partition('Linux Educacional', new_size, 'auto') + p.next = part.next + part.next = p + + #insert a new fake partition after the resize partition + self.partitions.insert(index + 1, p) + else: + #we had a next partition that was free space, use that + #set the size of the next partition accordingly + part.next.size += new_size + + # need mouse tracking to be able to change the cursor + self.setMouseTracking(True) + + def mousePressEvent(self, qMouseEvent): + if self.resize_part: + # if pressed on bar + if abs(qMouseEvent.x() - self.resize_loc) < 3: + self.resizing = True + + def mouseMoveEvent(self, qMouseEvent): + if self.resizing: + start = 0 + for p in self.partitions: + if p == self.resize_part: + break + start += p.size + + ew = self.width() - 1 + bpp = self.diskSize / float(ew) + + # mouse position in bytes within this partition + mx = qMouseEvent.x() * bpp - start + + #make sure we are within resize range + if mx < self.resize_part.minsize: + mx = self.resize_part.minsize + elif mx > self.resize_part.maxsize: + mx = self.resize_part.maxsize + + #chagne the partition sizes + span = self.resize_part.prefsize + percent = mx / float(span) + oldsize = self.resize_part.size + self.resize_part.size = int(round(span * percent)) + self.resize_part.next.size -= self.resize_part.size - oldsize + + #sum the partitions and make sure the disk size is still the same + #this is a precautionary measure + t = 0 + for p in self.partitions: + t = t + p.size + assert t == self.diskSize + + self.update() + + #using PyQt object to avoid wrapping the size otherwise qt truncates to 32bit int + self.partitionResized.emit(self.resize_part.name, self.resize_part.size) + else: + if self.resize_part: + if abs(qMouseEvent.x() - self.resize_loc) < 3: + self.setCursor(Qt.SplitHCursor) + elif self.cursor != Qt.ArrowCursor: + self.setCursor(Qt.ArrowCursor) + + def mouseReleaseEvent(self, qMouseEvent): + self.resizing = False diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py new file mode 100644 index 0000000000000000000000000000000000000000..8cd81bd572ad3492294e6c368c9ab48f1369236d --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py @@ -0,0 +1,264 @@ +# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*- + +import syslog + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from ubiquity.misc import * +from ubiquity import i18n + +def get_string(name, lang=None, prefix=None): + """Get the string name in the given lang or a default.""" + if lang is None and 'LANG' in os.environ: + lang = os.environ['LANG'] + return i18n.get_string(name, lang, prefix) + +# describes the display for the manual partition view widget +class PartitionModel(QAbstractItemModel): + def __init__(self, ubiquity, parent=None): + QAbstractItemModel.__init__(self, parent) + + self.rootItem = None + self.clear() + + def clear(self): + rootData = [] + rootData.append(QVariant(get_string('partition_column_device'))) + rootData.append(QVariant(get_string('partition_column_type'))) + rootData.append(QVariant(get_string('partition_column_mountpoint'))) + rootData.append(QVariant(get_string('partition_column_format'))) + rootData.append(QVariant(get_string('partition_column_size'))) + rootData.append(QVariant(get_string('partition_column_used'))) + self.rootItem = TreeItem(rootData) + + def append(self, data, ubiquity): + self.rootItem.appendChild(TreeItem(data, ubiquity, self.rootItem)) + + def columnCount(self, parent): + if parent.isValid(): + return parent.internalPointer().columnCount() + else: + return self.rootItem.columnCount() + + def data(self, index, role): + if not index.isValid(): + return QVariant() + + item = index.internalPointer() + + if role == Qt.CheckStateRole and index.column() == 3: + return QVariant(item.data(index.column())) + elif role == Qt.DisplayRole and index.column() != 3: + return QVariant(item.data(index.column())) + else: + return QVariant() + + def setData(self, index, value, role): + item = index.internalPointer() + if role == Qt.CheckStateRole and index.column() == 3: + item.partman_column_format_toggled(value.toBool()) + self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), index, index) + return True + + def flags(self, index): + if not index.isValid(): + return Qt.ItemIsEnabled + + #self.setData(index, QVariant(Qt.Checked), Qt.CheckStateRole) + #return Qt.ItemIsEnabled | Qt.ItemIsSelectable + if index.column() == 3: + item = index.internalPointer() + if item.formatEnabled(): + return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsUserCheckable + else: + return Qt.ItemIsSelectable | Qt.ItemIsUserCheckable + else: + return Qt.ItemIsEnabled | Qt.ItemIsSelectable + + def headerData(self, section, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + return self.rootItem.data(section) + + return QVariant() + + def index(self, row, column, parent = QModelIndex()): + if not parent.isValid(): + parentItem = self.rootItem + else: + parentItem = parent.internalPointer() + + childItem = parentItem.child(row) + if childItem: + return self.createIndex(row, column, childItem) + else: + return QModelIndex() + + def parent(self, index): + if not index.isValid(): + return QModelIndex() + + childItem = index.internalPointer() + parentItem = childItem.parent() + + if parentItem == self.rootItem: + return QModelIndex() + + return self.createIndex(parentItem.row(), 0, parentItem) + + def rowCount(self, parent): + if not parent.isValid(): + parentItem = self.rootItem + else: + parentItem = parent.internalPointer() + + return parentItem.childCount() + + def children(self): + return self.rootItem.children() + +class TreeItem: + def __init__(self, data, controller=None, parent=None): + self.parentItem = parent + self.itemData = data + self.childItems = [] + self.controller = controller + if controller: + self.dbfilter = controller.dbfilter + else: + self.dbfilter = None + + def appendChild(self, item): + self.childItems.append(item) + + def child(self, row): + return self.childItems[row] + + def childCount(self): + return len(self.childItems) + + def children(self): + return self.childItems + + def columnCount(self): + if self.parentItem is None: + return len(self.itemData) + else: + return 5 + + def data(self, column): + if self.parentItem is None: + return QVariant(self.itemData[column]) + elif column == 0: + return QVariant(self.partman_column_name()) + elif column == 1: + return QVariant(self.partman_column_type()) + elif column == 2: + return QVariant(self.partman_column_mountpoint()) + elif column == 3: + return QVariant(self.partman_column_format()) + elif column == 4: + return QVariant(self.partman_column_size()) + elif column == 5: + return QVariant(self.partman_column_used()) + else: + return QVariant("other") + + def parent(self): + return self.parentItem + + def row(self): + if self.parentItem: + return self.parentItem.childItems.index(self) + + return 0 + + def partman_column_name(self): + partition = self.itemData[1] + if 'id' not in partition: + # whole disk + return partition['device'] + elif partition['parted']['fs'] != 'free': + return ' %s' % partition['parted']['path'] + elif partition['parted']['type'] == 'unusable': + return ' %s' % get_string('partman/text/unusable') + else: + # partman uses "FREE SPACE" which feels a bit too SHOUTY for + # this interface. + return ' %s' % get_string('partition_free_space') + + def partman_column_type(self): + partition = self.itemData[1] + if 'id' not in partition or 'method' not in partition: + if ('parted' in partition and + partition['parted']['fs'] != 'free' and + 'detected_filesystem' in partition): + return partition['detected_filesystem'] + else: + return '' + elif ('filesystem' in partition and + partition['method'] in ('format', 'keep')): + return partition['acting_filesystem'] + else: + return partition['method'] + + def partman_column_mountpoint(self): + partition = self.itemData[1] + if hasattr(self.dbfilter, 'get_current_mountpoint'): + mountpoint = self.dbfilter.get_current_mountpoint(partition) + if mountpoint is None: + mountpoint = '' + else: + mountpoint = '' + return mountpoint + + def partman_column_format(self): + partition = self.itemData[1] + if 'id' not in partition: + return '' + elif 'method' in partition: + if partition['method'] == 'format': + return Qt.Checked + else: + return Qt.Unchecked + else: + return Qt.Unchecked ##FIXME should be enabled(False) + + def formatEnabled(self): + """is the format tickbox enabled""" + partition = self.itemData[1] + return 'method' in partition and 'can_activate_format' in partition + + def partman_column_format_toggled(self, unused_value): + if not self.controller.allowed_change_step(): + return + if not hasattr(self.controller.dbfilter, 'edit_partition'): + return + devpart = self.itemData[0] + partition = self.itemData[1] + if 'id' not in partition or 'method' not in partition: + return + self.controller.allow_change_step(False) + self.controller.dbfilter.edit_partition(devpart, fmt='dummy') + + def partman_column_size(self): + partition = self.itemData[1] + if 'id' not in partition: + return '' + else: + # Yes, I know, 1000000 bytes is annoying. Sorry. This is what + # partman expects. + size_mb = int(partition['parted']['size']) / 1000000 + return '%d MB' % size_mb + + def partman_column_used(self): + partition = self.itemData[1] + if 'id' not in partition or partition['parted']['fs'] == 'free': + return '' + elif 'resize_min_size' not in partition: + return get_string('partition_used_unknown') + else: + # Yes, I know, 1000000 bytes is annoying. Sorry. This is what + # partman expects. + size_mb = int(partition['resize_min_size']) / 1000000 + return '%d MB' % size_mb diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py new file mode 100644 index 0000000000000000000000000000000000000000..55a8800d4944393d3f277018b64c5e63678aa252 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +import sys +import os + +from PyQt4.QtGui import * +from PyQt4.QtCore import * +from PyQt4 import uic +from PyKDE4.kdeui import * +from PyKDE4.kdecore import * + +# Define global path +PATH = '/usr/share/ubiquity' + +#currently using for testing, will remove +UIDIR = os.path.join(PATH, 'qt') + +class ProgressDialog(KMainWindow): + def __init__(self, min, max, parent = None): + QMainWindow.__init__(self, parent) + uic.loadUi(os.path.join(UIDIR, "app-install.ui"), self) + + #self.setWindowFlags(Qt.SplashScreen | Qt.FramelessWindowHint) + #self.setWindowFlags(Qt.SplashScreen | Qt.WindowStaysOnTopHint | Qt.WindowTitleHint) + #self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint) + self.setWindowState(self.windowState() ^ Qt.WindowFullScreen) + + #self.progressLabel = QLabel() + + #self.progressBar = QProgressBar() + self.progressBar.setMinimum(min) + self.setMaximum(max) + + self.minimize_button.clicked.connect(self.showMinimized) + + #self.cancelButton = QPushButton() + #self.cancelButton.clicked.connect(self.reject) + + #progressWidget = QWidget() + #progressWidget.setLayout(QHBoxLayout()) + #progressWidget.layout().setContentsMargins(0,0,0,0) + #progressWidget.layout().addWidget(self.progressBar) + #progressWidget.layout().addWidget(self.cancelButton) + + #self.extraFrame = QFrame() + #self.extraFrame.setFrameStyle(QFrame.StyledPanel) + #self.extraFrame.setFrameShadow(QFrame.Sunken) + self.extraFrame.setLayout(QVBoxLayout()) + self.extraFrame.layout().setContentsMargins(0,0,0,0) + self.extraFrame.setVisible(False) + + #self.setLayout(QVBoxLayout()) + #self.layout().addWidget(self.progressLabel) + #self.layout().addWidget(progressWidget) + #self.layout().addWidget(self.extraFrame) + + self.bgImage = QImage("/usr/share/wallpapers/LE/contents/images/1920x1200.png") + self.scaledBgImage = self.bgImage + + self.reset() + + #self.rejected.connect(self.rejectedSlot) + + def rejectedSlot(self): + self.cancelFlag = True + + def paintEvent(self, pe): + p = QPainter(self) + p.drawImage(0, 0, self.scaledBgImage) + + def reset(self): + self.cancelFlag = False + self.progressLabel.setText("") + self.windowTitle.setText("") + self.progressBar.setValue(0) + self.setVisible(False) + self.cancelButton.setVisible(False) + self.minimize_button.setVisible(False) + self.progressLabel.setVisible(False) + + def wasCanceled(self): + return self.cancelFlag + + def setCancelText(self, string): + self.cancelButton.setText(string) + + def setCancellable(self, val): + #self.cancelButton.setVisible(val) + self.cancelButton.setVisible(False) + + def setMaximum(self, val): + self.progressBar.setMaximum(val) + + def setProgressLabel(self, string): + self.progressLabel.setText(string) + + def setProgressValue(self, val): + self.progressBar.setValue(val) + + def maximum(self): + return self.progressBar.maximum() diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py new file mode 100644 index 0000000000000000000000000000000000000000..f50a8ec34aaf05ffc92427bcc32866f1b367de97 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +#idea from +#http://trac.transmissionbt.com/browser/trunk/qt/squeezelabel.cc +class SqueezeLabel(QLabel): + def __init__(self, parent = None): + QLabel.__init__(self, parent) + + def paintEvent(self, pe): + fm = self.fontMetrics() + if fm.width(self.text()) > self.contentsRect().width(): + oldText = self.text() + elided = fm.elidedText(oldText, Qt.ElideRight, self.width()) + self.setText(elided) + self.setToolTip(oldText) + QLabel.paintEvent(self, pe) + self.setText(oldText) + else: + QLabel.paintEvent(self, pe) diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py new file mode 100644 index 0000000000000000000000000000000000000000..1e36e125f19398d170fe269832b814f64854139e --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*- + +from PyQt4 import QtCore +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +import datetime +import ubiquity.tz +import math + +#contains information about a geographical timezone city +class City: + def __init__(self, loc, pixmap): + self.loc = loc + self.pixmap = pixmap + +class TimezoneMap(QWidget): + + zoneChanged = QtCore.pyqtSignal(object, object) + + def __init__(self, parent): + QWidget.__init__(self, parent) + # currently active city + self.selected_city = None + self.selected_zone = None + #dictionary of full name (ie. 'Australia/Sydney') -> city + self.cities = {} + self.setObjectName("timezone_map") + + #load background pixmap + self.imagePath = "/usr/share/ubiquity/pixmaps/timezone" + self.pixmap = QPixmap("%s/bg.png" % self.imagePath) + + #redraw timer for selected city time + self.timer = QTimer(self) + self.timer.timeout.connect(self.update) + self.timer.start(1000) + + #load the pixmaps for the zone overlays + zones = ['0.0', '1.0', '2.0', '3.0', '3.5', '4.0', '4.5', '5.0', '5.5', '5.75', '6.0', + '6.5', '7.0', '8.0', '9.0', '9.5', '10.0', '10.5', '11.0', '11.5', '12.0', '12.75', '13.0', + '-1.0', '-2.0', '-3.0', '-3.5', '-4.0', '-4.5', '-5.0', '-5.5', '-6.0', '-7.0', + '-8.0', '-9.0', '-9.5', '-10.0', '-11.0'] + + zonePixmaps = {} + + for zone in zones: + #print '%s/timezone_%s.png' % (self.imagePath, zone) + zonePixmaps[zone] = QPixmap('%s/timezone_%s.png' % (self.imagePath, zone)) + + #load the timezones from database + self.tzdb = ubiquity.tz.Database() + for location in self.tzdb.locations: + zone_bits = location.zone.split('/') + + if len(zone_bits) == 1: + continue + + # zone is the hours offset from 0 + zoneHour = (location.raw_utc_offset.seconds)/3600.0 + location.raw_utc_offset.days * 24 + + #wrap around + if zoneHour > 13.0: + zoneHour -= 24.0 + + #set the pixamp to show for the city + zoneS = str(zoneHour) + + #try to find the closest zone + if not zonePixmaps.has_key(zoneS): + if zonePixmaps.has_key(str(zoneHour + .25)): + zoneS = str(zoneHour + .25) + elif zonePixmaps.has_key(str(zoneHour + .25)): + zoneS = str(zoneHour - .25) + elif zonePixmaps.has_key(str(zoneHour + .5)): + zoneS = str(zoneHour + .5) + elif zonePixmaps.has_key(str(zoneHour - .5)): + zoneS = str(zoneHour - .5) + else: + #no zone...default to nothing + zoneS = None + + pixmap = zoneS and zonePixmaps[zoneS] + + #make new city + self.cities[location.zone] = City(location, pixmap) + + #taken from gtk side + def longitudeToX(self, longitude): + # Miller cylindrical map projection is just the longitude as the + # calculation is the longitude from the central meridian of the projection. + # Convert to radians. + x = (longitude * (math.pi / 180)) + math.pi # 0 ... 2pi + # Convert to a percentage. + x = x / (2 * math.pi) + x = x * self.width() + # Adjust for the visible map starting near 170 degrees. + # Percentage shift required, grabbed from measurements using The GIMP. + x = x - (self.width() * 0.039073402) + return x + + def latitudeToY(self, latitude): + # Miller cylindrical map projection, as used in the source map from the CIA + # world factbook. Convert latitude to radians. + y = 1.25 * math.log(math.tan((0.25 * math.pi) + \ + (0.4 * (latitude * (math.pi / 180))))) + # Convert to a percentage. + y = abs(y - 2.30341254338) # 0 ... 4.606825 + y = y / 4.6068250867599998 + # Adjust for the visible map not including anything beyond 60 degrees south + # (150 degrees vs 180 degrees). + y = y * (self.height() * 1.2) + return y + + def paintEvent(self, unused_paintEvent): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + + path = QPainterPath() + path.addRoundedRect(QRectF(self.rect()), 5, 5) + painter.setClipPath(path) + + painter.drawPixmap(self.rect(), self.pixmap) + + if self.selected_city != None: + c = self.selected_city + cpos = self.getPosition(c.loc.latitude, c.loc.longitude) + + if (c.pixmap): + painter.drawPixmap(self.rect(), c.pixmap) + + painter.setBrush(QColor(30, 30, 30, 200)) + painter.setPen(Qt.white) + + #mark the location with a dot + painter.drawEllipse(cpos, 3, 3) + + # paint the time instead of the name + try: + now = datetime.datetime.now(ubiquity.tz.SystemTzInfo(c.loc.zone)) + timestring = now.strftime('%X') + + start = cpos + QPoint(3,-3) + margin = 2 + + # correct the text render position if text will render off widget + text_size = painter.fontMetrics().size(Qt.TextSingleLine, timestring) + text_size += QSize(margin*2, margin*2) + + rect = QRect(start, start + QPoint(text_size.width(), -text_size.height())) + + #check bounds of the time display + if rect.top() < 0: + rect.moveTop(start.y() + 3) + if rect.right() > self.width(): + rect.moveRight(start.x() - 3) + + painter.setPen(Qt.NoPen) + painter.drawRoundedRect(rect, 3, 3) + painter.setPen(Qt.white) + painter.drawText(rect, Qt.AlignCenter, timestring) + + except ValueError: + # Some versions of Python have problems with clocks set + # before the epoch (http://python.org/sf/1646728). + # ignore and don't display a string + pass + + #debug info for making sure the cities are in proper places + '''for c in self.zones['America']['cities']: + cpos = self.getPosition(c.lat, c.long) + + painter.drawLine(cpos + QPoint(1,1), cpos - QPoint(1,1)) + painter.drawLine(cpos + QPoint(1,-1), cpos - QPoint(1,-1)) + #painter.drawText(cpos + QPoint(2,-2), c.city_name)''' + + # @return pixel coordinate of a latitude and longitude for self + # map uses Miller Projection, but is also clipped + def getPosition(self, la, lo): + # need to add/sub magic numbers because the map doesn't actually go from -180...180, -90...90 + # thus the upper corner is not -180, -90 and we have to compensate + # we need a better method of determining the actually range so we can better place citites (shtylman) + xdeg_offset = -6 + # the 180 - 35) accounts for the fact that the map does not span the entire -90 to 90 + # the map does span the entire 360 though, just offset + x = (self.width() * (180.0 + lo) / 360.0) + (self.width() * xdeg_offset/ 180.0) + x = x % self.width() + + #top and bottom clipping latitudes + topLat = 81 + bottomLat = -59 + + #percent of entire possible range + topPer = topLat/180.0 + + # get the y in rectangular coordinates + y = 1.25 * math.log(math.tan(math.pi/4.0 + 0.4 * math.radians(la))) + + # calculate the map range (smaller than full range because the map is clipped on top and bottom + fullRange = 4.6068250867599998 + # the amount of the full range devoted to the upper hemisphere + topOffset = fullRange*topPer + mapRange = abs(1.25 * math.log(math.tan(math.pi/4.0 + 0.4 * math.radians(bottomLat))) - topOffset) + + # Convert to a percentage of the map range + y = abs(y - topOffset) + y = y / mapRange + + # this then becomes the percentage of the height + y = y * self.height() + + return QPoint(int(x), int(y)) + + def mouseReleaseEvent(self, mouseEvent): + pos = mouseEvent.pos() + + # get closest city to the point clicked + closest = None + bestdist = 0 + for c in self.tzdb.locations: + np = pos - self.getPosition(c.latitude, c.longitude) + dist = np.x() * np.x() + np.y() * np.y() + if (dist < bestdist or closest is None): + closest = c + bestdist = dist + + #we need to set the combo boxes + #this will cause the redraw we need + if closest is not None: + self._set_timezone(closest) + + # sets the timezone based on the full name (i.e 'Australia/Sydney') + def set_timezone(self, name): + self._set_timezone(self.tzdb.get_loc(name), name) + + # internal set timezone based on a city + def _set_timezone(self, loc, zone=None): + city = loc and self.cities[loc.zone] + if city: + self.selected_city = city + self.selected_zone = zone or loc.zone + self.zoneChanged.emit(loc, self.selected_zone) + self.repaint() + + # return the full timezone string + def get_timezone(self): + return self.selected_zone diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c3ea73d7576692b4b19a811ea984415b5b5e7d05 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*- + +__all__ = ['Timezone', 'PartitionBar', 'PartitionModel'] diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py new file mode 100644 index 0000000000000000000000000000000000000000..21fec31239d5f87ebbc9023cfc4c60e10c6ef6aa --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- + +import sys +import os + +from PyQt4 import uic +from PyQt4.QtGui import * + +from ubiquity.frontend.kde_components.PartAuto import PartAuto + +if __name__ == "__main__": + import sys + + app = QApplication(sys.argv) + + PartAuto._uidir = '../../../../gui/qt' + + styleFile = os.path.join(PartAuto._uidir, "style.qss") + sf = open(styleFile, 'r') + app.setStyleSheet(sf.read()) + sf.close() + + win = PartAuto() + win.setObjectName("widgetStack") + win.show() + + diskLayout = {'=dev=sda': [ + ('/dev/sda1', 8167670784, '32256-8167703039', "ext3"), + ('/dev/sda5', 419457024, '8167735296-8587192319', "ext3")], + '=dev=sdb': [ + ('/dev/sdb1', 5074965504, '32256-5074997759', "free"), + ('/dev/sdb5', 287852544, '5075030016-5362882559', "ext3")], + '=dev=sdc': [ + ('/dev/sdc1', 5074965504, '32256-5074997759', "ntfs"), + ('/dev/sdc5', 287852544, '5075030016-5362882559', "free")]} + + # call functions twice to test returning to the page + # make sure things are cleared properly + win.setDiskLayout(diskLayout) + win.setDiskLayout(diskLayout) + + biggest_free_choice = u'Use the largest continuous free space', + choices = [u'Install them side by side, choosing between them each startup', + u'Erase and use the entire disk', + u'Specify partitions manually (advanced)'] + + extra_options = {u'Erase and use the entire disk': [u'SCSI1 (0,0,0) (sda) - 8.6 GB ATA VBOX HARDDISK', + u'SCSI1 (0,1,0) (sdb) - 5.4 GB ATA VBOX HARDDISK', + u'SCSI2 (0,1,0) (sdc) - 5.4 GB ATA VBOX HARDDISK'], + u'Install them side by side, choosing between them each startup': (2757079040, + 5485413376, + 4121246208, + '/dev/sda1'), + u'Use the largest continuous free space': []} + + manual_choice = u'Specify partitions manually (advanced)' + resize_choice = u'Install them side by side, choosing between them each startup' + + win.setupChoices(choices, extra_options, resize_choice, manual_choice, + biggest_free_choice) + + win.setupChoices(choices, extra_options, resize_choice, manual_choice, + biggest_free_choice) + + print win.getChoice() + + sys.exit(app.exec_()) diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py new file mode 100644 index 0000000000000000000000000000000000000000..1e1e9d24d51010edea9fcc42fca666df69254b24 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +import sys +import os + +from PyQt4 import uic +from PyQt4.QtGui import * + +from ubiquity.frontend.kde_components.PartitionBar import PartitionsBar + +if __name__ == "__main__": + app = QApplication(sys.argv) + QApplication.setStyle("Oxygen") + + wid = QWidget() + layout = QVBoxLayout(wid) + + pb1 = PartitionsBar(wid) + layout.addWidget(pb1) + + pb1.addPartition('/dev/sdb1', 57511125504, 'ext4') + pb1.addPartition('/dev/sdb5', 2500452864, 'linux-swap') + pb1.setResizePartition('/dev/sdb1', 230989824, 55143440896, 52143440896, 'distro') + + pb2 = PartitionsBar(wid) + layout.addWidget(pb2) + + pb2.addPartition("/dev/sdb1", 5000, "linux-swap") + pb2.addPartition("/dev/sdb2", 20000, "ext3") + pb2.addPartition("/dev/sdb3", 30000, "fat32") + pb2.addPartition("/dev/sdb4", 50000, "ntfs") + pb2.setResizePartition('/dev/sdb2', 5000, 15000, 20000, 'Kubuntu') + + pb2 = PartitionsBar(wid) + layout.addWidget(pb2) + + pb2.addPartition('/dev/sdb1', 4005679104, 'ext4') + pb2.addPartition('/dev/sdb-1', 53505446400, 'free') + pb2.addPartition('/dev/sdb5', 2500452864, 'linux-swap') + + wid.show() + + sys.exit(app.exec_()) diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py new file mode 100644 index 0000000000000000000000000000000000000000..14a257252a1ca5f8a33377dcbbc6788895888bb4 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py @@ -0,0 +1,333 @@ +# -*- coding: utf-8 -*- + +import sys +import os + +from PyQt4 import uic +from PyQt4.QtGui import * + +from ubiquity.frontend.kde_components.PartMan import PartMan + +if __name__ == "__main__": + + app = QApplication(sys.argv) + app.setStyle("Oxygen") + + PartMan._uidir = '../../../../gui/qt' + + styleFile = os.path.join(PartMan._uidir, "style.qss") + sf = open(styleFile, 'r') + app.setStyleSheet(sf.read()) + sf.close() + + win = PartMan(None) + win.setObjectName("widgetStack") + win.show() + + cache_order = [u'/var/lib/partman/devices/=dev=sda//', + u'/var/lib/partman/devices/=dev=sda//32256-8167703039', + u'/var/lib/partman/devices/=dev=sda//8167735296-8587192319', + u'/var/lib/partman/devices/=dev=sdb//', + u'/var/lib/partman/devices/=dev=sdb//32256-5074997759', + u'/var/lib/partman/devices/=dev=sdb//5075030016-5362882559', + u'/var/lib/partman/devices/=dev=sdc//', + u'/var/lib/partman/devices/=dev=sdc//32256-5074997759', + u'/var/lib/partman/devices/=dev=sdc//5075030016-5362882559'] + + disk_cache = {u'/var/lib/partman/devices/=dev=sda//': {'dev': u'=dev=sda', + 'device': '/dev/sda', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sda//', + 'label': ['msdos']}, + u'/var/lib/partman/devices/=dev=sdb//': {'dev': u'=dev=sdb', + 'device': '/dev/sdb', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdb//', + 'label': ['msdos']}, + u'/var/lib/partman/devices/=dev=sdc//': {'dev': u'=dev=sdc', + 'device': '/dev/sdc', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdc//', + 'label': ['msdos']}} + + partition_cache = {u'/var/lib/partman/devices/=dev=sda//32256-8167703039': {'can_resize': True, + 'detected_filesystem': 'ext4', + 'dev': u'=dev=sda', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sda//32256-8167703039', + 'id': u'32256-8167703039', + 'method_choices': [(u'25filesystem', + u'ext4', + u'Ext4 journaling file system'), + (u'25filesystem', + u'ext3', + u'Ext3 journaling file system'), + (u'25filesystem', + u'ext2', + u'Ext2 file system'), + (u'25filesystem', + u'reiserfs', + u'ReiserFS journaling file system'), + (u'25filesystem', + u'jfs', + u'JFS journaling file system'), + (u'25filesystem', + u'xfs', + u'XFS journaling file system'), + (u'25filesystem', + u'fat16', + u'FAT16 file system'), + (u'25filesystem', + u'fat32', + u'FAT32 file system'), + (u'40swap', + u'swap', + u'swap area'), + (u'70dont_use', + u'dontuse', + u'do not use the partition')], + 'parent': u'/dev/sda', + 'parted': {'fs': 'ext4', + 'id': '32256-8167703039', + 'name': '', + 'num': '1', + 'path': '/dev/sda1', + 'size': '8167670784', + 'type': 'primary'}, + 'resize_max_size': 8167670784, + 'resize_min_size': 2758852608, + 'resize_pref_size': 8167670784}, + u'/var/lib/partman/devices/=dev=sda//8167735296-8587192319': {'can_resize': True, + 'detected_filesystem': 'linux-swap', + 'dev': u'=dev=sda', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sda//8167735296-8587192319', + 'id': u'8167735296-8587192319', + 'method': 'swap', + 'method_choices': [(u'25filesystem', + u'ext4', + u'Ext4 journaling file system'), + (u'25filesystem', + u'ext3', + u'Ext3 journaling file system'), + (u'25filesystem', + u'ext2', + u'Ext2 file system'), + (u'25filesystem', + u'reiserfs', + u'ReiserFS journaling file system'), + (u'25filesystem', + u'jfs', + u'JFS journaling file system'), + (u'25filesystem', + u'xfs', + u'XFS journaling file system'), + (u'25filesystem', + u'fat16', + u'FAT16 file system'), + (u'25filesystem', + u'fat32', + u'FAT32 file system'), + (u'40swap', + u'swap', + u'swap area'), + (u'70dont_use', + u'dontuse', + u'do not use the partition')], + 'parent': u'/dev/sda', + 'parted': {'fs': 'linux-swap', + 'id': '8167735296-8587192319', + 'name': '', + 'num': '5', + 'path': '/dev/sda5', + 'size': '419457024', + 'type': 'logical'}, + 'resize_max_size': 419457024, + 'resize_min_size': 4096, + 'resize_pref_size': 419457024}, + u'/var/lib/partman/devices/=dev=sdb//32256-5074997759': {'can_resize': True, + 'detected_filesystem': 'ext4', + 'dev': u'=dev=sdb', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdb//32256-5074997759', + 'id': u'32256-5074997759', + 'method_choices': [(u'25filesystem', + u'ext4', + u'Ext4 journaling file system'), + (u'25filesystem', + u'ext3', + u'Ext3 journaling file system'), + (u'25filesystem', + u'ext2', + u'Ext2 file system'), + (u'25filesystem', + u'reiserfs', + u'ReiserFS journaling file system'), + (u'25filesystem', + u'jfs', + u'JFS journaling file system'), + (u'25filesystem', + u'xfs', + u'XFS journaling file system'), + (u'25filesystem', + u'fat16', + u'FAT16 file system'), + (u'25filesystem', + u'fat32', + u'FAT32 file system'), + (u'40swap', + u'swap', + u'swap area'), + (u'70dont_use', + u'dontuse', + u'do not use the partition')], + 'parent': u'/dev/sdb', + 'parted': {'fs': 'ext4', + 'id': '32256-5074997759', + 'name': '', + 'num': '1', + 'path': '/dev/sdb1', + 'size': '5074965504', + 'type': 'primary'}, + 'resize_max_size': 5074965504, + 'resize_min_size': 223924224, + 'resize_pref_size': 5074965504}, + u'/var/lib/partman/devices/=dev=sdb//5075030016-5362882559': {'can_resize': True, + 'detected_filesystem': 'linux-swap', + 'dev': u'=dev=sdb', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdb//5075030016-5362882559', + 'id': u'5075030016-5362882559', + 'method': 'swap', + 'method_choices': [(u'25filesystem', + u'ext4', + u'Ext4 journaling file system'), + (u'25filesystem', + u'ext3', + u'Ext3 journaling file system'), + (u'25filesystem', + u'ext2', + u'Ext2 file system'), + (u'25filesystem', + u'reiserfs', + u'ReiserFS journaling file system'), + (u'25filesystem', + u'jfs', + u'JFS journaling file system'), + (u'25filesystem', + u'xfs', + u'XFS journaling file system'), + (u'25filesystem', + u'fat16', + u'FAT16 file system'), + (u'25filesystem', + u'fat32', + u'FAT32 file system'), + (u'40swap', + u'swap', + u'swap area'), + (u'70dont_use', + u'dontuse', + u'do not use the partition')], + 'parent': u'/dev/sdb', + 'parted': {'fs': 'linux-swap', + 'id': '5075030016-5362882559', + 'name': '', + 'num': '5', + 'path': '/dev/sdb5', + 'size': '287852544', + 'type': 'logical'}, + 'resize_max_size': 287852544, + 'resize_min_size': 4096, + 'resize_pref_size': 287852544}, + u'/var/lib/partman/devices/=dev=sdc//32256-5074997759': {'can_resize': True, + 'detected_filesystem': 'ext4', + 'dev': u'=dev=sdc', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdc//32256-5074997759', + 'id': u'32256-5074997759', + 'method_choices': [(u'25filesystem', + u'ext4', + u'Ext4 journaling file system'), + (u'25filesystem', + u'ext3', + u'Ext3 journaling file system'), + (u'25filesystem', + u'ext2', + u'Ext2 file system'), + (u'25filesystem', + u'reiserfs', + u'ReiserFS journaling file system'), + (u'25filesystem', + u'jfs', + u'JFS journaling file system'), + (u'25filesystem', + u'xfs', + u'XFS journaling file system'), + (u'25filesystem', + u'fat16', + u'FAT16 file system'), + (u'25filesystem', + u'fat32', + u'FAT32 file system'), + (u'40swap', + u'swap', + u'swap area'), + (u'70dont_use', + u'dontuse', + u'do not use the partition')], + 'parent': u'/dev/sdc', + 'parted': {'fs': 'ext4', + 'id': '32256-5074997759', + 'name': '', + 'num': '1', + 'path': '/dev/sdc1', + 'size': '5074965504', + 'type': 'primary'}, + 'resize_max_size': 5074965504, + 'resize_min_size': 223928320, + 'resize_pref_size': 5074965504}, + u'/var/lib/partman/devices/=dev=sdc//5075030016-5362882559': {'can_resize': True, + 'detected_filesystem': 'linux-swap', + 'dev': u'=dev=sdc', + 'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdc//5075030016-5362882559', + 'id': u'5075030016-5362882559', + 'method': 'swap', + 'method_choices': [(u'25filesystem', + u'ext4', + u'Ext4 journaling file system'), + (u'25filesystem', + u'ext3', + u'Ext3 journaling file system'), + (u'25filesystem', + u'ext2', + u'Ext2 file system'), + (u'25filesystem', + u'reiserfs', + u'ReiserFS journaling file system'), + (u'25filesystem', + u'jfs', + u'JFS journaling file system'), + (u'25filesystem', + u'xfs', + u'XFS journaling file system'), + (u'25filesystem', + u'fat16', + u'FAT16 file system'), + (u'25filesystem', + u'fat32', + u'FAT32 file system'), + (u'40swap', + u'swap', + u'swap area'), + (u'70dont_use', + u'dontuse', + u'do not use the partition')], + 'parent': u'/dev/sdc', + 'parted': {'fs': 'linux-swap', + 'id': '5075030016-5362882559', + 'name': '', + 'num': '5', + 'path': '/dev/sdc5', + 'size': '287852544', + 'type': 'logical'}, + 'resize_max_size': 287852544, + 'resize_min_size': 4096, + 'resize_pref_size': 287852544}} + + win.update(disk_cache, partition_cache, cache_order) + win.update(disk_cache, partition_cache, cache_order) + + sys.exit(app.exec_()) diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py new file mode 100644 index 0000000000000000000000000000000000000000..ca32ecf9c3a5864c7c327e78fbf2e34f0cdb7f0d --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py @@ -0,0 +1,1292 @@ +# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*- +# -*- kate: indent-mode python; space-indent true; indent-width 4; backspace-indents true +# +# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd. +# +# Author(s): +# Jonathan Riddell <jriddell@ubuntu.com> +# Mario Limonciello <superm1@ubuntu.com> +# Roman Shtylman <shtylman@gmail.com> +# +# This file is part of Ubiquity. +# +# Ubiquity is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or at your option) +# any later version. +# +# Ubiquity is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with Ubiquity; if not, write to the Free Software Foundation, Inc., 51 +# Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import sys +import os +import subprocess +import traceback +import syslog +import atexit +import signal +import gettext +import dbus + +# kde gui specifics +from PyQt4.QtCore import * +from PyQt4.QtGui import * +from PyQt4 import uic +from PyKDE4.kdeui import * +from PyKDE4.kdecore import * + +#import all our custom kde components +from ubiquity.frontend.kde_components.ProgressDialog import * +from ubiquity.frontend.kde_components.SqueezeLabel import * + +import debconf + +from ubiquity import filteredcommand, i18n, validation, parted_server +from ubiquity.misc import * +from ubiquity.plugin import Plugin +from ubiquity.components import partman_commit, install +import ubiquity.progressposition +import ubiquity.frontend.base +from ubiquity.frontend.base import BaseFrontend + +# Define global path +PATH = '/usr/share/ubiquity' + +# Define locale path +LOCALEDIR = "/usr/share/locale" + +#currently using for testing, will remove +UIDIR = os.path.join(PATH, 'qt') + +class UbiquityUI(KMainWindow): + + def __init__(self, parent = None): + QMainWindow.__init__(self, parent) + uic.loadUi(os.path.join(UIDIR, "app.ui"), self) + + self.distro_name = "Linux Educacional" + self.distro_release = "" + + ## setup the release and codename + fp = open("/etc/lsb-release", 'r') + + for line in fp: + if "DISTRIB_ID=" in line: + name = str.strip(line.split("=")[1], '\n') + if name != "\"Linux Educacional\"": + self.distro_name = name + elif "DISTRIB_RELEASE=" in line: + self.distro_release = str.strip(line.split("=")[1], '\n') + + fp.close() + + self.distro_name_label.setText(self.distro_name) + self.distro_release_label.setText(self.distro_release) + + self.minimize_button.clicked.connect(self.showMinimized) + self.minimize_button.setVisible(False) + self.quit.setVisible(False) + self.progressCancel.setVisible(False) + + self.setWindowTitle("%s %s" % (self.distro_name, self.distro_release)) + + # don't use stylesheet cause we want to scale the wallpaper for various + # screen sizes as well as support larger screens + self.bgImage = QImage("/usr/share/wallpapers/LE/contents/images/1920x1200.png") + self.scaledBgImage = self.bgImage + + def paintEvent(self, pe): + p = QPainter(self) + p.drawImage(0, 0, self.scaledBgImage) + + def resizeEvent(self, re): + self.scaledBgImage = self.bgImage.scaled(self.width(), self.height(), + Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation) + + def setWizard(self, wizardRef): + self.wizard = wizardRef + + def closeEvent(self, event): + if not self.wizard.on_quit_clicked(): + event.ignore() + +class Controller(ubiquity.frontend.base.Controller): + def translate(self, lang=None, just_me=True, not_me=False, reget=False): + if lang: + self._wizard.locale = lang + self._wizard.translate_pages(lang, just_me, not_me, reget) + + def allow_go_forward(self, allowed): + self._wizard.allow_go_forward(allowed) + + def allow_go_backward(self, allowed): + self._wizard.allow_go_backward(allowed) + + def allow_change_step(self, allowed): + self._wizard.allow_change_step(allowed) + + def allowed_change_step(self): + return self._wizard.allowed_change_step + + def go_forward(self): + self._wizard.ui.next.click() + + def go_backward(self): + self._wizard.ui.back.click() + + def go_to_page(self, widget): + self._wizard.set_current_page(self._wizard.stackLayout.indexOf(widget)) + + def toggle_top_level(self): + if self._wizard.ui.isVisible(): + self._wizard.ui.hide() + else: + self._wizard.ui.show() + self._wizard.refresh() + +class Wizard(BaseFrontend): + + def __init__(self, distro): + BaseFrontend.__init__(self, distro) + + self.previous_excepthook = sys.excepthook + sys.excepthook = self.excepthook + + appName = "kubuntu-ubiquity" + catalog = "" + programName = ki18n ("Installer") + ver = "1.0" + description = ki18n ("Live CD Installer for Kubuntu") + rights = KAboutData.License_GPL + copy = ki18n ("(c) 2006 Canonical Ltd") + text = ki18n ("none") + homePage = "http://wiki.kubuntu.org/KubuntuUbiquity" + bugEmail = "jriddell@ubuntu.com" + + about = KAboutData (appName, catalog, programName, ver, description, + rights, copy, text, homePage, bugEmail) + about.addAuthor(ki18n("Jonathan Riddell"), KLocalizedString() ,"jriddell@ubuntu.com") + about.addAuthor(ki18n("Roman Shtylman"), KLocalizedString() ,"shtylman@gmail.com") + KCmdLineArgs.init([""],about) + + # KApplication won't initialise if real UID != effective UID. On + # the other hand, we can't talk to D-Bus unless the effective user + # is the live CD user. Oh dear. The solution is to use saved IDs: + # if we hide our rootliness in the saved IDs, then neither + # KApplication nor D-Bus will spot it. + drop_privileges_save() + try: + self.app = KApplication() + self.app.setStyleSheet(file(os.path.join(UIDIR, "style.qss")).read()) + finally: + regain_privileges_save() + + self.ui = UbiquityUI() + + # handle smaller screens (old school eee pc + if (QApplication.desktop().screenGeometry().height() < 560): + self.ui.main_frame.setFixedHeight(470) + self.ui.main_frame.setStyleSheet(file(os.path.join(UIDIR, "style_small.qss")).read()) + + # initially the steps widget is not visible + # it becomes visible once the first step becomes active + self.ui.steps_widget.setVisible(False) + self.ui.content_widget.setVisible(False) + + if 'UBIQUITY_GREETER' in os.environ: + self.ui.minimize_button.hide() + + self.ui.setWindowState(self.ui.windowState() ^ Qt.WindowFullScreen) + + self.ui.setWizard(self) + #self.ui.setWindowFlags(Qt.Window | Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint) + + #hide the minimize button if in "install only" mode + if 'UBIQUITY_ONLY' in os.environ or 'UBIQUITY_GREETER' in os.environ: + self.ui.minimize_button.setVisible(False) + + self.stackLayout = QStackedLayout(self.ui.widgetStack) + + self.pages = [] + self.pagesindex = 0 + self.pageslen = 0 + for mod in self.modules: + if hasattr(mod.module, 'PageKde'): + mod.ui_class = mod.module.PageKde + mod.controller = Controller(self) + mod.ui = mod.ui_class(mod.controller) + widgets = mod.ui.get('plugin_widgets') + optional_widgets = mod.ui.get('plugin_optional_widgets') + breadcrumb = mod.ui.get('plugin_breadcrumb') + if widgets or optional_widgets: + def fill_out(widget_list): + rv = [] + if not isinstance(widget_list, list): + widget_list = [widget_list] + for w in widget_list: + if not w: continue + if not isinstance(w, str): + # Until we ship with no pre-built pages, insert + # at 'beginning' + self.stackLayout.insertWidget(self.pageslen, w) + elif hasattr(self.ui, w): + w = getattr(self.ui, w) + rv.append(w) + return rv + mod.widgets = fill_out(widgets) + mod.optional_widgets = fill_out(optional_widgets) + if not hasattr(mod.ui, 'plugin_breadcrumb'): + breadcrumb = '------' # just a placeholder + if breadcrumb: + mod.breadcrumb_question = breadcrumb + mod.breadcrumb = SqueezeLabel() + mod.breadcrumb.setObjectName(mod.breadcrumb_question) + label_index = self.ui.steps_widget.layout().count() - 2 # Room for install crumb + self.ui.steps_widget.layout().insertWidget(label_index, mod.breadcrumb) + else: + mod.breadcrumb_question = None + mod.breadcrumb = None # page intentionally didn't want a label (intro) + self.pageslen += 1 + self.pages.append(mod) + self.user_pageslen = self.pageslen + + # declare attributes + self.language_questions = ( + 'live_installer', + 'step_label', + 'quit', + 'back', + 'next', + 'warning_dialog', + 'warning_dialog_label', + 'cancelbutton', + 'exitbutton', + 'install_process_label' + ) + + self.current_page = None + self.first_seen_page = None + self.allowed_change_step = True + self.allowed_go_backward = True + self.allowed_go_forward = True + self.stay_on_page = False + self.mainLoopRunning = False + self.progress_position = ubiquity.progressposition.ProgressPosition() + self.progress_cancelled = False + self.previous_partitioning_page = self.step_index("stepPartAuto") + self.installing = False + self.installing_no_return = False + self.returncode = 0 + self.backup = False + self.history = [] + self.progressDialog = ProgressDialog(0, 0, self.ui) + + self.laptop = execute("laptop-detect") + + # set default language + self.locale = i18n.reset_locale(self) + + self.debconf_callbacks = {} # array to keep callback functions needed by debconf file descriptors + + self.ui.setWindowIcon(KIcon("ubiquity")) + self.allow_go_backward(False) + + if not 'UBIQUITY_AUTOMATIC' in os.environ: + self.ui.show() + + self.stop_debconf() + self.translate_widgets(reget=True) + + if self.oem_config: + self.ui.setWindowTitle(self.get_string('oem_config_title')) + elif self.oem_user_config: + self.ui.setWindowTitle(self.get_string('oem_user_config_title')) + self.ui.setWindowIcon(KIcon("preferences-system")) + flags = self.ui.windowFlags() ^ Qt.WindowMinMaxButtonsHint + if hasattr(Qt, 'WindowCloseButtonHint'): + flags = flags ^ Qt.WindowCloseButtonHint + self.ui.setWindowFlags(flags) + #self.ui.quit.hide() + # TODO cjwatson 2010-04-07: provide alternative strings instead + self.ui.install_process_label.hide() + self.ui.breadcrumb_install.hide() + + iconLoader = KIconLoader() + warningIcon = iconLoader.loadIcon("dialog-warning", KIconLoader.Desktop) + + # TODO move to plugin + #self.ui.part_advanced_warning_image.setPixmap(warningIcon) + + self.forwardIcon = KIcon("go-next") + self.ui.next.setIcon(self.forwardIcon) + + #Used for the last step + self.applyIcon = KIcon("dialog-ok-apply") + + backIcon = KIcon("go-previous") + self.ui.back.setIcon(backIcon) + + quitIcon = KIcon("dialog-close") + #self.ui.quit.setIcon(quitIcon) + + self.ui.progressBar.hide() + #self.ui.progressCancel.hide() + + def excepthook(self, exctype, excvalue, exctb): + """Crash handler.""" + + if (issubclass(exctype, KeyboardInterrupt) or + issubclass(exctype, SystemExit)): + return + + tbtext = ''.join(traceback.format_exception(exctype, excvalue, exctb)) + syslog.syslog(syslog.LOG_ERR, + "Exception in KDE frontend (invoking crash handler):") + for line in tbtext.split('\n'): + syslog.syslog(syslog.LOG_ERR, line) + print >>sys.stderr, ("Exception in KDE frontend" + " (invoking crash handler):") + print >>sys.stderr, tbtext + + self.post_mortem(exctype, excvalue, exctb) + + if os.path.exists('/usr/share/apport/apport-qt'): + self.previous_excepthook(exctype, excvalue, exctb) + else: + dialog = QDialog(self.ui) + uic.loadUi("%s/crashdialog.ui" % UIDIR, dialog) + dialog.beastie_url.setOpenExternalLinks(True) + dialog.crash_detail.setText(tbtext) + dialog.exec_() + sys.exit(1) + + # Disable the KDE media notifier to avoid problems during partitioning. + def disable_volume_manager(self): + #FIXME, medianotifier unload port to KDE 4" + #execute('dcop', 'kded', 'kded', 'unloadModule', 'medianotifier') + atexit.register(self.enable_volume_manager) + + def enable_volume_manager(self): + #FIXME, medianotifier unload port to KDE 4" + #execute('dcop', 'kded', 'kded', 'loadModule', 'medianotifier') + pass + + def run(self): + """run the interface.""" + + if os.getuid() != 0: + title = ('This installer must be run with administrative ' + 'privileges, and cannot continue without them.') + QMessageBox.critical(self.ui, "Must be root", title) + sys.exit(1) + + self.disable_volume_manager() + + self.allow_change_step(True) + + # Declare SignalHandler + self.ui.next.clicked.connect(self.on_next_clicked) + self.ui.back.clicked.connect(self.on_back_clicked) + #self.ui.quit.clicked.connect(self.on_quit_clicked) + + if 'UBIQUITY_AUTOMATIC' in os.environ: + self.debconf_progress_start(0, self.pageslen, + self.get_string('ubiquity/install/checking')) + self.progressDialog.setWindowTitle( + self.get_string('ubiquity/install/title')) + self.progressDialog.windowTitle.setText( + self.get_string('ubiquity/install/title')) + self.refresh() + self.refresh() + + # Start the interface + self.set_current_page(0) + + while(self.pagesindex < self.pageslen): + if self.current_page == None: + break + + self.backup = False + if not self.pages[self.pagesindex].filter_class: + # This page is just a UI page + self.dbfilter = None + self.dbfilter_status = None + if self.set_page(self.pages[self.pagesindex].module.NAME): + self.allow_change_step(True) + self.app.exec_() + else: + old_dbfilter = self.dbfilter + if issubclass(self.pages[self.pagesindex].filter_class, Plugin): + ui = self.pages[self.pagesindex].ui + else: + ui = None + self.start_debconf() + self.dbfilter = self.pages[self.pagesindex].filter_class(self, ui=ui) + + # Non-debconf steps are no longer possible as the interface is now + # driven by whether there is a question to ask. + if self.dbfilter is not None and self.dbfilter != old_dbfilter: + self.allow_change_step(False) + QTimer.singleShot(0, lambda: self.dbfilter.start(auto_process=True)) + + self.pages[self.pagesindex].controller.dbfilter = self.dbfilter + self.app.exec_() + self.pages[self.pagesindex].controller.dbfilter = None + + if self.backup or self.dbfilter_handle_status(): + if self.installing: + self.progress_loop() + elif self.current_page is not None and not self.backup: + self.process_step() + if not self.stay_on_page: + self.pagesindex = self.pagesindex + 1 + if 'UBIQUITY_AUTOMATIC' in os.environ: + # if no debconf_progress, create another one, set start to pageindex + self.debconf_progress_step(1) + self.refresh() + if self.backup: + self.pagesindex = self.pop_history() + + self.app.processEvents() + + # needed to be here for --automatic as there might not be any + # current page in the event all of the questions have been + # preseeded. + if self.pagesindex == self.pageslen: + # Ready to install + self.ui.hide() + self.current_page = None + self.installing = True + self.progress_loop() + + return self.returncode + + def set_layout_direction(self, lang=None): + if not lang: + lang = self.locale + # TODO: At the moment we have to special-case languages. This will + # be easier to fix when we move to cdebconf and have the + # debconf/text-direction template easily available. + if lang.startswith('ar') or lang.startswith('he'): + direction = Qt.RightToLeft + else: + direction = Qt.LeftToRight + self.app.setLayoutDirection(direction) + + def all_children(self, parentWidget=None): + if parentWidget is None: + parentWidget = self.ui + + def recurse(x, y): + return x + self.all_children(y) + rv = reduce(recurse, parentWidget.children(), [parentWidget]) + return rv + + def translate_pages(self, lang=None, just_current=True, not_current=False, reget=False): + current_page = self.pages[self.pagesindex] + if just_current: + pages = [self.pages[self.pagesindex]] + else: + pages = self.pages + widgets = [] + for p in pages: + # There's no sense retranslating the page we're leaving. + if not_current and p == current_page: + continue + prefix = p.ui.get('plugin_prefix') + for w in p.widgets: + for c in self.all_children(w): + widgets.append((c, prefix)) + + #if not just_current: + #for toplevel in self.toplevels: + #if toplevel.name != 'live_installer': + #for c in self.all_children(toplevel): + #widgets.append((c, None)) + self.translate_widgets(lang=lang, widgets=widgets, reget=reget) + + # translates widget text based on the object names + # widgets is a list of (widget, prefix) pairs + def translate_widgets(self, lang=None, widgets=None, reget=True): + if lang is None: + lang = self.locale + if lang is None: + languages = [] + else: + languages = [lang] + if widgets is None: + widgets = [(x, None) for x in self.all_children()] + + if reget: + core_names = ['ubiquity/text/%s' % q for q in self.language_questions] + core_names.append('ubiquity/text/oem_config_title') + core_names.append('ubiquity/text/oem_user_config_title') + core_names.append('ubiquity/text/breadcrumb_install') + for stock_item in ('cancel', 'close', 'go-back', 'go-forward', + 'ok', 'quit', 'yes', 'no'): + core_names.append('ubiquity/imported/%s' % stock_item) + prefixes = [] + for p in self.pages: + prefix = p.ui.get('plugin_prefix') + if not prefix: + prefix = 'ubiquity/text' + if p.ui.get('plugin_is_language'): + children = reduce(lambda x,y: x + self.all_children(y), p.widgets, []) + core_names.extend([prefix+'/'+c.objectName() for c in children]) + if p.breadcrumb_question: + core_names.append(p.breadcrumb_question) + prefixes.append(prefix) + i18n.get_translations(languages=languages, core_names=core_names, extra_prefixes=prefixes) + + # We always translate always-visible widgets + for q in self.language_questions: + if hasattr(self.ui, q): + widgets.append((getattr(self.ui, q), None)) + elif q == 'live_installer': + widgets.append((self.ui, None)) + widgets.extend([(x, None) for x in self.all_children(self.ui.steps_widget)]) + + for w in widgets: + self.translate_widget(w[0], lang=lang, prefix=w[1]) + + self.set_layout_direction() + + def translate_widget_children(self, parentWidget): + for w in self.all_children(parentWidget): + self.translate_widget(w) + + def translate_widget(self, widget, lang=None, prefix=None): + if lang is None: + lang = self.locale + #FIXME needs translations for Next, Back and Cancel + if not isinstance(widget, QWidget): + return + + name = str(widget.objectName()) + + text = self.get_string(name, lang, prefix) + + if str(name) == "UbiquityUIBase": + text = self.get_string("live_installer", lang, prefix) + + if text is None: + return + + if isinstance(widget, QLabel): + if name == 'step_label': + text = text.replace('${INDEX}', str(self.pagesindex+1)) + text = text.replace('${TOTAL}', str(self.user_pageslen)) + elif name == 'ready_text_label' and self.oem_user_config: + text = self.get_string('ready_text_oem_user_label', lang, prefix) + elif name == 'select_language_label' and self.oem_user_config: + text = self.get_string('select_language_oem_user_label', lang, prefix) + + if 'heading_label' in name: + widget.setText("<h2>" + text + "</h2>") + elif 'extra_label' in name: + widget.setText("<small>" + text + "</small>") + elif ('group_label' in name or 'warning_label' in name or + name in ('drives_label', 'partition_method_label')): + widget.setText("<strong>" + text + "</strong>") + else: + widget.setText(text) + + elif isinstance(widget, QAbstractButton): + widget.setText(text.replace('_', '&', 1)) + + elif isinstance(widget, QWidget) and str(name) == "UbiquityUIBase": + if self.oem_config: + text = self.get_string('oem_config_title', lang, prefix) + elif self.oem_user_config: + text = self.get_string('oem_user_config_title', lang, prefix) + widget.setWindowTitle(text) + + else: + print "WARNING: unknown widget: " + name + print "Type: ", type(widget) + + def allow_change_step(self, allowed): + if allowed: + cursor = QCursor(Qt.ArrowCursor) + else: + cursor = QCursor(Qt.WaitCursor) + self.ui.setCursor(cursor) + self.ui.back.setEnabled(allowed and self.allowed_go_backward) + self.ui.next.setEnabled(allowed and self.allowed_go_forward) + self.allowed_change_step = allowed + + def allow_go_backward(self, allowed): + self.ui.back.setEnabled(allowed and self.allowed_change_step) + self.allowed_go_backward = allowed + + def allow_go_forward(self, allowed): + self.ui.next.setEnabled(allowed and self.allowed_change_step) + self.allowed_go_forward = allowed + + def dbfilter_handle_status(self): + """If a dbfilter crashed, ask the user if they want to continue anyway. + + Returns True to continue, or False to try again.""" + + if not self.dbfilter_status or self.current_page is None: + return True + + syslog.syslog('dbfilter_handle_status: %s' % str(self.dbfilter_status)) + + # TODO cjwatson 2007-04-04: i18n + text = ('%s failed with exit code %s. Further information may be ' + 'found in /var/log/syslog. Do you want to try running this ' + 'step again before continuing? If you do not, your ' + 'installation may fail entirely or may be broken.' % + (self.dbfilter_status[0], self.dbfilter_status[1])) + #FIXME QMessageBox seems to have lost the ability to set custom labels + # so for now we have to get by with these not-entirely meaningful stock labels + answer = QMessageBox.warning(self.ui, + '%s crashed' % self.dbfilter_status[0], + text, QMessageBox.Retry, + QMessageBox.Ignore, QMessageBox.Close) + self.dbfilter_status = None + syslog.syslog('dbfilter_handle_status: answer %d' % answer) + if answer == QMessageBox.Ignore: + return True + elif answer == QMessageBox.Close: + self.quit() + else: + step = self.step_name(self.get_current_page()) + if str(step) == "partman": + self.set_current_page(self.step_index("stepPartAuto")) + return False + + def step_name(self, step_index): + if step_index < 0: + step_index = 0 + return str(self.stackLayout.widget(step_index).objectName()) + + def step_index(self, step_name): + if hasattr(self.ui, step_name): + step = getattr(self.ui, step_name) + return self.stackLayout.indexOf(step) + else: + return 0 + + def set_page(self, n): + self.run_automation_error_cmd() + self.ui.show() + + borderCSS = "border-width: 6px; border-image: url(/usr/share/ubiquity/qt/images/label_border.png) 6px;" + activeSS = "color: %s; " % "#666666" + inactiveSS = "color: %s; " % "#b3b3b3" + currentSS = "%s color: %s; " % (borderCSS, "#0088aa") + + #set all the steps active + #each step will set its previous ones as inactive + #this handles the ability to go back + + found = False + is_install = False + for page in self.pages: + if page.module.NAME == n: + # Now ask ui class which page we want to be showing right now + if hasattr(page.ui, 'plugin_get_current_page'): + cur = page.ui.call('plugin_get_current_page') + if isinstance(cur, str) and hasattr(self.ui, cur): + cur = getattr(self.ui, cur) # for not-yet-plugins + elif page.widgets: + cur = page.widgets[0] + if not cur: + return False + index = self.stackLayout.indexOf(cur) + self.add_history(page, cur) + self.set_current_page(index) + if page.breadcrumb: + page.breadcrumb.setStyleSheet(currentSS) + found = True + is_install = page.ui.get('plugin_is_install') + elif page.breadcrumb: + if found: + page.breadcrumb.setStyleSheet(activeSS) + else: + page.breadcrumb.setStyleSheet(inactiveSS) + self.ui.breadcrumb_install.setStyleSheet(activeSS) + + if is_install: + self.ui.next.setText(self.get_string('install_button').replace('_', '&', 1)) + self.ui.next.setIcon(self.applyIcon) + + if self.pagesindex == 0: + self.allow_go_backward(False) + else: + self.allow_go_backward(True) + + return True + + def page_name(self, step_index): + if step_index < 0: + step_index = 0 + return str(self.stackLayout.widget(step_index).objectName()) + + def add_history(self, page, widget): + history_entry = (page, widget) + if self.history: + # We may have skipped past child pages of the component. Remove + # the history between the page we're on and the end of the list in + # that case. + if history_entry in self.history: + idx = self.history.index(history_entry) + if idx + 1 < len(self.history): + self.history = self.history[:idx+1] + return # The page is now effectively a dup + # We may have either jumped backward or forward over pages. + # Correct history in that case + new_index = self.pages.index(page) + old_index = self.pages.index(self.history[-1][0]) + # First, pop if needed + if new_index < old_index: + while self.history[-1][0] != page and len(self.history) > 1: + self.pop_history() + # Now push fake history if needed + i = old_index + 1 + while i < new_index: + for _ in self.pages[i].widgets: + self.history.append((self.pages[i], None)) + i += 1 + + if history_entry == self.history[-1]: + return # Don't add the page if it's a dup + self.history.append(history_entry) + + def pop_history(self): + if len(self.history) < 2: + return self.pagesindex + self.history.pop() + return self.pages.index(self.history[-1][0]) + + def set_current_page(self, current): + widget = self.stackLayout.widget(current) + if self.stackLayout.currentWidget() == widget: + # self.ui.widgetStack.raiseWidget() will do nothing. + # Update state ourselves. + self.on_steps_switch_page(current) + else: + self.stackLayout.setCurrentWidget(widget) + self.on_steps_switch_page(current) + + def progress_loop(self): + """prepare, copy and config the system in the core install process.""" + syslog.syslog('progress_loop()') + + self.current_page = None + + slideshow_dir = '/usr/share/ubiquity-slideshow' + slideshow_locale = self.slideshow_get_available_locale(slideshow_dir, self.locale) + slideshow_main = slideshow_dir + '/slides/index.html' + + s = self.app.desktop().availableGeometry() + fail = None + if os.path.exists(slideshow_main): + if s.height >= 600 and s.width >= 800: + slides = 'file://' + slideshow_main + if slideshow_locale != 'c': #slideshow will use default automatically + slides += '#?locale=' + slideshow_locale + ltr = i18n.get_string('default-ltr', slideshow_locale, 'ubiquity/imported') + if ltr == 'default:RTL': + slides += '?rtl' + try: + from PyQt4.QtWebKit import QWebView + from PyQt4.QtWebKit import QWebPage + + def openLink(qUrl): + QDesktopServices.openUrl(qUrl) + + webView = QWebView() + + webView.linkClicked.connect(openLink) + + webView.setContextMenuPolicy(Qt.NoContextMenu) + webView.page().setLinkDelegationPolicy(QWebPage.DelegateExternalLinks) + webView.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) + webView.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) + #webView.setFixedSize(700,420) + webView.setFixedSize(700,400) + + webView.load(QUrl(slides)) + + #add the webview to the extra frame of the progress dialog + self.progressDialog.extraFrame.layout().addWidget(webView) + self.progressDialog.extraFrame.setVisible(True) + except ImportError: + fail = 'Webkit not present.' + else: + fail = 'Display < 800x600 (%sx%s).' % (s.width, s.height) + else: + fail = 'No slides present for %s.' % slideshow_dir + if fail: + syslog.syslog('Not displaying the slideshow: %s' % fail) + + self.progressDialog.show() + + self.debconf_progress_start( + # 0, 78, self.get_string('ubiquity/install/title')) + 0, 100, self.get_string('ubiquity/install/title')) + self.debconf_progress_region(0, 15) + + if not self.oem_user_config: + self.start_debconf() + dbfilter = partman_commit.PartmanCommit(self) + if dbfilter.run_command(auto_process=True) != 0: + while self.progress_position.depth() != 0: + self.debconf_progress_stop() + self.progressDialog.hide() + self.return_to_partitioning() + return + + # No return to partitioning from now on + self.installing_no_return = True + + self.debconf_progress_region(15, 78) + + self.start_debconf() + dbfilter = install.Install(self) + ret = dbfilter.run_command(auto_process=True) + if ret != 0: + self.installing = False + if ret == 3: + # error already handled by Install + sys.exit(ret) + elif (os.WIFSIGNALED(ret) and + os.WTERMSIG(ret) in (signal.SIGINT, signal.SIGKILL, + signal.SIGTERM)): + sys.exit(ret) + elif os.path.exists('/var/lib/ubiquity/install.trace'): + tbfile = open('/var/lib/ubiquity/install.trace') + realtb = tbfile.read() + tbfile.close() + raise RuntimeError, ("Install failed with exit code %s\n%s" % + (ret, realtb)) + else: + raise RuntimeError, ("Install failed with exit code %s; see " + "/var/log/syslog" % ret) + + while self.progress_position.depth() != 0: + self.debconf_progress_stop() + + # just to make sure + self.progressDialog.hide() + + self.installing = False + quitText = '<qt>%s</qt>' % self.get_string("finished_label") + rebootButtonText = self.get_string("reboot_button") + quitButtonText = self.get_string("quit_button") + titleText = self.get_string("finished_dialog") + + ##FIXME use non-stock messagebox to customise button text + #quitAnswer = QMessageBox.question(self.ui, titleText, quitText, rebootButtonText, quitButtonText) + self.run_success_cmd() + if self.oem_user_config: + self.quit() + elif not self.get_reboot_seen(): + if ('UBIQUITY_ONLY' in os.environ or + 'UBIQUITY_GREETER' in os.environ): + quitText = self.get_string('ubiquity/finished_restart_only') + messageBox = QMessageBox(QMessageBox.Question, titleText, quitText, QMessageBox.NoButton, self.ui) + messageBox.addButton(rebootButtonText, QMessageBox.AcceptRole) + if ('UBIQUITY_ONLY' not in os.environ and + 'UBIQUITY_GREETER' not in os.environ): + messageBox.addButton(quitButtonText, QMessageBox.RejectRole) + messageBox.setWindowFlags(messageBox.windowFlags() | Qt.WindowStaysOnTopHint) + quitAnswer = messageBox.exec_() + + if quitAnswer == 0: + self.reboot() + elif self.get_reboot(): + self.reboot() + + def reboot(self, *args): + """reboot the system after installing process.""" + self.returncode = 10 + self.quit() + + def do_reboot(self): + """Callback for main program to actually reboot the machine.""" + try: + session = dbus.Bus.get_session() + ksmserver = session.name_has_owner('org.kde.ksmserver') + except dbus.exceptions.DBusException: + ksmserver = False + if ksmserver: + ksmserver = session.get_object('org.kde.ksmserver', '/KSMServer') + ksmserver = dbus.Interface(ksmserver, 'org.kde.KSMServerInterface') + # ShutdownConfirmNo, ShutdownTypeReboot, ShutdownModeForceNow + ksmserver.logout(0, 1, 2) + else: + execute_root('reboot') + + def quit(self): + """quit installer cleanly.""" + self.current_page = None + if self.dbfilter is not None: + self.dbfilter.cancel_handler() + + self.app.exit() + + def quit_installer(self): + """quit installer cleanly.""" + + # exiting from application + self.current_page = None + if self.dbfilter is not None: + self.dbfilter.cancel_handler() + self.quit_main_loop() + + def on_quit_clicked(self): + warning_dialog_label = self.get_string("warning_dialog_label") + abortTitle = self.get_string("warning_dialog") + continueButtonText = self.get_string("continue") + yes = self.get_string('yes', prefix='ubiquity/imported') + no = self.get_string('no', prefix='ubiquity/imported') + if yes and no: + yes = KGuiItem(yes.replace('_', '&', 1)) + no = KGuiItem(no.replace('_', '&', 1)) + args = (self.ui, abortTitle, warning_dialog_label, yes, no) + else: + args = (self.ui, abortTitle, warning_dialog_label) + response = KMessageBox.questionYesNo(*args) + if response == KMessageBox.Yes: + self.current_page = None + self.quit() + return True + else: + return False + + def on_next_clicked(self): + """Callback to control the installation process between steps.""" + if not self.allowed_change_step or not self.allowed_go_forward: + return + + self.allow_change_step(False) + + if self.dbfilter is not None: + self.dbfilter.ok_handler() + # expect recursive main loops to be exited and + # debconffilter_done() to be called when the filter exits + else: + self.app.exit() + + def process_step(self): + """Process and validate the results of this step.""" + + # setting actual step + step_num = self.get_current_page() + step = self.page_name(step_num) + syslog.syslog('Step_before = %s' % step) + + if step.startswith("stepPart"): + self.previous_partitioning_page = step_num + + # Automatic partitioning + if step == "stepPartAuto": + self.process_autopartitioning() + + def process_autopartitioning(self): + """Processing automatic partitioning step tasks.""" + self.app.processEvents() + + # For safety, if we somehow ended up improperly initialised + # then go to manual partitioning. + choice = self.get_autopartition_choice()[0] + if self.manual_choice is None or choice == self.manual_choice: + self.set_current_page(self.step_index("stepPartAdvanced")) + else: + self.set_current_page(self.step_index("stepUserInfo")) + + def on_back_clicked(self): + """Callback to set previous screen.""" + if not self.allowed_change_step: + return + + self.allow_change_step(False) + + self.backup = True + self.stay_on_page = False + + # Enabling next button + self.allow_go_forward(True) + # Setting actual step + step = self.step_name(self.get_current_page()) + self.ui.setCursor(QCursor(Qt.WaitCursor)) + + if str(step) == "summary": + self.ui.next.setText(self.get_string("next").replace('_', '&', 1)) + self.ui.next.setIcon(self.forwardIcon) + self.translate_widget(self.ui.next) + + if self.dbfilter is not None: + self.dbfilter.cancel_handler() + # expect recursive main loops to be exited and + # debconffilter_done() to be called when the filter exits + else: + self.app.exit() + + def on_steps_switch_page(self, newPageID): + self.ui.content_widget.show() + self.current_page = newPageID + name = self.step_name(newPageID) + #self.translate_widget(self.ui.step_label) + syslog.syslog('switched to page %s' % name) + if 'UBIQUITY_GREETER' in os.environ: + if name == 'language': + self.ui.steps_widget.hide() + self.ui.navigation.hide() + else: + self.ui.steps_widget.show() + self.ui.navigation.show() + else: + self.ui.steps_widget.show() + self.ui.navigation.show() + + def watch_debconf_fd (self, from_debconf, process_input): + self.debconf_fd_counter = 0 + self.socketNotifierRead = QSocketNotifier(from_debconf, QSocketNotifier.Read, self.app) + self.socketNotifierRead.activated[int].connect(self.watch_debconf_fd_helper_read) + + self.socketNotifierWrite = QSocketNotifier(from_debconf, QSocketNotifier.Write, self.app) + self.socketNotifierWrite.activated[int].connect(self.watch_debconf_fd_helper_write) + + self.socketNotifierException = QSocketNotifier(from_debconf, QSocketNotifier.Exception, self.app) + self.socketNotifierException.activated[int].connect(self.watch_debconf_fd_helper_exception) + + self.debconf_callbacks[from_debconf] = process_input + self.current_debconf_fd = from_debconf + + def watch_debconf_fd_helper_read (self, source): + self.debconf_fd_counter += 1 + debconf_condition = 0 + debconf_condition |= filteredcommand.DEBCONF_IO_IN + self.debconf_callbacks[source](source, debconf_condition) + + def watch_debconf_fd_helper_write(self, source): + debconf_condition = 0 + debconf_condition |= filteredcommand.DEBCONF_IO_OUT + self.debconf_callbacks[source](source, debconf_condition) + + def watch_debconf_fd_helper_exception(self, source): + debconf_condition = 0 + debconf_condition |= filteredcommand.DEBCONF_IO_ERR + self.debconf_callbacks[source](source, debconf_condition) + + def debconf_progress_start (self, progress_min, progress_max, progress_title): + if progress_title is None: + progress_title = "" + total_steps = progress_max - progress_min + skipText = self.get_string("progress_cancel_button") + + #self.ui.progressCancel.setText(skipText) + + self.progressDialog.setWindowModality(Qt.WindowModal) + self.progressDialog.setCancelText(skipText) + self.progressDialog.setCancellable(False) + self.progressDialog.setMaximum(total_steps) + self.progressDialog.distro_name_label.setText(self.ui.distro_name) + self.progressDialog.distro_release_label.setText(self.ui.distro_release) + #self.progressDialog.minimize_button.setVisible(False) + self.progressDialog.setWindowTitle(progress_title) + self.progressDialog.windowTitle.setText(progress_title) + #self.progressDialog.show() + #p = QPainter(self) + #p.drawImage(0, 0, self.ui.scaledBgImage) + + + # TODO cancel button + + self.ui.progressBar.setMaximum(total_steps) + self.ui.progressBar.setFormat(progress_title + " %p%") + self.ui.progressBar.show() + + self.ui.content_widget.setEnabled(False) + + self.progress_position.start(progress_min, progress_max, + progress_title) + + self.debconf_progress_set(0) + + + def debconf_progress_set (self, progress_val): + self.progress_cancelled = self.progressDialog.wasCanceled() + if self.progress_cancelled: + return False + self.progress_position.set(progress_val) + fraction = self.progress_position.fraction() + + self.progressDialog.setProgressValue( + int(fraction * self.progressDialog.maximum())) + + self.ui.progressBar.setValue(int(fraction * self.ui.progressBar.maximum())) + + return True + + def debconf_progress_step (self, progress_inc): + self.progress_cancelled = self.progressDialog.wasCanceled() + if self.progress_cancelled: + return False + self.progress_position.step(progress_inc) + fraction = self.progress_position.fraction() + + self.progressDialog.setProgressValue( + int(fraction * self.progressDialog.maximum())) + + self.ui.progressBar.setValue(int(fraction * self.ui.progressBar.maximum())) + + return True + + def debconf_progress_info (self, progress_info): + self.progress_cancelled = self.progressDialog.wasCanceled() + if self.progress_cancelled: + return False + + self.progressDialog.setProgressLabel(progress_info) + self.ui.progressBar.setFormat(progress_info + " %p%") + + return True + + def debconf_progress_stop (self): + self.progress_cancelled = False + self.progress_position.stop() + if self.progress_position.depth() == 0: + self.progressDialog.reset() # also hides dialog + else: + self.progressDialog.setWindowTitle(self.progress_position.title()) + self.progressDialog.windowTitle.setText(self.progress_position.title()) + + self.ui.content_widget.setEnabled(True) + self.ui.progressBar.hide() + + def debconf_progress_region (self, region_start, region_end): + self.progress_position.set_region(region_start, region_end) + + def debconf_progress_cancellable (self, cancellable): + if cancellable: + self.progressDialog.setCancellable(True) + #self.ui.progressCancel.show() + else: + #self.ui.progressCancel.hide() + self.progressDialog.setCancellable(False) + self.progress_cancelled = False + + #def on_progress_cancel_button_clicked (self, button): + # self.progress_cancelled = True + + def debconffilter_done (self, dbfilter): + # processing events here prevents GUI from hanging until mouse moves (LP #556376) + self.app.processEvents() + ##FIXME in Qt 4 without this disconnect it calls watch_debconf_fd_helper_read once more causing + ## a crash after the keyboard stage. No idea why. + try: + self.socketNotifierRead.activated.disconnect(self.watch_debconf_fd_helper_read) + except Exception: + pass # May not be connected if it's a trivial dbfilter + if BaseFrontend.debconffilter_done(self, dbfilter): + self.app.exit() + return True + else: + return False + + def installation_medium_mounted (self, message): + self.ui.part_advanced_warning_message.setText(message) + self.ui.part_advanced_warning_hbox.show() + + def return_to_partitioning (self): + """If the install progress bar is up but still at the partitioning + stage, then errors can safely return us to partitioning. + """ + if self.installing and not self.installing_no_return: + # Go back to the partitioner and try again. + #self.live_installer.show() + self.pagesindex = -1 + for page in self.pages: + if page.module.NAME == 'partman': + self.pagesindex = self.pages.index(page) + break + if self.pagesindex == -1: return + self.start_debconf() + ui = self.pages[self.pagesindex].ui + self.dbfilter = self.pages[self.pagesindex].filter_class(self, ui=ui) + self.set_current_page(self.previous_partitioning_page) + self.ui.next.setText(self.get_string("next").replace('_', '&', 1)) + self.ui.next.setIcon(self.forwardIcon) + self.translate_widget(self.ui.next) + self.backup = True + self.installing = False + + def error_dialog (self, title, msg, fatal=True): + self.run_automation_error_cmd() + # TODO cjwatson 2009-04-16: We need to call allow_change_step here + # to get a normal cursor, but that also enables the Back/Forward + # buttons. Cursor handling should be controllable independently. + saved_allowed_change_step = self.allowed_change_step + self.allow_change_step(True) + # TODO: cancel button as well if capb backup + QMessageBox.warning(self.ui, title, msg, QMessageBox.Ok) + self.allow_change_step(saved_allowed_change_step) + if fatal: + self.return_to_partitioning() + + def question_dialog (self, title, msg, options, use_templates=True): + self.run_automation_error_cmd() + # I doubt we'll ever need more than three buttons. + assert len(options) <= 3, options + + # TODO cjwatson 2009-04-16: We need to call allow_change_step here + # to get a normal cursor, but that also enables the Back/Forward + # buttons. Cursor handling should be controllable independently. + saved_allowed_change_step = self.allowed_change_step + self.allow_change_step(True) + buttons = {} + messageBox = QMessageBox(QMessageBox.Question, title, msg, QMessageBox.NoButton, self.ui) + for option in options: + if use_templates: + text = self.get_string(option) + else: + text = option + if text is None: + text = option + text = text.replace("_", "&") + # Convention for options is to have the affirmative action last; KDE + # convention is to have it first. + if option == options[-1]: + button = messageBox.addButton(text, QMessageBox.AcceptRole) + else: + button = messageBox.addButton(text, QMessageBox.RejectRole) + buttons[button] = option + + response = messageBox.exec_() + self.allow_change_step(saved_allowed_change_step) + + if response < 0: + return None + else: + return buttons[messageBox.clickedButton()] + + def refresh (self): + self.app.processEvents() + + # Run the UI's main loop until it returns control to us. + def run_main_loop (self): + self.allow_change_step(True) + self.mainLoopRunning = True + while self.mainLoopRunning: # nasty, but works OK + self.app.processEvents(QEventLoop.WaitForMoreEvents) + + # Return control to the next level up. + def quit_main_loop (self): + #self.app.exit() + self.mainLoopRunning = False + + # returns the current wizard page + def get_current_page(self): + return self.stackLayout.indexOf(self.stackLayout.currentWidget()) diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/applications/kde4/ubiquity-kdeui.desktop b/ubiquity-frontend-kde-le/pacote/usr/share/applications/kde4/ubiquity-kdeui.desktop new file mode 100644 index 0000000000000000000000000000000000000000..ba3106568532df8820b9a2851d7cc75105b494d0 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/applications/kde4/ubiquity-kdeui.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +Version=1.0 +# Do not translate the word "LE 4.0. It is used as a marker by casper. +Name=Instalar o LE 4.0 no Disco RÃÂgido +Comment=Install this system permanently to your hard disk +Exec=ubiquity kde_ui +Icon=ubiquity +Terminal=false +Categories=KDE;Qt;System; +OnlyShowIn=KDE; +X-Ubuntu-Gettext-Domain=ubiquity-desktop diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/AUTHORS b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..c0f5b6aeb030b27d1f124066c031abca3806bd07 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/AUTHORS @@ -0,0 +1,33 @@ +# Linux Educacional 4.0 + +C3SL - Centro de Computacao Cientifica e Software Livre + +Adriano da Luz +Bruno Cesar Ribas +Carlos Carvalho +Cleide Luzia Bonfim Possamai +Daniel Weingaertner +Danilo Kiyoshi Simizu Yorinori +Diego Giovane Pasqualin +Eduardo Cunha de Almeida +Erik Alexandre Pucci +Fabiano Silva +Felipe Cys Laskoski +Guilherme Zasyeki Machado +Jorge Augusto Meira +Josiney de Souza +Juliana Bueno +Klismann Smoger Mottin +Laura Sánchez GarcÃÂa +Luis Carlos Erpen de Bona +Marcela Saragioto +Marcos Castilho +Marcos Sunye +Pedro Eugenio Rocha +Renan Franca De Miranda +Ricardo Tavares De Oliveira +Rubens Massayuki Suguimoto +Thiago Henrique Dos Santos Picharski +Tiago Rodrigo Kepe +Victor Tarabola Cortiano +Vinicius Kwiecien Ruoso diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/COPYING b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..94a9ed024d3859793618152ea559a168bbcbb5e2 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/128x128/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/128x128/apps/ubiquity.png new file mode 100644 index 0000000000000000000000000000000000000000..027b726212bd8740e0f6afd96cb731ca1b8f0daa Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/128x128/apps/ubiquity.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/16x16/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/16x16/apps/ubiquity.png new file mode 100644 index 0000000000000000000000000000000000000000..bb91545c7b00e2c53165973863b05a065e800059 Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/16x16/apps/ubiquity.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/22x22/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/22x22/apps/ubiquity.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0f88e50c96187299b52bc38f8216176ea4d9d2 Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/22x22/apps/ubiquity.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/32x32/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/32x32/apps/ubiquity.png new file mode 100644 index 0000000000000000000000000000000000000000..42a1b9acea66e87feff13249fa1b3ea8adfe4df0 Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/32x32/apps/ubiquity.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/48x48/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/48x48/apps/ubiquity.png new file mode 100644 index 0000000000000000000000000000000000000000..9c92bf3e8a756d394c206daa66f1862fdd9e31b0 Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/48x48/apps/ubiquity.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/64x64/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/64x64/apps/ubiquity.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa9c3387e450f97849c021253f5eddab285a15a Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/64x64/apps/ubiquity.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/pyshared-data/ubiquity-frontend-kde-le b/ubiquity-frontend-kde-le/pacote/usr/share/pyshared-data/ubiquity-frontend-kde-le new file mode 100644 index 0000000000000000000000000000000000000000..61ed6b7a4e1d9f5e28242646a7e4c7cacd28103a --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/pyshared-data/ubiquity-frontend-kde-le @@ -0,0 +1,20 @@ +[python-package] +format = 1 +python-version = current, >= 2.6 +[pycentral] +version = 0.6.11 +include-links = 0 +[files] +/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py=f +/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py=f diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/advanceddialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/advanceddialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..ab96652c4d1232d63e7f61ac66e3c7dd49f83b5f --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/advanceddialog.ui @@ -0,0 +1,228 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>AdvancedDialog</class> + <widget class="QDialog" name="AdvancedDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>392</width> + <height>282</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>Advanced Options</string> + </property> + <property name="modal"> + <bool>true</bool> + </property> + <layout class="QGridLayout"> + <property name="margin"> + <number>9</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="bootloader_group_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string><strong>Boot loader</strong></string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="grub_enable"> + <property name="text"> + <string>Install boot loader</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="grub_device_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Help for GRUB device selection goes here.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="4" column="0"> + <spacer> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>357</width> + <height>16</height> + </size> + </property> + </spacer> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="popcon_group_label"> + <property name="text"> + <string><strong>Popularity contest</strong></string> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QCheckBox" name="popcon_checkbutton"> + <property name="text"> + <string>Participate in the package usage survey</string> + </property> + </widget> + </item> + <item row="7" column="0"> + <spacer> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>357</width> + <height>16</height> + </size> + </property> + </spacer> + </item> + <item row="8" column="0"> + <widget class="QLabel" name="proxy_group_label"> + <property name="text"> + <string><strong>Network proxy</strong></string> + </property> + </widget> + </item> + <item row="9" column="0"> + <layout class="QHBoxLayout"> + <item> + <widget class="QLabel" name="proxy_host_label"> + <property name="text"> + <string>HTTP proxy:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="proxy_host_entry"/> + </item> + <item> + <widget class="QLabel" name="proxy_port_label"> + <property name="text"> + <string>Port:</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="proxy_port_spinbutton"> + <property name="maximum"> + <number>65535</number> + </property> + <property name="value"> + <number>8080</number> + </property> + </widget> + </item> + </layout> + </item> + <item row="10" column="0"> + <spacer> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>374</width> + <height>81</height> + </size> + </property> + </spacer> + </item> + <item row="11" column="0"> + <widget class="QFrame" name="frame"> + <property name="frameShape"> + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item row="12" column="0"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QComboBox" name="grub_device_entry"/> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>AdvancedDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>AdvancedDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app-install.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app-install.ui new file mode 100644 index 0000000000000000000000000000000000000000..c1d7ebd4f5eea2e743f4ace5362488bfeb828c2e --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app-install.ui @@ -0,0 +1,362 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>809</width> + <height>638</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="1"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>42</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>98</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1"> + <widget class="QFrame" name="main_frame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>750</width> + <height>550</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>750</width> + <height>550</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QWidget" name="main_widget" native="true"> + <layout class="QGridLayout" name="gridLayout_4"> + <property name="horizontalSpacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item row="1" column="1"> + <widget class="QWidget" name="content_widget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <item> + <widget class="QFrame" name="extraFrame"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="horizontalWidget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>15</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="0" colspan="2"> + <widget class="QWidget" name="widget_4" native="true"> + <layout class="QGridLayout" name="gridLayout_5"> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <property name="horizontalSpacing"> + <number>3</number> + </property> + <item row="0" column="0"> + <widget class="QWidget" name="title_widget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="topMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="distro_name_label"> + <property name="text"> + <string>Linux Educacional</string> + </property> + <property name="scaledContents"> + <bool>false</bool> + </property> + <property name="alignment"> + <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set> + </property> + <property name="indent"> + <number>0</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="distro_release_label"> + <property name="text"> + <string>karmic</string> + </property> + <property name="alignment"> + <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set> + </property> + <property name="indent"> + <number>0</number> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_13"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="minimize_button"> + <property name="minimumSize"> + <size> + <width>14</width> + <height>14</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>14</width> + <height>14</height> + </size> + </property> + <property name="cursor"> + <cursorShape>PointingHandCursor</cursorShape> + </property> + <property name="toolTip"> + <string>minimize</string> + </property> + <property name="text"> + <string/> + </property> + <property name="flat"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QWidget" name="progress_widget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="topMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="windowTitle"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + <property name="text"> + <string>Installation Process</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + <property name="indent"> + <number>0</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="progressLabel"> + <property name="text"> + <string>Installation Status</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>16</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QProgressBar" name="progressBar"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>16</height> + </size> + </property> + <property name="value"> + <number>24</number> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="cancelButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>20</height> + </size> + </property> + <property name="text"> + <string>X</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="2"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>98</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="1"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>42</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app.ui new file mode 100644 index 0000000000000000000000000000000000000000..d5d07903b93ca92b7b68c39e9080dc17f19cac19 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app.ui @@ -0,0 +1,447 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>809</width> + <height>638</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="1"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>42</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>98</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1"> + <widget class="QFrame" name="main_frame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>750</width> + <height>550</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>750</width> + <height>550</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QWidget" name="main_widget" native="true"> + <layout class="QGridLayout" name="gridLayout_4"> + <property name="horizontalSpacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item row="1" column="1"> + <widget class="QWidget" name="content_widget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <item> + <widget class="QWidget" name="widgetStack" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="navigation" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="topMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="quit"> + <property name="text"> + <string>Quit</string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="back"> + <property name="text"> + <string>Back</string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="next"> + <property name="text"> + <string>Next</string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="0" colspan="2"> + <widget class="QWidget" name="widget_4" native="true"> + <layout class="QGridLayout" name="gridLayout_5"> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <property name="horizontalSpacing"> + <number>3</number> + </property> + <item row="0" column="0"> + <widget class="QWidget" name="title_widget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="topMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="distro_name_label"> + <property name="text"> + <string>Linux Educacional</string> + </property> + <property name="scaledContents"> + <bool>false</bool> + </property> + <property name="alignment"> + <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set> + </property> + <property name="indent"> + <number>0</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="distro_release_label"> + <property name="text"> + <string>karmic</string> + </property> + <property name="alignment"> + <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set> + </property> + <property name="indent"> + <number>0</number> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_13"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="minimize_button"> + <property name="minimumSize"> + <size> + <width>14</width> + <height>14</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>14</width> + <height>14</height> + </size> + </property> + <property name="cursor"> + <cursorShape>PointingHandCursor</cursorShape> + </property> + <property name="toolTip"> + <string>minimize</string> + </property> + <property name="text"> + <string/> + </property> + <property name="flat"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QWidget" name="progress_widget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="topMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="install_process_label"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + <property name="text"> + <string>Installation Process</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + <property name="indent"> + <number>0</number> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>16</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QProgressBar" name="progressBar"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>16</height> + </size> + </property> + <property name="value"> + <number>24</number> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="progressCancel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>20</height> + </size> + </property> + <property name="text"> + <string>X</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QWidget" name="steps_widget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>150</width> + <height>16777215</height> + </size> + </property> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <property name="rightMargin"> + <number>0</number> + </property> + <item> + <widget class="SqueezeLabel" name="breadcrumb_install"> + <property name="text"> + <string>Install</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="2"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>98</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="1"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>42</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>SqueezeLabel</class> + <extends>QLabel</extends> + <header>ubiquity.frontend.kde_components.SqueezeLabel</header> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>back</tabstop> + <tabstop>next</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/crashdialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/crashdialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..881cdda8250d8a1b97ded1c71251b92e07806eba --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/crashdialog.ui @@ -0,0 +1,192 @@ +<ui version="4.0" > + <class>CrashDialog</class> + <widget class="QDialog" name="CrashDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>479</width> + <height>483</height> + </rect> + </property> + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle" > + <string>Installer crashed</string> + </property> + <property name="sizeGripEnabled" > + <bool>false</bool> + </property> + <property name="modal" > + <bool>true</bool> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>11</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <layout class="QVBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLabel" name="crash_heading_label" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text" > + <string><h2>Installer Crashed</h2></string> + </property> + <property name="alignment" > + <set>Qt::AlignVCenter</set> + </property> + <property name="wordWrap" > + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line12" > + <property name="frameShape" > + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow" > + <enum>QFrame::Sunken</enum> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="crash_text_label" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text" > + <string>We're sorry; the installer crashed. Please file a new bug report at</string> + </property> + <property name="alignment" > + <set>Qt::AlignVCenter</set> + </property> + <property name="wordWrap" > + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="beastie_url" > + <property name="text" > + <string><a href="https://launchpad.net/ubuntu/+source/ubiquity/+filebug">https://launchpad.net/ubuntu/+source/ubiquity/+filebug</a></string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="textLabel1" > + <property name="text" > + <string>(do not attach your details to any existing bug) and a developer will attend to the problem as soon as possible. To help the developers understand what went wrong, include the following detail in your bug report, and attach the files /var/log/syslog and /var/log/partman:</string> + </property> + <property name="alignment" > + <set>Qt::AlignVCenter</set> + </property> + <property name="wordWrap" > + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QTextBrowser" name="crash_detail" /> + </item> + <item> + <layout class="QHBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::MinimumExpanding</enum> + </property> + <property name="sizeHint" > + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="crash_close" > + <property name="text" > + <string>&Close</string> + </property> + <property name="shortcut" > + <string>Alt+C</string> + </property> + <property name="autoDefault" > + <bool>true</bool> + </property> + <property name="default" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + </layout> + </widget> + <layoutdefault spacing="6" margin="11" /> + <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> + <includes> + <include location="local" >kurllabel.h</include> + </includes> + <resources/> + <connections> + <connection> + <sender>crash_close</sender> + <signal>clicked()</signal> + <receiver>CrashDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>20</x> + <y>20</y> + </hint> + <hint type="destinationlabel" > + <x>20</x> + <y>20</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/content_border.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/content_border.png new file mode 100644 index 0000000000000000000000000000000000000000..a97e34c95b683a4b7798390e95ce977d5729b7fb Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/content_border.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/label_border.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/label_border.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e8b0619f6033e288e53ac9953f49068bfeb6b5 Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/label_border.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/main_frame_border.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/main_frame_border.png new file mode 100644 index 0000000000000000000000000000000000000000..ef148f9faaead46b2e0cf896a865d992543c5668 Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/main_frame_border.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/minimize.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/minimize.png new file mode 100644 index 0000000000000000000000000000000000000000..01189c11e16f845e70bb42e74e35f05cb5f13b17 Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/minimize.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/squares.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/squares.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb7f1a3eb500b61773f43967fa9f50fb9e2472f Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/squares.png differ diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_create_dialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_create_dialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..857e3bea359ad3af900061737d6415e0ebbad138 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_create_dialog.ui @@ -0,0 +1,192 @@ +<ui version="4.0" > + <class>partition_create_dialog</class> + <widget class="QDialog" name="partition_create_dialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>468</width> + <height>219</height> + </rect> + </property> + <property name="windowTitle" > + <string>Create Partition</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="6" column="0" colspan="2" > + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" > + <size> + <width>441</width> + <height>21</height> + </size> + </property> + </spacer> + </item> + <item row="7" column="0" colspan="2" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="5" column="1" > + <widget class="QComboBox" name="partition_create_mount_combo" > + <property name="editable" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="5" column="0" > + <widget class="QLabel" name="partition_create_mount_label" > + <property name="text" > + <string>Mount point:</string> + </property> + </widget> + </item> + <item row="4" column="0" > + <widget class="QLabel" name="partition_create_use_label" > + <property name="text" > + <string>Use as:</string> + </property> + </widget> + </item> + <item row="4" column="1" > + <widget class="QComboBox" name="partition_create_use_combo" /> + </item> + <item row="3" column="0" > + <widget class="QLabel" name="partition_create_place_label" > + <property name="text" > + <string>Location for the new partition:</string> + </property> + </widget> + </item> + <item row="2" column="1" > + <widget class="QSpinBox" name="partition_create_size_spinbutton" /> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="partition_create_size_label" > + <property name="text" > + <string>New partition size in megabytes (1000000 bytes):</string> + </property> + <property name="wordWrap" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="partition_create_type_label" > + <property name="text" > + <string>Type for the new partition:</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2" > + <widget class="QLabel" name="partition_create_heading_label" > + <property name="text" > + <string><b>Create a new partition</b></string> + </property> + </widget> + </item> + <item row="3" column="1" > + <widget class="QWidget" native="1" name="partition_create_place_widget" > + <layout class="QGridLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>0</number> + </property> + <item row="0" column="1" > + <widget class="QRadioButton" name="partition_create_place_end" > + <property name="text" > + <string>End</string> + </property> + </widget> + </item> + <item row="0" column="0" > + <widget class="QRadioButton" name="partition_create_place_beginning" > + <property name="text" > + <string>Beginning</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="1" > + <widget class="QWidget" native="1" name="partition_create_type_widget" > + <layout class="QGridLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>0</number> + </property> + <item row="0" column="1" > + <widget class="QRadioButton" name="partition_create_type_logical" > + <property name="text" > + <string>Logical</string> + </property> + </widget> + </item> + <item row="0" column="0" > + <widget class="QRadioButton" name="partition_create_type_primary" > + <property name="text" > + <string>Primary</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>partition_create_dialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>partition_create_dialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_edit_dialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_edit_dialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..2c95fabfc71431be54d7cac6b699f9cad7d460f3 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_edit_dialog.ui @@ -0,0 +1,176 @@ +<ui version="4.0" > + <class>partition_edit_dialog</class> + <widget class="QDialog" name="partition_edit_dialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>451</width> + <height>204</height> + </rect> + </property> + <property name="sizePolicy" > + <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize" > + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="windowTitle" > + <string>Edit Partition</string> + </property> + <property name="sizeGripEnabled" > + <bool>false</bool> + </property> + <property name="modal" > + <bool>true</bool> + </property> + <layout class="QGridLayout" > + <property name="leftMargin" > + <number>9</number> + </property> + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > + <number>6</number> + </property> + <property name="verticalSpacing" > + <number>6</number> + </property> + <item row="5" column="0" colspan="2" > + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" > + <size> + <width>381</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0" colspan="2" > + <widget class="QLabel" name="partition_edit_heading_label" > + <property name="text" > + <string><b>Edit a partition</b></string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="partition_edit_size_label" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Minimum" hsizetype="Minimum" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text" > + <string>New partition size in megabytes (1000000 bytes):</string> + </property> + <property name="wordWrap" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="1" > + <widget class="QComboBox" name="partition_edit_use_combo" > + <property name="editable" > + <bool>false</bool> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="QSpinBox" name="partition_edit_size_spinbutton" /> + </item> + <item row="4" column="1" > + <widget class="QComboBox" name="partition_edit_mount_combo" > + <property name="editable" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="4" column="0" > + <widget class="QLabel" name="partition_edit_mount_label" > + <property name="text" > + <string>Mount point:</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="partition_edit_use_label" > + <property name="text" > + <string>Use as:</string> + </property> + </widget> + </item> + <item row="3" column="0" > + <widget class="QLabel" name="partition_edit_format_label" > + <property name="text" > + <string>Format the partition:</string> + </property> + </widget> + </item> + <item row="3" column="1" > + <widget class="QCheckBox" name="partition_edit_format_checkbutton" /> + </item> + <item row="6" column="0" colspan="2" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>partition_edit_dialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>partition_edit_dialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepIntro.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepIntro.ui new file mode 100644 index 0000000000000000000000000000000000000000..9d15b6310ca077edaefafe53723e65a844c3bc15 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepIntro.ui @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>page</class> + <widget class="QWidget" name="page"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>777</width> + <height>541</height> + </rect> + </property> + <property name="windowTitle"> + <string/> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="1"> + <spacer name="verticalSpacer_9"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>241</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <spacer name="horizontalSpacer_16"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>341</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="introLabel"> + <property name="text"> + <string>intoLabel</string> + </property> + <property name="textFormat"> + <enum>Qt::RichText</enum> + </property> + <property name="alignment"> + <set>Qt::AlignVCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="2"> + <spacer name="horizontalSpacer_17"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>340</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="1"> + <spacer name="verticalSpacer_10"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>241</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepKeyboardConf.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepKeyboardConf.ui new file mode 100644 index 0000000000000000000000000000000000000000..75fdebfe739407b51ab158e9e6644661b2a9b8fd --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepKeyboardConf.ui @@ -0,0 +1,157 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>page</class> + <widget class="QWidget" name="page"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>708</width> + <height>570</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="keyboard_heading_label"> + <property name="text"> + <string>Keyboard Layout</string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line3"> + <property name="frameShape"> + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="keyboard_comment_label"> + <property name="text"> + <string>Select your current keyboard layout.</string> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <spacer name="horizontalSpacer_11"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="keyboard_layout_label"> + <property name="text"> + <string>Layout:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="keyboard_layout_combobox"/> + </item> + <item> + <spacer name="horizontalSpacer_10"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="keyboard_variant_label"> + <property name="text"> + <string>Variant:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="keyboard_variant_combobox"/> + </item> + <item> + <spacer name="horizontalSpacer_12"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="keyboard_image_label"> + <property name="text"> + <string>Below is an image of your current layout:</string> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="keyboard_frame"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>100</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_6"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>10</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLanguage.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLanguage.ui new file mode 100644 index 0000000000000000000000000000000000000000..033e94a492ac487c4cc73fbc0d66e4652f753552 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLanguage.ui @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>language</class> + <widget class="QWidget" name="language"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>777</width> + <height>541</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0" colspan="3"> + <widget class="QLabel" name="welcome_heading_label"> + <property name="text"> + <string>Welcome</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="3"> + <widget class="Line" name="line_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="4" column="0" colspan="3"> + <widget class="QLabel" name="ready_text_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>ready_text_label</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="8" column="0"> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>294</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="8" column="1"> + <widget class="QComboBox" name="language_combobox"> + <property name="editable"> + <bool>false</bool> + </property> + <item> + <property name="text"> + <string>English</string> + </property> + </item> + <item> + <property name="text"> + <string>Russian</string> + </property> + </item> + <item> + <property name="text"> + <string>Spanish</string> + </property> + </item> + <item> + <property name="text"> + <string>You get the point...</string> + </property> + </item> + </widget> + </item> + <item row="8" column="2"> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>293</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="9" column="1"> + <spacer name="verticalSpacer_11"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>238</height> + </size> + </property> + </spacer> + </item> + <item row="14" column="0" colspan="3"> + <widget class="QLabel" name="oem_id_label"> + <property name="text"> + <string>You are installing in system manufacturer mode. Please enter a unique name for this batch of systems. This name will be saved on the installed system and can be used to help with bug reports.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="15" column="0"> + <widget class="QLineEdit" name="oem_id_entry"/> + </item> + <item row="13" column="0" colspan="3"> + <widget class="QLabel" name="release_notes_label"> + <property name="text"> + <string>If you have Internet access, read the release notes for information on problems that may affect you.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0" colspan="3"> + <widget class="QLabel" name="try_text_label"> + <property name="text"> + <string>try_text_label</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QPushButton" name="try_ubuntu"> + <property name="text"> + <string>Try Kubuntu</string> + </property> + </widget> + </item> + <item row="5" column="0" colspan="3"> + <widget class="QLabel" name="duration_text_label"> + <property name="text"> + <string>Answering the questions should only take a few minutes.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="7" column="0" colspan="3"> + <widget class="QLabel" name="select_language_label"> + <property name="text"> + <string>Please choose the language to use for the install process. This language will be the default language for this computer.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="12" column="0" colspan="3"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="10" column="0" colspan="3"> + <widget class="QLabel" name="alpha_warning_label"> + <property name="text"> + <string>alpha_warning_label</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="11" column="1"> + <widget class="QPushButton" name="begin_install_button"> + <property name="text"> + <string>Continue with installation</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLocation.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLocation.ui new file mode 100644 index 0000000000000000000000000000000000000000..9e2f21eeaf709912b8e12ce10654d0cbb240625e --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLocation.ui @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>page</class> + <widget class="QWidget" name="page"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>579</width> + <height>462</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="timezone_heading_label"> + <property name="text"> + <string>Where are you?</string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="timezone_comment_label"> + <property name="text"> + <string>Select a city in your country and time zone.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="map_frame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>2</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>280</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>280</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_10"> + <property name="margin"> + <number>2</number> + </property> + </layout> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QLabel" name="timezone_zone_label"> + <property name="text"> + <string>Region:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="timezone_zone_combo"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_7"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Minimum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="timezone_city_label"> + <property name="text"> + <string>Zone:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="timezone_city_combo"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_5"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>63</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartAuto.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartAuto.ui new file mode 100644 index 0000000000000000000000000000000000000000..5de3a9724b5b92d7ad4f0066ebb4ad631ceb3efc --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartAuto.ui @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>682</width> + <height>486</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="part_auto_heading_label"> + <property name="text"> + <string>Prepare Disk Space</string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="part_auto_comment_label"> + <property name="text"> + <string>Where would you like to install kubuntu?</string> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="autopart_selection_frame" native="true"> + <layout class="QVBoxLayout" name="_2"/> + </widget> + </item> + <item> + <widget class="QWidget" name="barsFrame" native="true"> + <layout class="QVBoxLayout" name="verticalLayout_6"> + <property name="spacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="Line" name="line_10"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer_7"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>411</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartMan.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartMan.ui new file mode 100644 index 0000000000000000000000000000000000000000..4e06638f2bd98865075c073588f5fae7660a0fd4 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartMan.ui @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>652</width> + <height>482</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="part_advanced_heading_label"> + <property name="text"> + <string>Prepare Partitions</string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_11"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="part_advanced_bar_frame" native="true"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>10</height> + </size> + </property> + <layout class="QVBoxLayout" name="verticalLayout_9"/> + </widget> + </item> + <item> + <widget class="QWidget" name="part_advanced_warning_hbox" native="true"> + <layout class="QHBoxLayout" name="_3"> + <item> + <widget class="QLabel" name="part_advanced_warning_image"> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="part_advanced_warning_message"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QTreeView" name="partition_list_treeview"/> + </item> + <item> + <widget class="QWidget" name="widget_3" native="true"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>10</height> + </size> + </property> + <layout class="QGridLayout" name="gridLayout_9"> + <item row="0" column="0"> + <widget class="QPushButton" name="partition_button_new_label"> + <property name="text"> + <string>New Partition Table</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QPushButton" name="partition_button_new"> + <property name="text"> + <string>New Partition</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QPushButton" name="partition_button_edit"> + <property name="text"> + <string>Edit Partition</string> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QPushButton" name="partition_button_delete"> + <property name="text"> + <string>Delete Partition</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="6"> + <widget class="QWidget" name="widget_7" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="undo_everything"> + <property name="text"> + <string>Undo all changes</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_8"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="0" column="4"> + <spacer name="horizontalSpacer_14"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepSummary.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepSummary.ui new file mode 100644 index 0000000000000000000000000000000000000000..9e7a065119e5eeed4fcc986718f91a570b96037f --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepSummary.ui @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>summary</class> + <widget class="QWidget" name="summary"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>637</width> + <height>399</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="ready_heading_label"> + <property name="text"> + <string>Ready to Install</string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_12"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="ready_description_label"> + <property name="text"> + <string>Your new operating system will now be installed with the following settings:</string> + </property> + </widget> + </item> + <item> + <widget class="QTextEdit" name="ready_text"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_5" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <item> + <spacer name="horizontalSpacer_15"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="advanced_button"> + <property name="text"> + <string>Advanced</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepUserSetup.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepUserSetup.ui new file mode 100644 index 0000000000000000000000000000000000000000..aeeb965722665fa27f9a9383134d1f0dee32e5f4 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepUserSetup.ui @@ -0,0 +1,573 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>695</width> + <height>475</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="userinfo_heading_label"> + <property name="text"> + <string>Who are you?</string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="fullname_label"> + <property name="text"> + <string>What is your name?</string> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <layout class="QGridLayout" name="_22"> + <property name="verticalSpacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="3"> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="fullname_error_reason"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="fullname_error_image"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="scaledContents"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLineEdit" name="fullname"> + <property name="minimumSize"> + <size> + <width>300</width> + <height>0</height> + </size> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_7"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="username_label"> + <property name="text"> + <string>What name do you want to use to log in?</string> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <layout class="QGridLayout" name="_21"> + <property name="verticalSpacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="QLineEdit" name="username"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + </widget> + </item> + <item row="1" column="0" colspan="4"> + <widget class="QLabel" name="username_extra_label"> + <property name="styleSheet"> + <string>font-weight: normal</string> + </property> + <property name="text"> + <string><small>If more than one person will use this computer, you can set up multiple accounts after installation.</small></string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="username_error_image"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="scaledContents"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="3"> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="username_error_reason"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignVCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_8"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="password_label"> + <property name="text"> + <string>Choose a password to keep your account safe.</string> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="password_debug_warning_label"> + <property name="text"> + <string><strong>You are running in debugging mode. Do not use a valuable password!</strong></string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <layout class="QGridLayout" name="_20"> + <property name="verticalSpacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="4"> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0" colspan="5"> + <widget class="QLabel" name="password_extra_label"> + <property name="styleSheet"> + <string>font-weight: normal</string> + </property> + <property name="text"> + <string><small>Enter the same password twice, so that it can be checked for typing errors.</small></string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="password_error_image"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="scaledContents"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QLabel" name="password_error_reason"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignVCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="verified_password"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + <property name="echoMode"> + <enum>QLineEdit::Password</enum> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLineEdit" name="password"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + <property name="echoMode"> + <enum>QLineEdit::Password</enum> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_9"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="hostname_label"> + <property name="text"> + <string>What is the name of this computer?</string> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <layout class="QGridLayout" name="_23"> + <property name="verticalSpacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="QLineEdit" name="hostname"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + </widget> + </item> + <item row="0" column="3"> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0" colspan="4"> + <widget class="QLabel" name="hostname_extra_label"> + <property name="styleSheet"> + <string>font-weight: normal</string> + </property> + <property name="text"> + <string><small>This name will be used if you make the computer visible to others on a network.</small></string> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="hostname_error_image"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="scaledContents"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="hostname_error_reason"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignVCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QWidget" name="widget_6" native="true"> + <layout class="QGridLayout" name="gridLayout_8"> + <property name="margin"> + <number>2</number> + </property> + <item row="1" column="0" colspan="2"> + <widget class="QRadioButton" name="login_encrypt"> + <property name="text"> + <string>Require Password and decrypt home to login</string> + </property> + <property name="checked"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QRadioButton" name="login_auto"> + <property name="text"> + <string>Log in Automatically</string> + </property> + <property name="checked"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QRadioButton" name="login_pass"> + <property name="text"> + <string>Require my password to log in</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>77</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <tabstops> + <tabstop>fullname</tabstop> + <tabstop>username</tabstop> + <tabstop>password</tabstop> + <tabstop>verified_password</tabstop> + <tabstop>hostname</tabstop> + <tabstop>login_pass</tabstop> + <tabstop>login_auto</tabstop> + <tabstop>login_encrypt</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style.qss b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style.qss new file mode 100644 index 0000000000000000000000000000000000000000..f66c0a86b69a30434cbaa66f643a1413d9660674 --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style.qss @@ -0,0 +1,157 @@ +/** main stylesheet */ + +#centralwidget { +} + +#minimize_button { + background-image: url(/usr/share/ubiquity/qt/images/minimize.png); + background-position: center center; + background-repeat: no-repeat; + + border: none; +} + +#main_frame { + border-width: 13px; + border-image: url(/usr/share/ubiquity/qt/images/main_frame_border.png) 13px; + + background-image: url(/usr/share/ubiquity/qt/images/squares.png); + background-repeat: no-repeat; + background-position: bottom left; + background-origin: border; + + padding: 0px; + padding-bottom: 0px; +} + +#main_widget { +} + +#windowTitle, +#distro_name_label, +#distro_release_label, +#processLabel, +#install_process_label { + font-family: sans-serif; +} + +#distro_name_label { + color: #00aad4; + font-size: 12pt; +} + +#distro_release_label { + color: #00ccff; + font-size: 12pt; +} + +#install_process_label { + color: #006680; + font-size: 8pt; + padding-left: 1px; +} + +#steps_widget { +} + +#steps_widget QLabel { + qproperty-alignment: AlignLeft; + font-family: sans-serif; + font-size: 12pt; + color: #666666; + margin: 5px; + margin-left: 0px; + margin-right: 0px; +} + +/* +#steps_widget #dummy_active_step { + color: #666666; +} + +#steps_widget #dummy_inactive_step { + color: #b3b3b3; +} + +#steps_widget #dummy_current_step { + color: #0088aa; +} +*/ + +#extraFrame, +#widgetStack QLabel, QRadioButton { + font-size: 10pt; + color: #4d4d4d; + margin: 1px; +} + +#widgetStack #fullname_error_reason, +#widgetStack #username_error_reason, +#widgetStack #password_error_reason, +#widgetStack #hostname_error_reason +{ + font-size: 8pt; + color: #ff5555; +} + +#widgetStack #welcome_heading_label, +#widgetStack #timezone_heading_label, +#widgetStack #keyboard_heading_label, +#widgetStack #part_auto_heading_label, +#widgetStack #part_advanced_heading_label, +#widgetStack #userinfo_heading_label, +#extraFrame, +#widgetStack #reading_heading_label +{ + color: #0088aa; + font-size: 10pt; + qproperty-alignment: AlignCenter; +} + +#content_widget +{ +} + +#widgetStack QWidget +{ + font-size: 10pt; +} + +#widgetStack { + padding: 5px; + padding-top: 0px; + padding-bottom: 0px; + + border-width: 6px; + border-image: url(/usr/share/ubiquity/qt/images/content_border.png) 6px; +} + +#extraFrame { + padding: 2px; + padding-top: 0px; + padding-bottom: 0px; + + border-width: 2px; + border-image: url(/usr/share/ubiquity/qt/images/content_border.png) 2px; +} +#content_frame QLabel { +} + +#map_frame, +#keyboard_frame +{ + border-radius: 5px; + border: 1px solid #bac8d1; +} + +#progressBar { + background-color: #b0bfc2; + border-radius: 3px; + border: 1px solid grey; + text-align: center; +} + +#progressBar::chunk { + border-radius: 3px; + background-color: #94a7ac; +} diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style_small.qss b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style_small.qss new file mode 100644 index 0000000000000000000000000000000000000000..15cc9cf40cef258ac299020b49aa02481dc6eefd --- /dev/null +++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style_small.qss @@ -0,0 +1,18 @@ +/* stylesheet for smaller screens + apply after main stylesheet */ + +#widgetStack QWidget +{ + font-size: 9pt; +} + +#widgetStack #welcome_heading_label, +#widgetStack #timezone_heading_label, +#widgetStack #keyboard_heading_label, +#widgetStack #part_auto_heading_label, +#widgetStack #part_advanced_heading_label, +#widgetStack #userinfo_heading_label, +#widgetStack #reading_heading_label +{ + font-size: 8pt; +} \ No newline at end of file